1、按键电路图
定义四个按键引脚
1、按键按下 为 输入为低电平
2、按键不按下 IO有上拉电阻,为高电平
// 定义 按键的 管教
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
2、LED灯电路图
LED 输出高电平为亮
// 定义LED灯 管教
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
3、编程思想设计
1、定义按键管教
2、定义LED灯管教
3、定义按键的键值
4、定义一个函数 来判断按键是否被按下
5、先判断 按键是否被按下--> 在判断没有按下按键怎么样-->否则返回 没有按下
static u8 key =1; // 定义一个不被改变的u8 类型的 变量 key 赋值为1
if(mode)key=1; // 连续扫描按键,这里给 是单词扫描为0 ,多次扫描为1if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0)) // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了文章来源:https://www.toymoban.com/news/detail-691382.html
#include "reg52.h"
// 重新命名类型
typedef unsigned char u8;
typedef unsigned int u16;
// 定义 按键的 管教
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
// 定义LED灯 管教
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
// 使用宏定义独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
// 延时函数
void delay_times(u16 times)
{
while(times--);
}
// 按键函数
u8 key_scan(u8 mode)
{
static u8 key =1; // 定义一个不被改变的u8 类型的 变量 key 赋值为1
if(mode)key=1; // 连续扫描按键,这里给 是单词扫描为0 ,多次扫描为1
if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0)) // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了
{
delay_times(1000); // 消抖 1000us = 10 ms
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;
}
// 主函数
void main()
{
u8 key=0;
while(1)
{
key=key_scan(1); // key_scan 有返回值需要被接收
if(key==KEY1_PRESS)
LED1=~LED1; // LED1灯 取反 发光
else if(key==KEY2_PRESS)
LED2=~LED2;
else if(key==KEY3_PRESS)
LED3=~LED3;
else if(key==KEY4_PRESS)
LED4=~LED4;
}
}
4、实现效果
文章来源地址https://www.toymoban.com/news/detail-691382.html
到了这里,关于单片机-控制按键点亮LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!