?? 語音靜態顯示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 + -