51 单片机汇编编程:记录按键
来源:互联网 发布:js导出excel表格兼容 编辑:程序博客网 时间:2024/06/03 23:41
;有个题目,要求记录按下的键的编号。
;链接:http://zhidao.baidu.com/question/586130231.html
;使用器件:
;51单片机,8个编号为“1~8”的数字键,1个功能键,1个数码管,其他晶振电阻电容。
;实现功能:
;按下功能键后,10s内,检测被按下的数字键,
;10s后,结束检测,并用数码管循环显示被按下过的键编号。
;做而论道据此画出的电路如下:
;图片链接:http://xiangce.baidu.com/picture/detail/79b1d41851d6450ebcef87bd48d2e519df867a9c
;电路中的数码管,不仅用于显示按下过的键编号,还能显示 9~0 的倒计时。
;在电路中,还安装了一个 LED,用来表示按键的状态。
;当有键按下,10ms 后仍然按下时,LED 将发光,表示按键确实按下了。
;当按键释放后,再令 LED 熄灭。
;另外,在显示按下的按键编号时,也令 LED 持续发光。
;当 LED 熄灭后,再次按下 FUNC 键,可以重新进行下一轮的按键记录。
;汇编语言编写的程序如下:
ORG 0000H
SJMP START
ORG 000BH
SJMP T0_INT
;---------------------------------------
START:
MOV TMOD, #01H
MOV IE, #82H
MOV DPTR, #D_TAB
WAIT_F:
JB P3.6, $ ;等待按下功能键
CALL DELAY10MS
JB P3.6, WAIT_F
CLR P3.2 ;LED发光
JNB P3.6, $ ;等待释放
SETB P3.2
;----------------------------------
MOV R0, #30H
MOV TH0, #(65536 - 62500) / 256
MOV TL0, #(65536 - 62500) MOD 256
MOV R7, #16
MOV R6, #9
CALL DISPLAY
SETB TR0
;----------------------------------
WAIT_N: ;循环检测按键
JNB TR0, STOP ;到10s退出
CALL KEY_N
JZ WAIT_N
MOV B, A
CALL DELAY10MS ;延时
CALL KEY_N
CJNE A, B, WAIT_N ;消抖
MOV @R0, A ;保存按键数值
INC R0
CLR P3.2 ;LED发光
WAIT_S:
CALL KEY_N
JNZ WAIT_S ;等待释放
SETB P3.2
SJMP WAIT_N ;循环检测按键
;----------------------------------
STOP:
MOV A, R0
CLR C
SUBB A, #30H
MOV R2, A
CLR P3.2 ;LED发光
MOV R0, #30H
ECHO:
MOV A, @R0
INC R0
MOV R6, A
CALL DISPLAY ;回放
MOV R3, #100
CALL DELAY10MS
DJNZ R3, $ - 2
DJNZ R2, ECHO ;循环
SETB P3.2
MOV R6, #0
CALL DISPLAY
SJMP WAIT_F
;---------------------------------------
T0_INT:
MOV TH0, #(65536 - 62500) / 256
MOV TL0, #(65536 - 62500) MOD 256
DJNZ R7, T0_END
MOV R7, #16
DEC R6
CJNE R6, #255, DISP
CLR TR0
RETI
DISP:
CALL DISPLAY
T0_END:
RETI
;---------------------------------------
DISPLAY:
MOV A, R6
MOVC A, @A + DPTR
MOV P2, A
RET
D_TAB: ;共阳段码
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H
DB 092H, 082H, 0F8H, 080H, 090H
;---------------------------------------
KEY_N:
CLR A
JNB P1.0, K1
JNB P1.1, K2
JNB P1.2, K3
JNB P1.3, K4
JNB P1.4, K5
JNB P1.5, K6
JNB P1.6, K7
JNB P1.7, K8
RET ;没有按键,返回0
K8: INC A
K7: INC A
K6: INC A
K5: INC A
K4: INC A
K3: INC A
K2: INC A
K1: INC A
RET
;---------------------------------------
DELAY10MS:
MOV R4, #20
DJNZ R5, $
DJNZ R4, $ - 2
RET
;---------------------------------------
END
;经过仿真实验证明,本程序可以稳定工作。
- 51 单片机汇编编程:记录按键
- 51单片机--机械按键类编程技巧
- 51 汇编编程:一种单片机抢答器
- 【51单片机学习过程记录】3独立按键
- 51单片机按键双击
- 51单片机汇编编程--16位拉幕灯
- 51单片机汇编
- 单片机汇编语言编程:按键、计数及显示
- 51单片机按键消抖
- 51单片机 按键,键盘检测
- 51单片机—独立按键
- 51单片机100次按键
- {单片机}之 单片机中C和汇编混合编程
- 51单片机汇编指令速查表
- 51单片机汇编指令速查表
- 51单片机汇编指令集
- 51单片机汇编指令详解
- 51单片机汇编指令详解
- 【Modern OpenGL】多种光源 Multiple lights
- 是 PROTEUS 还是 PROTUES ?
- 用串入并出芯片 74HC595 驱动数码管
- 51 单片机扩充外部中断
- Linux slab 分配器剖析
- 51 单片机汇编编程:记录按键
- python分布式进程
- 51 单片机使用串入并出芯片 164 以及矩阵键盘
- C51 编程,要求按照指定的次序按键
- 51 汇编语言编程:8个按键控制8个LED
- 51单片机流水灯
- 将十进制数- 3 / 8 表示成浮点数规格化形式
- 51 单片机:键控直流电机
- 括号匹配