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
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

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

所属专业
上级专业
同级专业
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}