View Full Version : Need help with LCD number display.
Steve Matson
- 29th May 2007, 07:20
I am trying to find a way to display the number times a button is pushed on an LCD display. I can display strings such as 'Hello world', or 'Number = ' just fine but have trouble when I have a number stored in B10 (for example) and need to get it to the LCD.
I am using the Lab-X1 with a 16F877A chip, and I am basing my code on the sample program 'PICBASIC program to demonstrate operation of an LCD in 4-bit mode'. I program in PICbasic. Any help would be appreciated.
Thanks
Steve
skimask
- 29th May 2007, 13:37
I can display strings such as 'Hello world', or 'Number = ' just fine but have trouble when I have a number stored in B10 (for example) and need to get it to the LCD.
Thanks
Steve
Let's see the code you DO have and tell us what's wrong with it, so we can help you fix it.
mister_e
- 29th May 2007, 15:29
should be this one
http://www.melabs.com/resources/samples/x1/pbc/lcdx.bas
will check this latter today if someone didn't beat me to the punch... PBC is so WAY different of PBP. Too bad they don't have LCDOUT built-in :(
SteveB
- 29th May 2007, 17:41
My guess is that you are sending a simple byte out to the LCD, and it is then displaying the ASCII equivalent. For example, take the following:
Number1 VAR BYTE
Number1 = 123
When Number1 is sent directly to the LCD, it will cause the “{“ to display.
What you will need to do is enumerate each decimal place of the number and send that to the LCD. For example:
Number1 VAR BYTE
Temp VAR BYTE
Number1 = 123
‘Get Value of digit in 100’s place
Temp = Number1/100 ‘With Number1 = 123 then Temp = 1
Temp = Temp + 48 ‘Convert value to ASCII equivalent
‘Send temp to LCD
‘Get Value of digit in 10’s place
Temp = Number/10 ‘With Number1 = 123 then Temp = 12
Temp = Temp//10 ‘Get Remainder so with Number1 = 123 then Temp = 2
Temp = Temp + 48 ‘Convert value to ASCII equivalent
‘Send temp to LCD
‘Get Value of digit in 1’s place
Temp = Number1//10 ‘Get Remainder so…with Number1 = 123 then Temp = 3
Temp = Temp + 48 ‘Convert value to ASCII equivalent
‘Send temp to LCD
This will print out the leading "0"s, and will only enumerate a BYTE. It's just a simple code example, but it should help explain the concept and get you started on a more specific solution to met you needs.
Hope this helps, good luck.
SteveB
Steve Matson
- 30th May 2007, 02:41
' PICBASIC program to demonstrate operation of an LCD in 4-bit mode
Symbol PORTD = 8 ' PORTD is register 8
Symbol PORTE = 9 ' PORTD is register 9
Symbol TRISD = $88 ' PORTD data direction is register hexadecimal 88
Symbol TRISE = $89 ' PORTD data direction is register hexadecimal 89
Symbol ADCON1 = $9f ' ADCON1 is register hexadecimal 9f
Poke ADCON1, 7 ' Set analog pins to digital
Poke TRISD, 0 ' Set all PORTD lines to output
Poke TRISE, 0 ' Set all PORTE lines to output
Poke PORTE, 0 ' Start with enable low
Pause 100 ' Wait for LCD to power up
Gosub lcdinit ' Initialize the lcd
loop: Gosub lcdclr ' Clear lcd screen
For B4 = 0 To 4 ' Send string to lcd one letter at a time
Lookup B4, ("Hello"), B2 ' Get letter from string
Gosub lcddata ' Send letter in B2 to lcd
Next B4
Pause 500 ' Wait .5 second
Gosub lcdclr ' Clear lcd screen
For B4 = 0 To 4 ' Send string to lcd one letter at a time
Lookup B4, ("world"), B2 ' Get letter from string
Gosub lcddata ' Send letter in B2 to lcd
Next B4
Pause 500 ' Wait .5 second
Goto loop ' Do it forever
' Subroutine to initialize the lcd - uses B2 and B3
lcdinit: Pause 15 ' Wait at least 15ms
Poke PORTD, $33 ' Initialize the lcd
Gosub lcdtog ' Toggle the lcd enable line
Pause 5 ' Wait at least 4.1ms
Poke PORTD, $33 ' Initialize the lcd
Gosub lcdtog ' Toggle the lcd enable line
Pause 1 ' Wait at least 100us
Poke PORTD, $33 ' Initialize the lcd
Gosub lcdtog ' Toggle the lcd enable line
Pause 1 ' Wait once more for good luck
Poke PORTD, $22 ' Put lcd into 4 bit mode
Gosub lcdtog ' Toggle the lcd enable line
B2 = $28 ' 4 bit mode, 2 lines, 5x7 font
Gosub lcdcom ' Send B2 to lcd
B2 = $0c ' Lcd display on, no cursor, no blink
Gosub lcdcom ' Send B2 to lcd
B2 = $06 ' Lcd entry mode set, increment, no shift
Goto lcdcom ' Exit through send lcd command
' Subroutine to clear the lcd screen - uses B2 and B3
lcdclr: B2 = 1 ' Set B2 to clear command and fall through to lcdcom
' Subroutine to send a command to the lcd - uses B2 and B3
lcdcom: Poke PORTE, 0 ' Set RS to command
lcdcd: B3 = B2 & $f0 ' Isolate top 4 bits
Poke PORTD, B3 ' Send upper 4 bits to lcd
Gosub lcdtog ' Toggle the lcd enable line
B3 = B2 * 16 ' Shift botton 4 bits up to top 4 bits
Poke PORTD, B3 ' Send lower 4 bits to lcd
Gosub lcdtog ' Toggle the lcd enable line
Pause 2 ' Wait 2ms for write to complete
Return
' Subroutine to send data to the lcd - uses B2 and B3
lcddata: Poke PORTE, 1 ' Set RS to data
Goto lcdcd
' Subroutine to toggle the lcd enable line
lcdtog: Peek PORTE, B0 ' Get current PORTE value
B0 = B0 | %00000010 ' Set lcd enable line high
Poke PORTE, B0
B0 = B0 & %11111101 ' Set lcd enable line low
Poke PORTE, B0
Return
Steve Matson
- 30th May 2007, 04:55
I am begning to think that I should get PBP. I seems alot more powerful.
Also I am tempted to look into the 'Lookup' and 'Lookdown' functions.
Thanks for the tips.
STeve
P.S. Thanks to Steve B.
That looks like something I can work with.
T.Jackson
- 30th May 2007, 09:00
Yeah - like with the standard version of most things in this World, PIC Basic is only half of what you get in the PRO version. I throughly read between the lines before I made the decision to buy PBP, which at the time, almost twice the amount of the standard.
Steve Matson
- 31st May 2007, 05:05
adding 48 to my number in the register worked great. I am still going to get the pro version. I hope there isnt too much of a learning curve from Picbasic.
Steve
Steve Matson
- 26th June 2007, 23:07
I just purchased Pic Basic Pro because I heard alot of great things about it.
Again, Thanks for all the help.
Steve.
P.S. Just to let you know, Pics are often used in industry and it's good to mention on a resume if your going for any kind of technical job.
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.