PDA

View Full Version : LCD display not working properly



dilpkan
- 21st January 2008, 19:23
I am trying to write a simple code to enable password entry. I am using 16F877a and two line LCD module for display. I have written following code which gets compiled successfully however when I key in four digits they are not displayed on the LCD module.

OPTION_REG.7 = 0 ' PORTB Pullups.
TrisA = 0 ' PORTA, all outputs
PortA = 16 ' Turn off Buzer
TrisB = %11110000 ' PORTB.0-3 outputs, 4-7 inputs
PortB = 0
Define LCD_DREG PORTC
Define LCD_DBIT 0
Define LCD_RSREG PORTC
Define LCD_RSBIT 4
Define LCD_EREG PORTC
Define LCD_EBIT 5

LD1 var PortA.2
RL1 var PortA.3
BUZ var portA.4
cnt var byte
cnt2 var word

key var byte
col var byte
row var byte
keycnt var byte
pwOK var bit

keybuf var byte[15]
pwbuf var byte[4]
Pause 100 ' Wait for LCD to start

Lcdout $fe, 1, " HELLO " ' Display sign on message
Lcdout $fe, 1, " WORLD " ' Display sign on message

Pause 500 ' Wait for LCD to start

Lcdout $fe, 1, "Enter pasaward " ' Display sign on message

loop: Gosub Chk_KEYPAD: ' Get a key from the keypad
Lcdout $fe, $c0+1,1,$0f, #key ' Display ASCII key number
Gosub Chk_KEYPAD: ' Get a key from the keypad
Lcdout $fe, $c0+2,1,$0f, #key ' Display ASCII key number
Gosub Chk_KEYPAD: ' Get a key from the keypad
Lcdout $fe, $c0+3,1,$0f, #key ' Display ASCII key number
Gosub Chk_KEYPAD: ' Get a key from the keypad
Lcdout $fe, $c0+4,1,$0f, #key ' Display ASCII key number

Goto loop ' Do it forever

bbazor
- 22nd January 2008, 03:54
I didn't see a Chk_KEYPAD subroutine included in your code. Do you have one?

scarroll01
- 22nd January 2008, 14:06
If this is for password entry, do you even WANT to display the characters that are entered? Better to handle it like MS Windows and display asterisks.

Just a thought,
... Steve.

dilpkan
- 24th January 2008, 17:44
I didn't see a Chk_KEYPAD subroutine included in your code. Do you have one?


Chk_KEYPAD subroutine has been used at gosub

The problem is that the four numbers are not displayed at 1st , 2nd , 3rd ,4th positions in one line

thanks for replying

dilpkan

skimask
- 24th January 2008, 17:48
Chk_KEYPAD subroutine has been used at gosub
The problem is that the four numbers are not displayed at 1st , 2nd , 3rd ,4th positions in one line
thanks for replying
dilpkan

Let's analyze one of your LCDOUT statements...


Lcdout $fe, $c0+1,1,$0f, #key

LCDOUT - the command
$fe - send an instruction
$c0 + 1 - the position
1 - clear the display which basically resets the display back to square one
$0f - programmable character
#key - a variable
....
See a problem here?

dilpkan
- 24th January 2008, 17:49
If this is for password entry, do you even WANT to display the characters that are entered? Better to handle it like MS Windows and display asterisks.

Just a thought,
... Steve.


Thanks for replying

I accept your suggestion ! however how to get the four asterisks in four positions in one line

Please suggest

dilpkan

dilpkan
- 24th January 2008, 18:28
Let's analyze one of your LCDOUT statements...



LCDOUT - the command
$fe - send an instruction
$c0 + 1 - the position
1 - clear the display which basically resets the display back to square one
$0f - programmable character
#key - a variable
....
See a problem here?


I deleted "1 " -(clear the display...) and tried the above code using gosub four times for the four diff. positions but the display shows a question mark at 16th position on first line and stops. why?

please help.

dilpkan

skimask
- 24th January 2008, 19:30
I deleted "1 " -(clear the display...) and tried the above code using gosub four times for the four diff. positions but the display shows a question mark at 16th position on first line and stops. why?

please help.

dilpkan

Increase the startup pause to 1 second...increase your LCD_commandus and LCD_dataus to higher values, try it again and see what happens.

mister_e
- 24th January 2008, 20:22
NOPE,

if you use 1 without $FE before, it will try to print ASCII decimal character 1, same for $0F. If you want to mask you data with asterix, just use "*" in your lcdout and forget the #key.
MAybe you could find some tips in the following
http://www.picbasic.co.uk/forum/showthread.php?t=5695&highlight=combination+gate

skimask
- 24th January 2008, 20:56
NOPE,

if you use 1 without $FE before, it will try to print ASCII decimal character 1, same for $0F. If you want to mask you data with asterix, just use "*" in your lcdout and forget the #key.
MAybe you could find some tips in the following
http://www.picbasic.co.uk/forum/showthread.php?t=5695&highlight=combination+gate

Are you saying that:
LCDOUT $fe , 1 , $80 , "HELLO"
is different from:
LCDOUT $fe , 1 , $fe , $80 , "HELLO" ???

I guess I just never noticed, or tried it.

mister_e
- 24th January 2008, 20:59
Yup.. try it.. or read through the macros :eek:

mara
- 24th January 2008, 21:01
. .

mister_e
- 24th January 2008, 21:11
... me too ;)

skimask
- 25th January 2008, 03:59
Yup.. try it.. or read through the macros :eek:

Well I'll be...(head shaking)... never noticed before...

dilpkan
- 2nd February 2008, 07:43
NOPE,

if you use 1 without $FE before, it will try to print ASCII decimal character 1, same for $0F. If you want to mask you data with asterix, just use "*" in your lcdout and forget the #key.
MAybe you could find some tips in the following
http://www.picbasic.co.uk/forum/showthread.php?t=5695&highlight=combination+gate

1)I tried to include Keypad.bas and tried to compile however it throws an error for the first line i.e. keypad routine as syntax error. If I remove it throws too many errors! in assembler. Is it not necessary to compile. If I don't compile and compile only gate code it says unable to open keypad.bas


@ if HIGH_SECURITY == 1
LCDOUT $FE, $C4 + ComboPtr, "*" ; print a Mask character
if Key = "*" then Reset
if Key = "#" then Finish
@ endif

The compiler also shows errors for
if Key = "*" then Reset
if Key = "#" then Finish

I tried using diff. combination but to no better effect. Can some one help?

Thank you in advance,
Regards
dilpkan