自学51单片机 - 独立按键实验
1、程序
// 实验现象:下载程序后,按下“独立按键”模块中K1键,控制D1指示灯亮灭 // ,按下“独立按键”模块中K2键,控制D2指示灯亮灭 // ,按下“独立按键”模块中K3键,控制D3指示灯亮灭 // ,按下“独立按键”模块中K4键,控制D4指示灯亮灭 #include "reg52.h" typedef unsigned int uint16; //对系统默认数据类型进行重定义 typedef unsigned char uint8; //定义独立按键控制脚 sbit KEY1=P3^1; // K1 sbit KEY2=P3^0; // K2 sbit KEY3=P3^2; // K3 sbit KEY4=P3^3; // K4 //定义LED控制脚 sbit LED1=P2^0; // D1 sbit LED2=P2^1; // D2 sbit LED3=P2^2; // D3 sbit LED4=P2^3; // D4 //使用宏定义独立按键按下的键值 #define KEY1_PRESS 1 #define KEY2_PRESS 2 #define KEY3_PRESS 3 #define KEY4_PRESS 4 #define KEY_UNPRESS 0 /******************************************************************************* * 函 数 名 : delay_10us * 函数功能 : 延时函数,ten_us=1时,大约延时10us * 输 入 : ten_us * 输 出 : 无 *******************************************************************************/ void delay_10us(uint16 ten_us) //消抖 { while(ten_us--); } /******************************************************************************* * 函 数 名 : key_scan * 函数功能 : 检测独立按键是否按下,按下则返回对应键值 * 输 入 : mode=0:单次扫描按键 mode=1:连续扫描按键 * 输 出 : KEY1_PRESS:K1按下 KEY2_PRESS:K2按下 KEY3_PRESS:K3按下 KEY4_PRESS:K4按下 KEY_UNPRESS:未有按键按下 *******************************************************************************/ uint8 key_scan(uint8 mode) { static uint8 key=1; if(mode)key=1;//连续扫描按键 if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//任意按键按下 { delay_10us(1000);//消抖10ms key=0; if(KEY1==0) return KEY1_PRESS; else if(KEY2==0) return KEY2_PRESS; else if(KEY3==0) return KEY3_PRESS; else if(KEY4==0) return KEY4_PRESS; } else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1) //无按键按下 { key=1; } return KEY_UNPRESS; } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { uint8 key=0; while(1) { key=key_scan(0); if(key==KEY1_PRESS)//检测按键K1是否按下 LED1=!LED1;//LED1状态翻转 else if(key==KEY2_PRESS)//检测按键K2是否按下 LED2=!LED2;//LED1状态翻转 else if(key==KEY3_PRESS)//检测按键K3是否按下 LED3=!LED3;//LED1状态翻转 else if(key==KEY4_PRESS)//检测按键K4是否按下 LED4=!LED4;//LED1状态翻转 } }
2、结果
本文作者:皮埃尔的撒哈拉
本文链接:https://www.cnblogs.com/wyc-1009/p/17548072.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步