LCD1602顯示時,總是前面空四格,單詞間的空格會變成$,字母“A”會變成"E".仿真運行時沒問題。哪位能幫忙解決一下#defin
主程序中:
uchar disp[16]={"Number: "};//顯示數(shù)組
LCD_Init();//LCD初始化
WriteChar(1,0,16,"No one Calls.... ");//第一行顯示“No one Calls.... ”
調(diào)用程序:
#include"delay.h" //添加延時函數(shù)頭文件
#define LCD_PINDATA P0 //數(shù)據(jù)端口定義 P2
sbit RS = P1^4; //RS P0^7
sbit RW = P1^5; //RW P0^6
sbit E = P1^6; //E P0^5
/************************************************
** 函數(shù)名稱 : WriteCOMDATA(uchar LCD_DATA,uchar N)
** 函數(shù)功能 : LCD1602寫指令、數(shù)據(jù)函數(shù)
** 輸 入 : LCD_DATA:指令或者數(shù)據(jù)
N:指令方式還是數(shù)據(jù)方式
N=0時,LCD_DATA為指令,N=1時,LCD_DATA為數(shù)據(jù)
** 輸 出 : 無
** 說 明 :
************************************************/
void WriteCOMDATA(uchar LCD_DATA,uchar N)
{
Delay(10);
E=1;
RW=0;
RS=N;
LCD_PINDATA=LCD_DATA;
E=0;
}
/************************************************
** 函數(shù)名稱 : void LCD_init(void)
** 函數(shù)功能 : LCD1602初始化操作
** 輸 入 : 無
** 輸 出 : 無
** 說 明 :
************************************************/
void LCD_Init(void)
{
WriteCOMDATA(0x01,0);
Delay(500);
WriteCOMDATA(0x38,0);
Delay(10);
WriteCOMDATA(0x06,0);
Delay(10);
WriteCOMDATA(0x0c,0);
Delay(10);
}
/************************************************
** 函數(shù)名稱 :void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
** 函數(shù)功能 :在任意位置寫指定個字符
** 輸 入 :Row : 要寫的字符所在的行,只能為1或2;
Col : 要寫的字符所在的列,只能為0---15
Num : 要寫字符的個數(shù)
pbuffer : 要寫字符的首地址
** 輸 出 :無
** 說 明 :
************************************************/
void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer)
{
uchar i;
if(Row==1)Row=0x80+Col;
else Row=0xC0+Col;
WriteCOMDATA(Row,0);
for(i=Num;i!=0;i--)
{
WriteCOMDATA(*pBuffer,1);
pBuffer++;
}
}
#endif
|