|
- /***********************************************
- 功能 :流水灯循环一次数码管显示加一
- P0口是流水灯。P2口通过573锁存器控制数码管的
- 位和段。
- 单片机:STC12C5A60S2
- 晶振 :11.0592M
- 作者 :苏义江
- 时间 :2015-12-11
- **********************************************/
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //共阳数码管段码
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
- 0xa1,0x86,0x8e,0x89};
- //位码
- uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar b,i;
- uint c;//数的变量
- uchar qian,bai,shi,ge;
- sbit wei=P0^6; //位使能573
- sbit duan=P0^7; //段使能573
- void display();
- void delay(uint z);
- void main()
- {
- c=0;
- while(1)
- {
- for(c=0;c<9999;c++)//显示到1000从新开始
- {
- for(i=0;i<8;i++)
- {
- P0=table1[i];//流水灯
- delay(10);
- for(b=0;b<20;b++)//循环显示20次增加数码管亮度
- {
- display();//数码管显示
- }
- }
- }
- }
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=420;y>0;y--);
- }
- void display()
- {
- //数的分解千,百,十,个位
- qian=c/1000;
- bai=c%1000/100;
- shi=c%100/10;
- ge=c%10;
-
- wei=1; //使能位选
- P2=0xfe;
- wei=0; //使能位选
- duan=1; //使能段选
- P2=table[qian]; //显示
- duan=0; //使能段选
- delay(3);
- P2=0XFF;
- wei=1;
- P2=0xfd;
- wei=0;
- duan=1;
- P2=table[bai];
- duan=0;
- delay(3);
- P2=0XFF;
- wei=1;
- P2=0xfb;
- wei=0;
- duan=1;
- P2=table[shi];
- duan=0;
- delay(3);
- P2=0XFF;
- wei=1;
- P2=0xf7;
- wei=0;
- duan=1;
- P2=table[ge];
- duan=0;
- delay(3);
- P2=0XFF;
- }
复制代码
|
|