资讯详情

51单片机汇编:多路延时开关

感谢百度网友“做而论道”的帮助! 要求:51单片机,8个按键、8个。

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

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

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

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

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

KEY EQU 30H

K_L EQU 31H

K_T EQU 32H

ORG 0000H

AJMP ART

ORG 000BH ;T0中断入口地址

JMP T0_I

START:

MOV TH0, #40 ;定时7.5ms@11.0592MHz

SETB TR0

SETB ET0

SETB EA

SJMP $ ;主程序结束

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

T0_INT:

MOV TH0, #40 ;定时7.5ms@11.0592MHz

MOV A, P1

CPL A ;有按键,为1

MOV KEY, A

XRL A, K_L

MOV K_T, A

MOV K_L, KEY

MOV A, KEY

CPL A ;没按则为1

ANL A, K_T ;释放则为1

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

MOV R0, #40H

MOV R2, #127

T0_L1:

JNB ACC.7, $ + 9

MOV @R0, #200

XCH A, R2

ANL P2, A ;打开LED

XCH A, R2

RL A

XCH A, R2

RR A ;右移R2

XCH A, R2

INC R0

CJNE R0, #48H, T0_L1

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

CPL F0

JNB F0, T0_END

MOV R0, #40H

MOV R2, #128

MOV A, R2

T0_L2:

DEC @R0

CJNE @R0, #255, $ + 6

INC @R0

ORL P2, A ;关闭LED

RR A ;右移R2

MOV R2, A

INC R0

CJNE R0, #48H, T0_L2

T0_END:

R

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

END

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

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

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

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

仿真运行的截图如下:

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台