為什么我的dspic30f4011上LCD就是不能顯示,以下是程序。
#include<p30f4011.h>
_FOSC(CSW_FSCM_OFF&XT_PLL4); //4倍頻晶振,F(xiàn)ailsafe時鐘關(guān)閉
_FWDT(WDT_OFF); //關(guān)閉看門狗定時器
_FBORPOR(PBOR_OFF&MCLR_EN); //掉電復位禁止,MCLR復位時能
_FGS(CODE_PROT_OFF); //代碼保護禁止
#define RS LATFbits.LATF4
#define RW LATFbits.LATF5
#define E LATBbits.LATB6
#define out LATD //4位輸入--RD0-4
#define uchar unsigned char
void LCD_initialize();//初始化函數(shù)
void check_busy();//查忙函數(shù),但是這次沒有用到
void write_command(uchar com);//寫命令函數(shù)
void write_data(uchar dat);//寫數(shù)據(jù)函數(shù)
void string(uchar ad,uchar*p,uchar n);//使Lcd顯示字符的函數(shù)
void delay(uchar i);//延時函數(shù)
void delay(uchar i)//延時函數(shù)
{
uchar t;
while(i--)
{
for(t=0;t<120;t++);
}
}
void write_command(uchar com)//寫命令函數(shù)
{
delay(1);
E=0;
RS=0;
RW=0;
out=com;
delay(1);
E=1;
delay(1);
E=0;
out=com <<4;
delay(1);
E=1;
delay(1);
E=0;
}
void write_data(uchar dat)//寫數(shù)據(jù)函數(shù)
{
delay(1);
E=0;
RS=1;
RW=0;
out=dat;
delay(1);
E=1;
delay(1);
E=0;
out=dat <<4;
delay(1);
E=1;
delay(1);
E=0;
}
void LCD_initialize()//初始化函數(shù)
{
//RW=0;
write_command(0x32);
write_command(0x28);
write_command(0x0c);
write_command(0x06);
write_command(0x01);
write_command(0x80);
}
void string(uchar ad,uchar *p,uchar n)//顯示字符函數(shù)
{
uchar i;
write_command(ad);
for(i=0;i<n;i++)
{
write_data(*p++);
delay(100);
}
}
void main()
{
delay(1);
LCD_initialize();//LCD初始化
while(1)
{
string(0x85,"welcome",7);//寫入welcome
string(0xc2,"Harbin China",12);//寫入Harbin China
delay(100);
write_command(0x01);//清屏
delay(100);
}
}
|