[整理]一键多功能按键识别.
- 格式:doc
- 大小:47.50 KB
- 文档页数:6
3.1.3 键值分析程序键值分析程序的任务是对键盘的操作做出识别并调用相应的功能程序模块完成预定的任务。
仪器系统键盘中的按键可分为单义键和多义键。
单义键即一键一义,CPU只需要根据键码执行相应的程序,主要适用于功能比较简单的仪器系统。
对于功能比较复杂的仪器系统,如果采用单义键,不仅增加费用,而且面板很难布置,此时宜采用多义键。
多义键即一键具有两个或两个以上的含义,需要进行键语分析,按照规定的键语语法,把由键序组合成的输入序列的含义译出后再执行相应的键盘处理程序。
1、单义键的键值分析程序设计单义键就是根据当前按键的键值,把控制程序转到相应处理程序的入口,而无须知道在此之前的按键情况。
其优点是简明直观,程序处理方便。
图3-12所示为单义键值分析程序流程图。
微处理器周而复始地扫描键盘,当有键按下时,首先判断是命令键还是数字键。
若是数字键,则把按键读数存入缓冲区备用;若为命令键,则根据键值查找键处理入口地址表,以获得按键处理子程序的入口地址,子程序执行完成后继续扫描键盘。
图3-12 单义键键值分析程序流程图2、多义键的键值分析程序设计(1)双义键的键值分析程序设计为了节省命令键的数量,经常采用双功能键,即双义键。
这时可以设置一个模式键,当模式键的键值分析为“0”和“1”时,按键具有不同的两种功能。
双义键键值分析程序流程图如图3-13所示。
图中,模式键用来把控制方向引向不同的键处理入口地址表,以区别按键的两种含义。
(2)多义键的键值分析程序设计在一键多义的情况下,一个完整的命令通常不是由一次按键操作完成,而是需要按两次以上的键才能完成,且这几个键的操作要遵守一定的顺序,称为按键序列。
在组成一个命令的按键序列中,除了取决于以前按了什么键,还取决于当前按了什么键。
因此,多义键的键盘管理程序,首先要判断一个按键序列(而不是一次按键)是否已构成一个合法命令,若已构成合法命令,则执行命令,否则等待新的按键键入。
图3-13 双义键键值分析程序流程图。
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;}}。
AT89S51单片机实验系统的开发与应用高玉萍【摘要】针对传统单片机实验系统依赖于仿真器调试,实验成本高且效率低,不适应现代科技的开发要求的问题,为改善单片机实验系统的性能,采用在系统编程(ISP)的方法,利用AT89S51芯片设计了一种单片机实验系统.实验表明系统结构简单,实用性强,达到了工科类高职生快速掌握单片机的基础知识的预期效果.%Aiming at the traditional experiment systems which depend on simulators, have high price and low efficiency,and do not adapt to the needs of modern scientific and technological development, an experiment system based on AT89S51 single chip was designed with the method of ISP to improve performance of experiment system. Tests show that the system features simple structure and practicality, and achieves ideal results that engineering students in vocational colleges master hasic the knowledge of single chip quickly.【期刊名称】《现代电子技术》【年(卷),期】2011(034)010【总页数】4页(P199-202)【关键词】AT89S51;实验系统;ISP;74LS164【作者】高玉萍【作者单位】阿克苏职业技术学院机电系,新疆阿克苏,843000【正文语种】中文【中图分类】TN911-34;TP311目前单片机应用已渗透到各个领域,单片机技术的发展也因此日新月异。
一键多功能按键识别技术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; } } }。
一键多功能按键识别技术1.实验任务如图所示,开关SP1接在RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此连番下去。
2.电路原理图图3.系统板上硬件连线(1.把“单片机系统”区域中的RD端口连接到“独立式键盘”区域中的SP1端口上;(2.把“单片机系统”区域中的-端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,连接到L1,连接到L2,连接到L3,连接到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.程序框图图6.汇编源程序ID EQU 30HSP1 BIT PL1 BIT PL2 BIT PL3 BIT PL4 BITORG 0MOV ID,#00HSTART: JB K1,REL LCALL 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,IS1 CPL L2LCALL DELAYSJMP STARTIS1: CJNE A,#02H,IS2 CPL L3LCALL DELAYSJMP STARTIS2: CJNE A,#03H,IS3 CPL L4LCALL DELAYSJMP STARTIS3: LJMP START DELAY10MS: MOV R6,#20 LOOP1: MOV R7,#248 DJNZ R7,$DJNZ R6,LOOP1RETDELAY: MOV R5,#20 LOOP2: LCALL DELAY10MS DJNZ R5,LOOP2RETEND7. 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;}}}。
[命令]按键精灵常用功能-详细解说[1]-键盘动作按键精灵常用功能-解说[版本5.0以上]首先-启动按键精灵-看到主程序界面的“小灯泡”增加按钮了吗?点击它...然后-这样就新建了一个脚本,并进入了脚本编辑器界面。
(具体参见Qmacro基础资料/cn/qmacro/)按键精灵常用功能-详细解说[1]-键盘动作-4个功能(1)单个按键的模拟-模拟键盘的单个按键动作,可以是按1下、按住不动、弹起来等3种形式,可以根据自己的需要,设定执行次数。
(2)按键组合的模拟-模拟按键组合,比如ctrl+shift+G之类的,但是不能G+H 这样子哦,那要需要的时候怎么模拟G+H呢?使用(1)功能-按下G,再按下H,就等于G+H了嘛~~~(不同步?哦,计算机的反映速度是很快的!)(3)脚本暂停按任意键继续功能-这里可以设置一个变量,用来表示可能是哪个按键,比如设置了变量key,当key这个变量变动的时候...比如key=49的时候,表示按1就能使脚本继续...那么怎么知道哪个数字对应是哪个按键?请看(4)的功能。
(4)得到按键码-在左边的空白输入一个按键,右边就显示出相应的按键码哦。
有一些特殊的按键码是多少呢?可以去下载个ASCII码表看看。
举例:打开一个记事本,光标停空白处,按1下你设定的快捷键开始执行你设计的脚本... Rem rem只是注释语句,可以做标记或解释用途。
Rem rem这一行,不会有功能,比如:KeyPress 49 10Rem 按1键10次,换行KeyPress 49 10KeyPress 13 1Rem 按下1键不动,2秒后弹起,换行KeyDown 49 1Rem 延时2000毫秒Delay 2000KeyUp 49 1KeyPress 13 1Rem 按shift+1组合键,换行KeyDown 16 1KeyPress 49 1KeyUp 16 1KeyPress 13 1Rem 提示后,等待任意键继续SayExpression "请按任意键继续吧。
电子工程学院课外学分设计报告题目:一键多功能按键识别技术设计2姓名:余轶轩学号:21专业:电子信息工程技术实验室:开放实验室班级:B1312设计时间:年月日——年月日评定成绩:审阅教师:一、前言 (3)二、总体设计 (3)1、设计目的 (3)2、设计任务及要求 (4)三、硬件设计 (4)1、系统组成 (4)2、设计思路 (5)3、系统板上硬件连线 (5)四、软件设计 (5)1、程序流程图 (6)2、汇编源程序 (7)五、用Keil程序调试、Proteus仿真 (8)1、调试结果图 (8)2、仿真结果图 (8)六、结束语 (10)1、心得和体会 (10)2、建议和意见 (10)七、参考文献 (10)一、设计目的1.学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。
2.掌握汇编语言程序设计方法。
3.培养实践技能,提高分析和解决实际问题的能力。
二、课程设计题目:一键多功能按键识别技术三.设计任务及要求1)利用开关控制接在单片机P0口的3个发光二极管。
2)上电的时候,所有发光二极管处于熄灭状态。
一、前言单片机原理及应用课程设计指导书,是针对自动化、电气工程及其自动化等专业的学生学习单片机原理及应用课程,配套开设课程设计而编写的。
作为嵌入式系统低端的单片机已成为电子系统中最普遍的应用手段,已经深入到国民经济与人民生活的各个领域。
近年来,在高校中大力推行的各种电子设计竞赛中,采用单片机系统《单片机原理及应用》解决各类电子技术问题已成为主要方法之一。
课程已经被几乎所有工科院校中自动化、电气、仪器仪表、测控技术、光机电一体化、电子、通信、计算机等类专业列为本科主干专业课程,是培养现代电子技术应用类专业人才的重要技术课程之一。
单片机课程设计是学习单片机理论的重要实践环节。
在单片机实验课程基础上,通过本课程设计的学习,使学生增进对单片机的感性认识,加深对单片机理论方面的理解;使学生掌握单片机的内部功能模块的应用,掌握单片机接口功能和扩展应用,掌握一些特殊器件及常用器件的使用方法,学习编制大型综合程序;使学生了解和掌握单片机应用系统的软硬件设计方法及调试过程。
一键多功能按键识别
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.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
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 <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;
} } }。