;*** LCD SUB FOR PIC 57 USING ONLY ONE LEVEL STACK(NO CALLS USED) ;*** USE OPTRON OR SEIKO DISPLAYS (ADDRESS 80-87 C0-C7) ;*** RUBEN DE LA PENA APRIL 1 1993 ;************************************************************** ; TO INIT THE DISPLAY PUT A 30MS DELAY AT THE START ; OF YOUR PROGRAM AND SEND A CLS TO THE DISPLAY (0CH) ; EXAMPLE: ;START CALL DELAY ;30 MS-- ; MOV CHAR,#0CH ; CALL DISPLAY ; THIS MUST BE DONE AT LEAST ONE TIME FOR PROPER ; DISPLAY INICIALIZATION. ; THE CODE IS REDUNDANT TO AVOID ANY EXTRA CALLS. ; THE TIMINGS ARE FOR AN RC COMBINATION OF 390 pfd AND 4K7 OHMS. ; 400 KHZ APROX. INSTR. TIME OF 10 MICROSECS. ; ;HARDWARE:THE DISPLAY IS CONECTED FOR 4 BITS INTERFACE ; CHECK THE DISPLAY SPECS. ; WRITE (PIN 5) IS GROUNDED. ; RA RC ; - + 1 0 4 5 6 7 ; |-----------------------------------------------------| ; | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ; | | ; | LCD DISPLAY 16 CHARS 1 LINE | ; | | ; | | ; | | ; |---------------------------------------------------- | ; ; USE:PUT ASCCI IN CHAR AND CALL DISPLAY ; CONTROL CHAR: 0CH=INIT DISPLAY AND CLEAR---INITIAL POS=80H ; PARALLAX ASSEMBLER ; ; CHIP PARAMETERS DEVICE PIC16C57,RC_OSC,WDT_OFF,PROTECT_OFF RESET START ;REGISTERS USE E EQU RA.0 ;ENABLE LCD RS EQU RA.1 ;RS=0 COMMAND RS=1 CHARACTER LCD EQU RC ;LCD PORT ,BITS B4 A B7 POS EQU 8 ; CURSOR POSITION (80h TO 87h ,C0h TO C7h) CHAR EQU 9 ;VALUE TO LCD TIM1 EQU 0AH ;AUX TIMERS TIM2 EQU 0BH TEMP EQU 0CH ORG 0 ;*********************************************************************** ; DISPLAY SUBROUTINE . USES 5 VARIABLES: ; CHAR HOLDS THE CODE TO SEND ; POS HOLS THE CURSOR POSITION ; TEMP USED TO SWAP CODE ; TIM1 AUX TIMER ; TIM2 AUX TIMER ; ; DISPLAY CJE CHAR,#0CH,INITDIS ;IS 0CH ? (CLS) INIT DISPLAY CJBE CHAR,#1FH,EXIDIS ;REJECT ANY OTHER CONTROL CHAR MOV TEMP,POS ;SEND POS TO DISPLAY MOV LCD,TEMP SETB E CLRB E ;FIRST ONE NIBBLE SWAP TEMP MOV LCD,TEMP ;NOW SECOND NIBBLE SETB E CLRB E ;******USE THE NEXT TWO LINES FOR DISPLAYS WHIT ADDRESS 80-87 C0-C7. CJE POS,#087H,HALFLINE ;CHECK FOR HALFLINE CJE POS,#0C7H,ENDLINE ;IF YOUR DISPLAY ADDRESS GOES FROM 80h TO 8Fh,ONLY COMPARE FOR 8Fh AND JUMP ;TO ENDLINE. ;AND USE CJE POS,#08FH,ENDLINE OUTDATA INC POS ;POS=POS+1 SETB RS MOV TEMP,CHAR ;CHAR TO LED MOV LCD,TEMP SETB E CLRB E SWAP TEMP MOV LCD,TEMP SETB E CLRB E CLRB RS ;CLEAR CHAR SELECT EXIDIS MOV TIM1,#01H ;DELAY & EXIT 5 MS CLRF TIM2 LOOP1 DJNZ TIM2,LOOP1 DJNZ TIM1,LOOP1 RET HALFLINE MOV POS,#0C0H GOTO OUTDATA ENDLINE MOV POS,#080H GOTO OUTDATA INITDIS MOV RC,#020H ;THREE TIMES DEFINE MODE SETB E CLRB E MOV TIM1,#03H ;DELAY 15 MS CLRF TIM2 LOOP2 DJNZ TIM2,LOOP2 DJNZ TIM1,LOOP2 MOV RC,#020H SETB E CLRB E MOV TIM1,#03H ;DELAY 15 MS CLRF TIM2 LOOP3 DJNZ TIM2,LOOP3 DJNZ TIM1,LOOP3 MOV RC,#020H SETB E CLRB E MOV TIM1,#03H ;DELAY 15 MS CLRF TIM2 LOOP4 DJNZ TIM2,LOOP4 DJNZ TIM1,LOOP4 MOV TEMP,#028H ;DEFINE MODE 4 BIT IF,2 LINES MOV LCD,TEMP ;(SPLITTED ADDRESS) SETB E ;20h FOR CONTINUOS ADDRESS. CLRB E SWAP TEMP MOV LCD,TEMP SETB E CLRB E MOV TEMP,#0CH MOV LCD,TEMP MOV LCD,TEMP SETB E CLRB E SWAP TEMP MOV LCD,TEMP SETB E CLRB E MOV TEMP,#06H MOV LCD,TEMP SETB E CLRB E SWAP TEMP MOV LCD,TEMP SETB E CLRB E MOV TEMP,#01H MOV LCD,TEMP SETB E CLRB E SWAP TEMP MOV LCD,TEMP SETB E CLRB E MOV POS,#80H GOTO EXIDIS ORG 0100H ;TEST PROGRAM START CLRF TIM2 MOV TIM1,#010H ;DELAY 80 MS LOOP DJNZ TIM2,LOOP DJNZ TIM1,LOOP MOVLW 0 ;SET PORTS RA Y RC TRIS RA CLRF RA MOVWF RA TRIS RC MOVWF RC MOVLW 0CH ;INIT DISPLAY MOVWF CHAR ;CLEARS AND SET POS CALL DISPLAY REP MOV CHAR,#'R' CALL DISPLAY MOV CHAR,#'E' CALL DISPLAY MOV CHAR,#'A' CALL DISPLAY MOV CHAR,#'D' CALL DISPLAY MOV CHAR,#'Y' CALL DISPLAY MOV TIM1,#0F0H ;LONG DELAY 2 SECS LOOP001 DJNZ TIM2,LOOP001 DJNZ TIM1,LOOP001 MOV POS,#80H ;SEND 5 SPACES MOV CHAR,#' ' CALL DISPLAY MOV CHAR,#' ' CALL DISPLAY MOV CHAR,#' ' CALL DISPLAY MOV CHAR,#' ' CALL DISPLAY MOV CHAR,#' ' CALL DISPLAY MOV POS,#80H ;RESTORE POSITION GOTO REP ;FOR A SMALLER PIC,CHANGE PORT C TO PORT B. ; ************************** THAT'S ALL ...................