📄 voting.a51
字号:
SETB RW4
JNB CL1, ROW3
JNB CL2, ROW3
JNB CL3, ROW3
JNB CL4, ROW3
SETB RW1
SETB RW2
SETB RW3
CLR RW4
JNB CL1, ROW4
JNB CL2, ROW4
JNB CL3, ROW4
JNB CL4, ROW4
ROW1:
MOV DPTR, #KCODE1
SJMP FIND
ROW2:
MOV DPTR, #KCODE2
SJMP FIND
ROW3:
MOV DPTR, #KCODE3
SJMP FIND
ROW4:
MOV DPTR, #KCODE4
SJMP FIND
FIND:
JB CL1, N1
JMP MATCH
N1:
INC DPTR
JB CL2, N2
JMP MATCH
N2:
INC DPTR
JB CL3, N3
JMP MATCH
N3:
INC DPTR
JB CL4, STRT1
JMP MATCH
STRT1: LJMP STARTING
MATCH:
CLR A
MOVC A, @A+DPTR
RET ;TO RETURN FROM KEYDETECTION MODULE
KCODE1: DB '0','1','2','3'
KCODE2: DB '4','5','6','7'
KCODE3: DB '8','9','A','B'
KCODE4: DB 'C','D','E','F'
DELAY:
MOV R4, #255
NEXT: MOV R5, #255
AGAIN: DJNZ R5, AGAIN
DJNZ R4, NEXT
RET
;*****************KEYDETECTION MODULE ENDS HERE*****************
;***********************LCD DISPLAY MODULES**********************
EVM_LCD1: ;********************EVM_LCD1 STARTS HERE********
; MOV DATAPORT,#0FFH
; ACALL LCD216 ;LCD INITIALISATION
; ACALL LCDCLR
; ACALL RETHOME
; ACALL DONCOFF ;LCD INITIALISED
ACALL LCDCLR
ACALL FCBFL
ACALL COMMAND
MOV DPTR,#TABLE11
ACALL WRITE
ACALL FCBSL
ACALL COMMAND
MOV DPTR,#TABLE21
ACALL WRITE
RET ;******TO RETURN FROM EVM_LCD1*********
TABLE11: DB 'VOTING MODE',0
TABLE21: DB 'STARTING.....',0
EVM_LCD2: ;********************EVM_LCD2 STARTS HERE********
;MOV DATAPORT,#0FFH
;ACALL LCD216 ;LCD INITIALISATION
; ACALL LCDCLR
; ACALL RETHOME
; ACALL DONCOFF ;LCD INITIALISED
ACALL LCDCLR
ACALL FCBFL
ACALL COMMAND
MOV DPTR,#TABLE12
ACALL WRITE
ACALL FCBSL
ACALL COMMAND
MOV DPTR,#TABLE22
ACALL WRITE
RET ;******TO RETURN FROM EVM_LCD2*********
TABLE12: DB 'ENTER PASSWORD',0
TABLE22: DB '6 CHARACTER LONG',0
EVM_LCD3: ;********************EVM_LCD3 STARTS HERE********
; MOV DATAPORT,#0FFH
; ACALL LCD216 ;LCD INITIALISATION
; ACALL LCDCLR
; ACALL RETHOME
; ACALL DONCOFF ;LCD INITIALISED
ACALL LCDCLR
ACALL FCBFL
ACALL COMMAND
MOV DPTR,#TABLE13
ACALL WRITE
ACALL FCBSL
ACALL COMMAND
MOV DPTR,#TABLE23
ACALL WRITE
RET ;******TO RETURN FROM EVM_LCD3*********
TABLE13: DB 'WRONG PASSWORD',0
TABLE23: DB 'ENTERED....',0
EVM_LCD4: ;********************EVM_LCD4 STARTS HERE********
; MOV DATAPORT,#0FFH
; ACALL LCD216 ;LCD INITIALISATION
; ACALL LCDCLR
; ACALL RETHOME
; ACALL DONCOFF ;LCD INITIALISED
ACALL LCDCLR
ACALL FCBFL
ACALL COMMAND
MOV DPTR,#TABLE14
ACALL WRITE
ACALL FCBSL
ACALL COMMAND
MOV DPTR,#TABLE24
ACALL WRITE
RET ;******TO RETURN FROM EVM_LCD4*********
TABLE14: DB 'PASWORD ACCEPTED',0
TABLE24: DB 'PROCEED AHEAD..',0
EVM_LCD5: ;********************EVM_LCD5 STARTS HERE********
; MOV DATAPORT,#0FFH
; ACALL LCD216 ;LCD INITIALISATION
; ACALL LCDCLR
; ACALL RETHOME
; ACALL DONCOFF ;LCD INITIALISED
ACALL LCDCLR
ACALL FCBFL
ACALL COMMAND
MOV DPTR,#TABLE15
ACALL WRITE
ACALL FCBSL
ACALL COMMAND
MOV DPTR,#TABLE25
ACALL WRITE
RET ;******TO RETURN FROM EVM_LCD5*********
TABLE15: DB 'RESULT MODE',0
TABLE25: DB 'STARTING...',0
;***********************LCD ROUTINES COMMON TO ALL*******************
;LCD ROUTINES
CHKBUSY: ;Checks for the status of the LCD
SETB D7
CLR RS
SETB RW
LOOP:
CLR EN
SETB EN
JB D7,LOOP
RET
DISPLAY:
ACALL CHKBUSY
MOV DATAPORT,A
SETB RS
CLR RW
SETB EN
CLR EN
RET
COMMAND:
ACALL CHKBUSY
MOV DATAPORT,A
CLR RS
CLR RW
SETB EN
CLR EN
RET
LCD216:
MOV A,#38H ;FORCES 2 X 16 MATRIX
ACALL COMMAND
RET
LCDCLR:
MOV A,#01H
ACALL COMMAND
RET
RETHOME:
MOV A,#02H ;RETURN HOME
ACALL COMMAND
RET
DONCOFF:
MOV A,#0CH
ACALL COMMAND
RET
DONCB:
MOV A,#0FH
ACALL COMMAND
RET
FCBFL:
MOV A,#80H
ACALL COMMAND
RET
FCBSL:
MOV A,#0C0H
ACALL COMMAND
RET
SCR: ;NO NEED OF THIS ROUTINE
MOV A,#14H
ACALL COMMAND
RET
WRITE:
CLR A
MOVC A,@A+DPTR
JZ BACK2
ACALL DISPLAY
INC DPTR
JMP WRITE
BACK2: RET
BACK3:
MOV A,DIG5
ACALL DISPLAY
MOV A,DIG4
ACALL DISPLAY
MOV A,DIG3
ACALL DISPLAY
MOV A,DIG2
ACALL DISPLAY
MOV A,DIG1
ACALL DISPLAY
RET
;*****************LCD ROUTINES COMMON TO ALL END HERE************************
;******************EEPROM READ AND WRITE ROUTINES***************************
;*******ROUTINE1: READING STATUS BYTE TO GO IN WHICH MODE********
STATREAD:
MOV A,#WTCMD ;LOAD WRITE COMMAND TO SEND ADDRESS
CALL OUTS ;SEND IT
MOV A,#00H ;GET LOW BYTE ADDRESS
CALL OUT ;SEND IT
CALL CREAD ;GET DATA BYTE
MOV A,R1
MOV STATUS,A
;MOV DPTR,#000h
;ACALL EEPROM_READ
;MOV STATUS,A
RET
;************************ROUTINE 2: TO SET STATUS AS ZERO***********************
STATWRITE0:
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
MOV A,#00H ;GET BYTE ADDRESS
CALL OUT ;SEND IT
MOV A,#00H ;GET DATA
CALL OUT ;SEND IT
CALL STOP ;SEND STOP CONDITION
ACALL DELAY_STOP
;MOV DPTR,#000h
;MOV B,#00h
;ACALL EEPROM_WRITE
RET
;************************ROUTINE 3: TO SET STATUS AS ONE***********************
STATWRITE1:
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
MOV A,#00H ;GET BYTE ADDRESS
CALL OUT ;SEND IT
MOV A,#01H ;GET DATA
CALL OUT ;SEND IT
CALL STOP ;SEND STOP CONDITION
ACALL DELAY_STOP
;MOV DPTR,#000h
;MOV B,#01h
;ACALL EEPROM_WRITE
RET
;************************ROUTINE 4: TO WRITE TOTAL NUMBER OF VOTES***************
TOTALWRITE:
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
MOV A,#84H ;GET BYTE ADDRESS
CALL OUT ;SEND IT
MOV A,TOTALLB ;GET DATA
CALL OUT ;SEND IT
CALL STOP ;SEND STOP CONDITION
ACALL DELAY_STOP
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
MOV A,#85H ;GET BYTE ADDRESS
CALL OUT ;SEND IT
MOV A,TOTALHB ;GET DATA
CALL OUT ;SEND IT
CALL STOP ;SEND STOP CONDITION
ACALL DELAY_STOP
;MOV DPTR,#125H
;MOV R0,#TOTALLB
;MOV B,@R0
;ACALL EEPROM_WRITE
;INC R0
;MOV B,@R0
;INC DPTR
;ACALL EEPROM_WRITE
RET
;***************************ROUTINE 5:TO READ TOTAL NUMBER OF VOTES **************
TOTALREAD:
MOV A,#WTCMD ;LOAD WRITE COMMAND TO SEND ADDRESS
CALL OUTS ;SEND IT
MOV A,#84H ;GET LOW BYTE ADDRESS
CALL OUT ;SEND IT
CALL CREAD ;GET DATA BYTE
MOV A,R1
MOV TOTALLB,A
MOV A,#WTCMD ;LOAD WRITE COMMAND TO SEND ADDRESS
CALL OUTS ;SEND IT
MOV A,#85H ;GET LOW BYTE ADDRESS
CALL OUT ;SEND IT
CALL CREAD ;GET DATA BYTE
MOV A,R1
MOV TOTALHB,A
;MOV DPTR,#125H
;ACALL EEPROM_READ
;MOV TOTALLB,A
;INC DPTR
;ACALL EEPROM_READ
;MOV TOTALHB,A
RET
;************************ROUTINE 6: WRITING VOTES OF INDIVIDUAL CANDIDATE************
VOTEWRITE:
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
MOV A, CCODE
MOV B,#02h
MUL AB
MOV HBADD,A
CALL OUT ;SEND IT, A IS HOLDING D ADDRESS WHERE V HAV TO WRITE
MOV R0,#30h
MOV A,HBADD
ADD A,R0
MOV R0,A
MOV A,@R0
CALL OUT ;SEND IT
CALL STOP ;SEND STOP CONDITION
ACALL DELAY_STOP
INC R0
;ACALL EEPROM_WRITE
MOV A,#WTCMD ;LOAD WRITE COMMAND
CALL OUTS ;SEND IT
INC HBADD
MOV A,HBADD ;GET BYTE ADDRESS
CALL OUT ;SEND IT
MOV A,@R0 ;GET DATA
CALL OUT ;SEND IT
CALL STOP ;SEND STOP CONDITION
ACALL DELAY_STOP
;INC R0
;MOV B,@R0
;INC DPTR
;ACALL EEPROM_WRITE
RET
;************** ROUTINE 7: READING VOTES OF EACH CANDIDATE INTO IRAM***************
VOTEREAD:
MOV R3,#10h
MOV R0,#32h
MOV MEMORY,#02h
LABEL:
MOV A,#WTCMD ;LOAD WRITE COMMAND TO SEND ADDRESS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -