在切換的過程中切換的不靈敏,并且會出現亂碼。應該怎么辦
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula =P2^6;
- sbit wela=P2^7;
- sbit key1=P3^4;
- sbit key2=P3^5;
- sbit key3=P3^6;
- sbit key4=P3^7;
- uchar miao,fen,shi;
- uint aa,bb;
- uchar i,nian1,nian2,yue1,yue2,ri1,ri2;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code weitable[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- uchar duantable[8];
- void delayms(uchar z)
- {
- uchar x,y;
- for (x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display();
- void display1();
- void init();
- void main()
- {
- P0=0x00;
- init();
- bb=2;
- aa=0;
- miao=0;
- fen=0;
- shi=0;
- nian1=7;
- nian2=2;
- yue1=5;
- yue2=0;
- ri1=9;
- ri2=1;
- P0=0x00;
- while(1)
- {
-
- // if(key4==0)
- // {
- // delayms(5);
- // if(key4==0)
- // {
- // while(!key4)
- // {
- // bb++;
- // if(bb%2==0)
- // {
- // display1(nian1,nian2,yue1,yue2,ri1,ri2);
- // }
- // if(bb%2==1)
- // {
- // duantable[0]=table[miao%10];
- // duantable[1]=table[miao/10];
- // duantable[2]=table[fen%10];
- // duantable[3]=table[fen/10];
- // duantable[4]=table[shi%10];
- // duantable[5]=table[shi/10];
- // }
- // }
- // }
- // }
- if(key1==0)
- {
- delayms(5);
- if(key1==0)
- {
- while(!key1)
- {
-
- }
- shi++;
- if(shi==24)
- shi=0;
- }
- }
- if(key2==0)
- {
- delayms(1);
- if(key2==0)
- while(!key2);
- fen++;
- if(fen==60)
- fen=0;
- }
- if(key3==0)
- {
- delayms(1);
- if(key3==0)
- miao++;
- if(miao==60)
- miao=0;
- while(!key3);
- }
- if(key4==0)
- {
- delayms(5);
- if(key4==0)
- {
- while(!key4)
- {
- bb++;
- }
- }
- }
- }
- }
- void display()
- {
- wela=1;
- P0=weitable[i];
- wela=0;
- P0=0x00;//消隱
- dula=1;
- P0=duantable[i];//顯示個數
- dula=0;
- i++;
- if(i==6)
- i=0;
- }
- void display1()
- {
- wela=1;
- P0=weitable[i];
- wela=0;
- P0=0x00;//消隱
- dula=1;
- P0=duantable[i];//顯示個數
- dula=0;
- P0=0x00;//消隱
- i++;
- if(i==6)
- i=0;
- }
- void init()//初始化
- {
- TMOD=0x11;//0000 0001
- EA=1;//開總中斷
- ET0=1;//開定時器0中斷
- ET1=1;
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- TH1=(65536-12000)/256;
- TL1=(65536-1000)%256;
- TR0=1;//啟動定時器0
- TR1=1;
- }
- void timer0() interrupt 1
- {
- P0=0x00;
- TH0=(65536-250)/256;
- TL0=(65536-250)%256;
- aa++;
- if(bb%2==1)
- {
- display();
- duantable[0]=table[miao%10];
- P0=0x00;//消隱
- duantable[1]=table[miao/10];
- P0=0x00;//消隱
- duantable[2]=table[fen%10];
- P0=0x00;//消隱
- duantable[3]=table[fen/10];
- P0=0x00;//消隱
- duantable[4]=table[shi%10];
- P0=0x00;//消隱
- duantable[5]=table[shi/10];
- P0=0x00;//消隱
- }
-
- if(aa==4000)
- {
- aa=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;//滿60秒,分加1,秒歸0.
- }
- if(fen==60)
- {
- miao=0;
- fen=0;
- shi++;
- }
- if(shi==24)
- shi=0;
- }
- }
- void timer1() interrupt 3
- {
- TH1=(65536-1000)/256;
- TL1=(65536-2000)%256;
- if(bb%2==0)
- {
- display1();
- duantable[0]=table[nian1];
- P0=0x00;//消隱
- duantable[1]=table[nian2];
- P0=0x00;//消隱
- duantable[2]=table[yue1];
- P0=0x00;//消隱
- duantable[3]=table[yue2];
- P0=0x00;//消隱
- duantable[4]=table[ri1];
- P0=0x00;//消隱
- duantable[5]=table[ri2];
- P0=0x00;//消隱
- }
- }
復制代碼
|