加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
51单片机独立按键实验
achim2023/03/09电子技术 IP:中国

代码:

实验名称:独立按键实验

接线说明:K1键接P3.1接口,LED1灯接74HC245A接口

实验现象:下载程序后,按下“独立按键”模块中K1键,控制D1指示灯亮灭

注意事项:   

***************************************************************************************/

#include "reg52.h"


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;


//使用宏定义独立按键按下的键值

#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(u16 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:未有按键按下

*******************************************************************************/

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(65000);//消抖

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;

LED1=0;

}

return KEY_UNPRESS;

}

/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出    : 无

*******************************************************************************/

void main()

{

u8 key=1;


while(1)

{

    key=key_scan(1);

if(key==KEY1_PRESS)//检测按键K1是否按下

LED1=!LED1;//LED1状态翻转

}

}


在mode0下,单次扫描按键的实验结果

按下K1键灯点亮,不松手LED1灯一直亮,松手LED1灯熄灭。

在mode1下,连续扫描按键的实验结果

按下K1键灯点亮,不松手LED1灯开使闪烁,松手LED1灯熄灭。




来自:电子信息 / 电子技术
0
1
新版本公告
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的