|
|
View previous topic :: View next topic |
Author |
Message |
Guest
|
why japanese char? |
Posted: Mon Apr 20, 2009 2:55 am |
|
|
Hai!! All. I have 2 problems
First my LCD display Japanese character. Second, My code stuck on LCD display Card Invalid when I move a card. Suppose LCd show CardNot Detected.
This is my code:
Code: | #include<16f877A.h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
#include<flex_lcd.c>
#define cardSta PIN_B5
#define LED1 PIN_B4
#define LED2 PIN_B3
char SelectCard[4] = {0xBA,0x02,0x01,0xB9};
int8 ctr;
char rbuff[10];
void main() {
lcd_init();
lcd_putc("\fhai!!");
delay_ms(3000);
while(1){
//****************************************************************************
if(input(cardSta)==0) {
lcd_putc("\fcard detected\ntry");
output_high(LED1);
delay_ms(500);
output_low(LED1);
delay_ms(500);
for (ctr=0;ctr<4;ctr++) putc(SelectCard[ctr]); //send command SelectCard
if(kbhit())
for (ctr=0;ctr<10;ctr++) rbuff[ctr]=getc(); //receive 10 response bytes
lcd_putc("\f");
for (ctr=0;ctr<10;ctr++)
lcd_putc(rbuff[ctr]);
delay_ms(10000);
if (rbuff[3]==0 && rbuff[8]==1) {
lcd_putc("\fMifare Card "); // to show that the card accepted
}
else {
lcd_putc("\fCard Invalid");
break;
}
}
else {
lcd_putc("\fcardNotDetected\ntry");
output_high(LED2);
delay_ms(500);
output_low(LED2);
delay_ms(500);
}
}
} |
I seen on forum some user use this:
Quote: | #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN |
I not understand about PLL5, CPUDIV1, VREGEN. Is it need for my code?
Suppose I receive 10 bytes respond, not a japanese character
Help pls. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Apr 20, 2009 11:47 am |
|
|
Post the manufacturer and part number of your LCD and your card
reader. Also post a list of the connections between the PIC and those
two devices. |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Mon Apr 20, 2009 3:03 pm |
|
|
Code: | for (ctr=0;ctr<4;ctr++) putc(SelectCard[ctr]); //send command SelectCard
if(kbhit())
for (ctr=0;ctr<10;ctr++) rbuff[ctr]=getc(); //receive 10 response bytes
lcd_putc("\f"); | I'm not sure what you want to do here, but it is not going to work.
There is no ';' or '{' after the kbhit line which means that your code is equivalent to: Code: | for (ctr=0;ctr<4;ctr++) putc(SelectCard[ctr]); //send command SelectCard
if(kbhit())
{
for (ctr=0;ctr<10;ctr++) rbuff[ctr]=getc(); //receive 10 response bytes
}
lcd_putc("\f"); | The card reader must respond within a few microseconds or the kbhit test will fail and the 10 respond bytes will never be received. The baudrate is 9600 baud, or about 1ms for a byte so it is impossible to ever meet this quick response time.
Solve by removing the kbhit test, it is not needed. |
|
|
Guest
|
|
Posted: Wed Apr 29, 2009 1:06 am |
|
|
I try to display this 0xBA,0x02,0x01,0xB9 four byte number to my lcd but the lcd display four character like this @#$%. The four byte number that I want to display came from char SelectCard[4] = {0xBA,0x02,0x01,0xB9}; in my code.
I'm using 16*2 lcd and compiler version 3.214
Plz help. This is my code:
Code: | #include<16f877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
#include<flex_lcd.c>
#define cardSta PIN_B5
#define LED1 PIN_B4
#define LED2 PIN_B3
char SelectCard[4] = {0xBA,0x02,0x01,0xB9};
int8 ctr;
void main() {
lcd_init();
lcd_putc("\fhai!!");
delay_ms(3000);
while(1){
if(input(cardSta)==0) {
lcd_putc("\fcard detected");
delay_ms(500);
lcd_putc("\f");
for (ctr=0;ctr<4;ctr++){
lcd_putc(SelectCard[ctr]);
delay_ms(1000);
}
}
else {
lcd_putc("\fcardNotDetected");
output_high(LED2);
delay_ms(500);
output_low(LED2);
delay_ms(500);
}
}
} |
|
|
|
Guest
|
|
Posted: Wed Apr 29, 2009 3:52 am |
|
|
I just got the solution. Only use command printf(lcd_putc,"%X",SelectCard[crt]); to replace lcd_putc(SelectCard[ctr]); |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|