51单片机独立按键部分编程问题

作者&投稿:集贞 (若有异议请与网页底部的电邮联系)
51单片机汇编语言编程独立按键~

四个按键,定义如下:

KEY1 BIT P3.0
KEY2 BIT P3.1
KEY3 BIT P3.2
KEY4 BIT P3.3

按键处理程序:
;-----------------------------------
READ_KEY:

JB KEY1, K2
CALL DELAY
JB KEY1, K2
JNB KEY1, $

PUSH ACC
INC 75H
MOV A, 75H
CJNE A, #10, ZINT01
MOV 75H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K2: JB KEY2, K3
CALL DELAY
JB KEY2, K3
JNB KEY2, $

PUSH ACC
INC 76H
MOV A, 76H
CJNE A, #10, ZINT01
MOV 76H, #0
ZINT01:
POP ACC

JMP K_EXIT
;---------------
K3: JB KEY3, K4
CALL DELAY
JB KEY3, K4
JNB KEY3, $

PUSH ACC
DEC 75H
MOV A, 75H
CJNE A, #255, ZINT03
MOV 75H, #9
ZINT03:
POP ACC

JMP K_EXIT
;---------------
K4: JB KEY4, K_EXIT
CALL DELAY
JB KEY4, K_EXIT
JNB KEY4, $

PUSH ACC
DEC 76H
MOV A, 76H
CJNE A, #255, ZINT04
MOV 76H, #9
ZINT04:
POP ACC

K_EXIT:
RET
;---------------
DELAY:
DJNZ R7, $
DJNZ R7, $
RET
;-----------------------------------

独立按键根本就是你这么写的哈,一般的学习板子都是没有硬件去抖的,这样就需要你进行软件去抖,否则就会是误判严重,不知道你会不会软件去抖哈

你好:

程序是这么运行的:
先在心中想象独立按键的结构,没按下时,P3外接上拉电阻,所以输入总是1,按键按下时,倒地,对应按键的IO输入为0.
然后,先置IO为输入,没按下时读出全是1,0xff,当有按键按下时,读入为0了,所以用if(KeyPort!=0xff)来判断是否有输入,然后消抖一下,继而继续判断是否还在输入,如果还在输入说明不是抖动引起而是认为引起,之后读取P3口的低5为数据(估计是你的独立按键的接口吧),并赋值给keyvalue;while((KeyPort & 0x1f)!=0x1f)这句的意思是如果一直按着,P3输入的数据肯定不变,那么条件为真,死循环,如果松开,P3全为1了,此时是等于0x1f的,所以结束循环,进行按键处理。

最后,是按键的核心,当P3.0按下,那么对应值是11111110,那么keyvalue的值是11110=0x1e,如果P3.1按下,那么对应值是11111101,那么keyvalue的值是11101=0x1d,以此类推,5个按键对应你题目中5个值。

不懂回复。
希望我的回答能帮助到你。


单片机独立式按键需要哪些原件
至少需要单片机、电源、按键、电阻。原理图如下所示:其中,P1.1为单片机的IO口。

51单片机独立按键部分编程问题
你好:程序是这么运行的:先在心中想象独立按键的结构,没按下时,P3外接上拉电阻,所以输入总是1,按键按下时,倒地,对应按键的IO输入为0.然后,先置IO为输入,没按下时读出全是1,0xff,当有按键按下时,读入为0了,所以用if(KeyPort!=0xff)来判断是否有输入,然后消抖一下,继而继续判断是否...

谁给我下单片机里的独立式按键的硬件电路图?
这个最简单,独立式按键一端连着I\/O,一端连着地。

单片机的独立按键
51单片机接按键,按键一端接地,另一端与I\/O引脚相连,按键按下为低电平,未按下为高电平。 思路正确,如果用P0口需要加上拉电阻(10k),其他端口可以 不加 上拉电阻, 现在的 STC 10、11、12、15系列单片机 都可以 不加 上拉电阻。 编程 时 只要用 检测 高低 电平 来判断是否 有 按键 按...

什么是独立式按键什么是行列式按键
独立式按键是直接用I\/O口线构成的单个按键电路,其特点是每个按键单独占用一根I\/O口线,每个按键的工作不会影响其他I\/O口线的状态。适合于八键以下使用。行列式键盘由行线和列线组成。其特点是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。在按键数量较多时,...

单片机的中断方式的独立按键实现键1,2的识别
void t0int (void){ TH0=65536-50000\/256;\/\/每50MS中断一次 TL0=65536-50000%256;\/\/每50MS中断一次 TR0=0; \/\/关中断 P3=0xff;\/\/读按键 key=P3;if(key!=0xff)delay(10);\/\/延时消抖 key=P3;\/\/再读去按键 if(key!=0xff){ if(key==0xfe)key=1;\/\/ 假设1按下 if(key==0xfd...

单片机独立按键
51单片机接按键,按键一端接地,另一端与I\/O引脚相连,按键按下为低电平,未按下为高电平。思路正确,如果用P0口需要加上拉电阻(10k),其他端口可以 不加 上拉电阻,现在的 STC 10、11、12、15系列单片机 都可以 不加 上拉电阻。编程 时 只要用 检测 高 低 电平 来判断是否 有 按键 ...

求助:51单片机一个独立按键实现三个功能思路
按键一端共地,按键的另一端输入到一个三输入与门上,同时并联值51的三个IO脚上,与门的输出接51的外部中断上 任意一个按键按下,触发外部中断,在外部中断函数中判断IO脚,确认是哪个按键被按下 网页链接

单片机独立按键怎么做到长短击?
你如果会使用定时器扫描来消抖的话,你可以控制状态持续的时间长短,就是说每隔2ms左右检测一次端口状态,控制5次可以起到消抖的作用,如果控制的次数更多 比如说控制在几百次(500~800),电平一直都没有变,则认为是长按下,超过一定次数(300)状态改变则为短按下。次数你可以根据自己测试获取,不...

单片机可以实现一个独立按键控制数码管多个数字吗?
一个按键控制4个数码管显示4个数,最简单的方法是按一次键计一个数,最大数是9999,即可显示四位数。再简单点,按一次键开始自动计数,最大数还是9999,再按一次键停止计数。这样控制程序好写。长按和短按对于初学者有点难,当然了,要能写出程序来是最好啦。

前郭尔罗斯蒙古族自治县13571463472: 51单片机独立按键部分编程问题 -
枞冠先声: 你好:程序是这么运行的: 先在心中想象独立按键的结构,没按下时,P3外接上拉电阻,所以输入总是1,按键按下时,倒地,对应按键的IO输入为0. 然后,先置IO为输入,没按下时读出全是1,0xff,当有按键按下时,读入为0了,所以用if(...

前郭尔罗斯蒙古族自治县13571463472: 单片机独立按键编程问题 -
枞冠先声: 基本上你的程序有一个架构上的问题.正常单片机的程序是需要无限循环的, 而main函数在C语言中, 只是会被作业系统呼叫, 执行完成后返回作业系统. 单片机中, 虽然没有作业系统, 但是其实还是应该注意让程序不要进行返回(未定义状态), 我们称之为, 主回圈.void main() { while(1) { // 主要循环程序 } } 至於你提到的功能, 就是一个循环执行的结果.

前郭尔罗斯蒙古族自治县13571463472: 51单片机按键编程遇到的问题 -
枞冠先声: 先设置一定时器,比如定时0.5s加一,再设置一个标志位,当加数达到一个标准值时,定时器定时改为更短时间.关键是设置定时器,标志位,在中端程序检验按键的电位.

前郭尔罗斯蒙古族自治县13571463472: 51单片机汇编语言编程独立按键 -
枞冠先声: 四个按键,定义如下:KEY1 BIT P3.0 KEY2 BIT P3.1 KEY3 BIT P3.2 KEY4 BIT P3.3按键处理程序: ;----------------------------------- READ_KEY: JB KEY1, K2CALL DELAYJB KEY1, K2JNB KEY1, $ PUSH ACCINC 75HMOV A, 75H...

前郭尔罗斯蒙古族自治县13571463472: 单片机的独立按键 -
枞冠先声: 51单片机接按键,按键一端接地,另一端与I/O引脚相连,按键按下为低电平,未按下为高电平. 思路正确,如果用P0口需要加上拉电阻(10k),其他端口可以 不加 上拉电阻, 现在的 STC 10、11、12、15系列单片机 都可以 不加 上拉电阻. 编程 时 只要用 检测 高 低 电平 来判断是否 有 按键 按下 就可以了.

前郭尔罗斯蒙古族自治县13571463472: 求助51单片机独立按键问题.写了个有关独立按键的程序,程序是为了实现数码管显示数字的,问题看补充. -
枞冠先声: 六个按键,你仅仅有六个返回值.缺少一个“没有按键”的值.----//按键扫描函数返回键值 uchar keyscan() { if(P3!=0XFF) { delay(10); if(P3!=0XFF) { switch(P3) { case 0x7f:return 0;break;case 0xbf:return 1;break;case 0xdf:return 2;break;case ...

前郭尔罗斯蒙古族自治县13571463472: 若51单片机的P1.0口接了一个独立按键,编写程序完成按键检测程序要求每按下一次P1. -
枞冠先声: sbit button P1^0; if(button == 0) //一旦检测到键值 { Delay(); //延时20ms,有效滤除按键的抖动 if(button == 0) //再次确定键值是否有效 { //Do somethinghere! } }

前郭尔罗斯蒙古族自治县13571463472: 在写51单片机程序的时候,对于用独立按键控制led.比如我按下按键1号,8个灯以1方式流动亮,问题 -
枞冠先声: 解决这个问题,首先你得会检测按键,其次至少会做2种流水灯效果.基于以上基础,那么程序的架构可以这样来实现:1、定义一个全局变量,存放运行状态2、检测按键,如果key1被按下,那么运行状态为1;如果key2被按下,那么运行状态为23、死循环中,判断这个全局运行状态变量,如果为1,那么就执行流水灯程序1;如果为2,那么就执行流水灯程序2.加油!

前郭尔罗斯蒙古族自治县13571463472: 51单片机 独立按键问题 -
枞冠先声: while(1)就是一个死循环啊,就是让程序在这while里一直循环运行,不在跳出去.除非复位...没有这个while(1),程序就进来执行一次main后就会出去再从头开始执行,那些数据就被重新初始化了....一般是在main进来后,把要只需初始化一次的变量、只要执行一次的初始化函数 放在这个while(1)外面,程序就一直在while(1){}里面运行,不会每次都得重新进来又把那些变量初始化.....over....

前郭尔罗斯蒙古族自治县13571463472: 单片机独立按键的连接问题 -
枞冠先声: 四个引脚的按键只用到两个就可以,具体那两个自己可以用万用表测一下,一般用对角线的一组引脚即.然后一个引脚接地,另一个跟单片机相连,当按下的时候,按键导通,单片机引脚即跟地相连,为低电平.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网