⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c1602.c

📁 1602的液晶显示程序
💻 C
字号:
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>


// 1602控制引脚定义
sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;
#define DataPort P0
#define Busy 0x80

//变量类型标识的宏定义
#define uchar  unsigned char
#define uint   unsigned int


//函数声明
void delay2Ms(void);
void delay100Ms(void);
void WriteData(uchar WDLCD);
void WriteCommand(uchar WCLCD,BusyC);
uchar ReadData(void);
uchar ReadStatus(void);
void LCDInit(void);
void DisplayOnechar(uchar X,uchar Y,uchar DData);
void DisplayListchar(uchar X,uchar Y,uchar code *DData);


//显示代码
uchar code cem[]={" Xuzhou institut"};
uchar code school[]={" Welcome to CEM "};



void main(void)
{
  delay100Ms();
  LCDInit();
  DisplayListchar(0,0,cem);
  DisplayListchar(0,1,school);
  while(1);																					  
		   
}


void LCDInit(void)
{
  DataPort=0;
  WriteCommand(0x38,0);	  //显示模式设置(不测试忙信号)共三次
  delay2Ms();
  WriteCommand(0x38,0);
  delay2Ms();
  WriteCommand(0x38,0);	   
  delay2Ms();
  WriteCommand(0x01,1);	   // 显示清屏
  delay2Ms();
  WriteCommand(0x38,1);	   // 显示模式设置:16*2行,5*7点阵,8位数据接口
  delay2Ms();
  WriteCommand(0x06,1);	  //写指令06H,文字不动,光标自动右移
  delay2Ms();
  WriteCommand(0x0F,1);	  //;写指令0FH,显示ON,光标ON,闪烁ON.写指令0CH,显示ON,光标OFF,闪烁OFF
  delay2Ms();

}



void WriteData(uchar WDLCD)
{
  ReadStatus();
  DataPort=WDLCD;
  RS=1;
  RW=0;
  E=0;
  E=0;
  E=1;
  E=1;

}



void WriteCommand(uchar WCLCD,BusyC)	//BuysC为0时忽略忙检测
{
  if(BusyC) ReadStatus();
  DataPort=WCLCD;
  RS=0;
  RW=0;
  E=0;
  E=0;
  E=1;
  E=1;

}

 //读忙状态
uchar ReadStatus(void)
{
  DataPort=0xFF; 
  RS = 0;
  RW = 1;
  E=0;
  E=0;
  E=1;
  E=1;
  while (DataPort&Busy); //检测忙信号
  return(DataPort);

}


//读数据
uchar ReadData(void)
{
  RS = 1; 
  RW = 1;
  E=0;
  E=0;
  E=1;
  E=1;
 return(DataPort);
}



//按指定位置显示一个字符
void DisplayOnechar(uchar X,uchar Y,uchar DData)
{
 Y&=0x1;
 X&=0xF; //限制X不能大于15,Y不能大于1
 if (Y) X|=0x40; //当要显示第二行时地址码+0x40;
 X|=0x80; //算出指令码
 WriteCommand(X, 0); //这里不检测忙信号,发送地址码
 WriteData(DData);
 
}


//按指定位置显示一串字符
void DisplayListchar(uchar X,uchar Y,uchar code *DData)
{
 uchar ListLength;
 ListLength=0;
 Y&=0x1;
 X&=0xF; //限制X不能大于15,Y不能大于1
 while (ListLength<0x10) //若到达字串尾则退出
  {
   if (X <= 0xF) //X坐标应小于0xF
    {
     DisplayOnechar(X, Y, DData[ListLength]); //显示单个字符
     ListLength++;
     X++;
    }
  }
}

//2ms延时
void delay2Ms(void)
{
 uint Temp = 2220;
 while(Temp--);
}

//100ms延时
void delay100Ms(void)
{
 uchar Temp1=5;
 uint Temp2;
 while(Temp1--)
 {
  Temp2=2000;
  while(Temp2--);
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -