lcd字符怎么显示自己名字 (lcd1602如何让字符闪烁)

(视频版,请前往视频区)

SMC1602什么意思?长什么样子

lcd1602自定义字符教程,lcd1602字符代码

lcd1602自定义字符教程,lcd1602字符代码

各个接口管脚的定义;

lcd1602自定义字符教程,lcd1602字符代码

基本操作时序:

读状态 输入:RS=L,R/W=H,E=H 输出D0~D7 =状态字

读数据 输入:RS=H,R/W=H,E=H 输出D0~D7 =数据

写指令 输入:RS=L,R/W=L,E=H,D0~D7=指令码 输出:无

写数据 输入:RS=H,R/W=LE=H,D0~D7=数据 输出:无

RAM地址映射图

向图中00H~0FH,40H~4F地址任意写显示数据时,液晶都可以立即显示出来,但是10H-27H或者50H-67H地址时,就要用到屏幕移动指令,把它们移动到显示区域:

lcd1602自定义字符教程,lcd1602字符代码

控制器内部有个数据地址指针,用户可以通过听你们访问内部的全部字节。

使用方法:0X80+0X要写入的地址。

清屏指令:0x01;

为什么是这样的指令,这是厂家自定义 定义好的,不能改变。

还有一个是显示模式设置:0x38; 意思是:设置16*2显示,5*7点阵,8位数据接口。(属于初始化步骤里面的)

显示开关以及光标设置

lcd1602自定义字符教程,lcd1602字符代码

看一下线路是怎么接的

lcd1602自定义字符教程,lcd1602字符代码

效果展示:

lcd1602自定义字符教程,lcd1602字符代码

(后面还有详细解释版本,往下拉)
代码 复制:
#include "reg52.h"
#define uchar unsigned 	char
#define uint unsigned	int
uchar code table[]="Huang Hua Nan";
uchar code table1[]="2019/06/02";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit lcdwr=P3^6;
uchar num;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
 for(j=110;j>0;j--);
}
void write_com(uchar com)	 //写指令子程序
{
 lcdrs=0;
 lcdwr=0;
 P1=com;
 delayms(5);
 lcden=1;
 delayms(5);
 lcden=0;
}
void write_date(uchar date)	 //写数据子程序
{
 lcdrs=1;
 lcdwr=0;
 P1=date;
 delayms(5);
 lcden=1;
 delayms(5);
 lcden=0;
}
void init()	 //初始化子程序
{
 lcden=0;
 write_com(0x38);//显示模式设置,也就是00111000 ,系统自定义的,有兴趣的可以去查阅更细节的资料。
 write_com(0x0e); //光标打开,显示光标,不闪烁。 00001110
 write_com(0x06); //写入一个字符后指针地址加一,写一个字符时整屏不移动	 00000110
 write_com(0x01); //清屏显示,数据指针清零,所以显示清零	0000 0001
 write_com(0x80); //设置字符显示首地址。 1000 0000 +01 确认从屏幕的第几位开始显示
}
void main()
{
 init();
 delayms(100);
 EA=1;
 EX0=1;
 EX1=1;
 while(1);
}
void int0() interrupt 0
{
 write_com(0x80+0x01);
 for(num=0;num<14;num++)// huang hua nan 
 {
 write_date(table[num]);
 delayms(20);
 }
 write_com(2);
 write_com(0x80+0x41);
 for(num=0;num<11;num++)
 {
 write_date(table1[num]);
 delayms(20);
 }
}
void int1() interrupt 2
{
 write_com(1);
}

详细解释一下:

#include "reg52.h" //包含51系列单片机的一个头文件

#define uchar unsigned char//宏定义,把后面的长句,变成前面的短句

#define uint unsignedint //宏定义,把后面的长句,变成前面的短句

uchar code table[]="Huang Hua Nan"; //编码来显示的数据,huang hua nan 13

uchar code table1[]="2019/06/02"; //编码 显示的字符,是 今天的日期。 10

sbit lcden=P3^4; //位操作,把3.4这个口定义为lcden,

sbit lcdrs=P3^5;//位操作,把3.5这个口定义为lcdrs,

sbit lcdwr=P3^6;//位操作,把3.6这个口定义为lcdwr,

uchar num; //定义一个无符号字符。

void delayms(uint xms) //延时子程序,定义了一个无符号字符,带形式参数

{

uint i,j; //定义两个无符号字符

for(i=xms;i>0;i--)//要循环xms次

for(j=110;j>0;j--); //要循环xms*110

}

void write_com(uchar com) //写指令子程序 意义 :先启动写命令操作,然后把具体写到哪里去,再调用。

{

lcdrs=0; //写指令,写命令。 低电平有效

lcdwr=0; // 低电平有效。

P1=com; //把写的指令,送到P1口

delayms(5); //延时5毫秒

lcden=1;//写命令要高电平

delayms(5);//延时5毫秒

lcden=0;//变成低电平,表示写完了。

}

void write_date(uchar date) //写数据子程序, 送要显示的数据。

{

lcdrs=1; //高电平有效

lcdwr=0; //低电平。

P1=date; //把要送去显示的数据 送到p1口

delayms(5);//延时5毫秒

lcden=1; //高电平有效,

delayms(5);//延时5毫秒

lcden=0;//告诉系统,显示的数据 我已经送完了。

}

void init() //初始化子程序

{

lcden=0; //根据操作时序来看,使能端要低电平。

write_com(0x38);//显示模式设置,也就是00111000 ,系统自定义的,有兴趣的可以去查阅更细节的资料。

write_com(0x0e); //光标打开,显示光标,不闪烁。 00001110

write_com(0x06); //写入一个字符后指针地址加一,写一个字符时整屏不移动 00000110

write_com(0x01); //清屏显示,数据指针清零,所以显示清零0000 0001

write_com(0x80); //设置字符显示首地址。 1000 0000 +01 确认从屏幕的第几位开始显示

}

void main()//主程序

{

init(); //初始化

delayms(100);//延时100毫秒,给初始化一点时间。

EA=1;//开总中断

EX0=1;//外部中断0, 来显示数据

EX1=1;//外部中断1, 清屏

while(1);//不断地判断,循环。

}

void int0() interrupt 0 外部中断0

{

write_com(0x80+0x01); 写命令,指令,在第二位开始显示

for(num=0;num<14;num++)// huang hua nan 因为有13个数据,所以要写14.

{

write_date(table[num]); //调用显示数据子程序

delayms(20);//延时20毫秒

}

write_com(2);//显示回车 换行的意思。

write_com(0x80+0x41); 去第二行第二个位置去显示。

for(num=0;num<11;num++) //因位日期数据是10位,所以我们写11.

{

write_date(table1[num]);//调用显示数据子程序,送去显示

delayms(20);//延时20毫秒

}

}

void int1() interrupt 2 第二个中断

{

write_com(1); 表示清屏的意思。

}