不知道妳的液晶模塊是不是帶兩個片選口的,我這裏有壹個液晶模塊只帶壹個片選口,數據接口支持串行、4位並行和8位並行,以下使用了8位並行接口,用作測試時只用了最基本的指令來實現漢字的顯示,默認從最左上角開始顯示,未支持自定義位置顯示功能,如果還要其他功能,可參考技術資料去模塊寫入相應的指令,不會復雜的。希望對妳有所幫助。
#include <reg52.h>
#define DB P0
sbit LCD_RS = P1^0;//選擇指令寄存器或數據寄存器
sbit LCD_RW = P1^1;//控制讀、寫
sbit LCD_E = P1^2;//片選、使能
sbit buzy_test = DB^7;//8位數據接口
void byzy_wait(void)//液晶模塊內部忙檢測
{
DB=0xff; //為了讀出狀態,IO口必須先寫入1,否則讀取的狀態會錯誤
LCD_RS=0;
LCD_RW=1;
LCD_E=1;
_nop_();
while(buzy_test);
}
void write_char(unsigned char d)//向模塊寫入1字節數據
{
byzy_wait();
LCD_RS=1;
LCD_RW=0;
DB=d;
LCD_E=1;
_nop_();
LCD_E=0;
}
void write_code(unsigned char d)//向模塊寫入壹條指令
{
byzy_wait();
LCD_RS=0;
LCD_RW=0;
DB=d;
LCD_E=1;
_nop_();
LCD_E=0;
}
void write_string(unsigned char *str)//顯示字符串
{
while(*str!='\0')
{
write_char(*str);
str++;
}
}
main()
{
delay_ms(500);//自定義壹個毫秒級的延時,這裏延時了500ms
write_code(0x30);//通過寫入指令,選擇8位並行接口模式
write_code(0x01);//清除顯示
write_code(0x0c);//開啟顯示狀態,允許整體顯示
write_code(0x02);//地址歸位
write_code(0x80);//設定顯示起始位置為第壹行行首
write_string("液晶演示");
while(1)
{}
}