//程序功能:LCD1602的簡單滾動顯示
//方法說明:看著芯片資料寫程序
//編程人員:梁功明
//編程時間:2013年4月8日 23:16:42
//修改時間:2013年4月9日 23:25:33
//**********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs = P2^4; //這些端口要根據開發板的接口選擇
sbit lcdrw = P2^5;
sbit lcden = P2^6;
sbit busy = P0^7;
uchar num;
void init();
void wait();
void write_cmd(uchar cmd);
void write_data(uchar dat);
void display(uchar add,uchar *a);
void delay(uint z);
void main()
{
uchar buf1[]=" 0123456789 "; //顯示的字符可修改
uchar buf2[]=" 9876543210 ";
init();
display(0x90,buf1);
display(0xd0,buf2);
for(num=0;num<32;num++)
{
write_cmd(0x18);
delay(200);
}
}
//液晶的初始化
void init()
{
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
}
//液晶的讀狀態檢測
void wait()
{
P0 = 0xff;
do
{
lcdrs = 0;
lcdrw = 1;
lcden = 0;
lcden = 1;
}while(busy==1);
lcden = 0;
}
//液晶寫指令的初始化
void write_cmd(uchar cmd)
{
wait();
lcdrs = 0;
lcdrw = 0;
lcden = 0;
P0 = cmd;
lcden = 1;
lcden = 0;
}
//液晶寫數據的初始化
void write_data(uchar dat)
{
wait();
lcdrs = 1;
lcdrw = 0;
lcden = 0;
P0 = dat;
lcden = 1;
lcden = 0;
}
//液晶顯示的函數
void display(uchar add,uchar *a)
{
write_cmd(add);
while(*a!='\0')
write_data(*a++);
}
//簡單的延時函數
void delay(uint z)
{
uchar i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}