📄 单片机最小系统.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 + -