#include<reg52.h>
#include<intrins.h>//包含_nop_()函数定义的头文件
sbit RS=P2^0; //寄存器选择位
sbit RW=P2^1; //读写选择位
sbit E=P2^2; //使能信号位
sbit BF=P0^7; //忙碌标志位
unsigned char code string[]={"I CARE YOU"};
unsigned char code string1[]={"YOU LOVE ME"};
/**************************************************
函数功能:延时1ms
*************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************
函数功能:延时若干毫秒
入口参数:n
****************************************/
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/********************************************
函数功能:判断液晶模块的忙碌状态
返回值:result;result=1,忙碌;result=0,不忙
*******************************************/
unsigned char BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
/***************************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
入口参数:dictate
**************************************************************/
void WriteInstruction(unsigned char dictate)
{
while(BusyTest()==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
/******************************************************************
函数功能:指定字符显示的实际地址
入口参数: x
******************************************************************/
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80);
}
/**************************************************************************
函数功能:将数据(字符标准ASCII码)写入液晶模块;
入口参数:y(为字符常量)
*************************************************************************/
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
/***************************************************
函数功能:对LCD的显示模式进行初始化设置
**************************************************/
void LcdInitiate(void)
{
delay(15);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x0F);
delay(5);
WriteInstruction(0x06);
delay(5);
WriteInstruction(0x01);
delay(5);
}
void main(void)
{
unsigned char i;
LcdInitiate();
delay(10);
while(1)
{
WriteInstruction(0x01);
WriteAddress(0x00);
i=0;
while(string[1]!=' ')
{
WriteData(string[i]);
i++;
delay(400);
}
WriteAddress(0x40);
i=0;
while(string[i]!=' ')
{
WriteData(string1[i]);
i++;
delay(400);
}
for(i=0;i<10;i++)
delay(250);
}
}
以上就是程序,为什么是只有前一半正确呢,后一半是一堆乱码呢??????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
并非显示缺,而是第一行正确,第二行就是一堆乱码。请问,会是什么情况呢?
while(string[1]!=' ')
你这个循环刹不住车了。呵呵。
一周热门 更多>