2020-10-15LCD1602的使用

在这里插入图片描述

引脚四高电平为数据选择端,低电平为命令选择端

引脚五同理高电平为读选择端,低电平为写选择端

7-14并行输出,八个数据端口同时输出可以输出一个字

在这里插入图片描述
在这里插入图片描述

先进行读写检测,当7为1时,表明正在处理数据,则不能够进行相应的操作

在这里插入图片描述

只可以显示十六个,但RAM中有80位,可以左移或者右移

在这里插入图片描述

总结,要应用一个硬件,需要严格按照硬件手册的流程来写,如何收发命令,如何初始化硬件,如何编写发送指令,已经如何发送显示函数,都需要严格按照数据手册来进行编写。

程序部分:

程序功能能够使字符串在lcd1602上面显示并且是滚动显示,需要掌握的重点,能够数据手册编写相应的程序。



#include<reg51.h>

#include<intrins.h>  //存在nop函数的定义
#define uchar unsigned char

#define uint unsigned int

bit RS=P2^5;  

sbit RW=P2^6;  

sbit E=P2^7;  

       uchar *text1[]="tomorrow will be better"; 
//第一行要显示的数据

       uchar text2[]="";   //第二行要显示的数据

 

   
void delay_ms(uint z)  

    {

      
uint i,j;

      
for(i=z;i>0;i--)

         
for(j=110;j>0;j--);

    }

 

   

    uchar Lcd1602_ReadBusy()   //读取是否忙碌

    {

      
uchar temp;

      
RS=0;//设置读的状态

      
RW=1;

      
_nop_();

      
P3=0xff;  //给总线输入0xff            

                     /*原因:电路中存在的一个普遍的现象:高电平很容易被低电平拉低,而低电平一般不可能被高电平拉高。所以在读数据之前将单片机IO口拉高才不会影响原来数据线上的数据!*/

                      

      
_nop_();

      
E=1;//使能端,使能端开启后数据就会传送到P0口中,并覆盖之前的P0口的值

      
_nop_();

      
temp=P3;  //将总线的数据传送到temp临时变量中

      
_nop_();

      
E=0;//关闭使能端

      
return (temp&0x80); 

                      /*状态字为temp(8位2进制数)的最高位,最高位为1表示禁止读写,为0表示允许读写,即temp&0x80得1表示忙,得0表示不忙*/

 

    }

 

   
void Lcd1602_WriteCom(uchar com)  

    {

      
while(Lcd1602_ReadBusy());  

      
RS=0; //命令 


      
RW=0;  //写 

      
_nop_();

      
P3=com;   //准备发送命令

       _nop_();

                      _nop_();

                      _nop_();

                      _nop_();

      
E=1;      //使能端拉高才能交换数据

      
_nop_();

      
_nop_();

                      _nop_();

                      _nop_();

                      _nop_();

      
E=0;     //使能端拉低关闭交换数据

      
_nop_();

      
_nop_();   

    }

 

   
void Lcd1602_WriteData(uchar dat) 


    {

      
while(Lcd1602_ReadBusy());  

      
RS=1;   //写数据

      
RW=0;   

      
_nop_();

      
P3=dat;

      
_nop_();

                      _nop_();

                      _nop_();

                      _nop_();

      
E=1;

      
_nop_();

      
_nop_();

      
E=0;

      
_nop_();

      
_nop_();   

    }

 

   
void Lcd1602_init()   //初始化函数

    {

      
delay_ms(15);

      
Lcd1602_WriteCom(0x38);   //显示模式设置

      
delay_ms(5);

      
Lcd1602_WriteCom(0x38);

      
delay_ms(5);

      
Lcd1602_WriteCom(0x38);

                      Lcd1602_WriteCom(0x0f);

                      Lcd1602_WriteCom(0x0c);  //显示开

                      Lcd1602_WriteCom(0x01);  //清屏

      
Lcd1602_WriteCom(0x07);  //地址指针移位指令                    

      


    }

 

   
void main()

    {

      
uchar i = 0;

                      uint k = 2;

                      char *pa;

      
Lcd1602_init();

                      Lcd1602_WriteCom(0x80|0x10);   //0x80是第一行的第一个字符的地址

 

                                   pa
= text1[i];

                                   while(*pa!='0')

                                   {

                                          Lcd1602_WriteData(*pa++);

                                          while(k--);//延迟使的数据能够显示

                                   }

      
//Lcd1602_WriteCom(0x80+0x40); 

                             /*表示的方法有很多,可以用0xc0,0x80+0x40,0x80|0x40等等*/

      
/*for(j=0;j<10;j++)

        
Lcd1602_WriteData(text2[j]);*/

}

在这里插入图片描述

Tomorrow在LCD1602中为移动显示

在这里插入图片描述

注意指针的使用,指针的使用能够极大地带来方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值