5152单片机第10课:LCD1602显示实例
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
///////////////////////////////////////
uchar code table[]="http://shop36269";
uchar code table1[]="702.taobao.com/";
/////////////////////////////////////
sbit lcden=P1^2;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
////////////////////////////////////
uchar num;
void delay_lcd(uint z);//延时程序声明
////////////////////////////////////
void delay_lcd(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com (uchar com)//写命令
{
lcdrs=0;
lcdrw=0;
P0=com;
delay_lcd(5);
lcden=1;
delay_lcd(5);
lcden=0;
}
void writedate(uchar date)//写数据
{
lcdrs=1;
lcdrw=0;
P0=date;
delay_lcd(5);
lcden=1;
delay_lcd(5);
lcden=0;
}
void chushihua()//初始化程序
{
lcden=0;
write_com (0x38);//显示模式设置
write_com (0x0e);//显示开/关光标
write_com (0x06);//光标加1
write_com (0x01);//清屏
write_com (0x80);//第一行 数据指针位置,如果是 0X83:表示空三格
}
void main()//主程序
{
chushihua();//调用初始化程序
for (num=0;num<16;num++)//以下程序显示 http://shop36269
{
writedate(table[num]);
delay_lcd(300);
}
write_com(0x80+0x40);// 第二行显示
for (num=0;num<15;num++)//以下程序显示 702.taobao.com/
{
writedate(table1[num]);
delay_lcd(300);
}
while(1);
}
1602液晶屏的显示
1、1602字符型液晶又名1602液晶,是专门显示字母、数字、符号等的点阵型液晶模块。能够显示16x02即32个字符,即02行,16列。
2、1602液晶分为上下两行各16位显示,处于不同行时的字符显示地址如下
3、1602引脚图如下
1脚:VSS接5V电源"-";
2脚:VDD接5V电源"+";
3脚:VO为对比度调整;VO是偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。
4脚:RS为数据/指令寄存器选择位,RS=1时选择数据寄存器、RS=0时选择指令寄存器;
5脚:R/W为读写信号线,R/W=1时进行读操作,R/W=0时进行写操作。当RS=0和RW=0时写入指令或者显示地址,当RS=0、RW=1时可以读忙信号,当RS=1、RW=0时可以写入数据;
6脚:E端为使能端,下降沿有效;
7~14脚:D0~D7为8位双向数据线;
15脚:背光电源正极;
16脚:背光电源负极。
4、1602带有字库,只能显示字库中的字符,字符库如下图
5、指令表
1、 电路图
2、 程序设计
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^2;
uchar code a[]="Welcome to JiDian142 Class!+_%$#@";
void delayu(uint u)
{
while(u--);
}
void delaym(uint m)
{
uchar i;
while(m--)
for(i=0;i<120;i++);
}
void zhiling(uchar com)
{
delayu(60);
rs=0;
rw=0;
P2=com;
e=1;
delaym(1);
e=0;
}
void shuju(uchar dat)
{
delayu(60);
rs=1;
rw=0;
P2=dat;
e=1;
delaym(1);
e=0;
}
void init()
{
zhiling(0x38);delaym(1);
zhiling(0x06);delaym(1);
zhiling(0x01);delaym(1);
zhiling(0x0c);delaym(1);
}
void main()
{
uchar i;
init();
zhiling(0x80);
for(i=0;i<16;i++)
{
shuju(a[i]);
}
zhiling(0x80+0x40);
for(i=16;i<32;i++)
{
shuju(a[i]);
}
while(1);
}
3、 下载程序并调试
另外,如果1602不显示,可从以下找原因。
1)、首先检查电路图是否画对,如果你的数据口用的是P0口,别忘记加上排阻。
2、检查仿真软件中的引脚接法是否与程序中的引脚一一相对应,如果不对应结果肯定出不来的。
3、最有可能出错的地方便是程序了。而程序当中可能出错的地方我碰到过几处。void write_com(uchar com)和void write_dat(uchar date)子程序中的延时函数delayus(60),时间过长或者过短都有可能显示不出来;void init()中的几个必备的指令使用不当也会导致无法显示;其他的原因一般都是小问题了,基本都能解决了。
相关问答
1602 液晶显示 的 单片机 为何屏幕亮但不 显示 数字-ZOL问答根据我试验的结果,1602的3脚通过470~510欧左右的电阻接地就能得到最佳对比度了。现在新型的1602还不需要接电阻。电位器用来调节对比度,保证显示清晰,若不用电...
1602 A 单片机 屏幕亮但不 显示 数字?这种情况可能的问题是:1、对比度调整不合适,调整一下电路参数就可以解决。2、软件问题,这个需要看到源程序才知道问题所在。这种情况可能的问题是:1、对比...
52 单片机 烧入程序, 1602 只亮,不 显示 ?1602只亮不显示字符有可能的问题是:1、对比度调整不合适,调整一下电路参数就可以解决。2、软件问题,这个需要看到源程序才知道问题所在。1602只亮不显示字...
51单片机 字符液晶屏(LMC 1602 )输出端RS,RW还有E分别都有什么作用?从左向右,1,2,3是电源和亮度(不同的1602型号对应也不同),4,5,6,是rs,rw,e,一般是这样的,就算接错了,在单片机里面重定义就行了从左向右,1,2,3是电源和亮度(不...
为什么 单片机 都选择LCD 1602 ?因为LCD1602是学单片机时最简单的入门方式。1602液晶显示屏可以显示两行,每行16个字符。1602液晶显示屏操作不复杂,总线接口简单,使用几个IO口就可以了。很...
51单片机 ,通过NRF24L01发射、接收,最后用LCD 1602显示 温...新浪共享上有源码和电路图,去下载即可已通过测试
单片机 Proteus仿真中引脚有时电平为,灰色,代表什么?默认的灰色代表电平未知,红色高,蓝色低,这些都可以自己设定,好像在倒数第三还是第四个菜单里,印象中好像是有关颜色的选项,里面可以设定系统的颜色默认的灰色...
LCD 1602 在编写程序写指令用到OX80、OX30分别代表什么意思?write_cmd(OX80+OX40);表示在第二行第一位显示write_cmd(OX80);表示在第一行第一位显示write_date(OX30+shi);中OX30+0,1,2,3~9是表示...
英语翻译本论文介绍了基于AT89 C51单片机 为核心的、以ADC0808...[最佳回答]ThispaperintroducesthebasedonAT89C51asthecore,toADC0808analog-to-digitalconversionchip...
单片机 中的LCD-ZOL问答单片机中的LCD显示器讨论回答(7)看你的程序,大概猜出应该是在液晶第二行显示时分秒信息Voidwrite_sfm(ucharadd,uchardate),add看程序是指LCD第二...