- #include <reg52.h>
- sbit key0 = P2^7;
- unsigned char code table[]={//共阳数码管段码
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e};
- unsigned char num=0;
- unsigned int temp=0;
- bit flag=0;
- bit mark=0;
- void InitTimer0(void)
- {
- TMOD = 0x01;
- TH0 = 0xD8;
- TL0 = 0xF0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void key()
- {
- static int count=0;
- static bit sign=0;
- if(!key0)
- {
- if(++count>=100 && sign==0)//消抖+自锁
- {
- sign=1;
- flag=~flag;
- }
- }
- else
- {
- count=0;
- sign=0;
- }
- }
- void Timer0Interrupt(void) interrupt 1//中断周期10ms
- {
- static int i;
- TH0 = 0xD8;
- TL0 = 0xF0;
- if(++i>=100)//1秒
- {
- i=0;
- if(!flag)num=++num%10;//循环计数0~9
- mark=~mark;
- }
- }
- void main(void)
- {
- InitTimer0();
- while (1)
- {
- key();
- if(!flag)
- {
- temp=0x01<<num;
- P0=temp; //P0显示temp的低8位
- P1=temp>>8|0xfc; //P1.0、P1.1显示temp的9、10位,P1.2~1.7保持原来电平不变
- P2=table[num]|0x80;//P2.7保持高电平不变
- }
- else
- {
- if(mark)
- {
- P0=0x00;
- P1&=0xfc;//P1.2~1.7保持原来电平不变
- }
- else
- {
- P0=0xff;
- P1|=0x03;//P1.2~1.7保持原来电平不变
- }
- }
- }
- }
复制代码
|