51单片机中按键程序用C怎么写
答案:3 悬赏:0
解决时间 2021-02-05 00:03
- 提问者网友:先森请一心
- 2021-02-03 23:03
就是 按下然后弹起 LED亮的时间加一秒
最佳答案
- 二级知识专家网友:旧事诱惑
- 2021-02-03 23:53
这个太简单了吧,记住写程序定时器要一直跑,建立一个时基,像个手表的时间一样要一直跑,即有time_125us,time_1ms,time_100ms,time_1s,time_1min,time_1hour等时间变量建立时基一直走。其它程序可以分时扫描也可以轮流扫描,不能停留死等,像电脑里的程序一样表面看起来各个程序是一直运行的,即各个程序中不能有delay_1ms之类的函数,如果要定时应该申请一个变量在时基里处理,如等待2s可以这么写
if(step==0){ time=2,time_100ms=0,step=1;}
if((step==1)&&(time==0)){//2s到
//等待2s后要执行的代码
}
在时基时每1s把time减1,减到0为止即if(time)time--;
对按键的写法一般用采集的方法如按键后IO为低
if(!IO){ //低电平,有按键
key_time++;
if((key_time==100)&&(!key_flag)){ //已经赋值了就不再赋值了
key_flag=1;
key_flag_bak=1;
}
else{ //无按键
key_time=0;
key_flag_bak=0;
}
if(key_flag&&(!key_flag_bak)){ //有按键并松开,即松开响应
time=2; //亮2s
key_flag=0;//把键值清0
}
if(time){
LED_ON;//灯亮
}
else LED_OFF;
if(step==0){ time=2,time_100ms=0,step=1;}
if((step==1)&&(time==0)){//2s到
//等待2s后要执行的代码
}
在时基时每1s把time减1,减到0为止即if(time)time--;
对按键的写法一般用采集的方法如按键后IO为低
if(!IO){ //低电平,有按键
key_time++;
if((key_time==100)&&(!key_flag)){ //已经赋值了就不再赋值了
key_flag=1;
key_flag_bak=1;
}
else{ //无按键
key_time=0;
key_flag_bak=0;
}
if(key_flag&&(!key_flag_bak)){ //有按键并松开,即松开响应
time=2; //亮2s
key_flag=0;//把键值清0
}
if(time){
LED_ON;//灯亮
}
else LED_OFF;
全部回答
- 1楼网友:青春如此荒謬
- 2021-02-04 01:55
用一个定时器,先赋值一个num,当num=20的时候,LED亮的时间是1s,当按下键,让num+20(12M的晶振)在定义一个a,判断a是否与num相等。这样试试呢....
- 2楼网友:厌今念往
- 2021-02-04 00:34
一个独立按键程序,没有必要写成子程序,更没有必要写得这么复杂。其实很简单的。如下程序:
#include
typedef unsigned int u16;
sbit k1=p1^0;
sbit led=p1^1;
void delay(u16 i)
{
while(i--);
}
void main()
{
led=0;
while(1)
{
if(k1==0)
{
delay(700);
if(k1==0)
{
led=~led;
}
while(k1==0); //等待按键释放
}
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯