当前位置:首页 > 单片机 > 单片机
[导读] ;51单片机,8个按键、8个发光二极管。;一个键按下则对应灯亮,3秒后灭,每个键控制一个灯。;;题目要求的电路,非常简单,用P1连接按键、P2连接LED即可。;;用定时器,定时7.5ms,中断400遍,即为3秒钟。

;51单片机,8个按键、8个发光二极管。

;一个键按下则对应灯亮,3秒后灭,每个键控制一个灯。

;

;题目要求的电路,非常简单,用P1连接按键、P2连接LED即可。

;

;用定时器,定时7.5ms,中断400遍,即为3秒钟。


;针对每个灯,都要有一个计时单元,用来控制亮灯3秒钟的时间。


;用汇编语言编写程序如下:


KEYEQU30H

K_LEQU31H

K_TEQU32H


ORG0000H

AJMPSTART

ORG000BH;T0中断入口地址

JMPT0_INT

START:

MOVTH0,#40;定时7.5ms@11.0592MHz

SETBTR0

SETBET0

SETBEA

SJMP$;主程序结束

;--------------------------------

T0_INT:

MOVTH0,#40;定时7.5ms@11.0592MHz

MOVA,P1

CPLA;有按键,为1

MOVKEY,A

XRLA,K_L

MOVK_T,A

MOVK_L,KEY

MOVA,KEY

CPLA;没按则为1

ANLA,K_T;释放则为1

;-----------------------------------

MOVR0,#40H

MOVR2,#127

T0_L1:

JNBACC.7,$+9

MOV@R0,#200

XCHA,R2

ANLP2,A;打开LED

XCHA,R2

;

RLA

XCHA,R2

RRA;右移R2

XCHA,R2

INCR0

CJNER0,#48H,T0_L1

;-----------------------------------

CPLF0

JNBF0,T0_END

MOVR0,#40H

MOVR2,#128

MOVA,R2

T0_L2:

DEC@R0

CJNE@R0,#255,$+6

INC@R0

ORLP2,A;关闭LED

;

RRA;右移R2

MOVR2,A

INCR0

CJNER0,#48H,T0_L2


T0_END:

RETI

;-----------------------------------

END

;-----------------------------------


本程序,使用了定时中断方式,对按键进行检测;并含有延时消抖、等待释放的环节。


在按键按下、再释放后,即刻,就能使LED发光,经过3秒钟之后,自动熄灭。


各个按键的动作互不影响,各个LED的亮灭,互不干扰,都是独立的进行控制。


仿真运行的截图如下:



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭