标题:
独立键盘的程序 加快扫描的话,第三个数码管就显示不清 求大佬解答
[打印本页]
作者:
ckeai
时间:
2018-7-13 15:23
标题:
独立键盘的程序 加快扫描的话,第三个数码管就显示不清 求大佬解答
这是个独立键盘的程序
用的是普中科技开发板
加快扫描的话,第三个数码管就显示不清,扫描变慢的话就会抖,求大神给个好法子
单片机源码:
#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);
}
复制代码
作者:
yzwzfyz
时间:
2018-7-14 04:41
你的程序构思差!
所有扫描的延时没不能用硬延时,要用中断做处理。这样CPU就不“累了”。
参考一下我回的这个帖子“在线等请问独立键盘的扫描去抖怎么写啊 haohaoxue51 发表于 2018-7-11 19:49”
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1