这是个独立键盘的程序
用的是普中科技开发板
加快扫描的话,第三个数码管就显示不清,扫描变慢的话就会抖,求大神给个好法子
单片机源码:
- #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);
- }
复制代码
|