下面是LCD的电路,其中RD接P2^6;LCDE接P2^7,WR接P2^5。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcd_E = P2^7;
sbit lcd_RS = P2^6;
sbit lcd_WR = P2^5;
uchar code table_show1[] = "Hello!";
uchar code table_show2[] = "I am ChenLu!";
void delay(uint time);
void init_lcd();
void write_lcd_command(uchar comm);
void write_lcd_data(uchar lcdData);
void main()
{
int flag1,flag2,flag3;
init_lcd();
//写入缓存区
write_lcd_command(0x80+0x10);
for(flag1=0; flag1<6; flag1++)
{
write_lcd_data(table_show1[flag1]);
}
//写入缓存区
write_lcd_command(0x80+0x50);
for(flag2=0; flag2<12; flag2++)
{
write_lcd_data(table_show2[flag2]);
}
//整个屏幕向左移动至最左端
for(flag3=0; flag3<16; flag3++)
{
write_lcd_command(0x18);
}
//停在这里,避免反复刷新
while(1);
}
//初始化LCD
void init_lcd()
{
//初始化LCD的属性
//显示模式
write_lcd_command(0x38);
//光标
write_lcd_command(0x0f);
write_lcd_command(0x06);
//清屏
write_lcd_command(0x01);
//数据指针
write_lcd_command(0x80);
}
//LCD写命令
void write_lcd_command(uchar comm)
{
delay(5);
//RS=L RW = L E=H
lcd_RS = 0;
delay(5);
lcd_WR = 0;
//写命令
P0 = comm;
delay(5);
lcd_E = 1;
delay(5);
lcd_E = 0;
}
//LCD写数据
void write_lcd_data(uchar lcdData)
{
delay(5);
//RS=H RW = L E=H
lcd_RS = 1;
delay(5);
lcd_WR = 0;
//写数据
P0 = lcdData;
delay(5);
lcd_E = 1;
delay(5);
lcd_E = 0;
}
//延时函数
void delay(uint time)
{
uint i,j;
for(i=100; i>time; i--)
for(j=0; j<100; j++);
}使用LCD主要是参考LCD数据手册,基本的用法就是上面的程序,关键是要注意时序问题。
读者可以在网上下载1602液晶资料,然后对着本程序琢磨。
注意:写命令---可以理解为设置显示屏的属性;写数据---可以理解成为你要让显示器显示的数据。
原文地址:http://blog.csdn.net/kotei_88_luluc_66/article/details/40269203