功能說明:
16X2 的字符型LCD顯示“LCD TEST OK”
電路說明:
電路圖如下圖所示:

HT48R50A-1 的端口A接到字符型LCD的D0-D7(數據總線),使用字符型LCD的8位數據接口。
將HT48R50A-1的PC1接到LCD的讀/寫引腳。當LCD的讀/寫引腳為高電平時,表示將從LCD內部讀取數據,當LCD的讀/寫引腳為低電平時,表示將數據寫入LCD中。
將HT48R50A-1的PC2接到LCD的E引腳。當LCD的E引腳為高電平時,LCD的D0-D7引腳上的數據將會被寫入LCD中,平時LCD的E引腳保持在低電平。
將HT48R50A-1的PC0接到LCD的RS引腳。當LCD的RS引腳為低電平并對LCD做讀寫操作時,可以把LCD的指令寫入LCD的指令寄存器,若對LCD做讀寫操作,可以讀取LCD的忙標志位及地址計數器。LCD的忙標志位為1位,地址計數器為7位,合計8位。當LCD的RS引腳為高電平時,可以對LCD的數據寄存器做讀/寫操作。
將字符型LCD的CO引腳接到GND。VO引腳是字符型LCD的亮度調整電壓輸入引腳,通常VO引腳接地時字符型LCD上的字符最清晰,也可以把VO引腳接一個可變電阻作為字符型LCD的對比度調整。
完整版本的程序源碼下載地址: http://m.izizhuan.cn/f/htlcd.rar ,以下列出main.c文件:
#include "HT46F49E.H"
#define lcd_en _pc1
#define lcd_rs _pc0
#define lcd_date _pa
unsigned char table1[]="LCD 1602";
unsigned char table2[]="TEST IS OK!";
unsigned char num;
void delayms(unsigned int n)//ms 延時
{
while(n>0)
{
_delay(984);
n--;
}
}
void write_com(unsigned char com)// 寫命令
{
lcd_rs=0;//lcdrs=0 ,選擇寫命令模式
delayms(5);
lcd_date=com;// 命令字送到數據總線
delayms(5);
lcd_en=1;//lcden=1 ,使能,init初始化中已經置低
delayms(5);
lcd_en=0;
}
void write_date(unsigned char date)// 寫數據
{
lcd_rs=1;
delayms(5);
lcd_date=date;
delayms(5);
lcd_en=1;
delayms(5);
lcd_en=0;
}
void lcd_init()
{
write_com(0x38);
delayms(2);
write_com(0x0c);
delayms(2);
write_com(0x06);
deleyms(2);
write_com(0x01);
delayms(2);
}
void main()
{
lcd_init();
write_com(0x80);
for(num=0;num<8;num++)
{
write_date(table1[num]);
delayms(2);
}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_date(table[num]);
delayms(2);
}
while(1);
}
