📄 lcdd.c
字号:
/******************************************************************
** 1602A液晶屏驱动
** AT89C51的晶振频率:12M
** 连接方式:RW---P3.6 RS---P3.5 E---P3.4
******************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LIKE MCU!";
uchar code table1[]="5201314";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit lcdrw=P3^6;
#define LCD_Data P0
uchar num;
uchar num1[3];
uint ii;
//长延时
void delay(void)
{
uint x,y;
for(x=5;x>0;x--)
for(y=7269;y>0;y--);
}
//短延时
void delay1(void)
{
uint y;
for(y=5552;y>0;y--);
}
uchar LCD_Status(void)
{
lcdrs = 0;
lcdrw = 1;
lcden = 0;
lcden = 0;
lcden = 1;
while (LCD_Data & 0x80); //检测忙信号
return(LCD_Data);
}
//写命令
void write_com(uchar com,busy)
{ if(busy) LCD_Status();
lcdrs=0;
lcdrw=0;
P0=com;
delay1();
lcden=1;
delay1();
lcden=0;
}
//写数据
void write_data(uchar date)
{ // LCD_Status();
lcdrs=1;
lcdrw=0;
P0=date;
delay1();
lcden=1;
delay1();
lcden=0;
}
//初始化
void init()
{
lcden=0;
write_com(0x38,0);
delay1();
write_com(0x38,0);
delay1();
write_com(0x38,0);
delay1();
write_com(0x38,1);
write_com(0x08,1);
write_com(0x01,1);
write_com(0x0e,1);
write_com(0x06,1);
// write_com(0x80+0x03);
// write_com(0x80+0x40);
}
//在指定位置写一个字符
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; // 算出指令码
write_com(X,0); //这里不检测忙信号,发送地址码
write_data(DData);
}
//写字符串
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
uchar b=0;
//Y &= 0x1;
// X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[b]>'\0') //若到达字串尾则退出
{
// w (X <= 0xF) //X坐标应小于0xF
DisplayOneChar(X++, Y, DData[b++]); //显示单个字符
if(X==16)
{X=0;Y^=1;}
}
}
//主函数
void main()
{
delay();
init();
DisplayListChar(0,0,table);
write_com(0x01,1);
DisplayListChar(0,1,table1);
// write_data('1') ;
/* for(num=0;num<11;num++)
{
write_data(table[num]);
delay1();
}
write_com(0x80+0x40);
for(num=0;num<13;num++)
{
write_data(table1[num]);
delay1();
} */
/* for(num=0;num<16;num++)
{
write_com(0x18);
delay1();
}
while(1) {
write_com(0x0c); //三位数递增显示
for(num=0;num<999;num++)
{ num1[0]=(num/100)%10;
num1[1]=(num/10)%10;
num1[2]=(num/1)%10;
write_com(0x80+0x4d);
for(ii=0; ii<3; ii++)
{write_data(num1[ii]+'0');
delay1(); }
}
} */
// while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -