工具proteus,keil
步骤:
1.画好电路图
2.在指令模式下,设置好显示模式以及光标位置
3.在写数据模式下,向1602写入显示字符(1602只能显示数字和字符)
电路图
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
void init();
void write_cmd(uchar cmd);
void write_data(uchar input);
void delay(uchar time_delay);
uchar table_wel[] = "hello world!";
uchar table_name[] = "i am gxf!";
sbit lcdrs = P3^0;
sbit lcdrw = P3^1;
sbit lcden = P3^2;
void main()
{
uchar i = 0;
init();
//write_data('g');
for(;i < 12;i ++)
{
write_data(table_wel[i]);
}
write_cmd(0xc0);
// delay(5);
for(i = 0; i < 9; i++)
{
write_data(table_name[i]);
}
while(1);
}
void init()
{
lcdrs = 0;//命令选择段
lcdrw = 0;//写命令
write_cmd(0x38);
write_cmd(0x0f);
write_cmd(0x06);
write_cmd(0x80);//从第一个位置开始显示
}
void write_cmd(uchar cmd)
{
lcdrs = 0;//命令选择段
lcdrw = 0;//写命令
P2 = cmd;//设置显示模式
delay(5);
lcden = 1;
delay(5);//延时5MS形成高脉冲
lcden = 0;
}
void write_data(uchar input)
{
lcdrs = 1;//写数据模式
lcdrw = 0;//写数据
P2 = input;//设置显示模式
delay(5);
lcden = 1;
delay(5);//延时5MS形成高脉冲
lcden = 0;
}
//软件延时
void delay(uchar time_delay)
{
uint x,y;
for(x = time_delay; x > 0; x --)
for(y = 110; y > 0 ; y--);
}
测试效果
说明:最开始我用的是P0口,控制rs,rw和en,但好像P0口要特殊一点。有点不行,换了P3口。还要研究一下P0口。