标题:
c51单片机按键程序问题,求大神解答!
[打印本页]
作者:
行者无疆6789
时间:
2018-6-3 19:57
标题:
c51单片机按键程序问题,求大神解答!
小弟最近在制作一个单片机倒计时器,时间可调,但是只能每次按一下加1。想实现按着不动自己也会加,但是不知道怎么搞?求前辈赐教!!
作者:
devcang
时间:
2018-6-3 23:06
那就是在一般的按键写法,修改一下,类似这样
if(k1==0){
delay(1);
if(k1==0){
while(k1==0){
value++;
delay(100);
}
}
}
作者:
zhangxiaozi
时间:
2018-6-3 23:30
你可以编一个定时器中断,再用个定时器,如有按键按下启动定时器,比如这定时器超过1秒了,表示长按键连减或连加了,就启动定时器中断比如0.5秒改变到计时的值就可以了
作者:
wulin
时间:
2018-6-4 07:40
给你一个短按加减1,长按连加减的示例程序参考。按键端口按你的实际电路更改。
#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; //count1清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; //count2清0
}
}
void main()
{
while(1)
{
keyscan(); //按键扫描
P1=~num; //LED显示,低电平亮
}
}
作者:
ahshmj
时间:
2018-6-4 08:38
思路就是扫描检测按键,设置一个循环次数计数单元,如果循环达到N次(根据你自己的要求和扫描延时10~40次,一般总共半秒为宜)如果还是按下状态,就加1,然后循环次数计数置0,继续检测......。循环次数也可以逐渐减小,也就是加1的时间逐渐加快,自己试验着调。
作者:
jyy瑾年啊
时间:
2018-6-4 10:46
编一个定时器中断程序,设置数码管动态显示。
作者:
tongrongyun
时间:
2018-6-4 20:32
利用中断,如果有需要,我有60秒倒计时,可改
作者:
行者无疆6789
时间:
2018-7-15 21:27
devcang 发表于 2018-6-3 23:06
那就是在一般的按键写法,修改一下,类似这样
小弟试试,谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1