读入独立键,并点亮相应的LED灯
2012-09-04 来源:51hei
***************************************************************************
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
END
上一篇:直流电机调速程序
- GD32F303固件库开发(13)----定时器TIM捕获PWM测量频率与占空比
- GD32F310定时器采样MP6050并在彩色LCD上显示波形
- GD32开发实战指南(基础篇) 第8章 定时器
- 基于GD32驱动BLDC电机(1)定时器和PWM
- GD32 Timer定时器周期时间计算公式
- GD32对Timer定时器原理的详细讲解
- GD32开发实战指南(基础篇) 第16章 RTC
- 三菱FX系列PLC内部定时器,定时的时间单位有哪3种?
- 小尺寸、低功耗!思瑞浦发布高性能车规级看门狗定时器专用芯片TPV710Q
- STM32的三种延时方法的代码实现_纯软件延时, 系统定时器延时, 定时器延时