📄 lcd - text type.c
字号:
//*****************************************************
//LCD - Text Type
//16 * 2 char
//5x8 dots per char
//Display text By using ASCII code
//*****************************************************
#include <REGX52.H>
#define LCD_RS P3_2 // 1 Data Mode, 0 Instruction Mode
#define LCD_RW P3_3 // 1 Read Mode, 0 Write Mode
#define LCD_E P3_4 // 1 Enable
#define LCD_DATA P1 // Data Bus
//LCD main functions
void lcdInit(void); //LCD init
void lcdWriteCmd(unsigned char cmd); //write instruction
void lcdWriteAdd(unsigned char add); //write address (7-bits)
void lcdWriteDat(unsigned char dat); //write char
void lcdWriteDatArray(unsigned char code *ch); //write char[]
//LCD sub functions
void lcdWaitBusy(void); //wait until LCD ready (not busy)
void lcdSend(void); //generate a low square wave pulse
//Others
unsigned char calLength(unsigned char code *ch); //return char[] length
void delay5(void); //delay 5ms
void delay400(void); //delay 400ms
//*****************************************************
//LCD main functions
//*****************************************************
void main(void)
{
unsigned char code cLine1[] = {"Welcome"};
//init
delay400();
lcdInit();
//write
lcdWriteAdd(0x04);
lcdWriteDatArray(cLine1);
while(1);
}
void lcdInit(void)
{
lcdWriteCmd(0x38); // 8 bits, 2 lines, 5x7 dots
lcdWriteCmd(0x0E); // Display on, Cursor on, Blinking off
lcdWriteCmd(0x06); // Cursor shift, direction : increase
lcdWriteCmd(0x02); // Cursor return
lcdWriteCmd(0x01); // Clear Display
}
void lcdWriteCmd(unsigned char cmd)
{
lcdWaitBusy();
LCD_RS = 0; //instruction mode
LCD_RW = 0; //write mode
LCD_DATA = cmd;
lcdSend();
}
void lcdWriteAdd(unsigned char add)
{
add = add | 0x80;
lcdWriteCmd(add);
}
void lcdWriteDat(unsigned char dat)
{
lcdWaitBusy();
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
lcdSend();
}
void lcdWriteDatArray(unsigned char code *ch)
{
unsigned char cLength = calLength(ch); //get char length
int i;
for(i=0 ; i<cLength ; i++) //write all char
lcdWriteDat(ch[i]);
}
//*****************************************************
//LCD sub functions
//*****************************************************
void lcdWaitBusy(void)
{
do
{
LCD_DATA = 0xFF;
LCD_RS = 0;
LCD_RW = 1; //read mode
lcdSend(); //after execute, if not busy, BF become 0
}while(LCD_DATA > 0xEF); //BF is MSB, if BF == 1, must > 0xEF
}
void lcdSend(void)
{
//low square wave
LCD_E = 0;
delay5();
LCD_E = 1;
}
//*****************************************************
//Other functions
//*****************************************************
unsigned char calLength(unsigned char code *ch)
{
unsigned char cLength = 0;
while(ch[cLength]>=0x20) //if !end
cLength++;
return cLength;
}
void delay5(void)
{
unsigned char d = 5552;
while(d--)
;
}
void delay400(void)
{
unsigned char A = 5;
unsigned int B;
while(A--)
{
B=7269;
while(B--);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -