PIC单片机之数码管

  大家好,模块样式 通过前一期的学习, 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键等资源,体会到了学习板的易用性与易学性,特别是当自己第一次动手编程点亮一个发光管时,相信对于初学者来说,一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下数码管的工作原理及使用方法,这一期实验将会更具生动性。

  说到七段数码管,它在家电及工业控制中有着很广泛的应用, 例如用来显示温度、数量、重量、日期、时间等,具有显示醒目、直观的优点。在一般的人机对话中,输入器件一般都是以按键为主,但输出器件则以数码管或LCD 为主。数码管作为一种应用十分普遍的显示器件,可以在各种各样的设备上见到,如图1 所示就是某数字表头显示时候的效果图。它很适合用在对价格、亮度等条件比较敏感,同时基本上只要求显示数字量的时候,所以在数据显示,定时控制等场合用得很多。常见的数码管实物如图2 所示。

  我们可以看到图1中有8 位数码管,那么这些数码管是怎样来显示1,2,3,4……数字的呢?

  数码管实际上是由7 个发光管组成“8”字形构成的, 加上小数点就是8 个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:

  显示一个“2”字,那么应当是a 亮、b 亮、g 亮、e 亮、d 亮、f 不亮、c 不亮、dp 不亮。

  由于驱动方式的差异,也就是对应在各个显示段是低电平还是高电平点亮,数码管又分成两种类型,即共阳极和共阴极数码管。所谓“共阳极”是指8 个LED 的阳极连接在一起组成公共端;同理“共阴极”则是8 个LED 的阴极连接在一起组成公共端。

  虽然通过上文原理的介绍,对数码管的工作原理已经了解,但当我们拿到一个数码管时要正确地应用它还是一时不知如何下手,比如我们现在要求数码管显示“5”,应该怎么办呢?首先我们需要明白一个事情,数码管是不认识“5”的,当然也不认识其他数字,所以千万别说,“给数码管写个“5”就行了”。数字只是种符号,对人来说是这样的,对单片机而言也是,单片机只是通过LED 把内部的结果用我们约定的方式显示出来而已,这个“约定”

  就是数字该如何在LED 上显示的方法。比如我们需要显示的数字为0 到9,如图5 所示。

  假设我们使用共阴极数码管,那么我们就对照图3 和图4 来看看“5”是如何显示出来的。首先对数码管而言,我们要想显示数字“5”,我们可以发现有如下一些段是需要点亮的,即A、C、D、F、G。

  知道了这些段需要点亮后,现在我们再来看一下增强型PIC 实验板上数码管的控制电路,因为我们需要将软件和硬件相结合进行考虑如何来编程。

  图6 中的A,B,C,D,E,F,G,DP 分别与单片机的RC 口相连,用来控制显示数字的形状。Q3、Q4、Q5、Q6、Q7、Q8 这6 个三极管是用来片选数码管,用来打开或关闭某一路数码管,RA1、RA0、RA3、RA2、RA5、RA4 分别接在单片机的RA 口上,通过控制这些三极管的基极电平来打开或关闭数码管的显示,即起到“使能”作用。如S1 端为低电平,则允许相应的数码管显示,显示的字形则由RC 口所决定。

  参照上面的过程,我们又可以列出共阴和共阳数码管0~9 十个数字的段码表,如表2 所示,模块样式在不改变硬件对应关系的前提下,段码表可以通用。

  现在我们已经了解了整个显示过程,所以我们也就有了写程序的思路:程序中应该有一个变量,每隔一定时间在0~9 之间变化,然后按照这个数据去查找段码表,把查到的数据送到RC 口,段码值我们参照表2 中共阳这一项。

  我们使用MPLab IDE 软件来进行C 语言编程,它是我们的编程环境,同时我们可以通过使用ICD2仿真烧写器和增强型PIC 实验板连接进行程序的仿真调试和烧写步骤,具体的操作步骤,我们已经在前几期做了详细的说明和介绍,在此就不再重复,读者可以参阅以前的文章或直接登陆我们的网站查看资料。前面,我们已经对硬件原理和软件编写思路进行了了解,现在我们可以输入程序代码进行调试了。我们在MPLab IDE 软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。上面理论说了一大堆,现在我们可以从这里开始动手了。本来6 个数码管可以各自显示不同数字,RA口动态扫描,每个瞬间只有一个管显示,视觉上感到是6 位数。作为初次实验,我们的任务是要让六个数码管同时显示数字“0”~“9”字样,时间间隔为1 秒。

  程序代码输入后,读者可以使用仿真模块或直接烧入编译好的HEX 文件来进行验证,前者模式可以单步执行,同时监控程序变量在运行过程中的变化;后者直接烧入HEX 文件,实验板直接脱机运行。

  输入了这么长一段程序后,作为初学者一定对有些语句会有点疑问,下面我们就来一起结合实际,看一下一些关键程序语句的作用。

  #include语句用来加载PIC 库文件,数组display_numb 用来定义数字“0”~“9” 的字形码,也就是我们的表2 中所罗列的内容。voiddelay_1ms(void) 是延时1ms 的函数,void delay_ms(unsigned int time) 是延时X 毫秒的函数,具体为多少毫秒由形参time 变量决定,如我们执行函数 delay_ms(1000); 即表示为延时1000 毫秒= 延时1 秒的时间。语句“TRISC=0X00;” 用来设置RC 口的输入、输出状态,模块样式在此我们设置为输出;语句“TRISA=0X00;”用来设置RA 口的输入、输出状态,在此我们设置为输出。while(1) 是死循环语句,即周而复始地执行{ } 内的语句体,如我们现在的程序中的作用即是不停地执行 delay_ms(x);PORTC=display_numb[x]; 这两类语句,即给RC口送一个字形码,延时1 秒钟后,又给RC 口赋予一个新的字形码,在我们从实验结果上看来就是数码管在不停地显示6 个相同的“0”~“9”这些数字。留给读者设计,将一个6 位十进制数字(如201006)显示出来的程序。

  数码管的原理与使用,我们暂讲到这里,接下来几期,我们将继续一起学习增强型PIC 实验板的其他各部分资源的原理与使用,使你对单片机应用的各方面知识都有所入门与提高。增强型PIC 实验板系统资源丰富,可做实验有:6 位LED 数码管、8 路LED、直控键盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线液晶、红外接收头接口、步进电机驱动接口、AD模/ 数转换接口、串行时钟芯片DS1302、温度传感器DS18B20 接口、RS232 串口通讯、外扩展接口以便外接更多的实验资源。

  本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  什么是定时器?定时器顾名思义就是用来定时的。在单片机应用中常常用于各种各样的定时。比如让LED灯每隔 1S 亮一次。 这个1S 就是由定时器做到的。指令周期指令周期就是单片机执行一个指令所花费的时间。这也是定时器定时的最小时间单位。时钟频率/4=指令频率。1/指令频率=指令周期。假设现在的时钟是4MHZ ,4MHz的时钟经过4分频后变成了 1MHz 其周期为0.0000001s也就是1us,这个1us就是指令周期,这1us也就是定时器定时的最小单位。定时器与预分频器假设在没有预分频器情况下。开启定时器 每隔一个指令周期定时器就加一。假设时钟是4MHz 也就是每隔 1us 定时器加一。如果有

  之前一直没有真正理解sleep指令,最近在做智能水表的产品的时候,用了一款8位的单片机PIC16F690,当看到程序中的sleep指令时以为执行后cpu还会工作,导致一些认识上的错误,在网上搜索了一下,找到了一篇关于sleep的详细说明文章,现收集下来以便以后查询!在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将被清并保持运行。I/O 口,周边模块和内部RAM将保持原来状态,所以如果要求睡眠后有很低功耗,应该在进入SLEEP前把IO口置为高阻抗的输入状态,不用的模块也要关闭。另有些周边模块与主时钟有关,如在异步模式下的USART,将不工作。唤醒SLEEP的条件

  做ATE,要对DUT内部的PIC单片机进行在线烧写,在网上看到别人的一个说法(作者 Claud Zhang),内容如下:---------------------------------------------------------一种简单高效低成本的Microchip MCU编程方法 Claud Zhang对于一些研发工程师来说,工厂的的MCU编程有时候是个比较头疼的问题.在研发

  PICXXXXXXXX(X)-XXX/XX123456781.前缀: PIC MICROCHIP 公司产品代号,特别地:dsPIC为集成DSP功能的新型PIC单片机2.系列号:10、12、16、18、24、30、33、32,其中PIC10、PIC12、PIC16、PIC18为8位单片机PIC24、dsPIC30、dsPIC33为16位单片机PIC32为32位单片机3.器件型号(类型):C CMOS 电路CR CMOS ROMLC 小功率CMOS 电路LCS 小功率保护AA 1.8VLCR 小功率CMOS ROMLV 低电压F 快闪可编程存储器HC 高速CMOS

  。如果在系统时钟很低的情况,指令周期就成为需要考虑的关键因素。这里拿PIC单片机举例,如果系统时钟为1M Hz,则它的指令周期为4微妙,(指令周期为系统时钟的4倍)。这个时候如果使用上面提到的函数调用的方法,将无法得到正确的数据。因为加上函数调用的开销,当am2302_read_byte()进行电平判断的时候,很可能已经错过了起始电平,导致解析不正确。另外当判断是数据位1的时候, data += (0x80U i); while (1 == data_port) {

  旋转编码器(Rotary Encoder)是一种帮助用户与系统交互的输入设备。它看起来更像是一个无线电电位器,但它输出一系列脉冲,使其应用独特。当旋转编码器的旋钮时,它以小步进的形式旋转,这有助于它用于步进/伺服电机控制、导航菜单序列和增加/减少数字的值等等。在本篇文章中,我们将了解不同类型的旋转编码器及其工作原理。我们还将它连接到PIC单片机PIC16F877A,并通过旋转编码器控制整数值,然后在LCD液晶屏1602显示其值。在本文结束时,您将熟悉为项目使用旋转编码器。让我们开始吧…旋转编码器及其类型旋转编码器通常称为轴编码器。它是一种机电换能器,意味着它将机械运动转换为电子脉冲,或者换句话说,它将角位置或运动或轴位置转换为

  STM32MP1系列通用型MPU, 集成双 Arm® Cortex®-A7和 Cortex®-M4 内核

  STM32MP1系列通用型MPU, 集成双 Arm® Cortex®-A7和 Cortex®-M4 内核

  综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程

本文由广安市自选模块有限公司发布于公司简介,转载请注明出处:PIC单片机之数码管

相关阅读