1 Star 1 Fork 1

ONE_Day/DS18B20温度报警器

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Key.c 1.58 KB
一键复制 编辑 原始数据 按行查看 历史
ONE_Day 提交于 2022-03-25 23:17 . DS18B20温度报警器
#include <REGX52.H>
#include "Delay.h"
unsigned char key_keyNumber;
/**
* @brief按键检测,之前要在按键按下后用Delay函数进行软件消抖,
还要用while(P3_1==0)来判断是否松手,如果长期不松手,则CPU会
卡在该死循环里,不能执行其他代码
* @param无
* @retval返回被按下按键的值
*/
unsigned char Key_GetState()
{
unsigned char keynum = 0;
if(P3_1==0){keynum=1;}//一有按键被按下,标志位keynum立即置位并返回,给key_loop函数处理
if(P3_0==0){keynum=2;}
if(P3_2==0){keynum=3;}
if(P3_3==0){keynum=4;}
return keynum;
}
/**
* @brief用于返回按键标志位,main函数中调用
* @param无
* @retval按键标志位
*/
unsigned char key_return()
{
unsigned char temp = 0;
temp = key_keyNumber;
key_keyNumber = 0;
return temp;
}
/**
* @brief每隔20毫秒执行一次该函数,对按键状态进行扫描
* @param无
* @retval无
*/
void key_loop()
{
static unsigned char before_state,now_state;
before_state = now_state;
now_state = Key_GetState(); //获取按键标志位
/*1.一开始没按键按下时before_state = 0,now_state = 0
2.当按键1按下没松开时,now_state = 1,此时before_state = 0,不满足下面任何的判断
3.20ms后该函数再次被调用,before_state = now_state = 1
4.按键1松开,now_state = 0,此时before_state = 1,满足下面第一条if判断,key_keyNumber置1
*/
//上一个状态有按键按下,现在状态没有按键按下,说明处于按下后松手阶段
if(before_state == 1 && now_state == 0)
{
key_keyNumber = 1; //按键标志位置位
}
if(before_state == 2 && now_state == 0)
{
key_keyNumber = 2;
}
if(before_state == 3 && now_state == 0)
{
key_keyNumber = 3;
}
if(before_state == 4 && now_state == 0)
{
key_keyNumber = 4;
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ONE_Day168/ds18-b20-temperature-alarm.git
git@gitee.com:ONE_Day168/ds18-b20-temperature-alarm.git
ONE_Day168
ds18-b20-temperature-alarm
DS18B20温度报警器
master

搜索帮助