9. 一键多功能按键识别技术

合集下载

一键多功能按键识别技术

一键多功能按键识别技术

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.电路原理图图4.9.13.系统板上硬件连线(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.程序框图图4.9.2 6.汇编源程序ID EQU 30HSP1 BIT P3.7L1 BIT P1.0L2 BIT P1.1L3 BIT P1.2L4 BIT P1.3ORG 0MOV ID,#00HSTART: JB K1,RELLCALL DELAY10MSJB K1,RELINC IDMOV A,IDCJNE A,#04,RELMOV ID,#00HREL: JNB K1,$MOV A,IDCJNE A,#00H,IS0CPL L1LCALL DELAYSJMP STARTIS0: CJNE A,#01H,IS1CPL L2LCALL DELAYSJMP STARTIS1: CJNE A,#02H,IS2CPL L3LCALL DELAYSJMP STARTIS2: CJNE A,#03H,IS3CPL L4LCALL DELAYSJMP STARTIS3: LJMP START DELAY10MS: MOV R6,#20LOOP1: MOV R7,#248DJNZ R7,$DJNZ R6,LOOP1RETDELAY: MOV R5,#20LOOP2: LCALL DELAY10MSDJNZ R5,LOOP2RETEND7.C语言源程序#include <AT89X51.H>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;}}。

快捷键的奇妙魔力让你的操作更顺畅

快捷键的奇妙魔力让你的操作更顺畅

快捷键的奇妙魔力让你的操作更顺畅在现代高速发展的电脑科技时代,我们每天都与电脑打交道。

在使用电脑的过程中,我们常常需要进行各种操作,如复制、粘贴、剪切、撤销、保存等等。

这些操作涉及键盘和鼠标的使用。

然而,如果我们只用鼠标来进行这些操作,效率会大大降低。

而快捷键则能够帮助我们提高操作效率,使得我们的操作更加顺畅和高效。

快捷键是指在电脑操作中,通过按下键盘上某个或多个键的组合,实现某个操作的方法。

使用快捷键可以节省大量的时间和精力,提高我们的工作和学习效率。

不同的操作系统和软件可能会有不同的快捷键设置,但是大多数常用的快捷键是通用的。

首先,让我们来看一些常用的快捷键。

在Windows操作系统中,一些常见的快捷键包括:1. Ctrl + C:复制选中的内容2. Ctrl + X:剪切选中的内容3. Ctrl + V:粘贴剪切板中的内容4. Ctrl + Z:撤销上一次操作5. Ctrl + S:保存当前文件6. Ctrl + A:选中全部内容7. Ctrl + F:在当前页面或文档中查找特定内容8. Ctrl + P:打印当前页面或文档9. Ctrl + W:关闭当前窗口或标签页10. Ctrl + Tab:在多个窗口或标签页之间切换这些快捷键的使用非常简单直观,通过按下特定的键组合,我们就能够完成相应的操作。

而且这些操作基本上适用于各种软件和程序。

除了通用的快捷键,不同的软件和程序还有一些特定的快捷键。

比如在Microsoft Word中,我们可以使用以下几个快捷键:1. Ctrl + B:将选中的内容加粗2. Ctrl + I:将选中的内容斜体显示3. Ctrl + U:给选中的内容添加下划线4. Ctrl + S:保存当前文档5. Ctrl + P:打印当前文档6. Ctrl + F:在文档中查找特定内容7. Ctrl + H:在文档中替换特定内容8. Ctrl + N:新建一个空白文档9. Ctrl + O:打开一个已有的文档这些快捷键的设置针对不同的软件和程序的操作习惯和需求,可以提高我们的编辑和排版效率。

51单片机应用程序实例

51单片机应用程序实例
图 9.1 3.系统板上硬件连线 (1. 把“单片机系统”区域中的 P3.7/RD 端口连接到“独立式键盘”区域中的 SP1 端口上; (2. 把“单片机系统”区域中的 P1.0-P1.4 端口用 8 芯排线连接到“八路发光二 极管指示模块”区域中的“L1-L8”端口上;要求,P1.0 连接到 L1,P1.1 连接到 L2,
广告灯的左移右移
1. 实验任务
做单一灯的左移右移,硬件电路如图 4.1 所示,八个发光二极管 L1-L8 分别接在单 片机的 P1.0-P1.7 接口上,输出“0”时,发光二极管亮,开始时 P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0 亮,重复循环。
2. 电路原理图
图 4.1
每次送出的数据是不同,具体的数据如下表 1 所示
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 L8 L7 L6 L5 L4 L3 L2 1111111 1111110 1111101 1111011
P1.0 L1 0 1 1 1
说明
L1 亮 L2 亮 L3 亮 L4 亮
1110111 1 1101111 1 1011111 1 0111111 1
一键多功能按键识别技术
1.实验任务 如图 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.电路原理图

功能键是哪个

功能键是哪个

功能键是哪个功能键是计算机键盘上用于执行特定功能的一组按键。

功能键通常位于键盘的上方,分为F1至F12共12个键,每个键都有各自的特定功能。

下面将介绍功能键的具体功能和用途。

1. F1键:帮助键。

按下F1键,通常会启动一个帮助窗口,显示与当前应用程序或操作系统相关的帮助信息。

2. F2键:重命名键。

在文件资源管理器或桌面上选择一个文件或文件夹后,按下F2键可以快速将其重命名。

3. F3键:搜索键。

在许多应用程序中,按下F3键会打开一个搜索框或搜索对话框,用于搜索当前内容或打开搜索引擎。

4. F4键:关闭键。

在许多应用程序中,按下F4键会关闭当前窗口或退出应用程序。

在Windows操作系统中,按下Alt + F4键可以快速关闭当前活动窗口。

5. F5键:刷新键。

按下F5键可以刷新当前应用程序中的内容或刷新浏览器中的网页。

6. F6键:定位键。

按下F6键可以在文本编辑器、浏览器等应用程序中切换光标的位置。

7. F7键:拼写检查键。

在许多文本编辑器和处理软件中,按下F7键可以启动拼写检查,帮助用户找出拼写错误。

8. F8键:启动键。

在启动计算机时,按下F8键可以进入启动选项,例如进入安全模式或修复模式。

9. F9键:刷新键。

在一些文本编辑器和IDE(集成开发环境)中,按下F9键可以刷新代码。

10. F10键:菜单键。

按下F10键可以激活当前应用程序的菜单栏,用户可以使用键盘上的方向键和Enter键进行导航和选择。

11. F11键:全屏键。

在许多浏览器中,按下F11键可以将当前窗口切换到全屏模式,提供更大的浏览空间,同时按下F11键可以切换回正常模式。

12. F12键:开发者工具键。

在许多开发者工具和IDE中,按下F12键可以打开代码调试器或开发者工具。

功能键的具体功能和用途可能因应用程序和操作系统而有所不同,但总体上它们提供了一种更快捷、便利的方式来执行特定的操作和功能。

在日常使用计算机时,掌握并灵活运用功能键可以提高工作和操作效率。

华为 功能键

华为 功能键

华为功能键华为是一家全球领先的信息通信技术(ICT)解决方案供应商,为全球ICT产业和消费者提供创新的产品、服务和解决方案。

华为的手机是其主要产品之一,拥有各种功能键,使用户能够更方便地操作手机。

华为手机的功能键包括主键、音量键、电源键和返回键。

这些键位于手机的底部或侧面,具有以下功能:主键:主键是华为手机最重要的功能键之一,它通常位于手机的底部。

它用于返回主屏幕、打开最近使用的应用程序和解锁手机。

双击主键可以打开快速启动菜单,让用户能够快速访问常用的应用程序。

音量键:音量键位于手机的侧面,用于调节音量。

用户可以通过按下音量键的上下方向来增加或减少音量。

在播放音乐或视频时,音量键还可以用来切换歌曲或视频。

电源键:电源键位于手机的侧面或底部,用于打开或关闭手机。

用户可以通过长按电源键来打开或关闭手机。

还可以通过按下电源键和音量键的组合来截屏。

返回键:返回键位于手机的底部,用于返回上一页或上一层。

当用户打开一个应用程序时,可以通过按下返回键来返回上一层。

此外,返回键还可以用来退出应用程序或返回到主屏幕。

除了这些基本的功能键之外,华为手机还具有一些其他的功能键,如指纹识别、虚拟导航键、触控按键等。

指纹识别功能键位于手机的背面或前面,用户可以通过按下指纹识别键来解锁手机或进行支付。

虚拟导航键是一个从屏幕底部弹出的导航栏,用户可以通过触摸虚拟导航键来进行多任务切换和返回上一页。

触控按键是一种隐藏在屏幕下方的物理按键,用户可以通过按下触控按键来操作手机。

总之,华为手机的功能键可以使用户更方便地操作手机。

无论是返回主屏幕、调节音量、打开或关闭手机,还是进行指纹识别或截屏等操作,功能键都能提供便利和快捷的操作方式,让用户能够更好地享受手机带来的便利和乐趣。

09 案例九 一键多功能按键识别技术

09 案例九  一键多功能按键识别技术

一键多功能按键识别技术1.实验任务如图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.电路原理图图13.系统板上硬件连线(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.程序框图如图2所示。

图26.汇编源程序 ID EQU 30H SP1 BIT P3.7 L1 BIT P1.0 L2 BIT P1.1 L3 BITP1.2 L4 BIT P1.3 ORG 0MOV ID,#00HSTART: JB K1,REL LCALL DELAY10MS JB K1,REL INC ID MOV A,IDCJNE A,#04,REL MOV ID,#00H REL: JNB K1,$ MOV A,IDCJNE A,#00H,IS0 CPL L1LCALL DELAY SJMP STARTIS0: CJNE A,#01H,IS1 CPL L2LCALL DELAY SJMP STARTIS1: CJNE A,#02H,IS2 CPL L3LCALL DELAY SJMP STARTIS2: CJNE A,#03H,IS3 CPL L4LCALL DELAY SJMP STARTIS3: LJMP STARTDELAY10MS: MOV R6,#20 LOOP1: MOV R7,#248 DJNZ R7,$DJNZ R6,LOOP1 RETDELAY: MOV R5,#20LOOP2: LCALL DELAY10MS DJNZ R5,LOOP2 RET END7. C语言源程序#include <AT89X51.H> 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; } } }。

单片机应用技术项目教程教案全套教案.doc

3.演示P0口外接上 拉电阻的技能训练
3.完成P0口外接 上拉电阻的技能 训练
2
(开关 控制
LED循
环点 亮)
教学内容:
用P3.0作输入接开关SW, P1口作输出接8个LED,通过开关SW控制LED循环点亮。控制要求: 开关SW打开,LED循环点亮; 开关SW合上,LED停止循环点亮。能力目标:
1.能完成单片机的输入输出电路设 计与制作;
教学内容:
使用STC89C52单片机,P1口 引脚接8个LED的阴极,通过程序 按一定的规律向P1口的引脚输出 低电平和高电平,控制八只发光二 极管循环点亮。
能力目标:
1.能完成单片机的输入输出电路设 计与制作;
2.能应用C语言程序完成单片机输 入输出控制,实现对LED循环点亮 控制的设计、运行及调试。
2.具有决策能力, 能记录、收集、处 理、保存各类专业 技术的信息资料。
能 力 训 练 任 务
任务一:点亮一个LED
使用STC89C52单片机,P1.0引脚接发光二极管(LED)的阴极,通过C语言程序控制,从P1.0引脚输出低电平,使发光二极管点亮; 任务二:LED闪烁控制
P1.0引脚接发光二极管(LED)的阴极,通过程序控制,使P1.0引脚交 替输出高电平和低电平,使发光二极管闪烁。
任务二:多个数码管动态扫描显示
显示器由6个共阴极LED数码管构成,使用STC89C52单片机,P0口输出 显示段码,经由一片74LS245驱动输出给LED数码管,P1口输出位码(片选) 给LED数码管。通过动态扫描程序使6个数码管显示“123456”。
任务三:0-99计数显示
利用STC89C52单片机来制作一个0〜99计数器。要求使用一个手动计数 按钮,实现0〜99的计数,并且通过两个共阴数码管显示计数结果,数码管 显示采用静态显示方式。

速记键盘的原理

速记键盘的原理速记键盘是一种通过按键方式输入文字的设备,其原理是基于电子技术和计算机技术。

通过按下不同的按键,键盘会将对应的字符或指令发送给计算机或其他设备进行处理和显示。

速记键盘的原理主要包括按键传感、扫描编码和输入处理三个方面。

首先,按键传感是指通过按键的机械结构和电子传感器来感知按键动作,并将其转化为电信号。

当用户按下某个按键时,按键传感器会检测到按键的压力,并产生对应的电信号。

接下来,扫描编码是指将按键传感器产生的电信号进行扫描和编码。

当按键被按下时,电信号会被扫描电路检测到,并进行编码处理。

编码可以采用不同的方式,常见的包括行列扫描编码和矩阵扫描编码。

通过编码,系统可以确定用户按下的具体按键。

输入处理是指将扫描编码后的按键信息进行处理和转化为计算机可以识别的字符或指令。

输入处理可以通过驱动程序或操作系统来实现。

当用户按下某个按键时,系统会接收到相应的按键信息,并将其转化为对应的字符或指令,然后将其传输给计算机或其他设备进行处理和显示。

除了上述基本原理,速记键盘还可以具备一些附加功能,如多媒体控制、快捷键、宏命令等。

这些功能可以通过额外的电路和软件来实现。

多媒体控制功能可以让用户方便地控制音量、播放、暂停等多媒体操作;快捷键功能可以让用户通过按下特定的组合键来实现特定的操作;宏命令功能可以让用户录制一系列按键操作,并通过按下特定的按键来自动执行这些操作。

总的来说,速记键盘是一种通过按键方式输入文字的设备,其原理是基于电子技术和计算机技术。

通过按键传感、扫描编码和输入处理三个方面的工作,速记键盘可以将用户按下的按键转化为计算机可以识别的字符或指令,并实现一些附加功能。

速记键盘的应用广泛,可以在计算机、手机、平板电脑等设备上使用,极大地方便了用户的文字输入和操作。

单片机按键识别篇---单击---双击----长按

单⽚机按键识别篇---单击---双击----长按 最近做⼀任务需要使⽤⼀个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复⽤情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,⼜上⽹看了些例程,算是对于按键的识别有点⼩⼩的了解,感觉这个功能挺实⽤,在此做个随笔。

⼀、思路 1.识别长按操作思路:我们使⽤系统定时器定时,然后让系统每过⼀段时间去扫描按键I/O⼝状态,当扫描到按键按下I/O⼝状态超过设定长按时间的阀值,就判定这次按键操作为“长按”操作; 2.识别单击操作思路:当系统扫描按键按下的I/O⼝时间⼩于我们设定的长按阀值,这时就可能出现两种情况,情况1.可能是单击;情况2.可能是双击;⾸先我们来说情况1,单击操作,这时我们可以检测按键按下后,按键弹起的时间到下次按键按下的时间间隔,当按键按下弹起到下次按键按下的时间超过某个值,则我们判定这次操作为“单击”操作; 3.识别双击操作思路:上⾯刚说的情况1,这次来说情况2,:双击操作,当我们检测按键按弹起后在⼀定时间阀值内,⼜检测到按键I/O⼝有电平变化,则我们判断这次操作为“双击”操作⼆、程序部分unsigned char scan_key(){/*值key_return如下:1---------单击2---------双击3---------长按*/static unsigned char key_state=0; //按键状态static unsigned char state=0;static unsigned char time,time1,time2;static unsigned char key_up_flag=0; //按键弹起标志位static unsigned char key_return;if(Key==0) //按键按下消抖{delay(50);if(Key==0){key_state=0;}}else{delay(50); //按键松开消抖if(Key==1){key_state=1;key_up_flag=0;}}if((state==0)&&(key_state==0)&&(key_up_flag==0)) //这⾥主要防⽌,按键在识别长按后,⼜会执⾏⼀遍单击操作{state=1;time=key_time; //记录按键按下的时间为多少,做标记}if(state==1){time1=key_time;time2=time1-time; //计算按键按下时长if(time2>50) //长按判断{state=2;}if(key_state==1) //按键弹起{state=3;time=key_time; //标志什么时间按键弹起的}}if(state==2) //长按{state=0; //重置状态key_up_flag=1;key_return=3;}if((state==3)&&(key_up_flag==0)){time1=key_time;time2=time1-time; //计算按键弹起后时间if(time2>6) //判断按键弹起后的时间,超过300ms,则说明为单击 {state=0;key_return=1;}else if(key_state==0) //按键弹起后,300ms内⼜有按键按下{state=4;}}if(state==4){if(key_state==1) //按键弹起{state=0;key_return=2;}}return key_return;}void timer0() interrupt 1//定时器T0中断函数⼊⼝{TH0=0X9E; //初值重载TL0=0X57; //定时50ms=50000us; 50000/2=25000key_time++; //50MS++}。

独立按键识别-单片机原理-实验报告

宁德师范学院计算机系
实验报告
(2014—2015学年第2学期)
课程名称单片机原理
实验名称独立按键识别
专业计算机科学与技术(软工)年级2012级
学号B2012103145 姓名冯武
指导教师杨烈君
实验日期2015.5.27
实验步骤、实验结果及分析:
1 实验步骤:
1、使用
Proteus ISIS 7 Professional应用程序,建立一个.DSN文件
2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51、CAP、CAP-ELEC、CRYSTAL、RESPACK-8。

3、构建仿真电路
图1 按键识别1、2
图2 按键识别3
图3按一下暂停
图4归零
图5时钟调整
电路图
注:1、报告内的项目或设置,可根据实际情况加以补充和调整
2、教师批改学生实验报告应在学生提交实验报告10日内。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章实验及实践课题(9) 一键多功能按键识别技术
实验任务
如图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.电路原理图
图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.程序框图
图4.9.2
6.汇编源程序
ID EQU 30H ; EQU ——标号赋值伪指令
SP1 BIT P3.7 ;??不知定义这干嘛,后面又没用到….
L1 BIT P1.0
L2 BIT P1.1
L3 BIT P1.2
L4 BIT P1.3
ORG 0 ; ORG ——地址定义伪指令
MOV ID,#00H
START: JB K1,REL ;直接寻址位为1转移
LCALL DELAY10MS
JB K1,REL
INC ID
MOV A,ID
CJNE A,#04,REL ;累加器A与立即数data比较不相等时转rel
MOV ID,#00H
REL: JNB K1,$ ;直接寻址为0转移
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 ;SJMP---相对短转移
IS3: LJMP START ;LJMP -- 2KB范围内长转移
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 <A T89X51.H>
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;
}
}
}。

相关文档
最新文档