添加一个显示缓存,可以大幅度简化代码。
- #include "reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- uint i,j,k;
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选数字0-9;
- uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选开关
- uchar data dis_buf[11];//显示缓存
- void delay(uint k) //ms延时程序
- {
- uint i,j;
- for(i=k;i>0;i--)
- for(j=120;j>0;j--);
- }
- void main()
- {
- for(i=0;i<10;i++)
- {//将需要显示的数字0~9按序保存在显示缓存中
- dis_buf[i]=table[i];
- }
- while(1)
- {
- P0=0xff;//消隐
- P2=wela[j];//送位码
- P0=dis_buf[j];//送段码
- j++; //数码管动态显示计数
- if(j==8)
- {
- j=0;
- k++; //更新速度计数
- if(k==50)//可以调整显示更新速度
- {
- k=0;
- dis_buf[10]=dis_buf[0];//将显示缓存0移动到10
- for(i=0;i<10;i++)
- {
- dis_buf[i]=dis_buf[i+1];//显示缓存全部移动一位
- }
- }
- }
- delay(2);//控制主循环速度
- }
- }
复制代码 |