基于单片机的快速按键识别方法
单片机独立按键识别实验报告

桂林电子科技大学
实验报告
2016-2017 学年第一学期
开课单位海洋信息工程学院
适用年级、专业 14级机械设计制造及其自动化
课程名称《单片微型计算机与接口技术-课内实验》
主讲教师周旋
课程序号 BS1615000_03
课程代码 BS1615000 实验名称《独立按键识别》
学号 1416010516 - 17 姓名林亦鹏卢炳荣
独立按键识别实验报告
电路采用无源蜂鸣器,从P1.5口形成脉冲来驱动。
因为单片机开机初始化瞬间,其I/O口为高电平,会有误响动作。
单片机的独立键盘使用的是P1口。
当有键按下时,P1口相应位为低电平。
、查找资料说明按键抖动的原因。
、延时程序是怎么实现延时的?
定义蜂鸣器的连接端口--//。
基于单片机的快速按键识别方法

基于单片机的快速按键识别方法基于单片机的快速按键识别方法快速按键识别技术是信息处理方面的一个重要领域,应用于各种设备与系统。
在现代电子产品中,按键控制是常用的操作方式之一。
而基于单片机的快速按键识别方法,是目前较为常见的实现方式之一。
一、快速按键识别原理快速按键识别是通过按键接通时,产生的电信号来判断你所按的按键类型及次数,进而执行对应的操作。
单片机通过外部中断或定时器来进行按键事件的处理和识别,实现快速的数据处理与反馈。
二、快速按键识别系统设计1.硬件设计硬件设计主要包括单片机、键盘、蜂鸣器和LED等模块。
其中,单片机为整个系统的核心部件,键盘是输入信号的来源,蜂鸣器是输出信号的反馈,LED则为系统的指示灯。
2.软件设计软件设计则需要通过编程实现按键事件的处理、识别及反馈,其中主要包括定时器、外部中断、键盘扫描和矩阵按键扫描等方式。
三、快速按键识别方法1.定时器扫描法通过定时器来设定扫描周期,通过中断来响应按下事件,实现按键的检测。
相比其他方法,定时器扫描法的扫描速度较快,适用于对响应速度有要求的场合。
2.(硬件)按键编码法每个按键使用一个编码计数器的,通过单片机译码器来解码,实现按键的响应。
这种方法根据不同的按键引脚电平来区分每个按键,适合于按键比较多的场合。
3.矩阵按键扫描法矩阵扫描是常用的键盘扫描方法,遵循矩阵思想,通过行列交叉检测来检测按键的按下,比较简单可靠,适合于按键数量较多的场合。
四、总结基于单片机的快速按键识别方法应用广泛,可以有效提高按键的响应速度和灵敏度,实现更加智能化的操作。
实现这种技术需要考虑系统的硬件和软件设计,但是相比其他识别方式,它更加高效和快速,更容易向各个方向进行扩展。
基于单片机的快速按键识别方法

基于单片机的快速按键识别方法
刘正翔
【期刊名称】《数字技术与应用》
【年(卷),期】2012(000)008
【摘要】在使用单片机实现的智能控制系统中,快速、可靠的按键识别控制非常关键,一定程度上决定了整个系统的高效运行。
本文在分析传统的按键扫描或识别方
法的基础上,对比各种方法的优缺点,重点讨论一种高效的按键识别方法,并给出该方法对应的程序设计思路,它可快速识别对按键的一次响应,解决多次冗余响应的缺陷。
【总页数】2页(P175-175,177)
【作者】刘正翔
【作者单位】福州职业技术学院,福建福州350108
【正文语种】中文
【中图分类】TP368.12
【相关文献】
1.基于有限状态机的STM32系统按键识别方法 [J], 唐飞;查长礼
2.基于单片机的快速按键识别方法 [J], 刘正翔
3.基于多通道Gabor滤波的手机按键识别方法 [J], 陈志龙;郭太良;姚剑敏;林志贤;徐胜
4.基于状态机的单片机按键短按长按功能的实现 [J], 吴允强;吴由松;
5.基于单片机技术的按键扫描电路分析 [J], 周正贵
因版权原因,仅展示原文概要,查看原文内容请购买。
一键多功能按键识别技术

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;}}。
基于单片机的快速按键识别方法

基于单片机的快速按键识别方法摘要:在使用单片机实现的智能控制系统中,快速、可靠的按键识别控制非常关键,一定程度上决定了整个系统的高效运行。
本文在分析传统的按键扫描或识别方法的基础上,对比各种方法的优缺点,重点讨论一种高效的按键识别方法,并给出该方法对应的程序设计思路,它可快速识别对按键的一次响应,解决多次冗余响应的缺陷。
关键词:单片机按键识别一次响应中图分类号:tp368.12 文献标识码:a 文章编号:1007-9416(2012)08-0175-021、引言在以单片机为核心控制的应用系统中,键盘按键能实现向单片机输入数据、传送命令等功能,是单片机应用系统中人工干预单片机的主要手段。
而单片机对按键闭合与否的判断,主要是通过其引脚上的电压高低进行的。
本文以51单片机为例说明,所述键盘按键的硬件电路设计也非常简单——轻触开关的一端接地,另一端连接单片机引脚,该引脚同时接10k上拉电阻[1]。
很明显,单片机引脚呈现高电平表示按键开关断开;反之,引脚电压呈现低电平表示按键开关闭合。
因此,对单片机的按键识别只要通过对其引脚电平的高低状态的检测,即可确认按键按下与否[2]。
众所周知,按键为机械弹性开关,加之按键按下或抬起瞬间均会产生抖动现象,因此消除按键抖动也是整个系统的关键。
为更突出本文的讨论重点,这里不再重点讨论按键去抖的方法。
2、传统按键识别方法2.1 简单的按键识别该按键识别方法虽然简单,但当按下按键的瞬间,却可能让系统多次循环处理同一按键事件,造成cpu资源的浪费。
以下为该方法的程序设计思路,下述中的“按键确实按下”表示延迟10ms后,按键仍处于按下状态。
(1)初始化按键;(2)if(按下按键){延迟10ms去抖;if(按键确实按下){事件处理,退出}}else {未按按键,退出}单片机程序可能是一个循环执行的过程,当按键按下闭合,程序进入按键事件,执行完该事件,若按键仍未被抬起,则程序循环又再一次进入同样的按键事件执行。
单片机按键识别篇---单击---双击----长按

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

任务2
多路按键状态指示的设计
• B) 反转法: 1)行输入、列输出,将列输出端全置为0, 通过接口读取行线电平,判断行的位置 2)列输入、行输出,将行输出端全置为0, 通过接口读取列线电平,判断列的位置 综合两步获取按键号。
任务2
多路按键状态指示的设计
• 3.矩阵式键盘的软件设计 • 无论采用哪种方式,都要编制相应的键盘扫描程 序。在键盘扫描程序中一般要完成以下几个功能: • (1)判断键盘上有无按键按下; • (2)去键的机械抖动影响; • (3)求所按键的键号; • (4)转向键处理程序。
任务2
多路按键状态指示的设计
◇ 知识链接
• 一、矩阵式键盘 • 1.结构和工作原理 • 当输入部分有多个按键时,若仍然采用独立键盘, 必然会占用大量的I/O口,采用矩阵键盘是一种比 较节省资源的方法。矩阵式键盘又称行列式键盘, 往往用于按键数量较多的场合。矩阵式键盘的按 键设置在行与列的交点上。
任务3
任务2
单键控制LED的设计
软件消抖流程图
任务2
单键控制LED的设计
1.提出任务 • 用单键(即独立键盘中的按键)实现对LED进行控制, 每按一次按键时,LED 方式变化一次,用以表示按键控 制的结果。
2.任务分析 • (1)硬件电路设计 • 以8051单片机作为控制电路,按键连接至单片机的P1.4 引脚,另一端接地,P2.0口外接1个采用共阳极连接方式 的发光二极管(LED)和 1个限流电阻,硬件电路原理 图所示。
main() { while(1) { key=keyscan( ); if(key!=16) //显示二进制键 值 P2=~key; else P2=0xff; //无按键不显示
} }
基于51单片机的按键识别实验内容设计

基于51单片机的按键识别实验内容设计作者:曹晓龙来源:《课程教育研究》2019年第19期【摘要】讨论了一种用于单片机实验教学中有关矩阵式按键识别实验内容的设计。
通过设置从简单到复杂的按键识别内容,加深了学生对这一技术的理解。
【关键词】单片机; 按键识别; 实验教学【中图分类号】G42 【文献标识码】A 【文章编号】2095-3089(2019)19-0223-01单片机的应用早已渗透到了我们社会生产、生活的方方面面。
例如在航海[1]、医疗[2]、智能家居[3]等方面都有其应用。
因此,了解单片机的原理并能掌握单片机系统的设计、开发一直是电子信息类及其相关专业学生学习的终极目标[4]。
一、实验内容的现状单片机是一门实践性很强的课程。
其主要内容是在了解单片机主要构成的基础上,能够结合其他外围电路构建控制系统。
为了加强学生对单片机设计技術的掌握,实验环节在整个教学中占据了一定的比重。
实验主要分为验证性及设计性两种类型。
验证性有具体的电路及程序,无需学生自行设计。
而设计性需要学生在理解所学的内容基础上,设计电路并写出驱动程序。
验证性实验的设置是否得当,必将对学生的理解以及后期的设计产生很大影响。
为此本文以单片机中“按键识别”的实验内容设计为基础,讨论一种可加深学生理解并掌握其实现原理的实验内容设计。
二、按键识别当前的实验内容单片机的按键识别原理实验的主要内容是让学生了解单片机与4×4矩阵式按键的电路原理图以及程序设计的思想。
大致需要学生了解的信息是:1)4×4的矩阵按键通过单片机的某个并口接入,并口的四位为一组,分别接入矩阵按键中的行和列。
2)为了能够识别按下的键,依次从第一行开始为低电平,检测在这一行上是否存在某一列也为低电平,依行数与列数即可确定被按下的键。
3)按键识别的消除抖动及键释放问题。
实验中按键数量多,电路相对复杂,而用于识别的程序代码也过长,对初次接触单片机及汇编语言的学生而言,在理解整个过程及原理上存在一定的困难。
一键多功能按键识别技术

一键多功能按键识别技术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;}}}。
单片机一键多功能按键识别设计

安徽电子信息职业技术学院《单片机应用技术》课程设计报告书题目:一键多功能按键识别设计姓名:xxx专业:电子信息工程技术班级:电信097学号:090301704设计成绩:指导教师:李炎设计完成日期2010年12月26日前言单片机的应用介绍单片机具有体积小、可靠性高、功能强、灵活方便等许多优点,广泛应用于国民经济的各个领域。
智能仪器的应用单片机用于各种仪器仪表,是仪器仪表智能化,可以提高测量的自动化程度和精度;简化仪器仪表的硬件结构,减小体积,提高其性价比。
例如:温度智能控制仪表、医用仪表、数字示波器等。
通信设备的应用单片机与通信技术相结合促使通信设备的智能控制水平大大提高,广泛应用于通信的各个领域。
例如:调制解调器、传真机、复印机、打印机、移动电话、固定电话机等。
(3)家用电器的应用传统的家电配上单片机以后,提高了智能化程度,增加了功能,倍受人们的喜爱;单片机使人类生活更加方便、舒适、丰富多彩。
例如:洗衣机、电冰箱、电子玩具、收录机、微波炉、电视机、录像机、音响设备、程控玩具、游戏机等。
工业控制的应用机电一体化是机械工业发展的方向。
机电一体化产品是集机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。
单片机广泛用于导弹的导航装置、飞机上各种仪表的控制、计算机的网络通信与数据传输、机器人、工业自动化过程的实时控制和数据处理。
在比较复杂的系统中,常采用分布式多机系统。
多机系统一般由若干功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系。
协调工作。
单片机的高可靠性和强抗干扰能力,使它可以置于恶劣课程设计的目的和意义1、目的:(1)掌握单片机中有关指令的使用方法。
(2)掌握循环程序的设计方法。
(3)掌握子程序的应用方法。
(4)掌握延时时间的计算、应用。
课题设计意义计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。
由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。
基于MCS-51单片机的独立按键和矩阵按键检测实验

实验三基于MCS-51单片机的独立按键和矩阵按键检测实验一、支撑课程目标目标1:掌握微机和单片机的基本原理、编程技术、中断技术、系统扩展、定时器、串行接口和其他输入/输出接口技术,并且了解典型的单片机应用系统的设计思想和实现方法。
目标2:初步具备自行拟定实验步骤、检查和故障排除、分析和综合实验结果以及撰写实验报告的能力。
目标4:掌握MCS-51单片机/STM32F103单片机系统仿真工具和仿真流程,了解常用实验仪器、设备的基本工作原理,了解其正确使用方法,具备利用电子仪器设备和专业仿真软件对复杂工程问题进行分析和设计的能力。
二、实验类型:验证型( )、设计型(√)、研究创新型()三、预期学生学习的成果1、具有典型按键检测电路原理及消除抖动的必要性的认知。
2、理解程序设计消除抖动的实现过程。
3、掌握独立按键的程序查询检测编程实现。
4、掌握独立按键的中断检测编程实现。
5、理解矩阵键盘的行列扫描检测原理,具有矩阵键盘软硬件设计综合能力。
四、实验原理1、典型按键检测电路典型的按键检测电路具备检测按键的条件:检测引脚处在键按下前和后,要有电平变化,否则按键无法检测。
电路组成包括电源、上拉电阻、按键、接地组成,按下前,检测引脚高电平,按下后检测引脚低电平。
电阻防止按下电源短路,如图1(a)。
GND(a)(b)图 1 按键典型电路及对应检测电压2、按键抖动及消除如图1(b),理想条件下,按键未按下,在检测I/O端口是高电平,按下以后,检测I/O端口是低电平,手松后,按键弹起,检测I/O端口是高电平。
整个按键过程出现高电平到低电平又到高电平,有下降沿,也有上升沿。
实际过程中,由于人手的抖动,检测端电压如图1(c),检测电压出现“毛刺”抖动,假设单片机检测高电平阈值为VH,低电平阈值为VL,一次按键就会出现多次高电平到低电平变化,存在按键误检测可能。
常用消除办法之一:一旦检测到低电平,延迟u毫秒,u选择大于20,再次判断检测端是否是低电平,如果是,就判定为1次按键。
独立按键识别-单片机原理-实验报告

师学院计算机系
实验报告
(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日。
单片机一键多功能按键识别技术

单片机一键多功能按键识别技术在一些单片机系统中,有时候需要采用一些一键多功能的技术,这里我给大家介绍一下。
开关SP1 接在P3.7/RD 管脚上,在AT89S51 单片机的P1 端口接有四个发光二极管,上电的时候,L1 接在P1.0 管脚上的发光二极管在闪烁,当每一次按下开关SP1 的时候,L2 接在P1.1 管脚上的发光二极管在闪烁,再按下开关SP1 的时候,L3 接在P1.2 管脚上的发光二极管在闪烁,再按下开关SP1 的时候,L4 接在P1.3 管脚上的发光二极管在闪烁,再按下开关SP1 的时候,又轮到L1 在闪烁了,如此轮流下去。
这样就实现了具有一键多功能的按键识别技术。
简单吧单片机系统板上硬件连线把“单片机系统”区域中的P3.7/RD 端口连接到“独立式键盘”区域中的SP1 端口上把“单片机系统”区域中的P1.0-P1.4 端口用8 芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0 连接到L1,P1.1 连接到L2,P1.2 连接到L3,P1.3 连接到L4 上。
具体的电路图在单片机论坛51hei51区上有。
欢迎发表您的高见。
本文为郭子喻先生原创作品希望大家支持。
汇编源程序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。
一种实用的单片机按键检测方式

一种实用的单片机按键检测方式《手把手教你学51单片机》第八课讲解按键相关内容的时候,介绍了一种状态检测扫描按键的办法,既可以检测按键,又可以有效消抖。
但是部分同学以前没有接触过类似的思想和方式,所以可能接受起来有点难度,这里我再详细给讲解分析一下,如果教程第八课你已经彻底明白,那么这里可以不用再学习了,如果还模模糊糊,可以再巩固一下。
1、独立按键常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如下图所示。
4条输入KeyIn1、KeyIn2、KeyIn3、KeyIn4接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就和GND等电位,是个低电平。
当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。
我们就可以读取通过KeyIn1这个IO口的高低电平来判断是否有按键按下,独立按键的原理还是很简单的。
2、矩阵按键在某一个系统设计中,如果需要使用很多的按键时,做成独立按键会大量占用IO口,因此我们引入了矩阵按键的设计方式,如下图所示,用了8个IO口实现了16个按键检测的电路。
上图,一共有4组按键,我们只看其中一组,如下图所示。
大家认真看一下,如果KeyOut1输出一个低电平,KeyOut1就相当于是GND,是否相当于4个独立按键呢。
当然这时候KeyOut2、KeyOut3、KeyOut4都必须输出高电平,它们都输出高电平才能保证与它们相连的三路按键不会对这一路产生干扰,大家可以对照两张原理图分析一下。
同理,可以将KeyOut1,KeyOut3,KeyOut4都拉高,把KeyOut2拉低,来读取KEY5到KEY8的值。
关于按键扫描的具体程序部分,大家可以去参考教程,我这里只把一段摘出来给大家讲一下,部分同学对其中一条语句有所疑问。
基于单片机技术的按键扫描电路分析

四、实验验证
为了验证本次演示所介绍的基于单片机技术的按键扫描电路分析的正确性, 我们设计了一个简单的实验:通过单片机控制一个4×4的按键矩阵,实现8个按 键的扫描和识别。实验结果表明,该方法可以有效地实现对多个按键的扫描和识 别。
五、总结
本次演示详细介绍了基于单片机技术的按键扫描电路的基本概念、电路组成、 电路原理、电路板设计以及软件设计等方面的内容。通过实验验证,该方法可以 有效地实现对多个按键的扫描和识别。未来可以进一步研究如何提高按键扫描电 路的性能和稳定性,以及在实际应用中的优化问题。
3、输出控制:经过按键处理后,单片机根据预设的程序对外部设备进行控 制。例如,当按下某个按键时,单片机可以控制一个LED灯的亮灭。
二、单片机按键模块的设计方法
下面以8051单片机为例,介绍一种常见的单片机按键模块设计方法。
1、硬件设计:8051单片机具有 4个并行输入输出口(P0、P1、 P2、P3)
(1)按键抖动:按键抖动是由于按键过程中电压波动引起的现象。为了消 除按键抖动,可以在程序中加入去抖动算法,例如延时检测、两次确认等。
(2)连键:连键是指多个按键同时按下或相互连通的现象。为了避免连键 现象,可以在程序设计时增加防连键处理,例如为每个按键设置唯一的标识符, 同时按下多个按键时只识别其中的一个。
参考内容
在现代电子设备中,按键模块是一种常见的人机交互方式。通过按键,用户 可以向电子设备发送指令,控制设备的运行。单片机作为嵌入式系统的重要分支, 具有体积小、价格低、可靠性高等优点,因此在按键模块设计中具有广泛的应用。
一、单片机按键模块的基本原理
单片机按键模块的工作原理主要包括三个步骤:按键检测、按键处理和输出 控制。
if(KEY != key1) //如果检测到按键状态发生变化 key1 = KEY; //更新输出位状态
单片机原理(按键识别 )实验报告

教育资料
.
while (1) {
if(key==0) {
delay(1000); if(key==0) {
led=~led; while(key==0); }
} } } (2)按键识别 ( 按下灭,再按闪) #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit led=P2^6; sbit key=P2^7;
.
switch(j) { case 0 : led=0;break; case 1 : led=~led;delay(100);break; default:break; }
}
}
(3)按键识别 ( 按下数码管数值加 1) #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; uchar DispBuf[8]; sbit led=P2^6;
教育资料
.
if(hour>=24) {
hour=0; }
}
void main() {
uint i=2; while (1) {
if(key==0) {
delay(1000); if(key==0) {
i++; while(key==0); i=i%3;
教育资料
.
} } switch(i)
单片机一键多功能按键识别设计

安徽电子信息职业技术学院《单片机应用技术》课程设计报告书题目:一键多功能按键识别设计姓名: xxx专业:电子信息工程技术班级:电信097学号: 090301704设计成绩:指导教师:李炎设计完成日期 2010年12月26日前言单片机的应用介绍单片机具有体积小、可靠性高、功能强、灵活方便等许多优点,广泛应用于国民经济的各个领域。
智能仪器的应用单片机用于各种仪器仪表,是仪器仪表智能化,可以提高测量的自动化程度和精度;简化仪器仪表的硬件结构,减小体积,提高其性价比。
例如:温度智能控制仪表、医用仪表、数字示波器等。
通信设备的应用单片机与通信技术相结合促使通信设备的智能控制水平大大提高,广泛应用于通信的各个领域。
例如:调制解调器、传真机、复印机、打印机、移动电话、固定电话机等。
(3)家用电器的应用传统的家电配上单片机以后,提高了智能化程度,增加了功能,倍受人们的喜爱;单片机使人类生活更加方便、舒适、丰富多彩。
例如:洗衣机、电冰箱、电子玩具、收录机、微波炉、电视机、录像机、音响设备、程控玩具、游戏机等。
工业控制的应用机电一体化是机械工业发展的方向。
机电一体化产品是集机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。
单片机广泛用于导弹的导航装置、飞机上各种仪表的控制、计算机的网络通信与数据传输、机器人、工业自动化过程的实时控制和数据处理。
在比较复杂的系统中,常采用分布式多机系统。
多机系统一般由若干功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系。
协调工作。
单片机的高可靠性和强抗干扰能力,使它可以置于恶劣课程设计的目的和意义1、目的:(1)掌握单片机中有关指令的使用方法。
(2)掌握循环程序的设计方法。
(3)掌握子程序的应用方法。
(4)掌握延时时间的计算、应用。
课题设计意义计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。
由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的快速按键识别方法
摘要:在使用单片机实现的智能控制系统中,快速、可靠的按键识别控制非常关键,一定程度上决定了整个系统的高效运行。
本文在分析传统的按键扫描或识别方法的基础上,对比各种方法的优缺点,重点讨论一种高效的按键识别方法,并给出该方法对应的程序设计思路,它可快速识别对按键的一次响应,解决多次冗余响应的缺陷。
关键词:单片机按键识别一次响应
中图分类号:tp368.12 文献标识码:a 文章编号:1007-9416(2012)08-0175-02
1、引言
在以单片机为核心控制的应用系统中,键盘按键能实现向单片机输入数据、传送命令等功能,是单片机应用系统中人工干预单片机的主要手段。
而单片机对按键闭合与否的判断,主要是通过其引脚上的电压高低进行的。
本文以51单片机为例说明,所述键盘按键的硬件电路设计也非常简单——轻触开关的一端接地,另一端连接单片机引脚,该引脚同时接10k上拉电阻[1]。
很明显,单片机引脚呈现高电平表示按键开关断开;反之,引脚电压呈现低电平表示按键开关闭合。
因此,对单片机的按键识别只要通过对其引脚电平的高低状态的检测,即可确认按键按下与否[2]。
众所周知,按键为机械弹性开关,加之按键按下或抬起瞬间均会
产生抖动现象,因此消除按键抖动也是整个系统的关键。
为更突出本文的讨论重点,这里不再重点讨论按键去抖的方法。
2、传统按键识别方法
2.1 简单的按键识别
该按键识别方法虽然简单,但当按下按键的瞬间,却可能让系统多次循环处理同一按键事件,造成cpu资源的浪费。
以下为该方法的程序设计思路,下述中的“按键确实按下”表示延迟10ms后,按键仍处于按下状态。
(1)初始化按键;
(2)if(按下按键){
延迟10ms去抖;
if(按键确实按下){事件处理,退出}
}else {未按按键,退出}
单片机程序可能是一个循环执行的过程,当按键按下闭合,程序进入按键事件,执行完该事件,若按键仍未被抬起,则程序循环又再一次进入同样的按键事件执行。
事实上,如果采用12mhz外部晶振,单片机处理器执行一个指令通常只要2个机器周期的时间,也即4us。
如此短暂的时间,当我们松开按键时,程序可能早已经循环执行很多次按键事件。
因此该按键识别的程序思路并不合适。
为了不重复执行同一个按键事件,可改进为如下所述的按键识别的方法:
(1)初始化按键;
(2)if(按下按键){
延迟10ms去抖;
if(按键确实按下){事件处理,等待按键释放,退出}
}else {未按按键,退出}
此方法虽然可识别按键释放,即实现每一次按键,系统只会调用一次按键处理事件。
但若按键一直不释放,则程序只可在此原地踏步等待,浪费系统执行时间,cpu每个时钟周期均做无用功。
解决方法是,在识别到第一次按键,并执行完按键事件后,将忽略后续的按键状态,从而实现对按键的一次响应,解决多次冗余响应的缺陷。
2.2 带标志的按键识别
为了解决多次冗余响应的缺陷,可设置按键按下与释放两种状态的标志,在程序执行过程中,检测标志位内容,识别按键的状态。
根据该思路,可在初始化按键时,设置按键按下与否的标志位,并赋予“0”与“1”两种状态。
标志状态为“0”表示按键无效,为“1”表示按键被按下。
以下为带标志位的按键识别的程序设计思路[2],这里假定标志位为key_mark,初始值为0。
(1)初始化按键;
(2)if(按下按键 && !key_mark){
延迟10ms去抖;
key_mark = 1;//将状态“1”赋予标志位。
表示按键已按下
if(按键确实按下){事件处理,退出}
}else if(未按按键){
key_mark = 0,退出}
该方法可行有效,其中标志位key_mark起了至关重要的作用。
只有当按键按下,key_mark=0,且延迟10ms去抖后,程序才会确认是否真的有按键被按下。
此时马上对key_mark=1,使得下一次查询key_mark标志时,得知按键正处于按下状态。
如此,不仅使得按键被按下时可被准确检测到,还可以在按键还没被抬起释放时,不重复响应同一个按键事件。
由于此时标志位key_mark的值被赋值为“1”,因此if(按下按键 && !key_mark)将不再成立,直到按键抬起,才重新赋值key_mark为“0”,实现了每一次按键,系统只会调用一次按键处理事件。
3、快速按键识别方法
对于程序员来说,实现同样功能的程序,简洁、高效对设计非常关键。
本文讨论的快速按键识别方法,尝试使用单片机c语言中的逻辑运算方法,同样快速有效地解决了按键识别的程序设计问题。
该方法在初始化设置后,只需要使用一句异或运算语句,两句赋值语句,即可快速进行按键识别。
下面给出该快速按键识别方法的思路。
先初始化三个标志位:
key_now,key_old,key_change。
其中,key_now表示当前读取到的按键电平;key_old表示之前一次读取到的按键电平;key_change 表示按键被按下后出现的变化情况,即当key_change=0,表示按键处于断开状态,key_change=1,表示按键处于闭合状态。
这三个标志位的初始化值均为“1”。
现在给出该方法的程序设计思路。
(1)初始化按键
(2)key_now = p1.[?内容]。