原创 9

2007-11-21 21:10 2240 5 5 分类: MCU/ 嵌入式
摘自“中原孔海洋”
数码管又称LED数码管,它是由7段或8段LED构成的显示器件。有共阴极和共阳极两种。按其显示方式则可分为静态显示方式和动态显示方式两种。关于数码管的其他知识请参阅相关参考文献,此处不作讨论。下面我们将主要讲述数码管显示的仿真。
 
1.静态显示方式 
静态显示方式较为简单,编程十分容易,但占用IO口线较多。实际使用中不太多见。下面我们就通过一个简单的例子来予以说明。 
例1.单片机的P2口接一个共阳极数码管,利用该数码管显示从0到9,然后返回到0的循环。 
该例子较为简单,源文件如下图: 

点击看大图
源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。 
下面我们编辑电路图。此例的电路图十分简单,只需将一个共阳极数码管连到单片机的P2口即可。数码管使用关键词“7Seg”进行查找。可以看到有很多结果,注意区分共阳极“Anode”和共阴极“Cathode”即可。这里我们选用较为简单的“7SEG-COM-ANODE”数码管。 
最后得到的电路图如下图所示: 

813c4b342cfd4e49241f1446.jpg
绘制好电路图,我们就可以将前面所生成的源代码装入单片机,然后点击仿真按钮进行仿真。 
可以看到数码管显示的数字按照我们程序中设定的要求进行变化着,仿真中的一个画面如上图所示。 
2.动态显示方式 
动态显示方式是一种相对较为高级的显示方式,它编程较为复杂,但占用IO口线少,达到了节约硬件资源的目的,实际使用中较多利用。下面我们也利用一个实例来详细说明这种显示方式。 
例2.数码管动态显示方式。单片机P2口接一个二位数码管的8位段码线,P3口的低二位接数码管的两位位码线。程序使得二位数码管做0到99的循环显示。 
该例源文件如下图所示: 

点击看大图
源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。 
接下来我们绘制电路图。此例电路图比较简单,如下图所示,但有几点需要注意: 

fde833db57072c61d1164e41.jpg
(1)单片机的IO口的驱动能力有限,所以此例我们选用了大功率晶体管驱动电路,即图中的两个NPN三极管,单片机通过控制它们的通断来达到控制位码的目的。 
(2)关于数码管,此例我们选用了2位的共阳极数码管7SEG-MPX2-CA,这样可以方便我们连线和使用。而且由于我们的例子中没有用到小数点(DP),所以为了简便在图中我们没有连接P2.7和DP引脚。当然,如果你连接好这个引脚,仿真结果不会受到任何影响,因为在段码表中,P2.7引脚一直输出的都是高电平,也就是说小数点一直处于熄灭状态。 
绘制好电路图,就可以点击仿真按钮进行仿真了。仿真中的一个效果如上图所示 
3.事实上,在实际的应用中我们还可以选用数码管显示驱动译码芯片来达到控制数码管显示的目的。常用的这类芯片有CD4511、MAX7219等。关于这些芯片的使用方法请参阅相关参考文献,此处我们仅以MAX7219为例来简单介绍一下这类芯片的使用。 
例3.单片机使用MAX7219接8个数码管,初始时利用这些数码管从左到右显示7到0,然后依次将最右侧的数字移到最左侧显示。 
鉴于C51语言在此类程序编写中的明显优势,此例我们将使用C51语言进行编写,源文件如下: 





在Keil中编辑好源文件以后,进行编译、链接,并生成源代码(.HEX文件)。注意生成.HEX文件时要按照前面的文章中的相应介绍进行设置。 
然后我们来绘制电路图。本例的电路图较为简单,MAX7219与数码管连接的段码和位码在芯片上已经标识明确,直接相连即可;唯独需要注意的就是要按照前面程序中定义的那样,将MAX7219的DN、CLK、LOAD三引脚分别与单片机AT89C51的P1.0、P1.1、P1.2引脚相连。如下图所示,此处我们就不再作其他说明了。 

绘制好电路图以后,将我们刚才生成的源代码装入单片机,然后仿真运行,就可以看到我们所希望的效果了,仿真中的一个画面如上图所示。 


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条