前言
杨枝的单片机专栏,多图多阐述,争取让大家在学习单片机的路上减少些许的痛苦
虽说是14天,但是我自己快更了半个月了,也才更了一半,我看了一下后面的知识,可以拎出来说的不是特别多啦,我已经在买STM32的板子啦,咱们重心还是得放在32~
14天了,是对于各位看这个篇文章的小伙伴来说嗷,一天看一篇,轻松上手,不再害怕单片机。
因为我自己现在呢,抬头是算法题海,低头是作业项目,很多时候只是写得完草稿,没有及时发出来,抱歉哈,原谅我🌹🌹🌹
独立按键实验
💒项目代码及效果
#include "reg52.h"
//使用宏定义来定义每个独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
typedef unsigned int u16;
typedef unsigned char u8;
//根据电路图来定义需要操控的管脚
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
//定义咱们要操作的LED1
sbit LED1 = P2^0;
//编写用于消抖的延时函数
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
//检测独立按键是否按下,按下则返回对应键值
//mode = 0,单次扫描按键,只有当按键松开后才能触发下次的扫描,防止按下一次出现多次触发情况
//mode = 1,连续扫描按键 ,会一直返回这个按键的键值,好处是可以很方便实现连按操作
u8 key_scan(u8 mode)
{
static u8 key = 1;
//支持连续扫描按键
if(mode) key = 1;
//常规的检查是否有按键按下
if(key && (!KEY1 || !KEY2 || !KEY3 || !KEY4))
{
//通过延时函数消抖
delay_10us(1000);
//修改键值,在mode = 0的情况
key = 0;
if(!KEY1)
return KEY1_PRESS;
else if(!KEY2)
return KEY2_PRESS;
else if(!KEY3)
return KEY3_PRESS;
else if(!KEY4)
return KEY4_PRESS;
}else if(KEY1 && KEY2