📄 lcd.c
字号:
#include "p89v51rx2.h"
#include <intrins.h>
#include <string.h>
//-----------------------------------------------
//TS12864并口相关设定//
#define BUSY_FLAG P0_7 //液晶模块忙标志
//#define BG_LED_SET P1_7 //液晶背景光控制
#define MPU_RS_CH P2_6 //寄存器选择输入
#define MPU_RW_CH P2_7 //读写控制
#define MPU_ENABLE P2_3 //使能控制
#define MPU_PS_CH P2_3 //串/并传输控制
#define MPU_RESET P2_5 //液晶复位控制
#define LCD_DATA P0 //液晶数据口
#define LOW 0 //低电平
#define HIGH 1 //高电平
//-----------------------------------------------
//液晶模块定义集指令//
#define cClearDisplay 0x01 //清显示指令
#define cEntryModeSet 0x06 //设置输入模式
#define cDisplayOnCtrl 0x0c //设置开显控制
#define cFunctionSetB 0x30 //功能设定(基本指令)
#define cFunctionSetE 0x34 //功能设定(扩充指令)
#define cFuncDrawOn 0x36 //设置绘图功能
//unsigned char lcdPosX, lcdPosY; //X,Y坐标
//unsigned char halfScr, blStart, basicBlock; //半屏,下半屏,16*8块
//-----------------------------------------------
extern void delayMs (unsigned char ms) ;
void lcdWriteCommand (unsigned char Command);
void lcdClear (void);
void checkLcdBusy (void);
//===============================================
void lcdInit (void)
{
MPU_RESET = LOW;
delayMs(40);
MPU_RESET = HIGH;
delayMs(1);
MPU_PS_CH = HIGH;
lcdWriteCommand(cFunctionSetE);
lcdWriteCommand(cFunctionSetB);
lcdClear();
lcdWriteCommand(cEntryModeSet);
lcdWriteCommand(cDisplayOnCtrl);
}
//===============================================
void lcdClear (void)
{
/*#define cClearDisplay 0x01 //清显示指令
*/
lcdWriteCommand(cClearDisplay);
}
//===============================================
void lcdWriteCommand (unsigned char Command)
{
checkLcdBusy();
MPU_RS_CH = LOW;
MPU_RW_CH = LOW;
LCD_DATA = Command;
MPU_ENABLE = 1;
delayMs(1);
MPU_ENABLE = LOW;
}
//===============================================
void lcdWriteData (unsigned char Data)
{
checkLcdBusy();
MPU_RS_CH = HIGH;
MPU_RW_CH = LOW;
LCD_DATA = Data;
MPU_ENABLE = HIGH;
delayMs(1);
MPU_ENABLE = LOW;
}
//===============================================
void checkLcdBusy (void)
{
LCD_DATA = 0xff;
MPU_RS_CH = LOW;
MPU_RW_CH = HIGH;
MPU_ENABLE = HIGH;
while (BUSY_FLAG);
MPU_ENABLE = LOW;
}
//===============================================
void char_in_String_10(unsigned char _data, unsigned char y,signed char *msg,signed char sign) {
unsigned char *Ptr;
Ptr=msg+y;
if(_data>99)_data=99;
*(Ptr--) =_data%10+0x30;
*(Ptr--) =(_data/10)+0x30;
Ptr-- ;
if(sign)
*(Ptr) ='>';
else
*(Ptr) =' ';
}
//===============================================
void dispString (unsigned char X, Y, speed, unsigned char *msg)
{
if (X == 0)
{
X = 0x80;
}
else if (X == 1)
{
X = 0x90;
}
else if (X == 2)
{
X = 0x88;
}
else if (X == 3)
{
X = 0x98;
}
Y = X + Y;
lcdWriteCommand(Y);
while (*msg)
{
lcdWriteData(*msg++);
delayMs(speed);
}
}
//===============================================
void delaySec (unsigned char sec)
{
unsigned char i;
while (--sec)
{
for (i = 0; i < 200; i++)
{
delayMs (6);
}
}
}
//===============================================
/**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -