
Use LCD display
This example illustrates the use of an alphanumeric LCD display. The function libraries make this program simpler. Two messages written in two lines appear on the display: mikroElektronika LCD example Two seconds later, the second message is replaced with the voltage present on the A/D converter input (the RA2 pin). For example: mikroElektronika voltage:3.141V Anyway, the current temperature or some other measured value can be displayed instead of voltage.
'Header******************************************************
program example_10 ' Program name
dim LCD_RS as sbit at RB4_bit ' Lcd module connections
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit ' End Lcd module connections
dim text as string [16] ' Variable text is of string type
dim ch, adc_rd as word ' Variables ch and adc_rd are of word type
dim tlong as longword ' Variable tlong is of longword type
main: ' Start of program
TRISB = 0 ' All port PORTB pins are configured as outputs
PORTB = 0xFF
INTCON = 0 ' All interrupts disabled
ANSEL = 0x04 ' Pin RA2 is configured as an analog input
TRISA = 0x04
ANSELH = 0 ' Rest of pins is configured as digital
Lcd_Init() ' LCD display initialization
Lcd_Cmd(_LCD_CURSOR_OFF) ' LCD command (cursor off)
Lcd_Cmd(_LCD_CLEAR) ' LCD command (clear LCD)
text = "mikroElektronika" ' Define the first message
Lcd_Out(1,1,text) ' Write the first message in the first line
text = "LCD example" ' Define the second message
Lcd_Out(2,1,text) ' Write the second message in the second line
ADCON1 = 0x80 ' A/D voltage reference is VCC
TRISA = 0xFF ' All PORTA pins are configured as inputs
Delay_ms(2000)
text = "Voltage=" ' Define the third message
while 1 ' Endless loop
adc_rd = ADC_Read(2) ' A/D conversion. Pin RA2 is an input.
Lcd_Out(2,1,text) ' Write result in the second line
tlong = adc_rd * 5000 ' Convert the result in millivolts
tlong = tlong / 1023 ' 0..1023 -> 0-5000mV
ch = (tlong / 1000) mod 10 ' Extract volts (thousands of millivolts)
' from result
Lcd_Chr(2,9,48+ch) ' Write result in ASCII format
Lcd_Chr_CP(".") ' Write the decimal pint
ch = (tlong / 100) mod 10 ' Extract hundreds of millivolts
Lcd_Chr_CP(48+ch) ' Write result in ASCII format
ch = (tlong / 10) mod 10 ' Extract tens of millivolts
Lcd_Chr_CP(48+ch) ' Write result in ASCII format
ch = tlong mod 10 ' Extract digits for millivolts
Lcd_Chr_CP(48+ch) ' Write result in ASCII format
Lcd_Chr_CP("V") ' Write a mark for voltage "V"
Delay_ms(1) ' 1mS delay
wend
end. ' End of program