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

📄 1602.c

📁 用51单片机开发的GSM报警程序
💻 C
字号:
#include <REG51.h>
#include <string.h>

#define uchar unsigned char
#define uint unsigned int

sbit LCM_E=P2^3;//定义接口
sbit LCM_RW=P2^2;
sbit LCM_RS=P2^1;
#define LCM_Data P0//数据接口
/*
void LCM_WriteData(uchar WDLCM);
void LCM_WriteCommand(uchar WCLCM,BuysC);
uchar LCM_ReadData(void);
uchar LCM_ReadStatus(void);
void LCM_Init(void);
void DisplayOneChar(uchar X, uchar Y, uchar DData);
void DisplayListChar(uchar X, uchar Y, uchar code *DData);
void Delay5Ms(void);
void Delay400Ms(void);*/
/********************5ms延时函数************************/
/*函数原型:void Delay5Ms(void)
/*函数功能:5ms延时
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void Delay5Ms(void)
{
        unsigned int TempCyc = 5552;
        while(TempCyc--);
}
/********************400ms延时延时函数************************/
/*函数原型:void Delay400Ms(void)
/*函数功能:400ms延时延时
/*输入参数:无
/*输出参数:无
/*********************************************************************
void Delay400Ms(void)
{
        uchar TempCycA = 5;
        unsigned int TempCycB;
        while(TempCycA--)
        {
                TempCycB=7269;
                while(TempCycB--);
        };
}
*/
/****************************1602A读状态函数**************************/
/*函数原型:uchar LCM_ReadData(void)
/*函数功能:1602A读状态
/*输入参数:无
/*输出参数:1602A返回的状态
/**********************************************************************/
uchar LCM_ReadStatus(void)
{
        LCM_Data = 0xFF;
        LCM_RS = 0;
        LCM_RW = 1;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
        while (LCM_Data & 0x80);//检测忙信号
        return(LCM_Data);
}
/****************************1602A写数据函数**************************/
/*函数原型:void LCM_WriteData(uchar WDLCM)
/*函数功能:1602A写数据
/*输入参数:要写入的数据
/*输出参数:无

/**********************************************************************/
void LCM_WriteData(uchar WDLCM)
{
        LCM_ReadStatus();//检测忙
        LCM_Data = WDLCM;
        LCM_RS = 1;
        LCM_RW = 0;
        LCM_E = 0;//若晶振速度太高可以在这后加小的延时
        LCM_E = 0;//延时
        LCM_E = 1;
}
/****************************1602A写指令函数**************************/
/*函数原型:void LCM_WriteCommand(uchar WCLCM,BuysC)
/*函数功能:1602A写指令
/*输入参数:要写入的指令
/*输出参数:无

/**********************************************************************/
void LCM_WriteCommand(uchar WCLCM,BuysC)//BuysC为0时忽略忙检测
{
        if (BuysC) LCM_ReadStatus();//根据需要检测忙
        LCM_Data = WCLCM;
        LCM_RS = 0;
        LCM_RW = 0;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
}
/****************************1602A读数据函数**************************/
/*函数原型:uchar LCM_ReadData(void)
/*函数功能:1602A读数据
/*输入参数:无
/*输出参数:1602A返回的数据
/**********************************************************************/
/*uchar LCM_ReadData(void)
{
        LCM_RS = 1;
        LCM_RW = 1;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
        return(LCM_Data);
}
*/
/****************************1602A初始化函数**************************/
/*函数原型:void LCM_Init(void)
/*函数功能:1602A初始化
/**********************************************************************/
void LCM_Init(void)
{
        LCM_Data = 0;
        LCM_WriteCommand(0x38,0);//三次显示模式设置,不检测忙信号
        Delay5Ms();
        LCM_WriteCommand(0x38,0);
        Delay5Ms();
        LCM_WriteCommand(0x38,0);
        Delay5Ms();
        
        LCM_WriteCommand(0x38,1);//显示模式设置,开始要求每次检测忙信号
        //LCM_WriteCommand(0x08,1);//关闭显示
        LCM_WriteCommand(0x01,1);//显示清屏
        LCM_WriteCommand(0x06,1);// 显示光标移动设置
        LCM_WriteCommand(0x0c,1);// 显示开及光标设置
		//LCM_WriteCommand(0x18,1);
}
/******************1602A按指定位置显示一个字符函数**********************/
/*函数原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)
/*函数功能:1602A按指定位置显示一个字符
/*输入参数:X坐标 Y坐标 要显示的字符
/*输出参数:无
/**********************************************************************/
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
        Y &= 0x1;
        X &= 0xF;//限制X不能大于15,Y不能大于1
        if (Y) 
		X |= 0x40;//当要显示第二行时地址码+0x40;
        X |= 0x80;// 算出指令码
        LCM_WriteCommand(X, 0);//这里不检测忙信号,发送地址码
        LCM_WriteData(DData);
}
/*******************1602A按指定位置显示一串字符函数*********************/
/*函数原型:void DisplayListChar(uchar X, uchar Y, uchar code *DData)
/*函数功能:1602A按指定位置显示一个字符
/*输入参数:X坐标 Y坐标 要显示字符串的首地址
/*输出参数:无
/**********************************************************************/
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
        uchar ListLength;
        ListLength = 0;
        Y &= 0x1;
        X &= 0xF;//限制X不能大于15,Y不能大于1
        while (DData[ListLength]>0x20)//若到达字串尾则退出
        {
                if (X <= 0xF)//X坐标应小于0xF
                {
                        DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符
                        ListLength++;
                        X++;
                }
        }
}

⌨️ 快捷键说明

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