单片机时间没有走动按键单片机没有响应

是用汇编写吗?还是用c写?

1.中断方式(这个比较可靠)
一般程序按键单片机按下后 灯亮 然后按键单片机松开灯还是亮的
采用的是边沿检测即有电平跳变就改变输出。
如果想按键单片机按住的时候灯亮不按的时候灯不亮
采用电平触发,即当电平维持是正或者负的时候才稳定输出
一般程序按键单片机按下后 燈亮 然后按键单片机松开灯还是亮的
如果想按键单片机按住的时候灯亮,不按的时候灯不亮
P1^1是按键单片机采集管脚P1^2是输出显示管脚。当嘫前面得加去抖动。

是用汇编写吗?还是用c写?

说几个我碰到过的吧 说出51的5个中断名及其对应的中断入口地址。 描述冒泡排序法 51单片机苐9脚是什么? 画出一个AT89S52的最小系统并扩展1个外部RAM,并要求可实现ISP 51单片机延时1s的程序,汇编、c分别写一个要求使用中断。 基于51...

如果是噺设计当然停车的产品是不能选的,根据你的设计要求来选型是基本原则但另一个最主要的因素就是你熟悉什么选择什么,所以选择伱熟悉的单片机是最重要的不需要继续学习,信手拈来节省开发时间

1。“code”是单片机C语言特有的关键字 在单片机中RAM的空间特别小特別珍贵。RAM空间存放变量。而一些常量比如码表等常量放在ROM中。所以单片机中code就是告诉单片机这个数据放入ROM中 本例中dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0...

1.中断方式(这个仳较可靠) 一般程序按键单片机按下后 灯亮 然后按键单片机松开灯还是亮的 采用的是边沿检测,即有电平跳变就改变输出 如果想按键单爿机按住的时候灯亮,不按的时候灯不亮 采用电平触发即当电平维持是正或者负的时候才稳定输出。 2.也可以用查...

不能用的原因有以下几點: 1,你的板子用的串口号和探索者的不一样串口号一样也可能用的引脚不一样(可以重映射) 2,你的板子上的串口驱动芯片和探索者的不┅样(如果是用的是USB转串口芯片,需要装驱动不同的芯片驱动不同) 3,你的板子硬件...

单片机要按键单片机要几次才有反应可能是什么状况 [问题点数:40分结帖人pentichengfeng]

你的软件有消抖吗?没有的话很有可能的

很有可能是没有延时消抖,延时以10ms左右为宜别忘叻松手检测~

还是不对的话检查按键单片机程序的其他部分!

本版专家分:16813

红花 2013年11月 硬件/嵌入开发大版内专家分月排行榜第一
黄花 2014年7月 硬件/嵌入开发大版内专家分月排行榜第二
蓝花 2013年10月 硬件/嵌入开发大版内专家分月排行榜第三

定时器设的时间太慢,扫描太慢了?


延时消抖试试看,偠不然是接口的问题···

扫描间隔是不是过长用中断吧

就是有软件消抖,有时候也不会一按就触发的

1.有中断吗中断不要太长,只记录倳件不处理,处理放在主程序

2.主循环的时间不要太长

3.不要用软件延时,靠定时中断和标志延时

按键单片机扫描是不是被中断打乱 主程序中最好只有按键单片机扫描程序

或者直接用中断进行按键单片机扫描

扫描间隔是不是过长用中断吧

除了键盘还有啥设备?可能有3种可能

2、可能底层函数的延时过长,不断调用运行缓慢,检测按钮的速度变慢难以检测到

3、按键单片机有问题= =(我一个训练的学生就是別人按矩阵键盘都没有问题,他按就双击==!!)。

1. 按键单片机去抖动算法没做好;2.判断按键单片机按下后主程序中是否有及时执行相應按键单片机的操作;

用什么方法写的程序呢。如果全部是顺序函数执行很容易出现这种问题。建议采用多任务程序设计。就是用萣时器定时。每个函数多久执行一次。一半20ms检测一次按键单片机就不会有按键单片机丢失了。

红花 2014年6月 VB大版内专家分月排行榜第一
黃花 2013年12月 VB大版内专家分月排行榜第二
蓝花 2014年9月 VB大版内专家分月排行榜第三

如果用定时器中断方式做键盘扫描,就不要用延时直接对公共變量计数器进行处理。检测到键值变化计数器清零,否则加 1计数器达到阈值,就认为满足了去抖动要求

这样的方式不仅触键灵敏,玳码运行效率也高


如果用定时器中断方式做键盘扫描,就不要用延时直接对公共变量计数器进行处理。检测到键值变化计数器清零,否则加 1计数器达到阈值,就认为满足了去抖动要求

这样的方式不仅触键灵敏,代码运行效率也高

这个具体是怎么实现的,蒙

如果鼡定时器中断方式做键盘扫描就不要用延时。直接对公共变量计数器进行处理检测到键值变化,计数器清零否则加 1。计数器达到阈徝就认为满足了去抖动要求。

这样的方式不仅触键灵敏代码运行效率也高。

匿名用户不能发表回复!

  最右面的数码管初始显示0烸次按下外部按键单片机K0执行加一,计数到九时重新回零

  掌握方式响应按键单片机的原理

  掌握服务程序的具体编写:如何进行鍵的识别,如何去抖动

  3、 实验任务分析

  上一个试验我们了解了查询方式按键单片机的原理当工作于查询方式的时候,要不间断嘚对外部按键单片机进行查询其间不能干其他的任何工作。如果的工作量较大这种方式就很难适应。

  为了进一步提高单片机的工莋效率可以采用方式。

  中断方式的按键单片机响应过程如下:单片机处理自己的工作如果有按键单片机按下,向单片机发出中断請求单片机就会停下现在正在处理的工作,转去执行中断程序执行之后回来继续刚才的工作;如果没有按键单片机按下,单片机就作自巳的工作不理睬外部键盘。

  怎样向单片机发出中断请求呢?发出中断请求的来源叫做中断源单片机可提供五个中断源。其中2个为外蔀中断请求INT0和INT12个为片内定时/计数器T0和T1的计满溢出中断,还有一个是片内串行口中断请求TI或者RI在本试验中,我们用到的是外部中断INT1

  还是先看看电路吧。(注意在作中断试验之前我们必须先把JMP4跳线插上,这样按键单片机动作才能发出中断请求)

  我们在试验一中曾經给大家介绍过,单片机的P3口是双功能口第一种功能可以作通用的I/O口。而在本试验中我们要用到P3口的第二功能。大家看P3.2和P3.3两个引脚斜线后面标示的就是P3口的第二功能,分别是INT0和INT1也就是单片机的两个外部中断源。

  我们发现当任何一个按键单片机按下的时候,P3.3引腳即INT1上就会出现一个低电平,向单片机发出中断申请如果单片机开放了外部中断,就响应中断请求进入中断服务程序。

  那么单爿机是否开放中断功能是由什么控制的呢?在这里就涉及到另外一个特殊功能寄存器IE啦还记得单片机内部256字节的数据RAM吗?其中高128字节(80h~ffh)是特殊功能寄存器区。以前我们介绍过PSW就在这个区域同样IE也在这个区域,它的名字叫做“中断允许寄存器”专门负责程序是否响应中断的,它的各位功能说明如下:

  EA:CPU中断允许标志EA=0,CPU禁止各种中断;EA=1CPU开放中断。但是每个中断源的中断请求是否允许,还需要由各自的尣许位决定所以在本程序中,大家不要忘了首先把EA置1哦!

  ES:串行口允许中断ES=1,允许串行口中断;ES=0禁止串行口中断。所以在这个程序中,这一位和我们没有关系不理它就是啦。

  ET1:定时器/计数器T1的溢出中断允许ET1=1时,允许T1溢出中断;ET1=0时禁止T1溢出中断。同样这一位和我们也没有关系。

  EX1:外部中断1(即INT1)允许中断当EX1=1时,允许INT1中断;当EX1=0时禁止INT1中断。可见这一位的值和我们这个试验密切相关,所以夶家千万不要忘了把这一位置1

  下面的ET0和EX0的功能与ET1和EX1类似,是分别控制定时器T0和外部中断INT0的这里就不再赘述啦。

  在前面分析时我们发现,四个按键单片机中任何一个按下都会发出中断请求。那么如何判断中断请求是由那个按键单片机发出的呢?这就是中断服務程序的工作了。在中断服务程序中需要完成如下工作:键识别、去抖动、和键功能处理。

  那么键识别是如何完成的呢?它的思路昰这样的。

  (1)、先把P1口的状态读入a寄存器然后把高四位屏蔽掉

  (2)、判断是否k0按键单片机按下,(即判断a中的数是否)如果是就调用延時程序去抖,否则表示不是K0按下,退出中断返回主程序

  (3)、调用延时程序后重复上面的(1)(2)步。如果确定k0按下转中断服务程序,否则僦是抖动退出中断返回主程序。

  在这里还需要说明一点:在进入中断服务程序之后我们首先应该关闭中断,因为如果不关闭中断就有可能会引起混乱。在中断服务程序返回主程序之前再把中断打开。

  ljmp start ;(1)为什么这里要放一条跳转指令呢我们在后面解释把

  setb ex1 ;尣许外部中断1申请中断

  setb it1 ;(3)设置外部中断1触发方式为跳变触发,原因在后面详细解释

  ajmp $ ;等待按键单片机发出中断申请

  lcall play2 ;否则确定按鍵单片机按下,转数码显示程序

  play2: inc r7 ;查表求段码然后送到P0口的子程序,大家很熟了

  cjne a,#48h,next;如果没有显示到最后一个数字0就继续查表显示

  相信通过上面的详细注释,大家基本上已经看懂这个程序了下面我就几个小问题再给大家作一些解释。

  1、先看(1)语句我们发现程序开始的时候,在地址为0000h的地方放了一条跳转指令。主程序是从程序存储器中0030h的地方开始存放的为什么要把前面的空间空出来呢?这昰因为前面的空间我们是有用处的。

  由于不同类型的中断具有不同的中断入口地址。CPU在响应中断的时候会根据中断源的类别,转箌相应的入口去执行中断服务程序外部中断1的入口地址是0013h(其余4个中断的入口地址大家可以查阅相关资料),那么cpu在响应了外部中断1后会洎动的到这个地址来,从这个地址开始往下执行程序所以我们要把前面的一段空出来,以免覆盖这个地址

  2、再看看(2)语句,它在中斷1的入口处放了一个跳转指令所以,cpu在响应外部中断后会到这个入口处往下执行程序。于是CPU就会从这里转去中断服务程序大家可能會说,为什么要跳转直接从这里开始存放中断服务程序 不就可以了嘛。

  由于我们很难预料中断服务程序的长度所以我们就拿不准主程序应该从什么单元开始存放。这样就容易造成整个程序的结构混乱

  所以还是采用上面的方法吧,看起来结构清楚规范容易理解。

  3、(3)语句的意思是设置外部中断1为跳变方式触发大家可能觉得,当K0按下的时候INT1上会出现一个低电平,为什么不能采用电平方式觸发呢?解释如下:当我们选外部中断为电平方式触发的时候当INT1输入低电平的时候,cpu响应中断在中断返回之前,INT1必须回到高电平否则僦会第二次产生中断。所以如果我们按下按键单片机的时间较长,就会产生多次的中断导致程序混乱。所以我们在这里要采用边沿方式触发

  顺便说说it1,它是外部中断触发方式控制位为1的时候选择跳变方式触发,为0的时候选择电平方式触发那么它在哪里呢?

  it1昰tcon寄存器其中的一位,tcon和我们知道的pswie一样,也是一个特殊功能寄存器位置当然也在特殊功能寄存器区啦。

  TCON是定时器/计数器(T0T1)的控淛寄存器,关于它的应用我们以后通过例子详细说明它的各位的功能说明如下:

  TF1:定时器/计数器(T1)的溢出中断标志,当T1产生溢出试甴硬件置1,CPU响应中断后由硬件置0;TF0类似。(以后通过试验详细说明)

  TR1:置1时启动定时/计数器置0时停止定时/计数器;TR0类似。(以后通过试验详細说明)

  IE1:外部中断1请求标志当它置一的时候,请求中断

  IT1:外部中断1触发方式控制位。如果IT1是1则外部中断为跳变方式触发,否则为电平方式触发。选择何种方式触发视程序的具体情况来定。

  IE0:外部中断0请求标志含义同IE1。

  IT0:外部中断0触发方式控制位含义同IT1。

  4、语句(4)是中断返回指令功能和子程序返回指令ret相类似,通常被安排在中断服务程序的最后CPU执行完这条指令后,从原來被中断处开始重新执行被中断的程序。

  现在大家对中断的基本概念和简单的编程处理方法有所了解了把下面一个试验“按键单爿机控制跑马灯”,在这个试验里面我们要了解关于中断现场保护的问题。

我要回帖

更多关于 按键单片机 的文章

 

随机推荐