⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 voting.a51

📁 8051单片机 a51 投票器 带控制端 含原理图
💻 A51
📖 第 1 页 / 共 3 页
字号:
        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 + -