/************************************************ 跳线设置:默认 显示效果:012345 这几个数字在51hei板子的后6个数码管中滚动显示 ************************************************/ #include<reg52.h> //头文件 #include<intrins.h> #define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值 0x4f,0x66,0x6d,0x00,0x00,0x00,0x00, 0x00,0x00,0x3f,0x06,0x5b,0x4f,0x66}; sbit DUAN=P2^6; //74HC573的LE端 U1 LED的段选端 sbit WEI=P2^7; //74HC573的LE端 U2 LED的位选端 uchar flag; //定义标志位 void main() //主函数 { uchar i,j,k,h,cnt;//定义局部变量 TH0=0XF7; //装入初始值,时间约为2.5ms TL0=0X00; ET0=1; //开分控 EA=1; //开总控 TR0=1; //启动定时器 while(1) { j=cnt+6; //控制循环的数值 for(k=0;k<150;k++) // 延时 { h=0xfb; //准备点亮数码管 for(i=cnt;i<j;i++) { WEI=1; //让位选的这个74hc573处于直通状态,也就是输入0,输出也是0,输入1输出也是1 P0=h; //点亮对应的数码管 WEI=0; //锁存 也就是保持74hc573现在这个时刻的输出状态一直不变
DUAN=1; //同上哦 P0=table; //显示对应的数值 DUAN=0; while(!flag); //延时2.5ms flag=0; //标志位清零,准备下次显示 DUAN=1; P0=0x00; //关闭数码管,消隐 DUAN=0; h=_crol_(h,1); //循环左移 } } cnt++; //加1,确定哪些数值显示 if(cnt==12) //移位的次数 cnt=0; //清零,准备下次显示 } } void time() interrupt 1 //定时器0 { TH0=0XF7; //装入初值 TL0=0X00; flag=1; //标志位置1 }
下载地址:http://www.51hei.com/ziliao/51hei-5/数码管_滚动.rar |