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

📄 lcd1602模块8线.c

📁 一个LCD1602模块的8线的程序
💻 C
字号:
#include <reg51.h>
#include <intrins.h> 
/*********************************************************************/
/* lcd1602 */
/*/
/*********************************************************************/
#define LCD_1602_Data  P1
#define LCD_1602_sign_Busy 0x80 //用于检测LCM状态字中的LCD_1602_sign_Busy标识
#define uchar unsigned char
#define uint unsigned int
sbit LCD_1602_RW = P2^0; /*实时LCD线引脚定义 */
sbit LCD_1602_RS = P2^1;
sbit LCD_1602_EN = P2^2;
sbit LCD_1602_Led = P2^3;
unsigned char  DData;
/*********************************************************************/
/* lcd1602函数的声明*/
/*********************************************************************/
void LCD_1602_Write_Data(unsigned char LCD_1602_Transfer_Data);
void LCD_1602_Write_Command(unsigned char LCD_1602_Command,BuysC)reentrant;
unsigned char LCD_1602_Read_Data(void);
unsigned char LCD_1602_Read_Status(void);
void LCD_1602_Init(void);
void LCD_1602_Display_One_Char(unsigned char LCD_1602_X_Coordinate, unsigned char LCD_1602_Y_Coordinate, unsigned char  DData);
void LCD_1602_Display_List_Char(unsigned char LCD_1602_X_Coordinate, unsigned char LCD_1602_Y_Coordinate, unsigned char  *DData);
void Delay5Ms(void);
void Delay400Ms(void);
/******************************************************************** 
* 名称: LCD_1602_Write_Data
* 说明: 
* 功能: 往lcd1602写数据
* 调用: LCD_1602_Read_Status()
* 输入: LCD_1602_Data 写入的数据 
* 返回值: 无
***********************************************************************/
void LCD_1602_Write_Data(unsigned char LCD_1602_Transfer_Data)
{
  LCD_1602_Read_Status(); //检测忙
  LCD_1602_Data=LCD_1602_Transfer_Data;
  LCD_1602_RS = 1;
  LCD_1602_RW = 0;
  LCD_1602_EN = 0; //若晶振速度太高可以在这后加小的延时
  LCD_1602_EN = 0; //延时
  LCD_1602_EN = 1;
}
/******************************************************************** 
* 名称: LCD_1602_Write_Command
* 说明: 
* 功能: 往lcd1602写指令
* 调用: LCD_1602_Read_Status()
* 输入: LCD_1602_Command 写入的指令
* 返回值: 无
***********************************************************************/
void LCD_1602_Write_Command(unsigned char LCD_1602_Command,BuysC)reentrant //BuysC为0时忽略忙检测
{
  if (BuysC) LCD_1602_Read_Status(); //根据需要检测忙
  LCD_1602_Data = LCD_1602_Command;
  LCD_1602_RS = 0;
  LCD_1602_RW = 0; 
  LCD_1602_EN = 0;
  LCD_1602_EN = 0;
  LCD_1602_EN = 1; 
}
/******************************************************************** 
* 名称: LCD_1602_Read_Data
* 说明: 
* 功能: lcd1602读数据
* 调用:
* 输入:
* 返回值: LCD_1602_Data
***********************************************************************/
unsigned char LCD_1602_Read_Data(void)
{
  LCD_1602_RS = 1; 
  LCD_1602_RW = 1;
  LCD_1602_EN = 0;
  LCD_1602_EN = 0;
  LCD_1602_EN = 1;
  return(LCD_1602_Data);
}
/******************************************************************** 
* 名称: LCD_1602_Read_Status
* 说明: 
* 功能: lcd1602读状态
* 调用:
* 输入:
* 返回值: LCD_1602_Data
***********************************************************************/
unsigned char LCD_1602_Read_Status(void)
{
 LCD_1602_RS = 0;
 LCD_1602_RW = 1;
 LCD_1602_EN = 0;
 Delay5Ms();             //延时不够,可以再加
 LCD_1602_EN = 1;
 while (LCD_1602_Data & LCD_1602_sign_Busy); //检测忙信号
 return(LCD_1602_Data);
}
/******************************************************************** 
* 名称: LCD_1602_Init
* 说明: 
* 功能: lcd1602初始化
* 调用: LCD_1602_Write_Command,Delay5Ms()
* 输入:
* 返回值:
***********************************************************************/
void LCD_1602_Init(void)
{
  LCD_1602_Data = 0;
  LCD_1602_Write_Command(0x38,0); //三次显示模式设置,不检测忙信号
  Delay5Ms(); 
  LCD_1602_Write_Command(0x38,0);
  Delay5Ms(); 
  LCD_1602_Write_Command(0x38,0);
  Delay5Ms(); 

  LCD_1602_Write_Command(0x38,1); //显示模式设置,开始要求每次检测忙信号
  LCD_1602_Write_Command(0x08,1); //关闭显示
  LCD_1602_Write_Command(0x01,1); //显示清屏
  LCD_1602_Write_Command(0x06,1); // 显示光标移动设置
  LCD_1602_Write_Command(0x0C,1); // 显示开及光标设置
}
/******************************************************************** 
* 名称: LCD_1602_Display_One_Char
* 说明: 
* 功能: lcd1602按指定位置显示一个字符
* 调用: LCD_1602_Write_Command,LCD_1602_Write_Data(DData)
* 输入:
* 返回值:
***********************************************************************/
void LCD_1602_Display_One_Char(unsigned char LCD_1602_X_Coordinate, unsigned char LCD_1602_Y_Coordinate, unsigned char  DData)
{
  LCD_1602_Y_Coordinate &= 0x1;
  LCD_1602_X_Coordinate &= 0xF; //限制LCD_1602_X_Coordinate不能大于15,LCD_1602_Y_Coordinate不能大于1
  if (LCD_1602_Y_Coordinate) LCD_1602_X_Coordinate |= 0x40; //当要显示第二行时地址码+0x40;
  LCD_1602_X_Coordinate |= 0x80; //算出指令码
  LCD_1602_Write_Command(LCD_1602_X_Coordinate, 0); //这里不检测忙信号,发送地址码
  LCD_1602_Write_Data(DData);
}
//************************************************************************************按指定位置显示一串字符
/******************************************************************** 
* 名称: LCD_1602_Display_List_Char
* 说明: 
* 功能: lcd1602按指定位置显示一串字符
* 调用: LCD_1602_Write_Command,LCD_1602_Write_Data(DData)
* 输入:
* 返回值:
***********************************************************************/
void LCD_1602_Display_List_Char(unsigned char LCD_1602_X_Coordinate, unsigned char LCD_1602_Y_Coordinate, unsigned char  * DData)
{
  unsigned char  LCD_1602_List_Length;
  LCD_1602_List_Length = 0;
  LCD_1602_Y_Coordinate &= 0x1;
  LCD_1602_X_Coordinate &= 0xF; //限制LCD_1602_X_Coordinate不能大于15,LCD_1602_Y_Coordinate不能大于1
  while (DData[LCD_1602_List_Length]>0x20) //若到达字串尾则退出
        {
           if (LCD_1602_X_Coordinate <= 0xF) //LCD_1602_X_Coordinate坐标应小于0xF
              {
                LCD_1602_Display_One_Char(LCD_1602_X_Coordinate, LCD_1602_Y_Coordinate, DData[LCD_1602_List_Length]); //显示单个字符
                LCD_1602_List_Length++;
                LCD_1602_X_Coordinate++;
               }
         }
}
//************************************************************5ms延时
void Delay5Ms(void)
{
  unsigned int TempCyc = 5552;
  while(TempCyc--);
}
//************************************************************400ms延时
void Delay400Ms(void)
{
 unsigned char TempCycA = 5;
 unsigned int TempCycB;
 while(TempCycA--)
      {
       TempCycB=7269;
       while(TempCycB--);
       }
}

⌨️ 快捷键说明

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