标题:
at89c52单片机用独立按键控制数码管加减
[打印本页]
作者:
792544979
时间:
2017-11-2 13:58
标题:
at89c52单片机用独立按键控制数码管加减
用独立按键控制数码管加减,s2一直按着数码管就一直加,怎么做?
作者:
亲亲
时间:
2017-11-2 15:22
单片机反应速度很快要想做到一直按着一直加,应该加上适当的延时。s2一按下触发延时函数延时0.5秒就加一这样就可以了
作者:
1377231861
时间:
2017-11-2 15:26
去掉松手检测程序,加上延时程序,就可以实现一直加了
作者:
792544979
时间:
2017-11-2 17:07
1377231861 发表于 2017-11-2 15:26
去掉松手检测程序,加上延时程序,就可以实现一直加了
能发程序给我看一下吗
作者:
792544979
时间:
2017-11-2 17:09
1377231861 发表于 2017-11-2 15:26
去掉松手检测程序,加上延时程序,就可以实现一直加了
有具体程序给我借鉴一下吗
作者:
wulin
时间:
2017-11-2 17:53
//短按+/-,长按连续+/-示例,按键和LED端口按你的实际电路定义。变量num按实际需要设限。宏定义延时计数按实际需要修改。
#include <REG51.H>
#define uint unsigned int //宏定义数据类型uint
#define uchar unsigned char //宏定义数据类型uchar
#define key_S 1000 //宏定义短按(约20ms)
#define key_L 30000 //宏定义长按(约2/3s)
#define key_M 20000 //宏定义长按(约1/3s)
sbit key1=P3^6; //加键
sbit key2=P3^7; //减键
uchar num=1;
void keyscan() //按键扫描
{
static uint count1=0,count2=0;//计数变量
if(!key1)
{
count1++;
if(count1>=key_L) //长按
{
if(num<255)
num++;
count1=key_M;
}
}
else //按键抬起
{
if(count1>key_S && count1<key_L)//短按
{
if(num<255)
num++;
}
count1=0; //count清0
}
if(!key2)
{
count2++;
if(count2>=key_L) //长按
{
if(num>0)
num--;
count2=key_M;
}
}
else //按键抬起
{
if(count2>key_S && count2<key_L)//短按
{
if(num>0)
num--;
}
count2=0; //count清0
}
}
void main()
{
while(1)
{
keyscan(); //按键扫描
P1=~num; //LED显示低电平显示
}
}
作者:
小白狼
时间:
2017-11-2 18:24
可能程序错了
作者:
hong19851024
时间:
2017-11-2 20:48
去掉松手检测程序,加上延时程序,就可以实现一直加了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1