自学51单片机 - 独立按键实验

1、程序

// 实验现象:下载程序后,按下“独立按键”模块中K1键,控制D1指示灯亮灭 //,按下“独立按键”模块中K2键,控制D2指示灯亮灭 //,按下“独立按键”模块中K3键,控制D3指示灯亮灭 //![请添加图片描述](https://img-blog.csdnimg.cn/1b8c0ea933df48e8b275340aaa7e8804.png) ,按下“独立按键”模块中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_PRESS1 #define KEY2_PRESS2 #define KEY3_PRESS3 #define KEY4_PRESS4 #define KEY_UNPRESS0/******************************************************************************* * 函 数 名: 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、结果 【自学51单片机 - 独立按键实验】自学51单片机 - 独立按键实验
文章图片

自学51单片机 - 独立按键实验
文章图片

自学51单片机 - 独立按键实验
文章图片

    推荐阅读