You are on page 1of 24

//PROGRAME FOR BIOMETRIC VOTING MACHINE//

ORG 0

AJMP MAIN

ORG 10

SDA EQU P1.0

SCL EQU P1.1

MAIN:

MOV SP,#60H //STACK POINTER

ACALL LCD_INIT //INITIALIZE LCD

MOV DPTR,#MESSAGE1

CALL LCD_STRING //DISPLAY MESSAGE ON LCD

CALL NEXT_LINE //PLACE CURSOR TO;SECOND LINE

MOV DPTR,#MESSAGE2

CALL LCD_STRING //DISPLAY MESSAGE ON LCD

LCALL LOOP

LCALL LOOP

LCALL LOOP

LCALL LOOP

LCALL LOOP

LCALL LOOP

//GET STATUS BYTE FROM EEPROM ADDRESS 00H//

//CHECK FOR DIFFERENT STATUS//

GETSTAT: LCALL EPRRST


LCALL I2C_START

MOV R4,#0A1H

LCALL I2C_OUTB

MOV R4,#0

LCALL I2C_INB

LCALL I2C_STOP

MOV A,R4

//CHECKING THEN STATUS OF MACHINE//

CJNE A,#00,CHKST1

JMP STATUS0

CHKST1: CJNE A,#01,CHKST2

JMP STATUS1

CHKST2: CJNE A,#02,STATUS4

JMP STATUS2

STATUS4:LJMP STATS4

//STATUS 0 IS IDLE CONDITION//

//AFTER CHANGING SW1 TO ON CAN DO VOTING//

STATUS0:MOV DPTR,#SWVOTE

DISPW: LCALL LCD_CLEAR

LCALL LCD_STRING

CHKSW1: JB P2.5,POLL
WRONG: MOV DPTR,#WRONGG

SJMP DISPW

//STATUS1 IS THE CINDITION THAT VOTING STATRTED.//

STATUS1:

POLL: JB P2.4,CHKSW1

LCALL EPRRST

MOV R4,#01H

LCALL I2C_OUTB

LCALL I2C_STOP

POLLGOING:LCALL LCD_CLEAR

MOV DPTR,#POLLGON

LCALL LCD_STRING

READY: JNB P2.6,VOTING_READY //THUMP SENCING SWITCH

JNB P2.5,STOPPOL

JMP READY

STOPPOL: JMP STOPPOLL

VOTING_READY:MOV 0AH,#0

MOV DPTR,#NAME1

MOV 52H,83H

MOV 53H,82H

MOV DPTR,#POS1

MOV 50H,83H

MOV 51H,82H

MOV R3,#10H
NXTP: MOV R0,#30H

LCALL LCD_CLEAR

MOV 83H,50H

MOV 82H,51H

LCALL LCD_STRING

MOV 50H,83H

MOV 51H,82H

LCALL NEXT_LINE

CANDI: MOV R5,#8

MOV 83H,52H

MOV 82H,53H

NEXTC: LCALL LCD_STRING

LCALL NEXT_LINE

MOV R6,#5

DLY: MOV R7,#55

LCALL KEYBOARD

ANYKEY: LCALL KEYSCAN

CJNE A,#0,VOTECAST

JNB P2.5,STAT2

DJNZ R7,ANYKEY

DJNZ R6,DLY

DJNZ R5, NEXTC

JMP CANDI

STAT2: JMP STATUS2

VOTECAST:
SETB P2.7 ////////////////BUZZER ON////////////////

MOV 32H,#0

MOV A,0AH

NXT1: CJNE A,#0,CAL

JMP WRIT

CAL: MOV R6,0AH

YY: MOV A,32H

ADD A,#08H

MOV 32H,A

DJNZ R6,YY

WRIT: INC 0AH

MOV A,32H

ADD A,20H

MOV 21H,A

ADD A,21H

MOV 32H,A

MOV 30H,#0A0H

MOV 31H,#0

MOV R0,#30H

MOV R7,#3

LCALL WRTEPRM

LCALL I2C_START

MOV R4,#0A1H

LCALL I2C_OUTB

LCALL I2C_INB
MOV 30H,R4

MOV R4,#0H

LCALL I2C_INB

LCALL I2C_STOP

INC R4

MOV A,R4

ANL A,#0FH

CJNE A,#0AH,MAKE10

MOV A,R4

ANL A,#0F0H

ADD A,#10H

MOV R4,A

CJNE A,#0A0H,MAKE10

MOV R4,#0

INC 30H

MAKE10: MOV R7,#5

MOV 33H,30H

MOV 34H,R4

MOV 30H,#0A0H

MOV 31H,#0

MOV R0,#30H

LCALL WRTEPRM

LCALL I2C_STOP

MOV A,0AH

CJNE A,#01H,N1

MOV DPTR,#NAME2

JMP LAST
N1: CJNE A,#02H,N2

MOV DPTR,#NAME3

JMP LAST

N2: CJNE A,#03H,N3

MOV DPTR,#NAME4

JMP LAST

N3: CJNE A,#04H,N4

MOV DPTR,#NAME5

JMP LAST

N4: CJNE A,#05H,N5

MOV DPTR,#NAME6

JMP LAST

N5: CJNE A,#06H,N6

MOV DPTR,#NAME7

JMP LAST

N6: CJNE A,#07H,N7

MOV DPTR,#NAME8

JMP LAST

N7: CJNE A,#08,N8

MOV DPTR,#NAME9

JMP LAST

N8: CJNE A,#09,N9

MOV DPTR,#NAME10

JMP LAST

N9: CJNE A,#0AH,N10

MOV DPTR,#NAME11

JMP LAST
N10: CJNE A,#0BH,N11

MOV DPTR,#NAME12

JMP LAST

N11: CJNE A,#0CH,N12

MOV DPTR,#NAME13

JMP LAST

N12: CJNE A,#0DH,N13

MOV DPTR,#NAME14

JMP LAST

N13: CJNE A,#0EH,N14

MOV DPTR,#NAME15

JMP LAST

N14: CJNE A,#0FH,N15

MOV DPTR,#NAME16

JMP LAST

N15: MOV DPTR,#NAME2

LAST: MOV 52H,83H

MOV 53H,82H

DJNZ R3,NEXTP

JMP POLLGOING

NEXTP: JMP NXTP

STATUS2: //POLLING STOPPED CONDITION

MOV 30H,#0A0H

MOV 31H,#0H
MOV 32H,#0H

MOV 33H,#02H

MOV R7,#4

MOV R0,#30H

LCALL WRTEPRM

LCALL I2C_STOP

STOPPOLL: LCALL LCD_CLEAR

MOV DPTR,#POLLSTOPP

LCALL LCD_STRING

LCALL NEXT_LINE

MOV DPTR,#SW2COUNT

STRING: LCALL LCD_STRING

JNB P2.5,CHKSW2

MOV DPTR,#WRONGG

LCALL LCD_CLEAR

JMP STRING

CHKSW2: JNB P2.4,STOPPOLL

MOV 30H,#0A0H

MOV 31H,#0

MOV 32H,#0

MOV 33H,#04H

MOV R0,#30H

MOV R7,#4

LCALL WRTEPRM
LCALL I2C_STOP

STATS4: //COUNTING PHASE OF MACHINE//

MOV DPTR,#NAME1

MOV 52H,83H

MOV 53H,82H

MOV DPTR,#POS1

MOV 50H,83H

MOV 51H,82H

MOV R3,#10H //NO OF CANDIDATES TO BE DISPLAYED(IN COUNTING)//

LCALL EPRRST

LCALL I2C_START

MOV R4,#0A1H

LCALL I2C_OUTB

MOV R7,#0FH

MOV R0,#30H

LCALL RDEPRM

MOV R4,#0

LCALL I2C_INB

LCALL I2C_STOP

NXTPOS: MOV R0,#32H

LCALL LCD_CLEAR

MOV 83H,50H

MOV 82H,51H

LCALL LCD_STRING

MOV 50H,83H
MOV 51H,82H

MOV R5,#8

NEXTCAN: LCALL NEXT_LINE

MOV 83H,52H

MOV 82H,53H

LCALL LCD_STRING

MOV 52H,83H

MOV 53H,82H

MOV A, #8BH //POSITION OF DISPLY OF VOTES//

CLR P2.0

LCALL LO

MOV A,@R0

LCALL ASCI

INC R0

MOV A,@R0

LCALL ASCI

SETB P2.2

CLR P2.3

INC R0

LCALL DELAYL

LCALL DELAYL

LCALL DELAYL

DISPSAME: ACALL KEYBOARD

LCALL KEYSCAN

CJNE R2,#00H,NXTCAN

JMP DISPSAME
NXTCAN: DJNZ R5,NEXTCAN

MOV R0,#30H

MOV R4,#0A1H

LCALL I2C_START

LCALL I2C_OUTB

MOV R7,#0FH

LCALL RDEPRM

MOV R4,#0

LCALL I2C_INB

LCALL I2C_STOP

DJNZ R3,NXTPO

//CLEARING ALL DATAS OF EPROM//

MOV DPTR,#RESETWRD

LCALL LCD_CLEAR

LCALL LCD_STRING

KEYPRESS: LCALL KEYBOARD

PRESS1: LCALL KEYSCAN

CJNE R2,#0,KEYYES

JMP PRESS1

KEYYES: LCALL I2C_START

LCALL EPRRST

MOV R4,#0H

MOV 8,#00
MOV R3,#18H

RPTCLR1: MOV R7,#10H

RPTCLR: LCALL I2C_OUTB

INC 8

DJNZ R7,RPTCLR

LCALL I2C_STOP

LCALL LOOP

MOV 32H,8

LCALL EPRRST1

MOV R4,#0H

DJNZ R3,RPTCLR1

LCALL I2C_STOP

JMP MAIN

KEYBOARD: SETB P2.2

CLR P2.3

ACALL PRESSED

SETB P2.3

CLR P2.2

ACALL PRESSED

RET

KEYSCAN: CPL P2.3

CPL P2.2

MOV A,P0

ANL A,#0F0H

CJNE A,#0,AA

CLR P2.7 ////////////////BUZZER OFF////////////////


JMP STORE

AA: SWAP A

JB ACC.3,MINS4

JB ACC.2,MINS1

JMP ADDIT

MINS4: RR A

JMP ADDIT

MINS1: DEC A

ADDIT: JB P2.2,STORE

ADD A,#4

STORE: MOV 21H,A

MOV R2,A

MOV 20H,A

RET

EPRRST: MOV 32H,#0

EPRRST1: MOV 30H,#0A0H

MOV 31H,#0

MOV R7,#3

MOV R0,#30H

LCALL WRTEPRM
RET

PRESSED: MOV A,P0

ANL A,#0F0H

CJNE A,#00,PRESSED

RET

LCD_INIT: //INITIALIZE LCD IN 4-BIT MODE//

ANL P0,#0F0H

CALL LOOP

MOV DPTR,#LCDCODE

MOV A,#0H

MOV R6,#0H

MOV R7,#0H

CLR P2.0 ;RS COMMAND

NEXT: //8-BIT CODE IS SPLIT INTO TWO 4-BIT NIBBLES.//

INC R6

MOVC A,@A+DPTR

LCALL LO

MOV A,R6

CJNE R6,#09H,NEXT

RET

ASCI: MOV B,A

SWAP A

ANL A,#0FH

ORL A,#30H

SETB P2.0
LCALL LO

MOV A,B

ANL A,#0FH

ORL A,#30H

LCALL LO

RET

LCD_STRING:

MOV P0,#00H

SETB P2.0 ;RS DATA

MOV R6,#00H

NC: //CHECKS THE END OF MESSAGE STRING

MOV A,#00H

MOVC A,@A+DPTR

CJNE A,#2FH,NC1

INC DPTR

RET

NC1:

LCALL LCD_WRITE

MOV R7,#5

LCALL LOOP1

INC R6

INC DPTR

;MOV A,R6

AJMP NC

LCD_WRITE:
SETB P2.0 ;RS DATA

CALL LO

RET

NEXT_LINE:

MOV P0,#00H

CLR P2.0 ;RS COMMAND

MOV A,#0C0H

CALL LO

RET

LCD_CLEAR: //THIS SUBROUTINE IS USED TO CLEAR LCD

CALL DELAYL

ANL P0,#00H

MOV A,#01H

CLR P2.0 ; RS COMMAND

LO: //8-BIT CODE IS SPLIT INTO TWO 4-BIT NIBBLES.

PUSH 7

MOV R7,A

ANL A,#0F0H

SWAP A

ANL P0,#0F0H

ORL P0,A

CALL ENABLE

MOV A,R7

ANL A,#0FH

ANL P0,#0F0H
ORL P0,A

CALL ENABLE

POP 7

RET

ENABLE: //GIVE HIGH-TO-LOW PULSE AT ENABLE PIN

SETB P2.1

CALL DELAYL

CLR P2.1

CALL DELAYL

RET

//WITH RESPECT TO CRYSTAL FREQUENCY 3.579 MHZ

DELAYL: //5MS DELAY

SETB PSW.4 ; SELECT BANK 2

MOV R7,#25

HDH:

MOV R6,#60

DJNZ R6,$

DJNZ R7,HDH

CLR PSW.4 //DEFAULT BANK //

RET

LOOP: //1 SEC DELAY//


MOV R7,#100

LOOP1:

CALL DELAYL

CALL DELAYL

DJNZ R7,LOOP1

RET

I2C_START:

SETB SDA

MOV A, #5 // WAIT TR + TSU:DAT, PREVENT "STOP"

MOV R1, #7

SETB SCL //RELEASE BUS

DJNZ R1, $ // WAIT TR + TSU:STA (> 5.7US)

CLR SDA // HIGH-TO-LOW SDA WITH SCL HIGH

MOV R1, A

DJNZ R1, $ //WAIT TF + THD:STA (> 4.3US)

CLR SCL // SCL LOW, ENABLE DATA CHANGE

DJNZ ACC, $ // WAIT TF + TLOW (> 5US)

RET

I2C_STOP: PUSH 01

CLR SDA

NOP // WAIT TF + TSU:DAT, PREVENT "START"

MOV R1, #0FH

SETB SCL // PREPARE FOR "STOP"

DJNZ R1, $ // WAIT TR + TSU:STO (> 5.7US)


SETB SDA

POP 01 // LOW-TO-HIGH SDA WITH SCL HIGH

RET

I2C_OUTB:

SETB C // CY = 1, GET ACK BIT

MOV A, R4 ; BYTE TO BE SHIFTED IN A

SJMP I2C_SHIFT

I2C_INB:

MOV A, R4

ADD A, #0FFH //MOVE ACK BIT INTO CY

CPL C

MOV A, #0FFH // SDA HIGH

I2C_SHIFT:

PUSH 01

MOV R1, #9 // BIT COUNTER, 8 BITS + ACK

L_NEXT_BIT:

RLC A //MOVE BIT7 INTO CY

MOV SDA, C ; OUTPUT BIT

MOV R4, #2

DJNZ R4, $ ; WAIT TR + TSU:DAT + MORE (3US)

SETB SCL ; RAISE CLOCK

MOV R4, #5
DJNZ R4, $ ; WAIT TR + THIGH (5US)

MOV C, SDA ; INPUT BIT

CLR SCL //DROP CLOCK

DJNZ R1, L_NEXT_BIT //NOW WAIT TF + TLOW (> 5US)

CPL C // ACK BIT

MOV R4, A

POP 01

RET

WRTEPRM:

LCALL I2C_START

RPTWRT:

MOV A,@R0

INC R0

MOV R4,A

LCALL I2C_OUTB

DJNZ R7,RPTWRT

RET

RDEPRM: MOV R4,#0FH

LCALL I2C_INB

MOV A,R4

MOV @R0,A

INC R0

DJNZ R7,RDEPRM
RET

//LCD INITIALIZING CODE (DO NOT DISTURB THIS)LCDCODE://

LCDCODE:

DB 02H

DB 02H

DB 02H

DB 28H

DB 28H

DB 28H

DB 0CH

DB 06H

DB 01H

DB 14H

//DATA TO BE DISPLAYED

//MAXIMUM MESSAGE LENGTH = 16 CHARACTERS.

//TO NOTIFY END OF MESSAGE PLACE '/' AT THE END.

MESSAGE1: DB " BIOMETRIC /"

MESSAGE2: DB " VOTING MACHINE/" ;CHANGE MESSAGE2

WRONGG: DB"WRONG KEY/"

SWVOTE: DB"ON SW1 FOR VOTE/"

POLLGON: DB"POLLING GOING ON/"

POLLSTOPP: DB"POLLING STOPPED/"


SW2COUNT: DB"ON SW2 FOR COUNT/"

POS1: DB"CHAIRMAN/"

POS2: DB"COUNCILOR /"

POS3: DB"ARTS CLUB SEC/"

POS4: DB"GEN SEC/"

POS5: DB"MAG EDITOR/"

POS6: DB"VC/"

POS7: DB"LVC/"

POS8: DB"REP EL1/"

POS9: DB"REP EL2/"

POS10: DB"REP EL3/"

POS11: DB"REP CT1/"

POS12: DB"REP CT2/"

POS13: DB"REP CT3/"

POS14: DB"REP IT1/"

POS15: DB"REP IT2/"

POS16: DB"REP IT3/"

NAME1: DB"1.ANOOP /2.ANUJA/3.ARYA


/4.DERIC/5.JYOTHY/6.PRATHEESH/7.RAKHUL /8.SHAIJU/"

NAME2: DB"1.COUNCILOR 1/2.COUNCILOR 2/3.NC /4./5./6./7./8./"

NAME3: DB"1.ACS 1/2.ASC 2/3.NC /4./5./6./7./8./"

NAME4: DB"1.GS 1/2.GS 2/3.NC /4./5./6./7./8./"

NAME5: DB"1.ME 1/2.ME 2/3.NC /4./5./6./7./8./"

NAME6: DB"1.VC 1/2.VC 2/3.NC /4./5./6./7./8./"

NAME7: DB"1.LVC 1/2.LVC 2/3.LVC 3/4.NC /5./6./7./8./"

NAME8: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME9: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME10: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"


NAME11: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME12: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME13: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME14: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME15: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

NAME16: DB"1.REP 1/2.REP 2/3.NC /4./5./6./7./8./"

//ERRMSG: DB"EPROM ERR/"

RESETWRD: DB"DELETE ALL DATA?/"

END

You might also like