|
#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); //寫命令字函數(shù)
void lcd_w_dat(unsigned char dat); //寫數(shù)據(jù)函數(shù)
unsigned char lcd_r_start(); //讀狀態(tài)函數(shù)
void lcd_int1(); //LCD初始化函數(shù)
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狀態(tài)
delay1();
RS=0;
delay1();
E=1; //E端時(shí)序
delay1();
s=lcd_data; //從LCD的數(shù)據(jù)口讀狀態(tài)
delay1();
E=0;
delay1();
RW=0;
delay1();
return(s); //返回讀取的LCD狀態(tài)字
}
//函數(shù)名:lcd_w_cmd
//函數(shù)功能:寫命令字
//形式參數(shù):命令字已存入com單元中
//返回值:無
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do { // 查L(zhǎng)CD忙操作
i=lcd_r_start(); // 調(diào)用讀狀態(tài)字函數(shù)
i=i&0x80; // 與操作屏蔽掉低7位
delay(2);
} while(i!=0); // LCD忙,繼續(xù)查詢,否則退出循環(huán)
RW=0;
delay1();
RS=0; // RW=1,RS=0,寫LCD命令字
delay1();
E=1; //E端時(shí)序
delay1();
lcd_data=com; //將com中的命令字寫入LCD數(shù)據(jù)口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
//函數(shù)名:lcd_w_dat
//函數(shù)功能:寫數(shù)據(jù)
//形式參數(shù):數(shù)據(jù)已存入dat單元中
//返回值:無
void lcd_w_dat(unsigned char dat)
{
unsigned char i;
do { // 查忙操作
i=lcd_r_start(); // 調(diào)用讀狀態(tài)字函數(shù)
i=i&0x80; // 與操作屏蔽掉低7位
delay(2);
} while(i!=0); // LCD忙,繼續(xù)查詢,否則退出循環(huán)
RW=0;
delay1();
RS=1; // RW=1,RS=0,寫LCD命令字
delay1();
E=1; // E端時(shí)序
delay1();
lcd_data=dat; // 將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
void lcd_init()
{
lcd_w_cmd(0x38); // 設(shè)置工作方式
lcd_w_cmd(0x0c); // 設(shè)置光標(biāo)
lcd_w_cmd(0x01); // 清屏
lcd_w_cmd(0x06); // 設(shè)置輸入方式
lcd_w_cmd(0x80); // 設(shè)置初始顯示位置
}
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);
}
}
}
程序附上,你可以看看。我只改變了,使能端,你可以改。
|
-
你的主程序不應(yīng)該寫while(1);等待,還有你1602的各個(gè)函數(shù)有誤
|