单片机按键去抖动程序设计思路doc资料
verilog按键消抖原理

verilog按键消抖原理(原创实用版)目录1.按键消抖的原理2.Verilog 实现按键消抖的方法3.按键消抖的具体设计4.总结正文一、按键消抖的原理按键消抖是指在按键输入过程中,由于机械特性的影响,导致按键在按下或松开的瞬间会产生抖动,即电平从一个状态转换到另一个状态时,会在短时间内出现多次变化。
为了消除这种抖动,需要设计一种按键消抖电路或算法,确保输入信号的稳定性。
二、Verilog 实现按键消抖的方法Verilog 是一种硬件描述语言,可以用来设计和验证数字电路。
在Verilog 中实现按键消抖,主要可以通过计数器和寄存器来完成。
当按键输入发生变化时,计数器清零;当按键输入稳定时,计数器累加到一定值,此时输出稳定信号。
三、按键消抖的具体设计以下是一个基于 Verilog 的按键消抖设计示例:```verilogmodule keyjitter(clk, keyin, keyout);input clk; // 50MHz clock ininput keyin;output keyout;reg [22:0] counthigh;reg [22:0] countlow;reg keyreg;always @(posedge clk) beginif (keyin == 1"b0) begincountlow <= countlow - 1;end else begincountlow <= 23"h000000;endendalways @(posedge clk) beginif (keyin == 1"b1) begincounthigh <= counthigh + 1;end else begincounthigh <= 23"h000000;endendalways @(posedge clk) beginif (counthigh == 23"h250000) beginkeyreg <= 1"b1;end else if (countlow == 23"h250000) beginkeyreg <= 1"b0;end else beginkeyreg <= keyreg;endendendmodule```在这个设计中,我们使用了两个计数器,分别记录按键输入的高电平和低电平。
关于消除按键机械抖动的研究

4结束语
以上给出了几种消除按键机械抖动的方法,它们各有优缺 点,适用于不同情况下的监控控制系统。经实验证明,以上各种 方法对不同要求的系统能较好的实现监控计算机与S7—200 系列PLC通信,对工程实践有较高的参考价值。
参考文献 【1】赖寿宏.微型计算机源自制技术【M】.北京:机械工业出版社,2003. 【2】严盈富.监控组态软件与PLc入门【M】.北京:人民邮电出版社,
【3】李建兴.可编程序控制器应用技术[M】.北京:机械工业出版社,
1999.
【4】徐爱钧.智能化测量控制仪表原理与设计【M】.北京:北京航空航天大 学出版社。2004.
万 方数据
105
30一35ms),若考虑器件的差异和老化等因素。采样的时间应该
在数控系统中,无论采用单片机、微机或PLC,人机交互都 是不可或缺的。在所有交互设备中,按键和按钮是最常用的,但 无论是按键还是按钮,因为都是机械开关结构,由于机械触点 的弹性及电压突跳等原因,在触点闭合和断开的瞬间会出现电 压抖动,抖动的时间长短取决于开关元件的机械特性,一般为 5—10ms。在触点抖动期间,检测按键的通、断状态,可能导致 判断出错,如:按键一次按下或释放被错误地认为是多次操作。
9 Q・
如图为采用移位指令设计法设计的顺序控制系统步进阶 梯程序,采用一个8位移位寄存器(由辅助继电器M10—M17 组成)作为控制元件,移位寄存器中的IN为移位数据输入端, CP为移位脉冲输入端,R为复位端。这三个输入端的输入信号 均为脉冲上升沿有效。对顺序控制系统来说,输入IN的信号必 须是一个单脉冲信号,即移位数据为“1”。起动步1时,IN和 CP同时输入按钮信号xo的脉冲上升沿后,在IN端生成的移 位数据“1'’便移入移位寄存器的M10位,此时该位有输出(即 输出M10的常开触点闭合信号),建立步l程序,并为步2提 该方法比较复杂,如果系统按键输入较多,则因附加电路
51单片机按键电路

51单片机键盘接口电路(含源程序)键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。
一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。
按钮开关的抖动问题组成键盘的按钮有触点式和非触点式两种,单片机中应用的一般是由机械触点组成的。
在下图中,当开<键盘结构图>图1图2关S未被按下时,P1。
0输入为高电平,S闭合后,P1。
0输入为低电平。
由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,P1。
0输入端的波形如图2所示。
这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。
前面我们讲到中断时曾有个问题,就是说按钮有时灵,有时不灵,其实就是这个原因,你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。
为使CPU能正确地读出P1口的状态,对每一次按钮只作一次响应,就必须考虑如何去除抖动,常用的去抖动的办法有两种:硬件办法和软件办法。
单片机中常用软件法,因此,对于硬件办法我们不介绍。
软件法其实很简单,就是在单片机获得P1。
0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。
0口,如果仍为低,说明S1的确按下了,这实际上是避开了按钮按下时的抖动时间。
而在检测到按钮释放后(P1。
0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。
不过一般情况下,我们常常不对按钮释放的后沿进行处理,实践证明,也能满足一定的要求。
当然,实际应用中,对按钮的要求也是千差万别,要根据不一样的需要来编制处理程序,但以上是消除键抖动的原则。
单片机按键原理

单片机按键原理
单片机按键原理是利用按键的机械接触来完成开关动作。
当按下按键时,按键的触点会接通按键两端的电路,形成通路,从而使电流得以流动。
与此同时,可以通过单片机的IO口进行
监测,通过读取IO口的电平状态可以判断按键是否被按下。
在单片机按键电路中,通常需要加入上拉电阻或下拉电阻来确保按键在未被按下时具有一个确定的电平状态。
当按键未被按下时,上拉电阻或下拉电阻会将按键上或下的电平拉高或拉低,并且可以减小电路中的干扰。
当按键被按下时,IO口所连接的引脚的电平状态会发生改变,单片机可以通过检测到引脚电平状态的变化来判断按键被按下的动作。
为了避免按键的抖动问题(由于机械接触而导致的短时间内多次的接通和断开),可以在软件中增加延时或采用其他滤波方法来解决。
通过单片机按键原理,可以实现诸如控制、输入、菜单选择等功能。
在工程实践中,常常需要考虑到按键的稳定性、响应速度、布局等因素,以提高整个系统的可靠性和用户体验。
单片机的按键功能是什么

单片机的按键功能是什么你们知道单片机的每个按键的具体功能吗?下面是店铺收集整理关于单片机的每个按键的具体功能的资料以供大家参考学习,希望大家喜欢。
·单片机的每个按键的具体功能介绍键盘的分类:键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘;而靠软件编程来识别的称为非编码键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘。
也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
本文主要讨论矩阵键盘(独立键盘比较简单可以与此类比),下面是矩阵键盘的电路连接图。
按键的扫描,主要是对每一个按键所编码的识别与确定。
如上图:按键所接口为P2口,置“0”则按键有效。
当P2口检测到值为P2=0x7e时,S1有效。
低四位用来确定行按键,高四行用来确定列按键。
基本的编程思想是:先设定P2口为0xfe,确定第一行按键有效,然后将P2口的值与0xf0按位与(&),然后检测P2口的值是否为0xf0,这样就屏蔽了低四位的电位改变(因为无论之后低四位怎样变化,低四位与0相与总是0)。
然后如果P2口得值不为0xf0时,则证明高四位有电位改变。
则检测此时的P2口得值,就可以确定是哪个按键被按下了。
如按键S1,它编码是P2=0x7e,也就是当P2口检测到值为P2=0x7e时,S1有效。
需要注意的是:按键按下时有一个前后抖动时间,如下图(a)所示。
如果单片机检测到的是抖动部分,则无法按键判断是否有效,所以我们需要加入防抖程序。
注:也可以通过硬件防抖,如上图(b)。
功能:矩阵键盘(按相应的按键,数码管从0~F的显示)单片机:AT89S52#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit DAT=P0^3;sbit CLK=P0^2;uchar temp,h;void delay(uint); //延迟程序void sendbyte(uchar); //数码管显示void keyscan(); //按键扫描uchar code tab[]={0xed,0x09,0xbc,0x9d,0x59,0xd5,0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭void main (void){sendbyte(16); //初始时数码管无显示while(1){keyscan(); //按键扫描}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=100;y>0;y--);}void sendbyte(uchar byte){uchar num,c;num=tab[byte];for(c=0;c<8;c++){CLK=0;DAT=num&0x01;CLK=1;num>>=1; //右移位赋值}}void keyscan(){/*第一行按键的扫描*/P2=0xfe; //确定第一行的按键有效temp=P2; //将其赋给一个变量(处理I/O口时,一般先赋值给一个变量,然后通过处理变量来处理I/O口)temp=temp&0xf0; //用于检测第一行的哪个按键按下while(temp!=0xf0) /*这个部分只要是用来消除按下抖动的*/{delay(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0) //这个地方,已经消除了按下抖动,P2口的值已经确定temp=P2; //将P2口得值赋给变量switch(temp) //这个switch语句,用来确定哪一个按键按下时,数码管的显示值{case 0x7e:h=0;break; //这个break很重要,表示如果有匹配的值,就跳出switch语句,防止程序跳不出来。
51单片机实验指导书

.51系列单片机原理与应用实验华南师范大学物理与工程工程学院微机教研室20010年9月目录实验须知 (2)实验一数字量输入输出实验 (4)实验二交通灯控制实验 (6)实验三定时与中断实验 (8)实验四串行通信实验 (11)实验五串行A/D转换实验 (13)实验六现实人体视觉暂留特性测试实验 (14)实验七实时时钟制作实验 (17)实验八简易电子琴制作实验 (18)实验九 EEPROM应用—数字密码锁 (20)实验十综合实验:教学板自检程序设计 (25)实验十一数据采集—火灾报警装置的软硬件设计 (26)附录一实验教学板 (27)附录二实验用软件使用说明 (28)实验须知一、预习要求1.实验前认真阅读实验指导书的相关内容,明确实验目的和实验任务。
2.实验前应做好预习报告,在报告中,要求画出所设计的实验电路原理图、程序流程图,编写好程序,并对程序加以注释,还要拟订好实验步骤。
二、实验要求1.按实验中心安排的时间到指定实验室上实验课,不要迟到、缺席。
有特殊原因不能在原安排时间来实验时,须提前一天通知实验中心负责教师。
2.认真完成每次实验的各项任务,实验结果要请指导教师检查。
教师对实验内容提问,并对完成者进行记录。
3.爱护设备,保持清洁,不得在实验室内大声喧哗,不要将食物带入实验室,不擅自更换设备。
4.在实验箱(板)通电状态下,不要用手随意触摸电路板上除按键和开关以外的芯片等其它元器件。
,严禁带电操作,即所有接线、改线和拆线操作均应在不带电的状态下进行。
5.实验中若发生异常情况应立即切断电源,并向指导教师报告,检查原因,避免再次发生类似情况。
6.实验完毕,请整理好实验设备后再离开实验室。
三、实验报告要求实验报告必须使用实验报告专用纸,书写要工整、清楚,并在下一次实验时交给指导教师。
实验报告应包括以下内容:1.实验名称、实验人姓名、学号、班级、同组人姓名。
2.实验目的、任务(内容)。
3.各任务程序流程图、自编程序清单,对程序须给出适量注释(例如:变量和某些寄存器的作用,关键程序段的功能等)。
C51中对按键的处理方法
te ky—mak ; / r =1/ 封锁按键 直到按键抬起 E D !L D;/ E E E / D状态蠢反 ; L }
按下 和抬起 瞬间的抖动 . 消除抖 动 晤面桷 的更 太问 而
题 就是解决按键的响应 问题 , 包括按键 的… 次响应 , ~
键多功能等. 下面从两个方面来进行榻应 1 原 理 阐 述 .
常用 的按 键 由于机 械 触 点 的 弹性 作用 , 个 按 一 键 开关 在 闭合 时或 断 开 时 不 会 马 上稳 定 下来 。 而 因
维普资讯
20 0 7年 1 1月
吉林 师范大学学报( 然科学版 自
Junl f i ̄Nom l vrt( aua Si, dt n ora o l Ji r a U i s y N trl c reE io) n ei ec i
N 4 o.
ma () i n
按 键仍 然是 按 下 的则 执 行 whe语 句 , 统 会 一 直 i l 系 查 询按 键状 态 。 只有按 键 抬起才 可 以退 出循 环结 构 ,
从而 可以一次 响应 .
{o( ; fr ; ) { ED=I /初 始 状 态 L D灯 灭 L ;/ E
祆 , 图 2 软 件 方 法用 的 比较 普遍 , 如 ; 现在 常 应用 加 固定 软件 延时来 去 抖 动 . 体 方 法 就是 在 有 按键 按 具
下时, 利用软件延时 1m 或稍长的时间( 0s 根据具体 键 的机械 特性来 确定 ) 后再 次 检测 按键是 否按 下 , 实 际上 是避 开 了按 键按 下 时的抖 动 时问 . 践证 明 , 实 不
P 0:!P 0;/ ̄发 L D灯亮 I } 3 3 /f E I
按键消抖的软件处理新法
M OV
T L 0, # 30H
M OV
30H, # 0H
SETB TR0
; 定时中断入口
; 定义控制字节寄存器地址 ; 定义屏蔽寄存器地址 ; P 3. 0 与 P3. 1 互为反相, 以便程序 ; 识别上下两组按键
; 12M Hz 晶振, 定时 2ms
; 初始化控制字节寄存器, 开放按键
a 收稿日期: 1999-09-11( 磁盘稿) ·68 ·
P 3. 0, 2ndK EY A CC. 0, K EY0 A CC. 1, K EY1 …
K E Y7 A CC. 0, K EY8 A CC. 1, K EY9 A CC. 2, K EYA …
பைடு நூலகம்K E YF …
KEY- END … KEY- END … KEY- END …
KEY- END P 3. 0 P 3. 1 31H, WA IT 30H, # 0H
3 结束语 上 列程序仅仅 突出了如何 以屏蔽按键的 方式
达到消抖目的, 略去了按键处理部分及其它无关 内容, 在各种实际应用中, 一般都有定时循环程 序, 可根据按键数目、定时循环时间, 灵活变通, 不
拘于 16 个键及 2ms 的定时。■
[ 参考文献] [ 1] 李 华. M CS - 51 系列 单片机实 用接口 技术 [ M ] .
在单片机控制系统中, 按键处理几乎存在于 每个实 际设计中。通常对按键 抖动的消除方 法是: 判断有键后延时 10~20 毫秒再次读键判断( 参见 参考文献) , 以便达到每次按键( 含抖动) 操作只产 生一次 有效信号供 单片机处理 。
我在实际产品设计过程中, 采用了一种消除 按键抖动的新方案: 以软件方式实现类似于可重 复触发 单稳态脉冲 的硬件消抖 电路。实现原 理是 将读入 的按键字节 与软件产生 的控制字节进 行逻
单片机矩阵键盘设计方案
单片机矩阵键盘设计方案一、设计目标设计一个8行8列的矩阵键盘,每个按键都有一个唯一的键码,能够正常读取用户的按键输入,并将按键对应的键码显示在LCD屏幕上。
二、硬件设计硬件设计包括键盘电路和显示电路两部分。
1.键盘电路设计矩阵键盘的硬件设计主要包括键盘矩阵、行扫描电路和列读取电路。
键盘矩阵由8行8列的按键构成,每个按键都连接到一个由二极管组成的矩阵。
行扫描电路使用8位输出的GPIO口,根据行的值来选通对应的行组。
列读取电路使用8位输入的GPIO口,根据列的值来读取对应的列组。
2.显示电路设计三、软件设计软件设计主要包括初始化设置、按键检测、键码解析和显示处理四个部分。
1.初始化设置首先需要对GPIO口进行初始化设置,将扫描行的GPIO口设置为输出模式,将读取列的GPIO口设置为输入模式。
同时需要对LCD屏幕进行初始化设置,设置显示模式、光标位置等参数。
2.按键检测循环扫描每一行,当其中一行被选通时,读取每一列的值。
如果其中一列的值为低电平,则表示对应的按键被按下。
将按下的按键的行和列的值保存下来,用于后续的键码解析。
3.键码解析根据行和列的值,通过查表的方式找到对应的键码。
将键码保存下来,用于后续的显示处理。
4.显示处理将键码传送给LCD屏幕,通过LCD屏幕的驱动芯片进行解析和显示。
根据LCD屏幕的显示方式,可以选择逐行显示或者按需显示的方式。
四、优化设计在以上基本设计方案的基础上,可以进行一些优化设计,以提高系统的性能和可靠性。
1.消除按键抖动按键在实际使用中会存在抖动现象,需要通过软件滤波来消除。
可设置一个适当的延时,当检测到按键按下后,延时一段时间再进行键码解析,只有在延时之后仍然检测到按键按下,才认为是一个有效的按键。
2.防止冲突按键由于矩阵键盘的性质,可能存在一些按键组合会产生冲突的情况。
可以通过硬件设计和软件处理来解决。
在硬件上,可以增加二极管来隔离不同的按键。
在软件上,可以通过扫描算法和按键排除的方式来避免冲突。
单片机按键处理技巧及C语言编程方式
单片机按键处理技巧及编程方式在基于单片机为核心构成的应用系统中,用户输入是必不可少的一部分。
输入可以分很多种情况,譬如有的系统支持PS2键盘的接口,有的系统输入是基于编码器,有的系统输入是基于串口或者USB或者其它输入通道等等。
在各种输入途径中,更常见的是,基于单个按键或者由单个键盘按照一定排列构成的矩阵键盘(行列键盘)。
我们这一篇章主要讨论的对象就是基于单个按键的程序设计,以及矩阵键盘的程序编写。
按键检测的原理: 它们和我们的单片机系统的I/O口连接一般如下:对于单片机I/O内部有上拉电阻的微控制器而言,还可以省掉外部的那个上拉电阻。
简单分析一下按键检测的原理。
当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O的电平的时候,其值为1(高电平); 当按键S按下的时候,该I/O被短接到GND,在程序中读取该I/O的电平的时候,其值为0(低电平) 。
这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。
结论:我们在程序中通过检测到该I/O 口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。
一切看起来很美好,是这样的吗?在我们通过上面的按键检测原理得出上述的结论的时候,那就是现实中按键按下时候的电平变化状态。
我们的结论是基于理想的情况得出来的,而实际中,由于按键的弹片接触的时候,并不是一接触就紧紧的闭合,它还存在一定的抖动,尽管这个时间非常的短暂,但是对于我们执行时间以us为计算单位的微控制器来说,它太漫长了。
因而,实际的波形图应该如下面这幅示意图一样。
这样便存在这样一个问题。
假设我们的系统有这样功能需求:在检测到按键按下的时候,将某个I/O的状态取反。
由于这种抖动的存在,使得我们的微控制器误以为是多次按键的按下,从而将某个I/O的状态不断取反,这并不是我们想要的效果,假如该I/O控制着系统中某个重要的执行的部件,那结果更不是我们所期待的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机按键去抖动程
序设计思路
精品文档
收集于网络,如有侵权请联系管理员删除
单片机按键去抖动程序设计思路
徐丽红 王佰营
wbymcs51.blog.bokee.net
在单片机应用系统设计中,人机界面部分的友好程度,很大一部
分取决于键盘处理程序。在按键时按得快了没有反应,按慢了一连响
应几次,总给人紧迫感或迟钝感,不能使人满意。
用以下思路设计的键处理程序取得了满意效果。
判断有没有键值:
1.若有键值:
判断是否为首次按下:
A:若首次按下:判断是否与上次按下的键值相同
a.若相同再判断:是否已经按下了300ms?
1).若已经按下300ms则将此键做为连键处理。
2).若不是连键则判断:是否按下20ms?
1>.若确认按下20ms,得到有效键值等待弹起
2>. 若不是按下20ms直接结束处理(ret)。
精品文档
收集于网络,如有侵权请联系管理员删除
b.若不相同则将标志清零结束处理(ret)。
B:若不是首次按下:将键值暂存起来,标志置位结束处理。
2.若无键值:
判断是否有键值已被确认
A.若有键已被确认:判断按键是否首次抬起
a.若首次抬起:判断抬起延时时间(20ms)是否到达
1>.若延时到则将标志处理结束处理。
2>.若延时未到直接结束处理(ret)。
b.若非首次抬起:直接结束处理(ret)。
B.若没有键被确认:直接结束处理(ret)。
具体程序实现流程图如下:(所有延时均为非阻塞式延时)
Lcll scan_key----为调用键扫描程序;
精品文档
收集于网络,如有侵权请联系管理员删除
简单的按键处理程序见:简单、友好的按键处理程序设计
简单、友好的按键处理程序设计
王佰营 徐丽红
wbymcs51.blog.bokee.net
在嵌入程序设计中,键处理程序在一定程度上决定着人机对话界面的友
好程度。WINDOWS是公认的界面友好的典范,我们就借鉴WINDOWS的键处
理的思想:
1. 当击键时WINDOWS立即作出响应;
精品文档
收集于网络,如有侵权请联系管理员删除
2. 当按住键不放时,WINDOWS延迟一定时间来判断是否为连键;其间不
作响应;
3. 当认为是连键时,会间隔一定时间重复作出响应;
(可以打开记事本,敲个‘h’键试验:
瞬时敲击,即可出现‘h’,再按着键不
放,无‘h’出现,当延迟一定时间‘h’,就以较快速度出现
;)
在C8051F020和DSP编程中运用上述的思想所编的键处理程序非常简捷、
高效和友好,以下为该程序的流程图:
根据该流程的51系列单片机程序和DSP程序:
1、C8051F020单片机程序如下:
;=================================================================
精品文档
收集于网络,如有侵权请联系管理员删除
; function: key_filter ;键盘去抖程序--徐丽红
; input: a
; output: key.bsure
; usage: a,b
;=================================================================
key_filter: ;键盘去抖程序
lcall scan_key
jz kf_no ;a=0?
jb bfirst, kf_1th ;first down?
mov b, a
mov a, k_dly
jnz kf_ret ;20ms到
了吗?
mov a, b ;20ms
到
cjne a, key_tmp,kf_no ;a==k_tmp?
mov k_dly, #10 ;a==k_tmp
dec dly_k
jnb bfast, kf_nofast ;是连键吗?
kf_is0: mov a, dly_k ;是连键
jnz kf_ret ;300ms/
160ms?
mov dly_k, #12 ;fast OK!
sjmp kf_ftok
精品文档
收集于网络,如有侵权请联系管理员删除
kf_nofast:
mov a, dly_k ;不是连
键
cjne a, #24, kf_is0 ;延时了1次吗?
kf_ftok:
mov key, key_tmp ;first OK!
setb bkey_do
setb bfast
kf_ret: ret
kf_1th: mov k_dly, #10 ;first down
mov key_tmp, a
mov dly_k, #25
clr bfirst
clr bfast
ret
2、LF2407型DSP程序如下:
;----------------------------------------------------------
; function: judge_key 键值判断
; input: ---
; output: ---
; usege: ACC
;----------------------------------------------------------
judge_key: ;键值判断
ldp #PEDATDIR>>7
精品文档
收集于网络,如有侵权请联系管理员删除
lacl PEDATDIR
cmpl
and #00110110b
ldp #DP_B01
sacl key_tmp
bcnd k_down, NEQ ;CATCH KEY?
ldp #DP_B01
splk #00h, bknot1
ret
k_down: lacl bknot1
bcnd not_first, NEQ ;first?
lacl key_tmp
sacl key_ok
splk #04, key_clk
splk #50, key_dly
splk #11h, bknot1
splk #00h, bksure
splk #00h, bcontinue
ret
not_first: lacl key_clk ;N times
bcnd T_over, EQ ;12ms?
精品文档
收集于网络,如有侵权请联系管理员删除
ret
T_over: lacl key_ok ;12ms
xor key_tmp
bcnd Is_same, EQ ;same key?
splk #00h, bknot1
ret
Is_same: splk #4, key_clk
lacl bcontinue
bcnd Is_fast, NEQ ;continue?
OK_key: splk #11h, bcontinue
splk #11h, bksure
ret
Is_fast: lacl key_dly ;key_dly--
sub #01h
sacl key_dly
bcnd tuch_set, EQ ;500/300ms?
ret
tuch_set: splk #25, key_dly
b OK_key
该程序中:防抖时间是12ms;是否为连键延迟时间是500ms,连键重复
处理时间是300ms;在实际中,根据具体情况调节时间,达到最佳效果。
注:以上两个程序中的延时均为非阻塞式延时,没有原地绕圈子式的延
时,不会对主程序造成大影响。
精品文档
收集于网络,如有侵权请联系管理员删除