📄 lcd1602.c
字号:
/********************************************************
* 文件名称: LCD1602.C
* 功能描述:
********************************************************/
#include<reg51.h>
#include<intrins.h>
//引脚定义
sbit RSPIN = P1^5;
sbit RWPIN = P1^6;
sbit EPIN = P1^7;
unsigned char XPOS,YPOS;
unsigned char DisTab1[] = "TD-NMC+ Xi'an Tang Du Crop. ";
unsigned char DisTab2[] = "www.tangdu.com 029-88375025 ";
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
void lcdwaitidle(void) //忙状态判别
{ P0=0xff;
RSPIN=0;
RWPIN=1;
EPIN=1;
while((P0&0x80)==0x80); //读取忙标志BF, 判为1否, 为1等待
EPIN=0;
}
void lcdwcn(unsigned char c) //写指令c
{ RSPIN=0;
RWPIN=0;
P0=c;
EPIN=1;
_nop_();
EPIN=0;
}
void lcdwc(unsigned char c) //查询忙标志, 然后写指令c
{ lcdwaitidle();
lcdwcn(c);
}
void lcdwd(unsigned char d) //查询忙标志, 然后写数据d
{ lcdwaitidle();
RSPIN=1;
RWPIN=0;
P0=d;
EPIN=1;
_nop_();
EPIN=0;
}
void lcdpos(void)
{
XPOS&=0x3f;
YPOS&=0x03;
if(YPOS==0x00)
lcdwc(XPOS|0x80); //DDRAM地址设置(第1行)
else if(YPOS==0x01)
lcdwc((XPOS+0x40)|0x80); //DDRAM地址设置(第2行)
}
void lcdinit(void) //LCD初始化
{ delay(150); lcdwcn(0x38); //总线8位, 两行显示, 5*7点阵字符体
delay(50); lcdwcn(0x38);
delay(50); lcdwcn(0x38);
lcdwc(0x38);
lcdwc(0x08); //关闭显示, 光标消失, 闪烁禁止
lcdwc(0x01); //清屏
lcdwc(0x06); //AC加1计数, 禁止滚动
lcdwc(0x0e); //开显示
}
void Display(void) // 显示子程序
{
for(XPOS=0; XPOS<16; XPOS++)
{
YPOS=0; lcdpos(); lcdwd(DisTab1[XPOS]);
YPOS=1; lcdpos(); lcdwd(DisTab2[XPOS]);
delay(2000);
}
for(XPOS=16; XPOS<30; XPOS++)
{
lcdwc(0x18); // 滚屏
YPOS=0; lcdpos(); lcdwd(DisTab1[XPOS]);
YPOS=1; lcdpos(); lcdwd(DisTab2[XPOS]);
delay(2000);
}
}
void main(void)
{
EPIN=0;
lcdinit();
while(1)
{
lcdwc(0x01);
lcdwc(0x02);
Display();
delay(5000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -