|
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_data P0
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
/*uchar code table1[]="Huan Ying Cheng Zuo";
uchar code table2[]="Li Gong Nan Yuan Dao Le";
uchar code table3[]="Li Gong Xue Yuan Dao Le";
uchar code table4[]="Hua ban Qiao Dao Le";
uchar code table5[]="Xie Xie Cheng Zuo"; */
uchar code table1[]="LCD1206 check ok";
uchar code table2[]="study up";
void lcd_w_cmd(unsigned char com); //写命令字函数
void lcd_w_dat(unsigned char dat); //写数据函数
unsigned char lcd_r_start(); //读状态函数
void lcd_int1(); //LCD初始化函数
void delay (uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void delay1()
{
_nop_();
_nop_();
_nop_();
}
unsigned char lcd_r_start()
{
unsigned char s;
RW=1; //RW=1,RS=0,读LCD状态
delay1();
RS=0;
delay1();
E=1; //E端时序
delay1();
s=lcd_data; //从LCD的数据口读状态
delay1();
E=0;
delay1();
RW=0;
delay1();
return(s); //返回读取的LCD状态字
}
//函数名:lcd_w_cmd
//函数功能:写命令字
//形式参数:命令字已存入com单元中
//返回值:无
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do { // 查LCD忙操作
i=lcd_r_start(); // 调用读状态字函数
i=i&0x80; // 与操作屏蔽掉低7位
delay(2);
} while(i!=0); // LCD忙,继续查询,否则退出循环
RW=0;
delay1();
RS=0; // RW=1,RS=0,写LCD命令字
delay1();
E=1; //E端时序
delay1();
lcd_data=com; //将com中的命令字写入LCD数据口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
//函数名:lcd_w_dat
//函数功能:写数据
//形式参数:数据已存入dat单元中
//返回值:无
void lcd_w_dat(unsigned char dat)
{
unsigned char i;
do { // 查忙操作
i=lcd_r_start(); // 调用读状态字函数
i=i&0x80; // 与操作屏蔽掉低7位
delay(2);
} while(i!=0); // LCD忙,继续查询,否则退出循环
RW=0;
delay1();
RS=1; // RW=1,RS=0,写LCD命令字
delay1();
E=1; // E端时序
delay1();
lcd_data=dat; // 将dat中的显示数据写入LCD数据口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
void lcd_init()
{
lcd_w_cmd(0x38); // 设置工作方式
lcd_w_cmd(0x0c); // 设置光标
lcd_w_cmd(0x01); // 清屏
lcd_w_cmd(0x06); // 设置输入方式
lcd_w_cmd(0x80); // 设置初始显示位置
}
void main()
{
uchar n,m=0;
lcd_init();
lcd_w_cmd(0x80);
for(m=0;m<16;m++)
{
lcd_w_dat(table1[m]);
delay(200);
}
while(1)
{
lcd_w_cmd(0xC4);
for(n=0;n<8;n++)
{
lcd_w_dat(table2[n]);
delay(200);
}
}
}
程序附上,你可以看看。我只改变了,使能端,你可以改。
|
-
1602.png
(9.66 KB, 下载次数: 48)
你的主程序不应该写while(1);等待,还有你1602的各个函数有误
|