;*************************************************************************************
;Program that communicates with a keypad and displays only * to mask the number. *
;This display indicates the mode that it is in. The six digit code is input and a *
;calculation is done to determine if the code is correct. *
;*********02/12/2003*****************15H15**********************************BJB*******
;*************************************************************************************
; Setup *
;*************************************************************************************
LIST P=16F84A ;Processor type
ERRORLEVEL -302 ;Suppress warning of bank 1 operands
INCLUDE "P16F84A.INC" ;
MYREG EQU 0X20 ;
OUTPUT EQU 0X21 ;This reg for data reading to out pin
MYREG1 EQU 0X22 ;
MYREG2 EQU 0X23 ;
COUNTER EQU 0X24 ;
DIGITS EQU 0X25 ;
FLASH1 EQU 0X28 ;
DELAY2 EQU 0X29 ;
DELAY3 EQU 0X2A ;
COUNTER1 EQU 0X2B ;
NUMBER1 EQU 0X2C ;
NUMBER2 EQU 0X2D ;
NUMBER3 EQU 0X2E ;
NUMBER4 EQU 0X2F ;
NUMBER5 EQU 0X30 ;
NUMBER6 EQU 0X31 ;
CODEDATA EQU 0X32 ;
CLRF CODEDATA ;
CLRF NUMBER1 ;
CLRF NUMBER2 ;
CLRF NUMBER3 ;
CLRF NUMBER4 ;
CLRF NUMBER5 ;
CLRF NUMBER6 ;
CLRF COUNTER ;
CLRF OUTPUT ;
CLRF MYREG ;
CLRF MYREG1 ;
CLRF MYREG2 ;
CLRF DIGITS ;
CLRF FLASH1 ;
CLRF COUNTER1 ;
BSF STATUS,5 ;Select bank 1
MOVLW 0X00 ;All outputs
MOVWF TRISA ;Ditto
MOVLW 0X0F ;Lower nibble is inputs
MOVWF TRISB ;Ditto
BCF STATUS,5 ;Back to bank 0
BCF PORTB,7 ;R/S Set to zero- command mode
CLRF PORTA ;Ensure all outputs are at zero
GOTO START ;
;*************************************************************************************
; Pinout use *
;*************************************************************************************
;PORTA , 0 is column 1
;PORTA , 1 is column 2
;PORTA , 2 is column 3
;PORTB , 0 is scanning row 1
;PORTB , 1 is scanning row 2
;PORTB , 2 is scanning row 3
;PORTB , 3 is scanning row 4
;PORTB , 4 is clock output
;PORTB , 5 is serial output pin
;PORTB , 6 is enable
;PORTB , 7 is R/S pin
;*************************************************************************************
; Subroutines *
;*************************************************************************************
ENABLE BSF PORTB,6 ;Set ENABLE pin high
CALL DELAY ;Minimum setup time for the LCD
BCF PORTB,6 ;Falling edge needed to trigger LCD
CALL DELAY ;Kill some time
RETURN ;
DELAY MOVLW 0xFF ;Load 255 into W-register
MOVWF MYREG ;Move this data into MYREG
LOOP DECFSZ MYREG,1 ;Decrement MYREG, ans into MYREG
GOTO LOOP ;Loop program till MYREG = 0
RETURN ;
LONGDELAY MOVLW 0XFF ;
MOVWF DELAY2 ;
LOOP2 DECFSZ DELAY2,1 ;
GOTO LDELAY ;
RETURN ;
LDELAY MOVLW 0XFF ;
MOVWF DELAY3 ;
LOOP3 DECFSZ DELAY3,1 ;
GOTO LOOP3 ;
GOTO LOOP2 ;
DELAY1 MOVLW 0x60 ;Load 96 into W-register
MOVWF MYREG2 ;Move this data into MYREG
LOOP1 DECFSZ MYREG2,1 ;Decrement MYREG, ans into MYREG
GOTO LOOP1 ;Loop program till MYREG = 0
RETURN
CLOCK BCF PORTB,4 ;Ensure that *Clock starts at 0
BSF PORTB,4 ;Clock value HIGH
CALL DELAY ;Kill some time
BCF PORTB,4 ;Falling edge *Clock
CALL DELAY ;Kill some time
RETURN ;
SERIAL MOVWF OUTPUT ;Moved data from W to OUTPUT reg
SERIAL1 BCF PORTB,5 ;Ensure that SERIAL pin starts @ 0
MOVLW 0x04 ;There are 4 bits to a nibble
MOVWF MYREG1 ;Nibble control for escape
TEST BTFSC OUTPUT,7 ;Test data bit 7
BSF PORTB,5 ;SET SERIAL pin to 1
CALL CLOCK ;Clock the data to shift register
BCF PORTB,5 ;Reset SERIAL pin for next test
RLF OUTPUT,1 ;Rotate the OUTPUT register left
DECFSZ MYREG1,1 ;Decrement MYREG1, ans into MYREG1
GOTO TEST ;Do next bit of the word till all done
CALL ENABLE ;Enable the LCD to read the data
RETURN ;Escape after the word is output
EX1 MOVF CODEDATA,0 ;Move data to w_reg
MOVWF NUMBER1 ;Move to number1 reg
RETURN ;
EX2 MOVF CODEDATA,0 ;Move data to w_reg
MOVWF NUMBER2 ;Move to number2 reg
RETURN ;
EX3 MOVF CODEDATA,0 ;Move data to w_reg
MOVWF NUMBER3 ;Move to number3 reg
RETURN ;
EX4 MOVF CODEDATA,0 ;Move data to w_reg
MOVWF NUMBER4 ;Move to number4 reg
RETURN ;
EX5 MOVF CODEDATA,0 ;Move data to w_reg
MOVWF NUMBER5 ;Move to number5 reg
RETURN ;
EX6 MOVF CODEDATA,0 ;Move data to w_reg
MOVWF NUMBER6 ;Move to number6 reg
GOTO CHECK ;
;*************************************************************************************
; LCD Initialise *
;*************************************************************************************
START MOVLW 0x20 ;4 bit
CALL SERIAL ;Move this data to the shift register
MOVLW 0x28 ;4 bit, 2 line, 7x5 matrix
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0x0C ;Disp ON, no cursor
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0x02 ;Display & curser home
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0x01 ;Clear display
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0XC0 ;Address 40
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
;
;*************************************************************************************
; INTRO *
;*************************************************************************************
MOVLW 0X03 ;This is for three tries
MOVWF COUNTER1 ;Counter for amount of attempts
ZERO BSF PORTB,7 ;Character mode
MOVLW 'D' ;D
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'i' ;i
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 's' ;s
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW '-' ;-
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'a' ;a
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'r' ;r
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'm' ;m
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'i' ;i
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'n' ;n
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'g' ;g
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW ' ' ;
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'C' ;C
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'o' ;o
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'd' ;d
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'e' ;e
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW '?' ;?
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BCF PORTB,7 ;Command mode
MOVLW 0X85 ;Address
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
;*************************************************************************************
; MAIN *
;*************************************************************************************
CLEARS MOVLW 0X06 ;Setup maximum digits used
MOVWF DIGITS ;This is the max digit used reg
TESTDATA MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;After movf, leave a copy again in DIGITS
XORLW 0X06 ;Has a digit been input ?
BTFSC STATUS,Z ;Well, has it
CLRF CODEDATA ;Ensure that reg CODEDATA is empty
MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;Re-input number of digits left into W
XORLW 0X05 ;2nd digit to follow ?
BTFSC STATUS,Z ;Well, is it ?
CALL EX1 ;Put the numeric value into the correct
;NUMBER register
MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;Re-input number of digits left into W
XORLW 0X04 ;3rd digit to follow ?
BTFSC STATUS,Z ;Well, is it ?
CALL EX2 ;Put the numeric value into the correct
;NUMBER register
MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;Re-input number of digits left into W
XORLW 0X03 ;4th digit to follow ?
BTFSC STATUS,Z ;Well, is it ?
CALL EX3 ;Put the numeric value into the correct
;NUMBER register
MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;Re-input number of digits left into W
XORLW 0X02 ;5th digit to follow ?
BTFSC STATUS,Z ;Well, is it ?
CALL EX4 ;Put the numeric value into the correct
;NUMBER register
MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;Re-input number of digits left into W
XORLW 0X01 ;6th digit to follow ?
BTFSC STATUS,Z ;Well, is it ?
CALL EX5 ;Put the numeric value into the correct
;NUMBER register
MOVF DIGITS,0 ;Re-input number of digits left into W
MOVWF DIGITS ;Re-input number of digits left into W
XORLW 0X00 ;All six digits in ?
BTFSC STATUS,Z ;Well, is it ?
GOTO EX6 ;Put the numeric value into the correct
;NUMBER register
BSF PORTA,0 ;Poke column 1 high
CALL DETERMINE ;Check PORTB lower nibble for change
BCF PORTA,0 ;Clear column 1
BSF PORTA,1 ;Poke column 2 high
CALL DETERMINE ;Check PORTB lower nibble for change
BCF PORTA,1 ;Clear column 2
BSF PORTA,2 ;Poke column 3 high
CALL DETERMINE ;Check PORTB lower nibble for change
BCF PORTA,2 ;Clear column 3
GOTO TESTDATA ;Loop, check everything again
;*************************************************************************************
; CALCULATION *
;*************************************************************************************
CHECK MOVF NUMBER1,0 ;Put numeric input 1 into W register
XORLW 0X05 ;Is the first saved value 5?
BTFSS STATUS,Z ;Well, is it ?
GOTO LOCKED ;No? start from scratch
MOVF NUMBER2,0 ;Put numeric input 2 into W register
XORLW 0X09 ;Is the second saved value 9?
BTFSS STATUS,Z ;Well, is it ?
GOTO LOCKED ;No? start from scratch
MOVF NUMBER3,0 ;Put numeric input 3 into W register
XORLW 0X07 ;Is the third saved value 7?
BTFSS STATUS,Z ;Well, is it ?
GOTO LOCKED ;No? start from scratch
MOVF NUMBER4,0 ;Put numeric input 4 into W register
XORLW 0X05 ;Is the fourth saved value 5?
BTFSS STATUS,Z ;Well, is it ?
GOTO LOCKED ;No? start from scratch
MOVF NUMBER5,0 ;Put numeric input 5 into W register
XORLW 0X03 ;Is the fifth saved value 3?
BTFSS STATUS,Z ;Well, is it ?
GOTO LOCKED ;No? start from scratch
MOVF NUMBER6,0 ;Put numeric input 6 into W register
XORLW 0X01 ;Is the sixth saved value 1?
BTFSS STATUS,Z ;Well, is it ?
GOTO LOCKED ;No? start from scratch
GOTO TWO ;Good the code is correct
;*************************************************************************************
; DETERMINATION *
;*************************************************************************************
DETERMINE BTFSC PORTB,0 ;Check first row
GOTO DEBOUNCE ;Run debounce subroutine
BTFSC PORTB,1 ;Check second row
GOTO DEBOUNCE1 ;Run debounce routine
BTFSC PORTB,2 ;Check third row
GOTO DEBOUNCE2 ;Run debounce routine
BTFSC PORTB,3 ;Check fouth row
GOTO DEBOUNCE3 ;Run debounce routine
RETURN ;
DEBOUNCE MOVLW 0X04 ;The amount of samples
MOVWF COUNTER ;The sample register
TESTING CALL DELAY1 ;Kill some time
BTFSS PORTB,0 ;Re-check this bit
GOTO START ;False trigger, escape to start
DECFSZ COUNTER,1 ;Re-sample 4 times
GOTO TESTING ;Ditto
TEST1 BTFSC PORTB,0 ;Wait for release
GOTO TEST1 ;Ditto
BSF PORTB,7 ;R/S set to 1 for character display
BTFSC PORTA,0 ;Was it the first column?
GOTO i1 ;This is the character (without i )
BTFSC PORTA,1 ;Was it the second column?
GOTO i2 ;This is the character (without i )
BTFSC PORTA,2 ;Was it the third column?
GOTO i3 ;This is the character (without i )
GOTO START ;
i1 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X01 ;Numeric value 1
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i2 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X02 ;Numeric value 2
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i3 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X03 ;Numeric value 3
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
DEBOUNCE1 MOVLW 0X04 ;The amount of samples
MOVWF COUNTER ;The sample register
TESTING1 CALL DELAY1 ;Kill some time
BTFSS PORTB,1 ;Re-check this bit
GOTO START ;False trigger, escape to start
DECFSZ COUNTER,1 ;Re-sample 4 times
GOTO TESTING1 ;Ditto
TEST2 BTFSC PORTB,1 ;Wait for release
GOTO TEST2 ;Ditto
BSF PORTB,7 ;R/S set to 1 for character display
BTFSC PORTA,0 ;Was it the first column?
GOTO i4 ;This is the character (without i )
BTFSC PORTA,1 ;Was it the second column?
GOTO i5 ;This is the character (without i )
BTFSC PORTA,2 ;Was it the third column?
GOTO i6 ;This is the character (without i )
GOTO START ;
i4 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X04 ;Numeric value 4
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i5 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X05 ;Numeric value 5
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i6 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X06 ;Numeric value 6
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
DEBOUNCE2 MOVLW 0X04 ;The amount of samples
MOVWF COUNTER ;The sample register
TESTING2 CALL DELAY1 ;Kill some time
BTFSS PORTB,2 ;Re-check this bit
GOTO START ;False trigger, escape to start
DECFSZ COUNTER,1 ;Re-sample 4 times
GOTO TESTING2 ;Ditto
TEST3 BTFSC PORTB,2 ;Wait for release
GOTO TEST3 ;Ditto
BSF PORTB,7 ;R/S set to 1 for character display
BTFSC PORTA,0 ;Was it the first column?
GOTO i7 ;This is the character (without i )
BTFSC PORTA,1 ;Was it the second column?
GOTO i8 ;This is the character (without i )
BTFSC PORTA,2 ;Was it the third column?
GOTO i9 ;This is the character (without i )
GOTO START ;
i7 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X07 ;Numeric value 7
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i8 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X08 ;Numeric value 8
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i9 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X09 ;Numeric value 9
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
DEBOUNCE3 MOVLW 0X04 ;The amount of samples
MOVWF COUNTER ;The sample register
TESTING3 CALL DELAY1 ;Kill some time
BTFSS PORTB,3 ;Re-check this bit
GOTO START ;False trigger, escape to start
DECFSZ COUNTER,1 ;Re-sample 4 times
GOTO TESTING3 ;Ditto
TEST4 BTFSC PORTB,3 ;Wait for release
GOTO TEST4 ;Ditto
BSF PORTB,7 ;R/S set to 1 for character display
BTFSC PORTA,0 ;Was it the first column?
GOTO ix ;This is the character (without i )
BTFSC PORTA,1 ;Was it the second column?
GOTO i0 ;This is the character (without i )
BTFSC PORTA,2 ;Was it the third column?
GOTO i# ;This is the character (without i )
GOTO START ;Wasn't triggered,check again
ix MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X2A ;ASCII symbol *
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i0 MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X00 ;Numeric value 0
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
i# MOVLW '*' ;*
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X23 ;ASCII symbol #
MOVWF CODEDATA ;Save data for manipulation
DECF DIGITS,1 ;Reduce digits register
BCF PORTB,7 ;Command mode
GOTO TESTDATA ;Redo the keypad scanning
;*************************************************************************************
; OUTCOMES *
;*************************************************************************************
LOCKED BCF PORTB,7 ;Command mode
BSF PORTA,4 ;Red LED on
MOVLW 0X01 ;Clear display
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X06 ;Increment display shift off
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X86 ;Address 6
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BSF PORTB,7 ;Character mode
MOVLW 'W' ;W
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'R' ;R
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'O' ;O
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'N' ;N
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'G' ;G
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BCF PORTB,7 ;Command mode
MOVLW 0XC6 ;Address 45
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BSF PORTB,7 ;Character mode
MOVLW 'C' ;C
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'O' ;O
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'D' ;D
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'E' ;E
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BCF PORTB,7 ;Command mode
MOVLW 0X0A ;Flash 10 times
MOVWF FLASH1 ;Flashing counter
FLASH MOVLW 0X08 ;Display off
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
CALL LONGDELAY ;Kill a long time
MOVLW 0X0C ;Display on
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
CALL LONGDELAY ;Kill a long time
DECFSZ FLASH1,1 ;Reduce amount of flashes by 1
GOTO FLASH ;Make the display flash on and off
BCF PORTB,7 ;Command mode
MOVLW 0X01 ;Clear display
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0XC0 ;Address 40
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BCF PORTA,4 ;Red LED off
DECFSZ COUNTER1,1 ;Count if max attempt reached
GOTO ZERO ;Re-ask for the code
ONE BSF PORTA,4 ;Red LED on
BCF PORTB,7 ;Command mode
MOVLW 0X01 ;Clear display
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X85 ;Address 05
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BSF PORTB,7 ;Character mode
MOVLW 'L' ;L
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'O' ;O
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'C' ;C
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'K' ;K
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'E' ;E
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'D' ;D
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BCF PORTB,7 ;Command mode
MOVLW 0XC0 ;Address 40
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BSF PORTB,7 ;Character mode
MOVLW 'U' ;U
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 's' ;s
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'e' ;e
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW ' ' ;
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'M' ;M
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'a' ;a
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 's' ;s
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 't' ;t
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'e' ;e
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'r' ;r
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW ' ' ;
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'C' ;C
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'o' ;o
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'd' ;d
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'e' ;e
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
GOTO $ ;
TWO BCF PORTB,7 ;Command mode
MOVLW 0X01 ;Clear display
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 0X82 ;Address 02
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
BSF PORTA,3 ;Green LED on
BSF PORTB,7 ;Character mode
MOVLW 'D' ;D
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'e' ;e
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW '-' ;-
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'A' ;a
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'c' ;c
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 't' ;t
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'i' ;i
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'v' ;v
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'a' ;a
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 't' ;t
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'e' ;e
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
MOVLW 'd' ;d
CALL SERIAL ;This will output 4 bits only
CALL SERIAL1 ;cause the low 4 are already high rot
;*************************************************************************************
GOTO $ ;
END
See:
Questions:
Comments: