像这种含有芯片的元器件,最重要的是去学习怎样学会看懂这个芯片的引脚功能,而不是去背诵这个芯片的语句,不同厂家的同款元器件还有微小的差异,所以购买这种东西的时候,要向厂家索要一份芯片手册,看着手册设计程序或是电路。
1602液晶
1602:16意思是一行能显示16个字符,02表示一共有两行
只能显示数字和字符
写数据时序图
RS 低电平就是选择数据,高电平就是选择指令
RW 高电平就是读,低电平就是写
E是使能信号,发出高低脉冲
按照时序图,先写指令(数据),延迟,给脉冲
写指令(数据)
先选择写指令,然后把P0口赋值,接下来就是按照时序图的指示写程序啦。写数据也是一样的 就不展开了。
void write_com(uchar com)//
{
lcdrs=0; // set write com
P0=com; // give value data
delay(5);
lcden=1;// Âö³å
delay(5);
lcden=0;
}
初始化程序
这里显示的就是每一位矩阵的RAM地址,只显示00-0F,40-4F,在这两行右边的虽然有地址但是不显示,可以用来全屏左移,达到动态效果。
void init()
{
dula=0;//因为数码管会分压,所以关掉防止电压不够
wela=0;
lcden=0;
write_com(0x38);//初始化5*7矩阵
//0000 1DCB D显示 C光标 B闪烁
write_com(0x0f);
//0000 01NS
write_com(0x06);//光标移动,数据不移动
write_com(0x80);//初始化指针位置,80H就是第一位
}
字符手册
我们可以用矩阵来写数据,根据下表
若是要直接写的话,用‘’隔开
write_data('A');
若是要写一串字符的话
就用矩阵
uchar code table[]=" I Love U";
但这里的矩阵外不再是{}花括号了,而是双引号
移动
按照芯片手册的说法此时赋予P0=0x18就是左移一次,光标也会跟着左移
其他设置
0x01就是清屏 0x02就是回车
代码示例
不包含移动,包涵清屏,另起一页的代码示例
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=" I Love U";
uchar code table1[]=" FOREVER";
uchar code table2[]="Just a joking";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//写指令
{
lcdrs=0; // set writing com
P0=com; // input value data
delay(5);
lcden=1;//给脉冲
delay(5);
lcden=0;
}
void write_data(uchar date)//写数据
{
lcdrs=1; //选择数据
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x80);
}
void main()
{
uint time;
init();
for(time=0;time<12;time++)
{
write_data(table[time]);
delay(300);
}
write_com(0x80+0x40);
for(time=0;time<11;time++)
{
write_data(table1[time]);
delay(300);
}
delay(300);
write_com(1);
delay(300);
delay(300);
delay(300);
write_com(0x80+0x00);
for(time=0;time<13;time++)
{
write_data(table2[time]);
delay(300);
}
while(1);
}
整屏移动代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]="I Love U";
uchar code table1[]="FOREVER";
uchar code table2[]="Just a joking";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//дÃüÁî
{
lcdrs=0; // set write com
P0=com; // give value data
delay(5);
lcden=1;// Âö³å
delay(5);
lcden=0;
}
void write_data(uchar date)//дÊý¾Ý
{
lcdrs=1; // set write com
P0=date; // give value data
delay(5);
lcden=1;// Âö³å
delay(5);
lcden=0;
}
void init()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x80+0x10);
void main()
{
uint time;
init();
for(time=0;time<8;time++)
{
write_data(table[time]);
delay(20);
}
write_com(0x80+0x50);//»»ÐÐ
for(time=0;time<7;time++)
{
write_data(table1[time]);
delay(20);
}
for(time=0;time<16;time++)
{
write_com(0x18);
delay(200);
}
while(1);
}