
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.7 8只数码管滚动显示单个数字
本例运行时,数字0~7单个显示在8只集成式数码管的相应位置上。
本例电路如图3-7所示。
程序设计调试与实训:
本例使用了8只集成式7段共阳数码管(SEG-MPX8-CA-BLUE,共阳为CA,共阴为CC),所有数码管a引脚并联在一起,b,c,d,e,f,g,dp也是分别并联的,任何时候发送的段码均会传送到所有数码管上,所有数码管共阳极是独立的,本例中各数码管的共阳极分别与8只NPN三极管射极相连,程序运行时,任一时刻仅允许一只数码管的共阳极连接+5V,当向P0端口发送段码时,相应数字只会显示在某一只数码管上,依次循环选中8只数码管中的一只时,即可形成滚动显示效果。

图3-7 8只数码管滚动显示单个数字电路
要在数码管上滚动显示单个数字,任一时刻只需要选通一只数码管,例如,要在最左边数码管上显示数字,对于本例中的共阳数码管,其位引脚1(即本例中该数码管的共阳极)要设为1(+5V),由于使用的是NPN三极管,P2.0为1,即P2端口的值为00000001时,第1只三极管导通,对应数码管共阳极连接+5V,同理,如果需要在第3只数码管上显示数字,P2端口的值为00000100。
本例将位码初值设为0x80,即10000000,for循环中执行循环左移时,k值将为00000001,00000010,00000100,……,10000000,如此重复。每次段码的发送均与位选通码对应,形成单个数字的循环滚动显示。
读者可修改代码,使单个数字从右向左滚动显示。
源程序代码:
//----------------------------------------------------------------- // 名称: 8只数码管滚动显示单个数字 //----------------------------------------------------------------- // 说明: 数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管 // 实现单只数码管滚动显示效果。 // //----------------------------------------------------------------- #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int //各数字的数码管段码 uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //----------------------------------------------------------------- // 延时 //----------------------------------------------------------------- void DelayMS(uint x) { uchar i; while(x--) for(t = 0; i < 120; i++); } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { uchar i,k = 0x80; while(1) { for(i = 0; i < 8; i++) { P2 = 0xFF; //关闭显示 k = _crol_(k, 1); P0 = DSY_CODE[i]; //发送数字段码 P2 = k; //发送数码管位码,打开对应的数码管 DelayMS(300); } } }