×
单片机 > 单片机程序设计 > 详情

用总线方式控制1602液晶显示屏

发布时间:2020-08-26 发布时间:
|
本文主要介绍用总线方式控制1602液晶显示屏,以AT89S52为核心,用C编程(有现成的参考程序和显示效果)

1)电路原理图

 

2)源程序

#include
#include
#include
#include
#include

#define busy 0x80 file://于检测LCD状态字中的Busy标识
#define RSaddr 0x1000
#define RWaddr 0x2000
#define CSaddr 0x0400


#define wc 0xcfff
#define wd 0xdfff
#define rc 0xefff

unsigned char code homepage[] = {"www.ispdown.com"};
unsigned char code email[] = {"ispdown@21cn.com"};

void delay5ms(void)
  {
 unsigned int TempCyc = 5552;
 while(TempCyc--);
  }

void delay400ms(void)
  {
 unsigned char TempCycA = 5;
 unsigned int TempCycB;
 while(TempCycA--)
 {
   TempCycB=7269;
   while(TempCycB--);
 };
  }

void waitLcd()
  {
    char temp;
 bit flag=1;
 while(flag==1)
    {

   temp=XBYTE[rc];
   if (temp>>7==0) flag=0;
   P1=temp;
 }
 P1=0xff;
  }

void WC_Lcd(bit isCheck,char c)
  {
   if (isCheck==1) waitLcd();

   XBYTE[wc]=c;
  }

void WD_Lcd(char c)
  {
    waitLcd();

 XBYTE[wd]=c;
  }

void LcdInit()
  {
    delay5ms();
 delay5ms();
 delay5ms();
 WC_Lcd(0,0x38); 

 delay5ms();
 WC_Lcd(0,0x38);
 delay5ms();
 WC_Lcd(0,0x38);
 delay5ms();

 WC_Lcd(1,0x38); 
 WC_Lcd(1,0x08); 
 WC_Lcd(1,0x01); 
 WC_Lcd(1,0x06); //
显示光标移动设置
 WC_Lcd(1,0x0C); // 显示开及光标设置
  } 

void displayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  {
 Y &= 0x1;
 X &= 0xF; 
 if (Y) X = 0x40; 
 X = 0x80; 
 WC_Lcd(0,X); 
 WD_Lcd(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)
{
 delay400ms();
 LcdInit();

 displayListChar(0, 0, homepage);
 displayListChar(0, 1, email);

 while(1);
  }


3)效果图

 

 

关键字:总线方式控制  1602液晶  显示屏

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法