📄 语音静态显示led104.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0013H ;中断1的调用
;;;;;;;;;INC R2
LJMP LOOP1
ORG 050H
MAIN: ;;;;;;;;;;;;;;;;;;;;MOV R2,#00H ;R2作中断计数器
MOV R4,#64 ;全显测灯
DIR: SETB P1.0
CLR P1.1 ;全显测
SETB P1.1
DJNZ R4,DIR
MOV R3,#00H ;R3作为位选择计数器
MOV R5,#00H
MOV 2FH,#00H ;;;;;;;;;;;///////////
START1: ;;;;;;;;;;;;;;MOV R2,#00H ;R2作中断计数器
START:
MOV R1,#09H
MOV R0,#30H
;;;;;;;;;;;;;;;MOV R2,#00H ;R2作中断计数器
PACE: CLR P1.2 ;初始化74LS164使它的Q0~Q7电位为0
CLR P1.3
SETB P1.3
DJNZ R1,PACE
CLR RS1 ;选择工作寄存器组
CLR RS0
SETB IT1 ;设置为中断1为跳沿触发
SETB EA ;打开总中断开关
SETB EX1 ;打开中断1
CLR EX0
CLR ET0
CLR ET1
MOV SP,#60H
MOV R1,#09H
MOV R0,#30H
SJMP START
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOOP1: CLR EA ;关闭中断
SETB P3.3 ;;为P3.3输入数据做准备
LCALL WAIT ;延时消抖
JB p3.3,STATION1 ;判断是否按下键
MOV R1,#09H
PACE5: SETB P1.2 ;初始化74LS164使它的Q0~Q7电位为0
CLR P1.3
SETB P1.3
DJNZ R1,PACE5
CLR A ;清零的目的是用A做计数
SETB P3.3 ;;为P3.3输入数据做准备
CLR P1.2
CLR P1.3
SETB P1.3
INC A
JNB P3.3,LOOP2 ;;;;;;;;;;;;JNB P3.3,LOOP2;;;;;;;;;;;;;;;
SETB P3.3 ;;为P3.3输入数据做准备
LOOP3:SETB P1.2
CLR P1.3
SETB P1.3
INC A
SETB P3.3 ;;为P3.3输入数据做准备
JNB P3.3,LOOP2
SJMP LOOP3
LOOP2: MOV R6,A ;使用到R6寄存器
XRL A,#08H ;功能键识别区
JZ KEY14
MOV A,R6
XRL A,#01H ;功能区键识别按下的是数字键
JZ STATION1
MOV A,R6
XRL A,#02H ;功能区键识别按下的是数字键
JZ STATION1
;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,R6 ;此区跳往查表区
XRL A,#03H
JZ X1 ;跳往POCESS处理
MOV A,R6
XRL A,#04H
JZ X2
MOV A,R6
XRL A,#05H
JZ X3
MOV A,R6
XRL A,#06H
JZ X4
MOV A,R6
XRL A,#07H
JZ X5
;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
;;;;;;;;;;;;;;; ;MOV A,R2 ;判断停止输入数据;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;; ;XRL A,#02H
;;;;;;;;;;;;;;XRL A,#01H
;;;;;;;;;;; ;;JZ KEY
;; ;;;;;;;;;;;;;;;;;;JZ STATION ;判断停止输入数据
STATION1: RETI ;返回中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
X1: LCALL SPEAKL ;;;//////////////////
CJNE R3,#00H,WINDOWS
LCALL SAMSUNG1
RETI
X2: LCALL SPEAKL ;;;;//////////////////
CJNE R3,#00H,WINDOWS1
LCALL SAMSUNG2
RETI ;功能键区查表
X3: LCALL SPEAKL ;;;;;;;//////////////
INC R3
LCALL SAMSUNG3
RETI
X4:LCALL SPEAKL ;;;;;;;;;;//////////////
LCALL SAMSUNG4
RETI
X5: LCALL SPEAKL ;;;;;;;;;;;////////////////
LCALL SAMSUNG5
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WINDOWS:LJMP JUAN
RETI
WINDOWS1:LJMP BOOK
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;STATION: LJMP KEY13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY14: SETB P3.3 ;;为P3.3输入数据做准备
JNB P3.3,KEY14 ;防止按下数据输入键不放
LCALL SPEAKE ;;;;;;////////////////////
MOV A,R3
XRL A,#00H ;;;;;;;;;;;
JZ KEY0 ;;;;;;;;;;
MOV R3,#00H ;;;;;;;;;;;
RETI ;;;;;;;;;;;
KEY0:
;此区为输录数字区
MOV R1,#09H
SETB P1.4
SETB P3.3
PACE1: CLR P1.2 ;初始化74LS164使它的Q0~Q7电位为0
CLR P1.3
SETB P1.3
DJNZ R1,PACE1
KEY1: SETB P1.4 ;;为P1.4输入数据做准备
SETB P3.3;;为P3.3输入数据做准备
JNB P1.4,KEY2 ;判断键区
JNB P3.3,KEY8 ;判断键区
SJMP KEY1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY2: LCALL WAIT ;延时消抖
SETB P1.4 ;为P1.4输入数据做准备
JB P1.4,KEY1 ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;LCALL SPEAKL ;;;;;;;;;;///////////////////////////
MOV R1,#09H
PACE2: SETB P1.2 ;该区使74LS164使它的Q0~Q7电位为1
CLR P1.3
SETB P1.3
DJNZ R1,PACE2
KEY3: CLR A ;数字键区扫描
SETB P1.4
CLR P1.2
CLR P1.3
SETB P1.3
SETB P1.4 ;为P1.4输入数据做准备
JNB P1.4,KEY17 ;跳往KEY17数字处理区(如果此时P1.4为0则A里的数为0)
CLR A
KEY4: SETB P1.2
CLR P1.3
SETB P1.3
INC A
SETB P1.4 ;为P1.4输入数据做准备
JNB P1.4,KEY17 ;跳往KEY17数字处理区
JB P1.4,KEY4
KEY17: SETB P1.4 ;为P1.4输入数据做准备
JNB P1.4,KEY17 ;防止手按在按键未放开
JB P1.4,KEY7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY8: SETB P3.3 ;为P3.3输入数据做准备
LCALL WAIT
JB P3.3,KEY1 ;;;;;;;;;;;;;;;;;;;;;;;
MOV R1,#09H
PACE3: SETB P1.2 ;该区使74LS164使它的Q0~Q7电位为1
CLR P1.3
SETB P1.3
DJNZ R1,PACE3
KEY9: MOV A,#08H ;功能键区数字键扫描
SETB P3.3
CLR P1.2
CLR P1.3
SETB P1.3
SETB P3.3 ;为P3.3输入数据做准备
JNB P3.3,KEY18 ;跳往KEY18按键处理区(如果此时P3.3为0则A里的数为0)
SETB P1.2
CLR P1.3
SETB P1.3
INC A
SETB P3.3 ;为P3.3输入数据做准备
JNB P3.3,KEY18
KEY20: SETB P1.2
CLR P1.3
SETB P1.3
INC A
SETB P3.3 ;为P3.3输入数据做准备
JNB P3.3,SAMSUNG
JB P3.3,KEY20
KEY21: LJMP KEY0 ;防止按下功能键区不是数字键
KEY18: SETB P3.3 ;为P3.3输入数据做准备
JNB P3.3,KEY18 ;防止手按在按键未放开
JB P3.3,KEY7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SAMSUNG: SETB P3.3 ;为P3.3输入数据做准备
JNB P3.3,SAMSUNG ;防止手按在按键未放开
JB P3.3,SAMSUNG10
SAMSUNG10:XRL A,#0FH ;判断停止输入数据;
JZ KEY13 ;判断停止输入数据;
JNZ KEY21 ;判断停止输入数据;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY7: CLR IE1 ;软件清除中断1请求标志位 (保险)
MOV @R0,A ;此时@R0里的数据就是所按的数字键代表的数字
INC R0 ;使R0指向下一字节
LCALL LIGHT ;调用显示
MOV A,R0
XRL A,#38H
JZ KEY13
LCALL SPEAKL ;;;;;;;;;;/////////////////
LJMP KEY0
KEY13: CLR IE1 ;软件清除中断1请求标志位 (保险)
MOV R1,#040H
MOV A,R0
MOV R2,A ;使用到R2寄存器
KEY16: DEC R0
MOV A,@R0 ;倒序存放数据区
MOV @R1,A
INC R1
CJNE R0,#030H, KEY16
RETI ;返回中断
;;;;;;;;;;;KEY11:
;;;;;;;;RETI ;返回中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIGHT: MOV R1,#040H ;输入数据显示子程序
MOV A,R0
MOV R6,A ;使用到R6寄存器
LIGHT2:MOV @R1,#00001010B
INC R1
CJNE R1,#048H,LIGHT2
MOV R1,#040H
LIGHT1: DEC R0
MOV A,@R0 ;倒序存放数据
MOV @R1,A
INC R1
CJNE R0,#030H, LIGHT1
MOV A,R6
MOV R0,A
LCALL LED
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED: MOV R1,#40H ;串显示数据传送子程序
MOV R5,#08H
LED1:MOV DPTR,#044CH
MOV A,@R1
MOVC A,@A+DPTR
MOV R4,#08H
LED2: RLC A
MOV P1.0,C
CLR P1.1
SETB P1.1
DJNZ R4,LED2
INC R1
DJNZ R5,LED1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WAIT: MOV R7,#142 ;延时子程序 (35.074ms)
WAIT1: MOV R6,#122
WAIT2:DJNZ R6,WAIT2
DJNZ R7,WAIT1
RET
ORG 044CH
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;0--9的七段码(共阴) 和消影
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SAMSUNG1: SETB P3.3
JNB P3.3,SAMSUNG1 ;防止按下数据输入键不放
MOV A,R2 ;此时R2保存上次输入数据的的下一个地址
MOV R0,A
WEI:DEC R0
INC @R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -