#include
#define uchar unsigned char
#define uint unsigned int
#define DataDir P1DIR
#define DataPort P1OUT
//#define Busy 0x80
#define CtrlDir P2DIR
#define CLR_RS P2OUT&=~BIT0; //RS = P2.0
#define SET_RS P2OUT|=BIT0;
#define CLR_RW P2OUT&=~BIT1; //RW = P2.1
#define SET_RW P2OUT|=BIT1;
#define CLR_EN P2OUT&=~BIT2; //EN = P2.2
#define SET_EN P2OUT|=BIT2;
uchar table4[]="LCD12864";
uchar table5[]="自定义显示字符";
uchar table6[]="大海橡树";
/*void delay(uint i) //延时函数
{
while(--i);
}*/
void delay_1ms(void)
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n)
{
unsigned int i=0;
for (i=0;i
delay_1ms();
}
void read_busy() //读忙标志 最高位为1则busy,不能进行读写操作
{
CLR_RS ; //RS=0;
SET_RS ; //RW=1;
SET_EN ; //EN=1; //看时序
while(DataPort & 0x80);
CLR_EN ; //EN=0;
}
void write_LCD_command(uchar value) //写命令函数
{
read_busy(); //每次读写都要进行读忙标志
CLR_RS ; //RS=0;
CLR_RW ; //RW=0;
//delay(200);
delay_nms(5);
SET_EN ; //EN=1; //EN从1--0锁存数据
DataPort =value;
//delay(200);
delay_nms(5);
CLR_EN ; //EN=0;
}
void write_LCD_data(uchar value) //写数据函数
{
read_busy();
SET_RS ; //RS=1;
CLR_RW ; //RW=0;
//delay(200);
delay_nms(5);
SET_EN ; //EN=1; //EN从1--0锁存数据
DataPort =value;
//delay(200);
delay_nms(5);
CLR_EN ; //EN=0;
}
void init_LCD() //8位并口方式LCD1864初始化函数
{
//delay(4000); //等待时间>40ms
delay_nms(50);
write_LCD_command(0x30);//功能设定:8位数据、基本指令操作
//delay(100); //等待时间>100us
delay_nms(1);
write_LCD_command(0x30);//功能设定:8位数据、基本指令操作
//delay(37); //等待时间>37us
delay_nms(1);
write_LCD_command(0x0C);//显示设定:整体显示、游标关、不反白
//delay(100); // 等待时间>100us
delay_nms(1);
write_LCD_command(0x01);//清屏指令
//delay(10000); //等待时间>10ms
delay_nms(20);
write_LCD_command(0x06);//进入点设定:地址指针加1
delay_nms(1);
}
void main( void )
{
uchar num;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
CtrlDir |= 0x07; //控制线端口设为输出状态
DataDir |= 0xFF; //数据端口设为输出状态
// DataPort |=0xFF;
//CtrlDir |=0xFF;
init_LCD();
// LCD_CLR();
write_LCD_command(0x80);
for(num=0;num<8;num++)
{
write_LCD_data(table6[num]);
}
write_LCD_command(0x84);
for(num=0;num<8;num++)
{
write_LCD_data(table4[num]);
}
write_LCD_command(0x90);
for(num=0;num<14;num++)
{
write_LCD_data(table5[num]);
}
// while(1);
}
这是整个程序,编译无错,调试时出现No source available for "c_int00_noexit() at 0xe0dc" (the entry point was reached),液晶没有任何反应。数据口是P1,RS,RW,E,分别是片p2.0,p2.1,p2.2。PSB直接接的高电平。求助。。。。。。。