0~f循环显示。
- #include "reg52.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- #define led P0
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- u8 data dis_buf[17];//显示缓存
- void delay(u16 t);
- void display(u8 j);
- void delay(u16 t)
- {
- while(t--);
- }
- void main()
- {
- u8 i,j,k;
- for(i=0;i<16;i++)
- {//将需要显示的数字0~f按序保存在显示缓存中
- dis_buf[i]=smg[i];
- }
- while(1)
- {
- led=0x00;//消隐
- switch(j)//送位码
- {
- case(0):LSA=0;LSB=0;LSC=0;break;
- case(1):LSA=1;LSB=0;LSC=0;break;
- case(2):LSA=0;LSB=1;LSC=0;break;
- case(3):LSA=1;LSB=1;LSC=0;break;
- case(4):LSA=0;LSB=0;LSC=1;break;
- case(5):LSA=1;LSB=0;LSC=1;break;
- case(6):LSA=0;LSB=1;LSC=1;break;
- case(7):LSA=1;LSB=1;LSC=1;break;
- }
- led=dis_buf[j];//送段码
- j++; //数码管动态显示计数
- if(j==8)
- {
- j=0;
- k++; //更新速度计数
- if(k==50)//可以调整显示更新速度
- {
- k=0;
- dis_buf[16]=dis_buf[0];//将显示缓存0移动到16
- for(i=0;i<16;i++)
- {
- dis_buf[i]=dis_buf[i+1];//显示缓存全部移动一位
- }
- }
- }
- delay(200);//控制主循环速度
- }
- }
复制代码 |