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

📄 lcm2402.h

📁 SHT10资料和C例程
💻 H
字号:
#include <string.h>                               // 包含头文件    
/********************************************************************************************/
typedef unsigned char      uint8;                // 无符号8位整型变量

//=================================LCM2402模块驱动===========================================//

/********************************************************************************************/
#define      LCM2402_DB0_DB7      P0             // 定义LCM2402的数据总线

sbit LCM2402_RS   = P2 ^ 5;                      // 定义LCM2402的RS控制线
sbit LCM2402_RW   = P2 ^ 6;                      // 定义LCM2402的RW控制线
sbit LCM2402_E    = P2 ^ 7;                      // 定义LCM2402的E控制线
sbit LCM2402_Busy = P0 ^ 7;                      // 定义LCM2402的测忙线(与LCM2402_DB0_DB7关联)

/********************************************************************************************/
//定义LCM2402指令集//
#define   CMD_clear  0x01             // 清除屏幕
#define   CMD_back  0x02             // DDRAM回零位
#define   CMD_dec1  0x04             // 读入后AC(指针)减1,向左写
#define   CMD_add1  0x06             // 读入后AC(指针)加1,向右写
#define   CMD_dis_gb1  0x0f             // 开显示_开光标_开光标闪烁
#define   CMD_dis_gb2  0x0e             // 开显示_开光标_关光标闪烁
#define   CMD_dis_gb3  0x0c             // 开显示_关光标_关光标闪烁
#define   CMD_OFF_dis  0x08             // 关显示_关光标_关光标闪烁
#define   CMD_set82  0x38             // 8位总线_2行显示
#define   CMD_set81  0x30             // 8位总线_1行显示(上边行)
#define   CMD_set42  0x28             // 4位总线_2行显示
#define   CMD_set41  0x20             // 4位总线_1行显示(上边行)
#define   lin_1   0x80             // 4位总线_1行显示(上边行)
#define   lin_2   0xc0             // 4位总线_1行显示(上边行)

/********************************************************************************************[底层协议]
* 函数名称:LCM2402_TestBusy()
* 功    能:LCM2402测忙,若LCM2402处于忙状态,本函数将继续测忙,直到LCM2402处于非忙状态。
*********************************************************************************************/
void LCM2402_TestBusy(void){
   LCM2402_DB0_DB7 = 0xff;//设备读状态
   LCM2402_RS = 0;
   LCM2402_RW = 1;
   LCM2402_E = 1;
   while(LCM2402_Busy);//等待LCM不忙
   LCM2402_E = 0;//
}
/********************************************************************************************[底层协议]
* 函数名称:LCM2402_WriteCMD()
* 功    能:向LCM2402写命令。
* 入口参数:LCM2402_command     要写入LCM2402的命令字节
* 出口参数:无
*********************************************************************************************/
void LCM2402_WriteCMD(uint8 LCM2402_command) { 
  LCM2402_TestBusy();
  LCM2402_DB0_DB7 = LCM2402_command;
  LCM2402_RS = 0;
  LCM2402_RW = 0;
  LCM2402_E = 1;
  LCM2402_E = 0;
}
/********************************************************************************************[底层协议]
* 函数名称:LCM2402_WriteData()
* 功    能:向LCM2402写数据。
* 入口参数:LCM2402_data     要写入LCM2402的数据字节
* 出口参数:无
*********************************************************************************************/
void LCM2402_WriteData(uint8 LCM2402_data){ 
    LCM2402_TestBusy();
 LCM2402_DB0_DB7 = LCM2402_data;
  LCM2402_RS = 1;
  LCM2402_RW = 0;
  LCM2402_E = 1;
  LCM2402_E = 0;
}
/********************************************************************************************
* 函数名称:print()
* 功    能:向LCM发送一个字符串,长度48字符之内。//应用:print("doyoung.net");
* 入口参数:字符串
* 出口参数:无
*********************************************************************************************/
void print(uint8 a,uint8 *str){
  LCM2402_WriteCMD(a|0x80);
  while(*str != '\0'){
   LCM2402_WriteData(*str++);
        }
  *str = 0;
}
/********************************************************************************************
* 函数名称:print2()
* 功    能:向LCM发送一个字符串,长度48字符之内。//应用:print("doyoung.net");
* 入口参数:字符串
* 出口参数:无
*********************************************************************************************/
void print2(uint8 a,uint8 t){//设置写入地址和数据//
  LCM2402_WriteCMD(a|0x80);
  LCM2402_WriteData(t);
}
uint8 code Xword[]={
    0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,        //C,代码 0x03
    0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,        //一,代码 0x04
    0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00,        //二,代码 0x05
    0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00,        //三,代码 0x06
    0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00,        //四,代码 0x07
    0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00,        //五,代码 0x08
    0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00,        //六,代码 0x09
    0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00,        //日,代码 0x0a
};

void CgramWrite(void) {// 装入cgram
    uint8 i;
 LCM2402_WriteCMD(0x06);        // CGRAM地址自动加1
 LCM2402_WriteCMD(0x40);        // CGRAM地址设为00处
    for(i=0;i<64;i++) {
      LCM2402_WriteData(Xword[i]);
    }
}

/********************************************************************************************
* 函数名称:LCM2402_Init()
* 功    能:LCM2402初始化
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void lcm2402_init(void){
  LCM2402_WriteCMD(CMD_set82);// 显示模式设置:显示2行,每个字符为5*7个像素
  LCM2402_WriteCMD(CMD_clear);// 显示清屏
  LCM2402_WriteCMD(CMD_back);// 数据指针指向第1行第1个字符位置
  LCM2402_WriteCMD(CMD_add1);// 显示光标移动设置:文字不动,光标右移
  LCM2402_WriteCMD(CMD_dis_gb3); // 显示开及光标设置:显示开,光标开,闪烁开
  CgramWrite();
}

⌨️ 快捷键说明

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