📄 pgm.asm
字号:
; ***LCD CONTROL***
LCD_RS EQU P2.7 ;LCD REGISTER SELECT LINE
LCD_E EQU P2.6 ;LCD ENABLE LINE
LCD_DB4 EQU P2.5 ;PORT 1 IS USED FOR DATA
LCD_DB5 EQU P2.4 ;USED FOR DATA
LCD_DB6 EQU P2.3 ;FOR DATA
LCD_DB7 EQU P2.2 ;FOR DATA
; ***CURSOR CONTROL INSTRUCTIONS***
OFFCUR EQU 0CH
BLINKCUR EQU 0DH
; ***DISPLAY CONTROL INSTRUCTIONS***
CLRDSP EQU 01H
ONDSP EQU 0CH
; ***SYSTEM INSTRUCTIONS***
CONFIG EQU 28H ; 4-BIT DATA,2 LINES,5X7 MATRIX LCD
ENTRYMODE EQU 6 ; INCREMENT CURSOR DON'T SHIFT DISPLAY
RB0 EQU 000H ; Select Register Bank 0
RB1 EQU 008H ; Select Register Bank 1 ...poke to PSW to use
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INPUTS1 EQU P0
INP1 EQU P0.0
INP2 EQU P0.1
INP3 EQU P0.2
INP4 EQU P0.3
INP5 EQU P0.4
INP6 EQU P0.5
INP7 EQU P0.6
INP8 EQU P0.7
INPUTS2 EQU P1
INP9 EQU P1.0
INP10 EQU P1.1
INP11 EQU P1.2
INP12 EQU P1.3
INP13 EQU P1.4
INP14 EQU P1.5
INP15 EQU P1.6
INP16 EQU P1.7
KEYS EQU P3
ROW1 EQU P3.1
ROW2 EQU P3.2
ROW3 EQU P3.3
ROW4 EQU P3.4
COL1 EQU P3.5
COL2 EQU P3.6
COL3 EQU P3.7
RELAY1 EQU P1.6
RELAY2 EQU P1.7
RELAY3 EQU P3.0
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DSEG ; This is internal data memory
ORG 20H ; Bit adressable memory
GATEES: DS 1 ;Temp register to store the results of the gates
GATE1 BIT GATEES.0
GATE2 BIT GATEES.1
GATE3 BIT GATEES.2
GATE4 BIT GATEES.3
GATE5 BIT GATEES.4
GATE6 BIT GATEES.5
CHIP BIT GATEES.7
STARTSS: DS 1
NUMB BIT STARTSS.0
RESS BIT STARTSS.1
KEY: DS 1
NUMBER: DS 1 ;temp to store dialled number
COUNT: DS 1 ;Count for pressed keys
NUMB1: DS 1 ;Temp Reg to store pressed Keys
NUMB2: DS 1 ;Temp Reg to store pressed Keys
NUMB3: DS 1 ;Temp Reg to store pressed Keys
NUMB4: DS 1 ;Temp Reg to store pressed Keys
NUMB5: DS 1 ;Temp Reg to store pressed Keys
RELAYS: DS 1 ;power supply relays status
GATES: DS 1 ;Number of Gates in a Chip
CSEG ; Code begins here
;---------==========----------==========---------=========---------
; PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
ORG 00H ; Reset
JMP MAIN
;---------==========----------==========---------=========---------
;---------==========----------==========---------=========---------
; Main routine. Program execution starts here.
;---------==========----------==========---------=========---------
MAIN: CALL RESETLCD4
CALL INITLCD4
CALL TITLE
CLR RESS
CLR NUMB ;Bit for checking wheather 7 is pressed first
MOV GATEES,#0FFH ;Gates Status Bits (Assume all Gates are OK)
MOV COUNT,#00H ;Count for pressed keys
MOV NUMB1,#0FFH ;Reset the datas for ket pressed
MOV NUMB2,#0FFH
MOV NUMB3,#0FFH
MOV NUMB4,#0FFH
MOV NUMB5,#0FFH
MOV RELAYS,#00H ;Clear Relays during startup
CLR RELAY1
CLR RELAY2
CLR RELAY3
MOV NUMBER,#0FFH
KEYBOARD:
MOV KEY,#00H
SETB COL1
SETB COL2
SETB COL3
K11: CLR ROW1
CLR ROW2
CLR ROW3
CLR ROW4
MOV A,KEYS
ANL A,#11100000B
CJNE A,#11100000B,K11 ;check till all keys released
K2: ACALL DEALAY ;call 20 msec delay
MOV A,KEYS ;see if any key is pressed
ANL A,#11100000B ;mask unused bits
CJNE A,#11100000B,OVER ;key pressed, await closure
SJMP K2
OVER: ACALL DEALAY
MOV A,KEYS
ANL A,#11100000B
CJNE A,#11100000B,OVER1
SJMP K2
OVER1: MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW1
MOV A,KEYS
ANL A,#11100000B
CJNE A,#11100000B,ROW_1
MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW2
MOV A,KEYS
ANL A,#11100000B
CJNE A,#11100000B,ROW_2
MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW3
MOV A,KEYS
ANL A,#11100000B
CJNE A,#11100000B,ROW_3
MOV A,KEYS
ORL A,#11111110B
MOV KEYS,A
CLR ROW4
MOV A,KEYS
ANL A,#11100000B
CJNE A,#11100000B,ROW_4
LJMP K2
ROW_1: RLC A
JC MAT1
MOV KEY,#01H
AJMP K1
MAT1: RLC A
JC MAT2
MOV KEY,#02H
AJMP K1
MAT2: RLC A
JC K1
MOV KEY,#03H
AJMP K1
ROW_2: RLC A
JC MAT3
MOV KEY,#04H
AJMP K1
MAT3: RLC A
JC MAT4
MOV KEY,#05H
AJMP K1
MAT4: RLC A
JC K1
MOV KEY,#06H
AJMP K1
ROW_3: RLC A
JC MAT5
MOV KEY,#07H
AJMP K1
MAT5: RLC A
JC MAT6
MOV KEY,#08H
AJMP K1
MAT6: RLC A
JC K1
MOV KEY,#09H
AJMP K1
ROW_4: RLC A
JC MAT7
MOV KEY,#10H
AJMP K1
MAT7: RLC A
JC MAT8
MOV KEY,#00H ;for 0
AJMP K1
MAT8: RLC A
JC K1
MOV KEY,#12H
K1: INC COUNT
MOV A,KEY
CJNE A,#01H,NXT2
MOV R4,#31H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT2: CJNE A,#02H,NXT3
MOV R4,#32H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT3: CJNE A,#03H,NXT4
MOV R4,#33H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT4: CJNE A,#04H,NXT5
MOV R4,#34H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT5: CJNE A,#05H,NXT6
MOV R4,#35H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT6: CJNE A,#06H,NXT7
MOV R4,#36H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT7: CJNE A,#07H,NXT8
JB RESS,DAFD1
CALL IC_TITLE
SETB RESS
DAFD1: MOV R4,#37H
CALL WRLCDDATA ; It was data, write it to Lcd
JB NUMB,GFG1
SETB NUMB
GFG1: AJMP K22
NXT8: CJNE A,#08H,NXT9
MOV R4,#38H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT9: CJNE A,#09H,NXT10
MOV R4,#39H
CALL WRLCDDATA
AJMP K22
NXT10: CJNE A,#10H,NXT11 ;Button for *
MOV RELAYS,#00H ;Clear Relays during startup
CLR RELAY1
CLR RELAY2
CLR RELAY3
CALL IC_TITLE
CLR NUMB
MOV COUNT,#00H
AJMP KEYBOARD
NXT11: CJNE A,#00H,NXT12
MOV R4,#30H
CALL WRLCDDATA ; It was data, write it to Lcd
AJMP K22
NXT12: CJNE A,#12H,K22 ;Button for Search
MOV A,COUNT
CJNE A,#01H,KJK1
CALL WARNING1 ;Display Enter the Ic Number
CALL DELAY
CALL IC_TITLE
MOV COUNT,#00H
JMP KEYBOARD
KJK1: MOV COUNT,#00H
CALL SEARCH
MOV NUMB1,#0FFH ;Reset the datas for ket pressed
MOV NUMB2,#0FFH
MOV NUMB3,#0FFH
MOV NUMB4,#0FFH
MOV NUMB5,#0FFH
CLR NUMB
MOV RELAYS,#00H ;Clear Relays during startup
CLR RELAY1
CLR RELAY2
CLR RELAY3
JMP KEYBOARD
K22: JB NUMB,DFFD1
CALL WARNING
CALL DELAY
CALL IC_TITLE
MOV COUNT,#00H
JMP KEYBOARD
DFFD1: MOV R0,COUNT
CJNE R0,#01H,VBV1
MOV NUMB1,KEY
JMP KEYBOARD
VBV1: CJNE R0,#02H,VBV2
MOV NUMB2,KEY
JMP KEYBOARD
VBV2: CJNE R0,#03H,VBV3
MOV NUMB3,KEY
JMP KEYBOARD
VBV3: CJNE R0,#04H,VBV4
MOV NUMB4,KEY
JMP KEYBOARD
VBV4: CJNE R0,#05H,VBV5
MOV NUMB5,KEY
JMP KEYBOARD
VBV5: MOV COUNT,#00H
CALL OVERFLOW
CALL DELAY
CALL IC_TITLE
CLR NUMB
JMP KEYBOARD
;((((((((((((((((((((((((((((((((
DEALAY:
MOV R1,#50
REPP2: NOP
DJNZ R1,REPP2
RET
;((((((((((((((((((((((((((((((((
SEARCH: MOV R1,NUMB2
CJNE R1,#04H,DIGIT
MOV R1,NUMB5
CJNE R1,#0FFH,DIG1
MOV R1,NUMB4
MOV A,NUMB3
SWAP A
ORL A,R1
CALL DATABASE_SEARCH ;Database search for 7400 to 7499
RET
DIGIT: CALL WARNING
CALL DELAY
CALL IC_TITLE
RET
DIG1: MOV R1,NUMB3
CJNE R1,#01H,DIG2
MOV R1,NUMB5
MOV A,NUMB4
SWAP A
ORL A,R1
CALL DATABASE_SEARCH1 ;Database search for 74100 to 74199
RET
DIG2: MOV R1,NUMB3
CJNE R1,#02H,DIG3
MOV R1,NUMB5
MOV A,NUMB4
SWAP A
ORL A,R1
CALL DATABASE_SEARCH2 ;Database search for 74200 to 74299
RET
DIG3: MOV R1,NUMB3
CJNE R1,#03H,DIG4
MOV R1,NUMB5
MOV A,NUMB4
SWAP A
ORL A,R1
; CALL DATABASE_SEARCH3 ;Database search for 74300 to 74399
RET
DIG4: MOV R1,NUMB3
CJNE R1,#04H,DIG5
MOV R1,NUMB5
MOV A,NUMB4
SWAP A
ORL A,R1
CALL DATABASE_SEARCH4 ;Database search for 74400 to 74499
RET
DIG5: MOV R1,NUMB3
CJNE R1,#05H,DIG6
MOV R1,NUMB5
MOV A,NUMB4
SWAP A
ORL A,R1
CALL DATABASE_SEARCH5 ;Database search for 74500 to 74599
RET
DIG6: MOV R1,NUMB3
CJNE R1,#06H,DIG7
MOV R1,NUMB5
MOV A,NUMB4
SWAP A
ORL A,R1
CALL DATABASE_SEARCH6 ;Database search for 74600 to 74699
RET
DIG7: CALL NOTIN_DATABASE ;Display not in Database
CALL DELAY
CALL IC_TITLE
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DATABASE_SEARCH: ;Database search for 7400 to 7499
MOV R1,A
CJNE R1,#00H,ICS0 ;IC 7400
CALL ICNM00
ICX0: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7400_1_3_24_26 ;Call for Database
MOV GATES,#04H ;Number of Gates
CALL ANALYSE
RET
ICS0: CJNE R1,#01H,ICS1 ;IC 7401
CALL ICNM01
AJMP ICX0
ICS1: CJNE R1,#02H,ICS2 ;IC 7402
CALL ICNM02
ASD2: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7402_28
MOV GATES,#04H
CALL ANALYSE
RET
ICS2: CJNE R1,#03H,ICS3 ;IC 7403
CALL ICNM03
AJMP ICX0
ICS3: CJNE R1,#04H,ICS4 ;IC 7404
CALL ICNM04
ICX1: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7404_5_6_14_16_19
MOV GATES,#06H
CALL ANALYSE
RET
ICS4: CJNE R1,#05H,ICS5 ;IC 7405
CALL ICNM05
AJMP ICX1
ICS5: CJNE R1,#06H,ICS6 ;IC 7406
CALL ICNM06
AJMP ICX1
ICS6: CJNE R1,#07H,ICS7 ;IC 7407
CALL ICNM07
ASD1: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7407_17_34_35
MOV GATES,#06H
CALL ANALYSE
RET
ICS7: CJNE R1,#08H,ICS8 ;IC 7408
CALL ICNM08
ICX2: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7408_9_126_130_426
MOV GATES,#04H
CALL ANALYSE
RET
ICS8: CJNE R1,#09H,ICS9 ;IC 7409
CALL ICNM09
AJMP ICX2
ICS9: CJNE R1,#10H,ICS10 ;IC 7410
CALL ICNM10
ICX3: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7410_12
MOV GATES,#03H
CALL ANALYSE
RET
ICS10: CJNE R1,#11H,ICS11 ;IC 7411
CALL ICNM11
ICX4: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7411_15
MOV GATES,#03H
CALL ANALYSE
RET
ICS11: CJNE R1,#12H,ICS12 ;IC 7412
CALL ICNM12
AJMP ICX3
ICS12: CJNE R1,#13H,ICS13 ;IC 7413
CALL ICNM13
ICX5: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7413_18_20_22_40_140
MOV GATES,#02H
CALL ANALYSE
RET
ICS13: CJNE R1,#14H,ICS14 ;IC 7414
CALL ICNM14
AJMP ICX1
ICS14: CJNE R1,#15H,ICS15 ;IC 7415
CALL ICNM15
AJMP ICX4
ICS15: CJNE R1,#16H,ICS16 ;IC 7416
CALL ICNM16
AJMP ICX1
ICS16: CJNE R1,#17H,ICS17 ;IC 7417
CALL ICNM17
AJMP ASD1
ICS17: CJNE R1,#18H,ICS18 ;IC 7418
CALL ICNM18
AJMP ICX5
ICS18: CJNE R1,#19H,ICS19 ;IC 7419
CALL ICNM19
AJMP ICX1
ICS19: CJNE R1,#20H,ICS20 ;IC 7420
CALL ICNM20
AJMP ICX5
ICS20: CJNE R1,#21H,ICS21 ;IC 7421
CALL ICNM21
MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7421
MOV GATES,#02H
CALL ANALYSE
RET
ICS21: CJNE R1,#22H,ICS23 ;IC 7422
CALL ICNM22
AJMP ICX5
ICS23: CJNE R1,#24H,ICS24 ;IC 7424
CALL ICNM24
AJMP ICX0
ICS24: CJNE R1,#25H,ICS25 ;IC 7425
CALL ICNM25
MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7425
MOV GATES,#02H
CALL ANALYSE
RET
ICS25: CJNE R1,#26H,ICS26 ;IC 7426
CALL ICNM26
AJMP ICX0
ICS26: CJNE R1,#27H,ICS27 ;IC 7427
CALL ICNM27
MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7427
MOV GATES,#03H
CALL ANALYSE
RET
ICS27: CJNE R1,#28H,ICS28 ;IC 7428
CALL ICNM28
AJMP ASD2
ICS28: CJNE R1,#30H,ICS30 ;IC 7430
CALL ICNM30
MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7430
MOV GATES,#01H
CALL ANALYSE
RET
ICS30: CJNE R1,#32H,ICS32 ;IC 7432
CALL ICNM32
ASD5: MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7432_125_425
MOV GATES,#04H
CALL ANALYSE
RET
ICS32: CJNE R1,#33H,ICS33 ;IC 7433
CALL ICNM33
AJMP ASD2
ICS33: CJNE R1,#34H,ICS34 ;IC 7434
CALL ICNM34
AJMP ASD1
ICS34: CJNE R1,#35H,ICS35 ;IC 7435
CALL ICNM35
AJMP ASD1
ICS35: CJNE R1,#36H,ICS36 ;IC 7436
CALL ICNM36
MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7436
MOV GATES,#04H
CALL ANALYSE
RET
ICS36: CJNE R1,#37H,ICS37 ;IC 7437
CALL ICNM37
AJMP ICX0
ICS37: CJNE R1,#38H,ICS38 ;IC 7438
CALL ICNM38
AJMP ICX0
ICS38: CJNE R1,#39H,ICS39 ;IC 7439
CALL ICNM39
MOV RELAYS,#01H
CALL PROGRESS_BAR
CALL IC7439
MOV GATES,#04H
CALL ANALYSE
RET
ICS39: CJNE R1,#40H,ICS40 ;IC 7440
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -