LCD1602编程思维

2025-11-28 01:58:33

1、1602是干什么的?

       显示用的要显示什么?

       这时候你就得将定义一个数组,将想显示的东西放上去,那么到底是用双引号还是用{}呢?

这里用uchar code dis1[]="I  LOVE ZERO";如果这个不懂是时候该去补补C语言了

也可以用uchar code dis1[]={I  LOVE  ZERO}; 

2、已经有数组了,那么如何送入LCD显示?

在main()里写

                for(i=0;i<11;i++)  //有x个字符 i就<x  ,不然会乱码

                {

//你要将这个数据显示到LCD1602的第几行呢?所以前面得加wcmd(0x80);

                               wdat(dis1[i]);                      

                }

上面有个将数据送入1602

    也就是写数据到LCD1602,如果这里不会的话?那也就是LCD1602写数据时序没看懂,这时候就得去寻找资料,这时候你需要写个写数据的子程序了

void wdat(uchar dat)

{     //对应这时序图写,如果看不懂时序图就需要去深入了解根据时序图写程序了

                rs=1;   

                rw=0;

                ep=0;

                P0=dat;  //将LCD的D0-D7与P0相接

                ms(1);

                ep=1;

                ep=0;

                ms(6);     //不加延时, 字符显示过快  无法看见光标闪烁等。。。。

}这里补出程序

但是为什么要这样写呢?就算看了时序图也不懂如何转化为程序?说明你理解的不够透。

在上面用了rs,rw,ep  那就需要写

sbit rs = P2^6;  //复位端           

sbit rw = P2^5;     //写数据端         rw可以硬件置0

sbit ep = P2^7;     //使能端

也用了局部变量i 和j  uchar i,j;

这里用了uchar

就要定义#define uchar unsigned char

3、这样是否就可以用了么?你看写数据都弄好了!

   不行,因为单片机不知道你将数据送到哪,也就是你得让单片机知道你用1602

   也就是LCD初始化

                wcmd(0x01); //清屏 16*2显示,5*7点阵,8位数据

                wcmd(0x06);        //光标右滚动

                wcmd(0x0c);

                wcmd(0x38);        //数据8位 双行显示 5*10点

                wcmd(0x0f); //显示光标,字符闪烁 0x0e显示关标,字符不闪烁 ox08都不显示

这里不会,你就得看指令表了

这时候你需要写个写命令的子程序了

void wcmd(uchar cmd)

{

                rs=0;

                rw=0; 

                ep=0;

                P0 = cmd; 

                ep=1;

                ep=0;

                ms(10);

}

4、现在一切都好了?不 你看 还漏了什么  ms();也就是延时函数

    也就是需要延时函数的子程序

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢