#include"reg52.h"
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
int i;
/****************************************************************
***************
* 函 数 名 : Delay
* 函数功能 : 延时函数,延时 1ms
* 输 入 : c
* 输 出 : 无
* 说 名 : 该函数是在 12MHZ 晶振下,12 分频单片机的延时。
*****************************************************************
**************/
int delay(int c)
{
char a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
/****************************************************************
***************
* 函 数 名 :lcdwriteCom
* 函数功能 : 写入一个字节的命令
* 输 入 : com
* 输 出 : 无
* 说 名 :
*****************************************************************
**************/
void lcdwriteCom(char com)
{
LCD1602_E = 0;
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATAPINS = com;
delay(1);
LCD1602_E = 1;
delay(5);
LCD1602_E = 0;
}
/****************************************************************
***************
* 函 数 名 :lcdwriteCom
* 函数功能 : 写入一个字节的数据
* 输 入 : data
* 输 出 : 无
* 说 名 :
*****************************************************************
**************/
void lcdwriteDate(char date)
{
LCD1602_E = 0;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPINS = date;
delay(1);
LCD1602_E = 1;
delay(5);
LCD1602_E = 0;
}
/****************************************************************
***************
* 函 数 名 :lcdInw
* 函数功能 : 初始化LCD1602屏
* 输 入 : 无
* 输 出 : 无
* 说 名 :
*****************************************************************
**************/
void lcdInw()
{
lcdwriteCom(0x38); //开显示
lcdwriteCom(0x0c); //开显示不显示光标
lcdwriteCom(0x6c);
lcdwriteCom(0x06); //写一个指针加 1
lcdwriteCom(0x01); //清屏
lcdwriteCom(0x80); //设置数据指针起点
}
void main()
{
char Disp[] ="diegjmds";
lcdInw();
for(i=0;i<16;i++)
{
lcdwriteDate(Disp[i]);
}while(1);
}
题主没说明白啥问题,不过 第 94 行
for(i=0;i<16;i++)
i 的取值范围超界了,Disp 只有 8 个字符,应该改成
for(i=0;i<8;i++)