(视频版,请前往视频区)
SMC1602什么意思?长什么样子
各个接口管脚的定义;
基本操作时序:
读状态 输入: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地址时,就要用到屏幕移动指令,把它们移动到显示区域:
控制器内部有个数据地址指针,用户可以通过听你们访问内部的全部字节。
使用方法:0X80+0X要写入的地址。
清屏指令:0x01;
为什么是这样的指令,这是厂家自定义 定义好的,不能改变。
还有一个是显示模式设置:0x38; 意思是:设置16*2显示,5*7点阵,8位数据接口。(属于初始化步骤里面的)
显示开关以及光标设置
看一下线路是怎么接的
效果展示:
(后面还有详细解释版本,往下拉)代码 复制:#include "reg52.h"#define uchar unsigned char#define uint unsignedintuchar 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); 表示清屏的意思。
}
今天的文章date oracle 显示毫秒_如何用LCD1602的字符来显示自己名字的拼音分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/40130.html