Code:
'PIC16F914 4 Digit LCD Counter Demo
'Purpose to Drive non-inteligent LCD displays with on chip LCD module
'Vishay VM404 LCD 4 digit, 7 segment -mouser elect
'LCD BIAS RESISTER LADDER 3x 47k VCC-VDD
' July 2006 Mark S
'***********************************************************************
DEFINE OSC 4 ' Set Xtal Frequency
CMCON0 =%00000111 'COMPARATOR OFF
ADCON0 =%00000000 'ADC off
'SET LCD REGISTERS
LCDCON = %10010010 'LCD ENABLED,SLEEP-LCD ON,ERR OFF,BIAS ON,CLK F/8192,MUX 1/3
LCDPS = %00110000 ' SEE DATA SHEET
LCDSE0 =%11111111 'SEGMENTS 0-7 ON
LCDSE1 =%00001111 'SEGMENTS 8-11 ON 12-15 OFF
LCDSE2 =%00000000 'SEGMENTS 16 - 23 OFF
'VARIABLES
adval VAR WORD
XCOUNT VAR WORD
TEMPX VAR WORD
ONES VAR byte
TENS VAR byte
HUNS VAR byte
THOU VAR byte
DIG1 VAR BYTE
DIG2 VAR BYTE
DIG3 VAR BYTE
DIG4 VAR BYTE
DP1 VAR BIT
DP2 VAR BIT
DP3 VAR BIT
TRISA = %00000000
TRISB= %00000000
TRISC= %00000000
TRISD= %00000000
TRISE= %00000000
'Clear LCD
XCOUNT = 0
LCDDATA0 = 0 : LCDDATA1=0 : LCDDATA2=0 : LCDDATA3=0
LCDDATA4 = 0 : LCDDATA5=0 : LCDDATA6=0 : LCDDATA7=0
LCDDATA8 = 0 : LCDDATA9=0 : LCDDATA10=0 : LCDDATA11=0
'======================================================================
'MAIN
'-----------------------------------------------------------------------
START:
'Count loop 0 to 9999
TEMPX = TEMPX + 1
XCOUNT = TEMPX
THOU = XCOUNT/1000
XCOUNT = XCOUNT//1000
HUNS = XCOUNT/100
XCOUNT = Xcount//100
TENS = XCOUNT/10
ones = XCOUNT//10
'======================================================================
LCD OUT:
'SEVEN SEG LOOKUP
LookUp ONES,[63,6,91,79,102,109,124,7,127,103,0],DIG4
LookUp TENS,[63,6,91,79,102,109,124,7,127,103,0],DIG3
LookUp HUNS,[63,6,91,79,102,109,124,7,127,103,0],DIG2
LookUp THOU,[63,6,91,79,102,109,124,7,127,103,0],DIG1
LCDDATA6.0 = 1 'Decimal Point
'LOAD LCD REGISTERS
LCDDATA0.4 = DIG4.0 'D4A = LCDDATA0.4
LCDDATA0.3 = DIG4.1 'D4B = LCDDATA0.3
LCDDATA3.3 = DIG4.2 'D4C = LCDDATA3.3
LCDDATA6.4 = DIG4.3 'D4D = LCDDATA6.4
LCDDATA3.5 = DIG4.4 'D4E = LCDDATA3.5
LCDDATA0.5 = DIG4.5 'D4F = LCDDATA0.5
LCDDATA3.4 = DIG4.6 'D4G = LCDDATA3.4
LCDDATA0.6 = DIG3.0 'D3A = LCDDATA0.6
LCDDATA0.2 = DIG3.1 'D3B = LCDDATA0.2
LCDDATA3.2 = DIG3.2 'D3C = LCDDATA3.2
LCDDATA6.6 = DIG3.3 'D3D = LCDDATA6.6
LCDDATA3.7 = DIG3.4 'D3E = LCDDATA3.7
LCDDATA0.7 = DIG3.5 'D3F = LCDDATA0.7
LCDDATA3.6 = DIG3.6 'D3G = LCDDATA3.6
LCDDATA1.0 = DIG2.0 'D2A = LCDDATA1.0
LCDDATA0.1 = DIG2.1 'D2B = LCDDATA0.1
LCDDATA3.1 = DIG2.2 'D2C = LCDDATA3.1
LCDDATA7.0 = DIG2.3 'D2D = LCDDATA7.0
LCDDATA4.1 = DIG2.4 'D2E = LCDDATA4.1
LCDDATA1.1 = DIG2.5 'D2F = LCDDATA1.1
LCDDATA4.0 = DIG2.6 'D2G = LCDDATA4.0
LCDDATA1.2 = DIG1.0 'D1A = LCDDATA1.2
LCDDATA0.0 = DIG1.1 'D1B = LCDDATA0.0
LCDDATA3.0 = DIG1.2 'D1C = LCDDATA3.0
LCDDATA7.2 = DIG1.3 'D1D = LCDDATA7.2
LCDDATA4.3 = DIG1.4 'D1E = LCDDATA4.3
LCDDATA1.3 = DIG1.5 'D1F = LCDDATA1.3
LCDDATA4.2 = DIG1.6 'D1G = LCDDATA4.2
PAUSE 200
'CLEAR LCD REGISTERS
LCDDATA0 = 0 : LCDDATA1=0 : LCDDATA2=0 : LCDDATA3=0
LCDDATA4 = 0 : LCDDATA5=0 : LCDDATA6=0 : LCDDATA7=0
LCDDATA8 = 0 : LCDDATA9=0 : LCDDATA10=0 : LCDDATA11=0
LCDDATA6.0 = 0 'DP
IF XCOUNT = 9999 THEN ZERO_X
GOTO START
ZERO_X: XCOUNT = 0 'Reset counter
GOTO START
End
Bookmarks