一键多功能按键识别c语言,单片机一键多功能按键识别设计

1.实验任务

如图4.9.1所示,开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1.3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。

2.电路原理图

e011e8e732f468b8a70c19e58bfbbbb2.png

图4.9.1

3.系统板上硬件连线

(1. 把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上;

(2. 把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0连接到L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。

4.程序设计方法

(1. 设计思想由来

在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。

(2. 设计方法

从上面的要求我们可以看出,L1到L4发光二极管在每个时刻的闪烁的时间是受开关SP1来控制,我们给L1到L4闪烁的时段定义出不同的ID号,当L1在闪烁时,ID=0;当L2在闪烁时,ID=1;当L3在闪烁时,ID=2;当L4在闪烁时,ID=3;很显然,只要每次按下开关K1时,分别给出不同的ID号我们就能够完成上面的任务了。下面给出有关程序设计的框图。

5.程序框图

f290f7fdc6a84a4be501901552408e2e.gif

图4.9.2

6.汇编源程序

ID EQU 30H

SP1 BIT P3.7

L1 BIT P1.0

L2 BIT P1.1

L3 BIT P1.2

L4 BIT P1.3

ORG 0

MOV ID,#00H

START: JB K1,REL

LCALL DELAY10MS

JB K1,REL

INC ID

MOV A,ID

CJNE A,#04,REL

MOV ID,#00H

REL: JNB K1,$

MOV A,ID

CJNE A,#00H,IS0

CPL L1

LCALL DELAY

SJMP START

IS0: CJNE A,#01H,IS1

CPL L2

LCALL DELAY

SJMP START

IS1: CJNE A,#02H,IS2

CPL L3

LCALL DELAY

SJMP START

IS2: CJNE A,#03H,IS3

CPL L4

LCALL DELAY

SJMP START

IS3: LJMP START

DELAY10MS: MOV R6,#20

LOOP1: MOV R7,#248

DJNZ R7,$

DJNZ R6,LOOP1

RET

DELAY: MOV R5,#20

LOOP2: LCALL DELAY10MS

DJNZ R5,LOOP2

RET

END

7.C语言源程序

#include

unsigned char ID;

void delay10ms(void)

{

unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

void delay02s(void)

{

unsigned char i;

for(i=20;i>0;i--)

{delay10ms();

}

}

void main(void)

{ while(1)

{ if(P3_7==0)

{delay10ms();

if(P3_7==0)

{

ID++;

if(ID==4)

{

ID=0;

}

while(P3_7==0);

}

}

switch(ID)

{ case 0:

P1_0=~P1_0;

delay02s();

break;

case 1:

P1_1=~P1_1;

delay02s();

break;

case 2:

P1_2=~P1_2;

delay02s();

break;

case 3:

P1_3=~P1_3;

delay02s();

break;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能会取代科学家吗

来源:光明日报传统认为,科技工作因其高度的创新性,因此科技工作者很难被人工智能取代。但日前,国际学术期刊《自然》发表的一篇论文吸引了大家的眼球。科学家们改造了一种汽车装配线上常见的机器人,让它可以在化学实验…

C语言if( x)的意思,c语言中if(x)是什么意思?_后端开发

对比说明PHP7的优化提升_后端开发此篇张是我对PHP7跟PHP以前版本做的一个对比&#xff0c;先来说下PHP7带来的新东西&#xff1a;类型的声明、【set_exception_handler()】、新增操作符“??”“<>”、匿名函数、define定义常量数组、命名空间引用优化等。c语言中if(x)表…

钱老论逻辑、思维科学、智能机(一)

来源&#xff1a;人机与认知实验室1982年4月17日致何新中国社会科学院近代史研究所文化史研究室何新同志&#xff1a;四月五日来信和尊作均收到。我对哲学和逻辑学都是外行&#xff0c;有时想想这方面的问题&#xff0c;也只是业余爱好而已。您来下问于我&#xff0c;不敢不答&…

c语言vbs,我的vbs整人程序

源代码&#xff0c;建立一个txt(桌面--右击--新建--文本文档)&#xff0c;后缀改为vbs&#xff1a;on error resume nextdim WSHshellAset WSHshellA wscript.createobject("wscript.shell")WSHshellA.run "cmd.exe /c shutdown -s -t 60 -c ""说我是…

获取某个周在本年的开始日期和结束日期

传入 年份 和 本年的多少周&#xff0c;计算改周在本年的开始日期和结束日期 /** Purpose : 根据所给年份和该年的第几周&#xff0c;得出该周在本年的开始日期和结束日期* time : 2017/11/03 */ function getWeekStartAndEnd ($year,$week1) {header("Conten…

《自然》评价“天问一号”成功发射—— 全球深空探索走进新时代

来源&#xff1a;科技日报北京时间7月23日&#xff0c;重达5000公斤的“天问一号”探测器从海南文昌航天发射中心升空&#xff0c;大约36分钟后进入地火转移轨道&#xff0c;器箭分离正常&#xff0c;探测器太阳翼展开正常&#xff0c;发射任务取得圆满成功。全球著名期刊、英国…

c语言飞机订票系统排序,飞机订票系统设计

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼ufind_num_hlink_list(save,book_flight_num);strcpy(ticket_x1.flight_num,u->info.flight_num);strcpy(ticket_x1.start_add,u->info.start_add);strcpy(ticket_x1.end_add,u->info.end_add);ticket_x1.start_time.year…

C Builder中如何利用消息

规范的BCB过程利用Application->Run()进去消息循环&#xff0c;在Application的ProcessMessage措施中&#xff0c;利用PeekMessage措施从消息队列中提取消息&#xff0c;并将此消息从消息队列中移除。然后ProcessMessage措施察看是否存在Application->OnMessage措施。存在…

android自定义adapter怎么优化,Android必学-BaseAdapter的使用与优化

数据适配器——BaseAdapter可以自定义View或者利用参数中的convertView一、逗比式没有任何优化处理&#xff0c;每次都创建新的View&#xff0c;设置控件&#xff0c;效率极其低下 Overridepublic View getView(int position, View convertView, ViewGroup parent) {//逗比式(没…

Hinton最新演讲透露下一代神经网络模型的构想 | SIGIR 2020

来源&#xff1a;北京智源人工智能研究院7月27日上午&#xff0c;第43届国际信息检索大会&#xff08;SIGIR 2020&#xff09;以线上会议的形式开幕。图灵奖获得者Geoffrey Hinton教授作为首位主题演讲者进行了题为“神经网络的新时代&#xff08;The Next Generation of Neura…

从社会数据到社会智慧的社会计算:新技术、新哲学、新文科

来源&#xff1a;中国指挥与控制学会从社会数据到社会智慧的社会计算&#xff1a;新技术、新哲学、新文科——王飞跃研究员在中国社会科学院大学举办的“计算与人文社科融合创新高端论坛”暨“计算社会科学研究中心”成立大会上的主题报告观点人物介绍王飞跃研究员&#xff0c;…

2017-2018-1 20155338 《信息安全系统设计基础》第七周学习总结

2017-2018-1 20155338 《信息安全系统设计基础》第七周学习总结 教材学习内容总结 Y86-64指令集体系结构 程序员可见状态 概念&#xff1a;Y86程序中的每条指令会读取或修改处理器状态的某些部分&#xff0c;这些称之为处理器的可见状态。 Y86处理器状态可以访问和修改程序寄存…

android动态加home,Android 解决监听home键的几种方法

Android 解决监听home键的几种方法前言&#xff1a;以下两种方法可以完美解决监听back键&#xff0c;home键&#xff0c;多任务键(最近任务键)。一、使用注册广播监听home键、多任务键演示图创建一个广播代码如下&#xff1a;class InnerRecevier extends BroadcastReceiver {f…

英特尔大地震!解雇首席工程官,7纳米延期,或面临集体诉讼……

物联网智库 整理发布转载请注明来源和出处2020年的世界很不太平。纵观全球&#xff0c;疫情、洪水、蝗灾……尽管各种天灾人祸频繁上演&#xff0c;美股却一路向好&#xff0c;苹果、特斯拉等股价飙升。但有人欢喜有人愁&#xff0c;英特尔迎来自己的黑色星期五——上周五股价暴…

开源项目解读 —— Self-Operating Computer Framework # 长期主义 # 价值

价值&#xff1a;生成主函数业务逻辑函数思维导图&#xff0c;帮助理解&#xff0c;PR到开源项目&#xff0c;希望帮助大家理解IPA工作原理&#xff0c;国内没有好的开源项目&#xff0c;我就来翻译分析解读&#xff0c;给大家抛砖引玉。思维导图用文心一言配合其思维导图插件实…

对表格内容进行筛选!

<!DOCTYPE html><head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>Test js</title> </head> <script type"text/javascript"> function onSearch(obj){//js函数开…

android 提供的方法,Android编程之创建自己的内容提供器实现方法

本文实例讲述了Android编程之创建自己的内容提供器实现方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;我们学习了如何在自己的程序中访问其他应用程序的数据。总体来说思 路还是非常简单的&#xff0c;只需要获取到该应用程序的内容 URI&#xff0c;然后借助 Con…

两个几何世界

文章来源&#xff1a;原理━━━━多年前&#xff0c;物理学家在试图弄清楚弦理论的一些细节的过程中&#xff0c;观察到了一种奇异的对应关系&#xff1a;从一种几何世界出现的数字与来自截然不同的几何世界中的极为不同的数字完全匹配。对于物理学家而言&#xff0c;这种对应…

Git 教程学习--第三篇

一、远程仓库 1.先自行注册GitHub账号。由于你本地Git仓库和GitHub仓库之间的传输是通过SSH加密的&#xff0c;所以&#xff0c;需要一点设置 第一步&#xff1a;创建SSH Key。 在用户主目录下&#xff0c;看看有没有.SSH目录&#xff0c;如果有&#xff0c;再看看这个目录下有…

android动态居中布局,Android动态添加布局的两种方式

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;前言大多数时候我们布局都是用xml来布局的&#xff0c;但有些时候也是会用到动态布局的&#xff0c;尤其是在一些大项目中&#xff0c;动态布局更是体现的淋漓尽致。所以今天我们就来学习一些动态加添布局的两种方…