📄 总程序.asm
字号:
;*******************************
;
;
;*******************************
ORG 0000H
SJMP START
ORG 0003H
LJMP FQINT0
ORG 000BH
LJMP T0INT
ORG 0030H
CS BIT P3.4
SCK BIT P3.5
SI BIT P3.6
SO BIT P3.7
LED0 EQU 33H
LED1 EQU 34H
LED2 EQU 35H
LED3 EQU 36H
LED4 EQU 37H
BITNUM EQU 38H
START: MOV SP,#50H
LCALL CHAXUN
CJNE A,#0E0H,START1
LCALL ZIJIAN
SJMP START
START1: LCALL JIANCHULI
SJMP START
JIANCHULI: MOV IE,#82H
MOV TMOD,#01H
MOV TH0,#0H
MOV TL0,#0H
SETB TR0
MOV BITNUM,#0
MOV LED0,#17H
MOV LED1,#17H
MOV LED2,#17H
MOV LED3,#17H
MOV LED4,#17H
LCALL WUXUANQU1
K10: MOV R0,#LED0
MOV R3,#16h
K0: MOV A,R3
MOV @R0,A
LCALL KEY
CJNE A,#01H,K2
MOV R3,#2
INC R0
CJNE R0,#38H, OK1
MOV R0, #33H
OK1: SJMP K0
K2: CJNE A,#02H,K3
INC R3
CJNE R3,#18H,OK2
MOV R3,#0
OK2: SJMP K0
k3: CJNE A,#03H,K4
K31: LCALL WUJZWR
LCALL KEY
CJNE A,#03H,K32
AJMP K31
K32: CJNE A,#02H,K3END
LCALL WUBEEP1
AJMP K10
K3END: LJMP K4END
K4: LCALL WUREAD
LCALL WUBEEP1
SETB EA
K4LP: LCALL KEY
CJNE A,#03H,K41
AJMP K4END
K41: CJNE A,#04H,K4LP
AJMP K4
K4END: RET
KEY: LCALL KEYIN
CJNE A,#0,KE2
SJMP KEY
KE2: MOV R5,A
LCALL DELAY
LCALL KEYIN
CJNE A,#0,KE4
SJMP KEY
KE4: CLR C
SUBB A,R5
JNZ KEY
KE6: LCALL KEYIN
CJNE A,#0,KE6
LCALL DELAY
LCALL KEYIN
CJNE A,#0,KE6
MOV A,R5
RET
ZIJIAN: JNB ACC.4,NEXT1
JNB ACC.5,ZJ1
JNB ACC.6,ZJ2
JNB ACC.7,ZJ3
LCALL CHAXUN
AJMP ZIJIAN
NEXT1: JNB ACC.5,ZJ4
JNB ACC.6,ZJ5
LCALL CHAXUN
AJMP ZIJIAN
ZJ1: LCALL FQMAIN
LJMP END1
ZJ2: LCALL WUJZ
LJMP END1
ZJ3: LCALL WXD
LJMP END1
ZJ4: MOV R0,#5
LCALL BEEP
LJMP END1
ZJ5: LCALL HFJLED
LJMP END1
END1: RET
;-----------------------------------------
BEEP: MOV R2,#05H
DLV1: MOV R3,#0FAH
DLV2: CPL P2.3
LCALL D25MS
DJNZ R3,DLV2
DJNZ R2,DLV1
MOV R2,#04H
DLV3: MOV R3,#0A2H
DLV4: CPL P2.3
LCALL D5MS
DJNZ R3,DLV4
DJNZ R2,DLV3
DJNZ R0,BEEP
RET
D5MS: MOV R7,#0EDH
LOOP: NOP
NOP
DJNZ R7,LOOP
RET
D25MS: MOV R6,#0E9H
LIN: DJNZ R6,LIN
RET
;***************************************
; 名称:LED 自检子程序
; 占用空间:区‘2’R0 R4 R5 R6
;***************************************
HFJLED: PUSH PSW
PUSH A
SETB RS1
CLR RS0 ;区2
MOV DPTR,#LEDMA
MOV R0,#0BH
MOV B,#0
HFJ_LED4: MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL LIGHT4
LCALL DELAYH
INC B
DEC R0
CJNE R0,#0,HFJ_LED4
MOV R0,#0BH
MOV B,#0
HFJ_LED3: MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL LIGHT3
LCALL DELAYH
INC B
DEC R0
CJNE R0,#0,HFJ_LED3
MOV R0,#0BH
MOV B,#0
HFJ_LED2: MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL LIGHT2
LCALL DELAYH
INC B
DEC R0
CJNE R0,#0,HFJ_LED2
MOV R0,#0BH
MOV B,#0
HFJ_LED1: MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL LIGHT1
LCALL DELAYH
INC B
DEC R0
CJNE R0,#0,HFJ_LED1
MOV R0,#0AH
MOV B,#0
MOV DPTR,#LEDMA1
HFJ_LED0: MOV A,B
MOVC A,@A+DPTR
MOV P0,A
LCALL LIGHT0
LCALL DELAYH
INC B
DEC R0
CJNE R0,#0,HFJ_LED0
POP A
POP PSW
RET
;********************选位子程序****************************
LIGHT0: CLR P2.7
CLR P2.6
CLR P2.5
RET
LIGHT1: SETB P2.7
CLR P2.6
CLR P2.5
RET
LIGHT2: CLR P2.7
SETB P2.6
CLR P2.5
RET
LIGHT3: SETB P2.7
SETB P2.6
CLR P2.5
RET
LIGHT4: CLR P2.7
CLR P2.6
SETB P2.5
RET
;***********************延时子程序*******************************
DELAYH : MOV R6,#07FH
DELAYH0: MOV R5,#08H
DELAYH1: MOV R4,#0FFH
DELAYH2: DJNZ R4,DELAYH2
DJNZ R5,DELAYH1
DJNZ R6,DELAYH0
RET
;*********************表格******************************
LEDMA:DB 7EH,0CH,0B6H,9EH,0CCH,0DAH,0FAH,0EH,0FEH,0DEH,0FFH
LEDMA1:DB 0CH,01H,04H,08H,80H,8DH,10H,20H,40H,70H
;------------------------------------------------
;X25045自检程序
;------------------------------------------------
;功能:通过按键调用x25045的自检程序,检测EEPROM的功能
; 是否良好。
;R0=写入地址,R1=写入数据
;使用“3”区R0-R7
;------------------------------------------------
WUJZ: PUSH PSW
PUSH A
SETB RS1
SETB RS0
WUCHAXUN: LCALL WUKEY
WUFENZHI1: CJNE A,#0EH,WUFENZHI2
MOV R0,#0AAH
LCALL WURD_DT
LCALL WULED
AJMP WUCHAXUN
WUFENZHI2: CJNE A,#0DH,WUFENZHI3
MOV R0,#0AAH
MOV R1,#54H
LCALL WUWR_DT
LCALL WULED
AJMP WUCHAXUN
WUFENZHI3: CJNE A,#0BH,WUCHAXUN
POP A
POP PSW
RET
;-------------------------------------------------
;写数据子程序
;功能:将数据写入X25045的EEPRO0M
;-------------------------------------------------
WUWR_DT: LCALL WURD_SR
JB ACC.0,WUWR_DT
LCALL WUWR_DT1
RET
;-------------------------------------------------
;读数据子程序
;功能:将数据从X25045的EEPROM中读出
;-------------------------------------------------
WURD_DT: LCALL WURD_SR
JB ACC.0,WURD_DT
LCALL WURD_DT1
RET
;-------------------------------------------------
;写一个字节子程序
;功能:将一个字节写入X25045
;A=写入数据,R2=写命令字
;-------------------------------------------------
WUWR: MOV R2,#08H
WUWR1: RLC A
MOV SI,C
CLR SCK
SETB SCK
DJNZ R2,WUWR1
RET
;-------------------------------------------------
;读一个字节子程序
;功能:从X25045中读出一个字节
;A=读出数据,R2=读命令字
;-------------------------------------------------
WURD: MOV R2,#08H
WURD1: SETB SCK
CLR SCK
MOV C,SO
RLC A
DJNZ R2,WURD1
RET
;-------------------------------------------------
;读状态寄存器子程序
;A=读状态寄存器命令字
;-------------------------------------------------
WURD_SR: MOV A,#05H
CLR CS
LCALL WUWR
LCALL WURD
SETB CS
RET
;-------------------------------------------------
;写数据子程序
;功能:将数据写入X25045
;使用“3”区R0,R
;入口参数:R0=写入地址,R1=写入数据
;-------------------------------------------------
WUWR_DT1: CLR CS
MOV A,#06H
LCALL WUWR
SETB CS
CLR CS
MOV A,#02H
LCALL WUWR
MOV A,R0
LCALL WUWR
MOV A,R1
LCALL WUWR
CLR CS
SETB CS
RET
;-------------------------------------------------
;读数据子程序
;功能:从X25045中读出数据
;使用“3”区R0,R1
;入口参数:R0=写入地址
;出口参数:R1=读出数据
;-------------------------------------------------
WURD_DT1: LCALL WURD_SR
JB ACC.0,WURD_DT1
CLR CS
MOV A,#03H
LCALL WUWR
MOV A,R0
LCALL WUWR
LCALL WURD
MOV R1,A
SETB CS
RET
;-------------------------------------------------
;按键子程序
;功能:完成键的输入
;-------------------------------------------------
WUKEY: MOV P0,#0
LCALL SEL8
MOV P1,#0FFH
MOV A,P1
LCALL SEL7
ANL A,#0FH
WUYJAX: CJNE A,#0FH,WUA1
AJMP WUKEY
WUA1: CJNE A,#0EH,WUA2
LCALL WUBEEP1
WUA2: CJNE A,#0DH,WUA3
LCALL WUBEEP1
WUA3: CJNE A,#0BH,WUA4
LCALL WUBEEP1
WUA4: RET
;-------------------------------------------------
;延时子程序1
;功能:完成蜂鸣器的延时,延时0。3MS
;使用“3”区R4,R5
;-------------------------------------------------
WUDELAY1: MOV R5,#0FFH
WUD1: MOV R4,#0FFH
WUD2: NOP
NOP
DJNZ R4,WUD2
DJNZ R5,WUD1
RET
;-------------------------------------------------
;蜂鸣器子程序
;功能:按键提示音,按1键响一声,按2键响两声
;-------------------------------------------------
WUBEEP1: CLR P2.3
LCALL WUDELAY1
SETB P2.3
RET
;-------------------------------------------------
;选通74HC245L子程序
;功能:选通74HC245L
;-------------------------------------------------
;-------------------------------------------------
;关闭74HC245L子程序
;功能:关闭74HC245L
;-------------------------------------------------
;-------------------------------------------------
;LED显示子程序
;功能:完成数字的显示
;R1=要显示数据
;-------------------------------------------------
WULED: MOV DPTR, #WULED1
PUSH PSW
SETB RS0
SETB RS1
MOV R4,#0FFH
WUAA1: MOV A,R1
MOV B,A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
LCALL WUSEL5
LCALL WUDELAY3
MOV A,B
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
LCALL WUSEL4
LCALL WUDELAY3
DJNZ R4,WUAA1
POP PSW
RET
;-------------------------------------------------
;位选子程序
;功能:选通第4位
;-------------------------------------------------
WUSEL4: SETB P2.7
SETB P2.6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -