|
|
View previous topic :: View next topic |
Author |
Message |
a Guest
|
Please see my sourcecode. it is about lcd. |
Posted: Fri Aug 13, 2004 3:40 am |
|
|
this code is use for lcd 16*2 char. but when i start my program it isn't stable because sometime lcd show 1 line.sometime show 2 line. but when it show 2 line. it will show 2 line forever. but if it show 1 line. it will show 1 line forever too.
Please see my code and correct it should be. thannk you
i use lcd in mode
#define RS PIN_E0
#define RW PIN_E1
#define EN PIN_E2
and port d0-d7 is also data0-data7 of lcd too.
i think it about void init_lcd(void) procedure but i don't know. where it's not correct.
thank you for your help
#include "C:\Micropro\SourceCode_Picc\Charger\CH6.h"
#ZERO_RAM
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define RS PIN_E0
#define RW PIN_E1
#define EN PIN_E2
#define leddison output_high(pin_c0)
#define leddisoff output_low(pin_c0)
char tmpshow[20];
int resetch1=0;
//===============
void busy_strobe(void)
{
OUTPUT_LOW(EN);
delay_us(1);
OUTPUT_HIGH(EN);
delay_us(1);
}
void write_strobe(void)
{
OUTPUT_HIGH(EN);
delay_us(1);
OUTPUT_LOW(EN);
delay_ms(2);
}
void Command(void)
{
OUTPUT_LOW(RS);
OUTPUT_LOW(RW);
}
void wait_for_lcd_ready(void)
{
unsigned char busy_flag;
SET_TRIS_D(0XFF); //PORTD7 INPUT;
OUTPUT_LOW(RS); //SET FOR READ BUSY;
OUTPUT_HIGH(RW); //SET FOR READ BUSY;
busy_strobe();
busy_flag=(input_d() & 0x80);
while( busy_flag == 0x80)
{
OUTPUT_LOW(EN);
busy_flag=(input_d()&0x80);
}
OUTPUT_LOW(EN);
SET_TRIS_D(0x00); //PORTD7 OUTPUT;
}
void clear_lcd(void)
{
Command();
OUTPUT_D(0x01);
write_strobe();
wait_for_lcd_ready();
}
void cursor_off(void)
{
Command();
OUTPUT_D(0x0c);
write_strobe();
wait_for_lcd_ready();
}
void init_lcd(void)
{
Command();
OUTPUT_D(0x38);
write_strobe();
wait_for_lcd_ready();
Command();
OUTPUT_D(0x0f);
write_strobe();
wait_for_lcd_ready();
clear_lcd();
Command();
OUTPUT_D(0x02);
write_strobe();
wait_for_lcd_ready();
cursor_off();
}
void Wchar(unsigned char char_)
{
OUTPUT_HIGH(RS);
OUTPUT_LOW(RW);
OUTPUT_D(char_);
write_strobe();
wait_for_lcd_ready();
}
void gotoxy(unsigned char row,unsigned char col)
{
Command();
if (row==1) OUTPUT_D(0x80+col-1);
else
if (row==2) OUTPUT_D(0xc0+col-1);
write_strobe();
wait_for_lcd_ready();
}
void Wcharxy(unsigned char row,unsigned char col,unsigned char data_)
{
gotoxy(row,col);
Wchar(data_);
}
void string_to_lcd(unsigned char row,unsigned char col,unsigned char *st)
{
unsigned char i,len;
len=strlen(st);
if (len>20) len=20;
gotoxy(row,col);
for(i=0;i<=len-1;i++)
{
Wchar(st[i]);
}
}
void int_to_lcd(unsigned char row,unsigned char col,int data_int)
{
unsigned char str[7];
sprintf(str,"%d",data_int);
string_to_lcd(row,col,str);
}
void long_to_lcd(unsigned char row,unsigned char col,long data_long)
{
unsigned char str[7];
sprintf(str,"%ld",data_long);
string_to_lcd(row,col,str);
}
void hex_to_lcd(unsigned char row,unsigned char col,unsigned char data_hex)
{
unsigned char str[3];
sprintf(str,"%x",data_hex);
string_to_lcd(row,col,str);
}
void float_to_lcd(unsigned char row,unsigned char col,float data_float)
{
unsigned char str[7];
sprintf(str,"%02.1f",data_float);
string_to_lcd(row,col,str);
} |
|
|
Guest
|
|
Posted: Fri Aug 13, 2004 5:12 am |
|
|
Port E is analog input unless you explicitly set it to NO_ANALOG.
Your output_low() and output_high() calls are never executed. |
|
|
a Guest
|
|
Posted: Fri Aug 13, 2004 7:16 am |
|
|
i set port e is output and port d is input/output in wizard. and thank you for your answer |
|
|
|
|
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
|