c51单片机学习笔记-独立按键实验

c51单片机学习笔记-独立按键实验,第1张

c51单片机学习笔记-独立按键实验

目的:通过开发板上的独立按键 K1 控制 D1 指示灯亮灭

编译软件:keil5

过程:

(1)定义独立按键控制脚

sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;

(2)定义 LED1 控制脚

sbit LED1=P2^0;

(3)使用宏定义独立按键按下的键值

#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0

(4)延时函数

void delay_10us(u16 ten_us)
{
while(ten_us--);
}

(5)key_scan函数

函数功能 : 检测独立按键是否按下,按下则返回对应键值

输 入 : mode=0:单次扫描按键 mode=1:连续扫描按键

输 出 : KEY1_PRESS:K1 按下

KEY2_PRESS:K2 按下

           KEY3_PRESS:K3 按下

           KEY4_PRESS:K4 按下

KEY_UNPRESS:未有按键按下

u8 key_scan(u8 mode)
{
	static u8 key=1;
	
	if(mode)key=1;
	if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
	{
		delay_10us(1000);
		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;
	}
}

  key_scan 函数带一个形参 mode,该参数用来设定是否连续扫描按键,如果 mode 为 0,只能 *** 作一次按键,只有当按键松开后才能触发下次的扫描,这样 做的好处是可以防止按下一次出现多次触发的情况。如果 mode 为 1,函数是支 持连续扫描的,即使按键未松开,在函数内部有 if(mode==1)这条判断语句,因 此 key 始终是等于 1 的,所以可以连续扫描按键,当按下某个按键,会一直返 回这 个按键的键值,这样做的好处是可以很方便实现连按 *** 作。函数内的 delay_10us(1000)即为软件消抖处理,通常延时 10ms 即可。

  key_scan 函数还带有一个返回值,如果未有按键按下,返回值即为 KEY_UNPRESS,否则返回值即为对应按键的键值,如 KEY1_PRESS、KEY2_PRESS、 KEY3_PRESS、 KEY4_PRESS,这都是程序开头定义好的宏,方便大家理解和使用。 函数内定义了一个 static 变量 key,相当于全局变量,所以该函数不是一个可 重入函数。还有一点要注意的就是该函数按键的扫描是有优先级的,因为函数内 用了 if...else if...else 格式,所以最先扫描处理的按键是 KEY1,其次是 KEY2,然后是 KEY3,最后是 KEY4。如果需要将其优先级设置一样,那么可以全部用 if 语句。

  main 函数中主要就是调用 key_scan 函数用于检测按键,此时传入的 mode 值为 0,表示单次扫描按键,然后将扫描按键的值保存在变量 key 中,最后通过 if 判断语句控制 LED1 状态。

(6)主函数

void main()
{	
	u8 key=0;
	
	
	while(1)
	{
	   	key=key_scan(0);
		  if(key==KEY1_PRESS)
			LED1=!LED1;
	}		

(7)编译代码得到hex文件烧录

(8) 连接P31-K1;P20-D1观察实验现象

当按下 K1 键,D1 指 示灯亮,再按下 K1 键,D1 指示灯灭,如此循环。

c51单片机学习笔记-独立按键实验现象

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存