// LCD
unsigned char NowPos=0; //for postion adjust
sfr LCD_DATA = 0x80;//connect to P0
sbit LCD_E = P3^7;
sbit LCD_RW = P3^6;
sbit LCD_RS = P3^5;
// RS = 0 instr reg, RS = 1 data reg
#define LCD_CLS() WriteLCDCmd(0x1);
#define LCD_HOME() WriteLCDCmd(0x2);
unsigned char ReadLCD()
{
unsigned char tmp;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
tmp = LCD_DATA;
LCD_E = 0;
LCD_RW = 1;
LCD_RS = 1;
return tmp;
}
unsigned char CheckLCDBusy()
{
unsigned char tmp;
tmp = ReadLCD();
return (tmp & 0x80);
}
void WriteLCDCmd(unsigned char cmd)
{
while ( CheckLCDBusy() );
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
LCD_DATA = cmd;
LCD_E = 0;
LCD_RW = 1;
LCD_RS = 1;
}
void LCD_SetPos(unsigned char pos)
{
NowPos=pos;
//read pos to NowPos
WriteLCDCmd(pos | 0x80);
}
void WriteLCDData(unsigned char dat)
{
if(NowPos > 0x4F) //from
last jump to first
LCD_SetPos(0x0);
if( (NowPos > 0x0F) && (NowPos<40) )
//from upper last jump to lower first
LCD_SetPos(0x40);
while ( CheckLCDBusy() );
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1;
LCD_DATA = dat;
LCD_E = 0;
LCD_RW = 1;
LCD_RS = 1;
NowPos++;
//NowPos increse
}
void LCD_Init()
{
WriteLCDCmd(0x38); //Function Set
WriteLCDCmd(0xe); //Display On/Off control
WriteLCDCmd(0x6); //Entry Mode Set
}
void LCD_Print(char *s) //Print S
tring
{
while ( *s )
{
WriteLCDData(*s);
s++;
}
}
LCD_SetPos是可以設定游標的函式..
參考看囉!^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.197.87