📄 lcd.c
字号:
#include <reg51.h>
sbit LCD_RS=P0^5;
sbit LCD_RW=P0^6;
sbit LCD_E=P0^7;
#define LCD_Data P2
#define Busy 0x80
void delay_ms(unsigned char n)
{
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=498;j>0;j--);
}
/****************************************************************************
* 名称:ChkBusy()
* 功能:检查总线是否忙
****************************************************************************/
void ChkBusy()
{
LCD_Data = 0xFF;
while(1)
{
LCD_RS=0;
LCD_RW=1;
LCD_E=1;
if(!(LCD_Data & Busy))break;
LCD_E=0;
}
}
/****************************************************************************
* 名称:WriteCommandLCD()
* 功能:写命令函数
****************************************************************************/
void WriteCommandLCD(unsigned char dat)
{
ChkBusy();
LCD_RS=0; //全部清零
LCD_RW=0;
LCD_E=1;
LCD_Data=dat; //再送数
LCD_E=0;
}
/****************************************************************************
* 名称:WriteDataLCD()
* 功能:写数据函数
****************************************************************************/
void WriteDataLCD(unsigned char dat)
{
ChkBusy();
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
LCD_Data=dat; //再送数
LCD_E=0;
}
/****************************************************************************
* 名称:lcd_init()
* 功能:lcd初始化函数
****************************************************************************/
void lcd_init(void)
{
WriteCommandLCD(0x38);
WriteCommandLCD(0x0c); //开显示
WriteCommandLCD(0x80);
WriteCommandLCD(0x01);
delay_ms(100);
}
/****************************************************************************
* //按指定位置显示一个字符
****************************************************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; //算出指令码
WriteCommandLCD(X); //发送地址码
WriteDataLCD(DData);
}
/****************************************************************************
* 名称:DisText()
* 功能:显示文本函数
****************************************************************************/
void DisText(unsigned char X, unsigned char Y,unsigned char *p)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; //算出指令码
WriteCommandLCD(X); //发送地址码
while(*p)
{
LCD_Data = *p;
WriteDataLCD(*p);
p++;
}
}
void main(viod)
{
lcd_init();
DisplayOneChar( 0,1,0x31) ;
DisplayOneChar( 1,1,0x32) ;
DisplayOneChar( 2,1,0x33) ;
DisText( 0,0,"zhangxiaoxu") ;
while(1) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -