独立键点亮LED灯程序设计

控制/MCU

1842人已加入

描述

独立按键式直接用I/O口线构成的单个按键电路,其特点式每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。

独立按键的软件常采用查询式结构。先逐位查询没跟I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

独立键盘理想的波形是按下去时保持低电平,实际上在上升沿和下降沿的过程中(即按键和离键时的一段微小时间)会出现抖动。消抖的方法有两种,一种是通过硬件:在电路上连个电容;另一种是软件消抖,根据经验增加10ms的延时。

程序:

006.asm

读入独立键盘上的按键,并把相应的LED灯点亮,若一段时间无按键,刚循环点亮LED

接线:P0口接八位LED

P2口接八位独立按键

定时器T0计时,中断方式

***************************************************************************/

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP INT_T0

ORG 0100H

MAIN: ;主程序入口

MOV SP,#50H ;设置堆栈

MOV TMOD,#01H ;设置定时模式

MOV TH0,#15H ;赋定时初值

MOV TL0,#9FH

CLR 20H.0 ;初始化按键标志

MOV R2,#0FFH ;初始化键值

MOV R3,#01H ;初始化循环闪铄初值

MOV R4,#00H ;初始化定时初值

SETB TR0 ;启动定时器

MOV IE,#82H ;开中断

LOOP:

LCALL KEY_READ ;扫描键盘

L1: JB 20H.0,LIGH ;有键输入,则去点亮相应LED

JBC 20H.0,LOOP

MOV A,R4

CJNE A,#0C8H,LOOP ;否则去判断定时是否到,定时到,循环点亮八位LED

LCALL LEED

LJMP L1

/*点亮相应LED*/

LIGH:

MOV A,R2 ;取键值

MOV P0,A ;输出

RET

/*循环点亮LED*/

LEED:

MOV A,R3

LOOP1:

CPL A

MOV P0,A

LCALL KEY_READ

JB 20H.0,RETUN0

MOV R0,#0FFH

LCALL DELAY

MOV A,R3

RL A

MOV R3,A

CJNE A,#80H,LOOP1

LOOP2:

CPL A

MOV P0,A

LCALL KEY_READ

JB 20H.0,RETUN0

MOV R0,#0FFH

LCALL DELAY

MOV A,R3

RR A

MOV R3,A

CJNE A,#01H,LOOP2

SJMP LOOP1

RETUN0:

RET

/*键盘扫描程序*/

KEY_READ:

CLR EA ;扫描键盘时关定时中断

MOV A,P2

CJNE A,#0FFH,DE

LJMP RETUN

DE: MOV R0,#8AH

LCALL DELAY

MOV A,P2

CJNE A,#0FFH,DE0

LJMP RETUN

DE0:MOV R2,A

SETB 20H.0

MOV R4,#00H

DE1:MOV A,P2

CJNE A,#0FFH,DE1

RETUN:

SETB EA

RET

/*中断子程序*/

INT_T0:

CLR EA

PUSH ACC

MOV TH0,#15H ;重赋定时初值

MOV TL0,#9FH

INC R4

POP ACC

SETB EA

RETI

/*延时子程序 */

DELAY:

D1: MOV R1,#0FFH

D0: DJNZ R1,D0

DJNZ R0,D1

RET

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分