51单片机控制LCD1602液晶屏

本讲任务:

      了解液晶1602的相关知识,通过一个例程了解液晶1602的使用。

LCD1602简介:

      1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

 

 

 

例程:

/***********************LCD驱动基本代码 ************************     

*单片机型号:STC89C52RC

*开发环境:KEIL

*名称:1602驱动基本代码

********************************************************************/

#include<reg52.h>

#include<intrins.h>

#define LCD_Data P0

#define Busy 0x80

sbit LCD_RS=P1^0;

sbit LCD_RW=P1^1;

sbit LCD_E=P2^5;

unsigned char code welcome[]={"YOU ARE WELCOME"};

unsigned char code mcu[]={"SL-51A"};

void Delay5Ms(void);

void WriteDataLCD(unsigned char WDLCD);

void WriteCommandLCD(unsigned char WCLCD,BuysC);

unsigned char ReadDataLCD(void);

unsigned char ReadStatusLCD(void);

void LCDInit(void);

void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);

void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData);

void Info_display(void);

void Delay5Ms(void)

{unsigned int TempCyc=3552;while(TempCyc--);}

void WriteDataLCD(unsigned char WDLCD)

{

 ReadStatusLCD();

 LCD_Data=WDLCD;

 LCD_RS=1;

 LCD_RW=0;

 LCD_E=0;    

 LCD_E=0;

 LCD_E=1;

}

void WriteCommandLCD(unsigned char WCLCD,BuysC)   

{

 if(BuysC)ReadStatusLCD(); 

 LCD_Data=WCLCD;

 LCD_RS=0;

 LCD_RW=0;

 LCD_E=0;

 LCD_E=0;

 LCD_E=1;

}

unsigned char ReadDataLCD(void)

{

 LCD_RS=1;

 LCD_RW=1;

 LCD_E=0;

 LCD_E=0;

 LCD_E=1;

 return(LCD_Data);

}

unsigned char ReadStatusLCD(void)

{

 LCD_Data=0xFF;

 LCD_RS=0;

 LCD_RW=1;

 LCD_E=1;

 while (LCD_Data & Busy);

 return(LCD_Data);

}

void LCDInit(void)

{

 LCD_Data=0;

 Delay5Ms();Delay5Ms();Delay5Ms();

 WriteCommandLCD(0x38,0);Delay5Ms();

 WriteCommandLCD(0x38,0);Delay5Ms();

 WriteCommandLCD(0x38,0);Delay5Ms();

 WriteCommandLCD(0x38,1);

 WriteCommandLCD(0x08,1);

 WriteCommandLCD(0x01,1);

 WriteCommandLCD(0x06,1);

 WriteCommandLCD(0x0C,1);

}

void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData)

{

 Y&=0x1;X&=0xF;

 if(Y)X|=0x40;

 X|=0x80;

 WriteCommandLCD(X,0); 

 WriteDataLCD(DData);

}

void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData)

{

 unsigned char ListLength;ListLength=0;

 Y&=0x1;X&=0xF;

 while(DData[ListLength]>=0x20)  

 {

  if(X<=0xF)

  {

   DisplayOneChar(X,Y,DData[ListLength]);

   ListLength++;

   X++;

  }

 }

}

void main(void)

 LCDInit(); 

 DisplayListChar(5,0,mcu);

 DisplayListChar(0,1,welcome);

 while(1){;}

}

 

最后,求求看到的此文的小伙伴点赞关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式硬件与代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值