中易网

51单片机中按键程序用C怎么写

答案:3  悬赏:0  
解决时间 2021-02-05 00:03
就是 按下然后弹起 LED亮的时间加一秒
最佳答案
这个太简单了吧,记住写程序定时器要一直跑,建立一个时基,像个手表的时间一样要一直跑,即有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;
全部回答
用一个定时器,先赋值一个num,当num=20的时候,LED亮的时间是1s,当按下键,让num+20(12M的晶振)在定义一个a,判断a是否与num相等。这样试试呢....
一个独立按键程序,没有必要写成子程序,更没有必要写得这么复杂。其实很简单的。如下程序: #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); //等待按键释放 } } }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
哪咤是什么意思
如何动态获取各张表的字段名 php
龙亭区开封八一商业街地址在哪,我要去那里
单位没有加班费的,说以后作为调休用现在不知
贵阳银行卡到上海去可以在什么银行存钱?
高家套地址在哪,我要去那里办事
如何将班组建设创新工作真正与生产相结合
坐地铁可以到经开区昆明学院吗
挺好的公司,但是才上班几天就不想做了怎么办
佛山市南海区顺铃汽车销售有限公司在什么地方
逆变焊机mos与igbt有什么区别,那个好.佳士宝
西安方正补习学校校本部在哪里啊,我有事要去
有聊性话题的女孩吗?
芯谷·瑞领金融创新服务产业园3号楼地址有知
求一部电视剧,我只记得一到点,男主角的腿断
推荐资讯
高三在学校学不进去,回家自己学,会有进步吗
牙克石市名典装饰商店地址在哪,我要去那里办
上海网上交电费有哪些?
麦高乐馋嘴卤肉饭加盟
请问,我是调干入户的,前几天把书面材料交了
金诺装饰工程有限公司这个地址在什么地方,我
夏德新诊所地址在什么地方,想过去办事
充电宝上的⚡️和⚡️⚡️是什么意思
中国最有前景的行业
葡萄酸奶和火龙果能配合吃吗
樱花渡游艇码头在哪里啊,我有事要去这个地方
便民粮行在哪里啊,我有事要去这个地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?