📄 lcdinitial.c
字号:
/**********************************************************************************
*File Name:LCD.c
*Fuction:0802型号LCD 初始化,LCD显示
*Designed by zpq.
*Time:2008.10.09
**********************************************************************************/
#include <string.h>
#define LCD_RS P3_2 /* Switch Register: Command/Data */
#define LCD_RW P1_6 /* Switch Mode:!Write/Read */
#define LCD_EN P1_7 /* LCD Operation Enable */
#define LCD_DATA P2
#define LCD_CLEAR 0x01
#define MAX_X 0x10 /* Defines How Many LTR Can Be Disp.In a Row. */
#define MAX_Y 0x02 /* Defines How Many LTR Can Be Disp.In a Line. */
#define CursorON() LCD_WrtCmd(0x0e,1)
#define CursorOFF() LCD_WrtCmd(0x0c,1)
#define DisplayOFF() LCD_WrtCmd(0x08,1)
#define uchar unsigned char
#define uint unsigned int
/* The Declaration of Some Functions about LCD Driver */
void Delay5ms(void);
void LCD_WrtCmd(uchar Command, Busy_C);
void Init_LCD(void);
uchar Get_LCD_Status(void);
void LCD_WrtData(uchar Data);
void OutCharxy(uchar x,uchar y,unsigned disp_data); //output char
void OutStringxy(uchar x,uchar y,uchar *disp_data); //output string
void OutNumberxxy(uchar x1,uchar x2,uchar y,int disp_data); //output type of int number
void ClearDisplay(); //clear screen
void Clearxxy(uchar x1,uchar x2,uchar y); //clear x1 to x2
uchar ReadDataxy(uchar x,uchar y);
/*
void Init_LCD(void)
{
LCD_DATA=0;
LCD_WrtCmd(0x38,0);
// Two Lines, 5x7 Font Style, No Cursors, No Blink
Delay5ms();
LCD_WrtCmd(0x38,0);
Delay5ms();
LCD_WrtCmd(0x38,0);
Delay5ms();
LCD_WrtCmd(0x38,1);
LCD_WrtCmd(0x80,1);
LCD_WrtCmd(LCD_CLEAR,1);
LCD_WrtCmd(0x06,1);
LCD_WrtCmd(0x0c,1);
}
*/
///*
void Init_LCD(void)
{
LCD_DATA=0;
LCD_WrtCmd(0x38,0);
// Two Lines, 5x7 Font Style, No Cursors, No Blink
Delay5ms();
LCD_WrtCmd(0x38,0);
// Two Lines, 5x7 Font Style, No Cursors, No Blink
Delay5ms();
LCD_WrtCmd(0x0e,0);
Delay5ms();
LCD_WrtCmd(0x01,1);
Delay5ms();
LCD_WrtCmd(0x04,1);
Delay5ms();
}
//*/
uchar Get_LCD_Status(void)
{
LCD_DATA=0xff;
LCD_EN=0;
LCD_EN=0;
LCD_RW=1;
LCD_RS=0;
LCD_EN=1;
while(LCD_DATA & 0x80);
LCD_EN=0;
return LCD_DATA;
}
void LCD_WrtData(uchar Data)
{
LCD_EN=0;
Get_LCD_Status();
LCD_DATA=Data;
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
LCD_EN=0;
LCD_EN=1;
LCD_EN=1;
LCD_EN=0;
}
void LCD_WrtCmd(uchar Command, Busy_C)
{
LCD_EN=0;
if(Busy_C) Get_LCD_Status();
LCD_DATA=Command;
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
LCD_EN=0;
LCD_EN=1;
LCD_EN=1;
LCD_EN=0;
}
void OutCharxy(uchar x,uchar y,unsigned disp_data)
{
y=y&(MAX_Y-1);
x=x&(MAX_X-1);
if(y) x+=0x40;
x+=0x80;
LCD_WrtCmd(x,1);
LCD_WrtData(disp_data);
}
unsigned char GetSizeofNumber(int m)
{
if(m/10000>0)
return 5;
else if(m/1000>0)
return 4;
else if(m/100>0)
return 3;
else if(m/10>0)
return 2;
else if(m>=0)
return 1;
}
void PutOneBitNumberxy(uchar x,uchar y,unsigned disp_data)
{
y=y&(MAX_Y-1);
x=x&(MAX_X-1);
if(y) x+=0x40;
x+=0x80;
LCD_WrtCmd(x,1);
LCD_WrtData(disp_data+0x30);
}
void OutNumberxxy(uchar x1,uchar x2,uchar y,int disp_data)
{
uchar OneBit[5]={0,0,0,0,0};
uchar j;
//char_length=GetSizeofNumber(disp_data);
OneBit[4]=disp_data/10000;
OneBit[3]=disp_data/1000%10;
OneBit[2]=disp_data/100%10;
OneBit[1]=disp_data/10%10;
OneBit[0]=disp_data%10;
for(j=0;j<=x2-x1;j++)
PutOneBitNumberxy(x2-j,y,OneBit[j]);
PutOneBitNumberxy(x2-1,y,OneBit[1]);
}
void Clearxxy(uchar x1,uchar x2,uchar y)
{
uchar i;
for(i=x1;i<=x2;i++)
OutCharxy(i,y,' ');
}
void OutStringxy(uchar x,uchar y,uchar *disp_data)
{
uchar char_length,j;
char_length=strlen(disp_data);
y=y&(MAX_Y-1);
x=x&(MAX_X-1);
for (j=0;j<char_length;j++)
{
OutCharxy(x,y,disp_data[j]);
x++;
}
}
uchar ReadDataxy(uchar x,uchar y)
{
uchar ucData;
y=y&(MAX_Y-1);
x=x&(MAX_X-1);
if(y) x+=0x40;
x+=0x80;
LCD_WrtCmd(x,1);
LCD_EN=0;
Get_LCD_Status();
//ucData=LCD_DATA;
LCD_RS=1;
LCD_RW=1;
LCD_EN=0;
LCD_EN=0;
LCD_EN=1;
LCD_EN=1;
LCD_EN=0;
ucData=LCD_DATA;
return ucData;
}
void ClearDisplay()
{
LCD_WrtCmd(0x01,1);
}
void Delay5ms(void)
{
uint i=6025;while(i--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -