這是個獨立鍵盤的程序
用的是普中科技開發板
加快掃描的話,第三個數碼管就顯示不清,掃描變慢的話就會抖,求大神給個好法子
單片機源碼:
- #include<reg52.h>
- #include<intrins.h>
- #define uintunsigned int
- #define ucharunsigned char
- sbit led1=P2^2;
- sbit led2=P2^3;
- sbit led3=P2^4;
- sbit key1=P3^1;
- uinttemp=000,t0,ge,shi,bai,aa;
- uchar codetable[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- void SMG(int ge,int shi,int bai);
- void delay(uintz);
- void keyscan1();
- void main()
- {
- EA=1;
- TMOD=1;
- TR0=1;
- ET0=1;
- while(1) /
- {
- SMG(ge,shi,bai);
- if(t0==1)//0.01s速度運行 每0.01s個位數加一
- {
- temp++;
- t0=0;
- if(aa==1000)
- {
- temp=000;
- aa=0;
- }
- }
- P3=0xff;
- if(key1==0)
- {
- delay(10);
- if(key1==0)//倆次判斷防止第一次按下去是誤按
- {
- TR0=0;
- SMG(ge,shi,bai);
- }
- while(!key1);
- delay(10); //消抖
- while(!key1);//檢測按鍵是否釋放
- TR0=1;
- }
- }
- }
- void time0()interrupt 1 using 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- t0++;
- aa++;
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=50;y>0;y--);//因此程序速度較快 為防止delay中包含中斷點t0==1
- }
- void SMG(intge,int shi,int bai)
- {
- bai=temp/100;
- P0=table[bai];
- led1=1;led2=1;led3=1;
- delay(5);
- shi=temp%100/10;
- P0=table[shi];
- led1=0;led2=1;led3=1;
- delay(5);//更改延時時間的長短可以看到不同效果,例如改為1000看到的是先出現1,再出現2,而delay(5)是一下子出現數字12
- ge=temp%10;
- P0=table[ge];
- led1=1;led2=0;led3=1;
- delay(5);
- }
復制代碼
|