用的是LCM1602液晶显示屏
时间: 2024-03-13 07:43:41 浏览: 21
好的,那么我稍微修改一下代码,以适配 LCM1602 液晶显示屏:
```
#include "reg52.h"
#define uchar unsigned char
#define uit unsigned int
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
uchar code hanzi[] = {
0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10, /* 南 */
0x10,0x10,0x10,0x10,0xFF,0x00,0x00,0x00, /* 信 */
0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x00, /* 大 */
0x10,0x08,0x04,0x02,0xFF,0x00,0x00,0x00, /* 欢 */
0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10, /* 迎 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 空格 */
};
void delay(uit ms)
{
uit i,j;
for(i=ms;i>0;i--)
{
for(j=110;j>0;j--);
}
}
void w_com(uchar com)
{
RS=0;
RW=0;
E=1;
P0=com;
E=0;
delay(1);
}
void w_dat(uchar dat)
{
RS=1;
RW=0;
E=1;
P0=dat;
E=0;
delay(1);
}
void lcd_ini(void)
{
delay(15); // 液晶屏上电后需要等待15ms以上
w_com(0x38);
delay(5);
w_com(0x38);
delay(5);
w_com(0x38);
delay(5);
w_com(0x0c);
delay(5);
w_com(0x01);
delay(5);
w_com(0x06);
delay(5);
}
void main(void)
{
uchar i, j;
lcd_ini();
w_com(0x80);
for(i=0;i<6;i++) // 显示“南信大欢迎你”
{
for(j=0;j<8;j++)
{
w_dat(hanzi[i*8+j]);
}
}
while(1)
{
;
}
}
```
在 LCM1602 液晶显示屏上电后需要等待15ms以上,所以我将延迟时间增加到了15ms。另外,液晶屏的初始化需要连续写入3次0x38,每次之间需要间隔5ms以上。