?? 單片機最小系統.asm
字號:
KEYIN: JNB SSET,KEYIN1 ;判斷SET鍵是否按下
ACALL DELAY1 ;延時去抖動
JNB SSET,KEYIN1
JB SSET,$ ;判斷SET鍵是否松開
INC FLASH ;SET鍵按下調整閃爍標志位
MOV R7,FLASH
CJNE R7,#17,KEYIN1;判斷FLASH是否已經移出16位
MOV FLASH,#0H
KEYIN1: MOV TEMP1,R0
JNB SSUB,KEYIN2;判斷減鍵是否按下
ACALL DELAY1;延時去抖動
JNB SSUB,KEYIN2
JB SSUB,$ ;判斷減鍵是否松開
MOV A,FLASH
ADD A,#60H
MOV R0,A
DEC @R0;減鍵按下修改數據緩沖區對應位的值
CJNE @R0,#0FFH,KEYIN2
MOV @R0,#0BH
KEYIN2: JNB AADD,KEYIN3;判斷加鍵是否按下
ACALL DELAY1;延時去抖動
JNB AADD,KEYIN3
JB AADD,$ ;判斷加鍵是否松開
MOV A,FLASH
ADD A,#60H
MOV R0,A
INC @R0; 加鍵按下修改數據緩沖區對應位的值
CJNE @R0,#0CH,KEYIN3
MOV @R0,#0
KEYIN3: MOV R0,TEMP1
RET
顯示子程序:
DISP: MOV A,@R0
ACALL TAB;查表取得由第一片74LS573送出的段代碼的值
ACALL SEGU9;調用第一片74LS573數據鎖存子程序
MOV A,@R1
ACALL TAB1;查表取得由第二片74LS573送出的段代碼的值
ACALL SEGU10;調用第二片74LS573數據鎖存子程序
INC R0;調整顯緩指針
INC R1;調整顯緩指針
ACALL SENDBIT;調用位選子程序點亮16位7段LED中的兩位
ACALL DELAY;延時
CJNE R0,#58H,DISP;判斷是否已完成16位顯示
MOV R0,#50H;顯緩指針付初值
MOV R1,#58H;顯緩指針付初值
RET
主程序:
FLAG EQU 20H
FG1 BIT FLAG.0
FG2 BIT FLAG.1
DATABUF1 EQU 60H
DATABUF2 EQU 61H
DATABUF3 EQU 62H
DATABUF4 EQU 63H
DATABUF5 EQU 64H
DATABUF6 EQU 65H
DATABUF7 EQU 66H
DATABUF8 EQU 67H
DATABUF9 EQU 68H
DATABUF10 EQU 69H
DATABUF11 EQU 6AH
DATABUF12 EQU 6BH
DATABUF13 EQU 6CH
DATABUF14 EQU 6DH
DATABUF15 EQU 6EH
DATABUF16 EQU 6FH
FLASH EQU 70H ;
TEMP0 EQU 71H
TEMP1 EQU 72H
TEMP2 EQU 73H
TEMP3 EQU 74H
TEMP4 EQU 75H
SSET BIT P3.0; SET鍵
AADD BIT P1.7; 加鍵
SSUB BIT P1.6; 減鍵
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: CLR C
SETB FG1
MOV R0,#50H
MOV R1,#58H
MOV TEMP0,#0
MOV TEMP2,#40
MOV FLASH,#16
MOV DATABUF1,#2
MOV DATABUF2,#0
MOV DATABUF3,#0
MOV DATABUF4,#5
MOV DATABUF5,#0BH
MOV DATABUF6,#0
MOV DATABUF7,#3
MOV DATABUF8,#0BH
MOV DATABUF9,#0
MOV DATABUF10,#9
MOV DATABUF11,#0BH
MOV DATABUF12,#0
MOV DATABUF13,#2
MOV DATABUF14,#0BH
MOV DATABUF15,#5
MOV DATABUF16,#0
MAIN1: ACALL KEYIN
ACALL GETDATA
MOV A,FLASH
CJNE A,#16,MAIN4
AJMP MAIN3
MAIN4: DJNZ TEMP2,MAIN2
MOV TEMP2,#60
CPL FG1
MAIN2: JB FG1,MAIN3
MOV A,FLASH
ADD A,#50H
MOV R0,A
MOV @R0,#0AH
MOV R0,#50H
MAIN3: ACALL DISP
AJMP MAIN1
GETDATA:MOV TEMP3,R0
MOV TEMP4,R1
MOV R0,#50H ;//顯緩
MOV R1,#60H
NEXT: MOV A,@R1
MOV @R0,A
INC R0
INC R1
CJNE R0,#60H,NEXT
MOV R0,TEMP3
MOV R1,TEMP4
RET
DISP: MOV A,@R0
ACALL TAB
ACALL SEGU9
MOV A,@R1
ACALL TAB1
ACALL SEGU10
INC R0
INC R1
ACALL SENDBIT
ACALL DELAY
CJNE R0,#58H,DISP
MOV R0,#50H
MOV R1,#58H
RET
KEYIN: JNB SSET,KEYIN1
ACALL DELAY1
JNB SSET,KEYIN1
JB SSET,$
INC FLASH
MOV R7,FLASH
CJNE R7,#17,KEYIN1
MOV FLASH,#0H
KEYIN1: MOV TEMP1,R0
JNB SSUB,KEYIN2
ACALL DELAY1
JNB SSUB,KEYIN2
JB SSUB,$
MOV A,FLASH
ADD A,#60H
MOV R0,A
DEC @R0
CJNE @R0,#0FFH,KEYIN2
MOV @R0,#0BH
KEYIN2: JNB AADD,KEYIN3
ACALL DELAY1
JNB AADD,KEYIN3
JB AADD,$
MOV A,FLASH
ADD A,#60H
MOV R0,A
INC @R0
CJNE @R0,#0CH,KEYIN3
MOV @R0,#0
KEYIN3: MOV R0,TEMP1
RET
SENDBIT:MOV A,P1
ANL A,#0F0H
ORL A,TEMP0
INC TEMP0
MOV P1,A
MOV R2,TEMP0
CJNE R2,#8H,SENDBIT1
MOV TEMP0,#0
SENDBIT1:RET
SEGU9: CLR P1.4
CLR P1.5
MOV P2,A
SETB P1.4
MOV P1,#0AH
RET
SEGU10: CLR P1.4
CLR P1.5
MOV P2,A
SETB P1.5
MOV P1,#0AH
RET
TAB: ADD A,#1
MOVC A,@A+PC
RET
DB 0C0H,0F9H,0A4H
DB 0B0H,99H,92H
DB 82H,0F8H,80H
DB 90H,0FFH,0BFH
TAB1: ADD A,#1
MOVC A,@A+PC
RET
DB 03H,09FH,25H
DB 0DH,99H,49H
DB 41H,1FH,01H
DB 09H,0FFH,0FDH
DELAY1: MOV R7,#200
TM2: MOV R6,#100
TM1: DJNZ R6,TM1
DJNZ R7,TM2
RET
DELAY: MOV R7,#4
TMM2: MOV R6,#50
TMM1: DJNZ R6,TM1
DJNZ R7,TM2
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -