奋斗吧小鱼儿 发表于 2015-4-6 18:41
程序也没给全,怎么帮你看~。可以确定是,肯定程序有错误~
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar string[]={"I am pengfa"};
uchar string1[]={"good men"};
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
/*1ms延时函数*/
void delay1ms(void)
{
uchar i,j;
for(i=100;i>0;i--)
for(j=7;j>0;j--);
}
/* 1ms延时函数的调用*/
void delay(uchar i)
{
for(i;i>0;i--)
{
delay1ms();
}
}
/*判断忙信号*/
uchar zero(void)
{
RS=0; //读取忙信号
RW=1;
E=1;
_nop_(); //空操作
_nop_();
_nop_();
_nop_();
return BF;
}
/*写命令函数*/
void sendaddress(uchar i)
{
while(zero()==1);
RS=0;
RW=0;
E=0;
P0=i;
_nop_(); //空操作
_nop_();
_nop_();
_nop_();
E=1;
_nop_(); //空操作
_nop_();
_nop_();
_nop_();
E=0;
}
/*写数据函数*/
void senddate(uchar i)
{
while(zero()==1) ;
RS=1;
RW=0;
E=0;
P0=i;
_nop_(); //空操作
_nop_();
_nop_();
_nop_();
E=1;
_nop_(); //空操作
_nop_();
_nop_();
_nop_();
E=0;
}
/*写地址函数*/
void writeaddress(uchar i)
{
sendaddress(i|0x80) ; //设定DDRAM地址,字符显示地址
}
/*1602液晶初始状态设置*/
void setup1602(void)
{
delay(20);
sendaddress(0x38);//8位数据总线 显示两行 5*7点阵DB7~DB0 0011 1000
delay(3);
sendaddress(0x38);
delay(3);
sendaddress(0x0f);//光标右移一格 AC加一 0000 1000
delay(3);
sendaddress(0x06);//写入数据后光标右移
delay(3);
sendaddress(0x01);//清屏
delay(3);
}
void main()
{
uchar i;
setup1602();
sendaddress(0x01); //先清屏
writeaddress(0x00);//从00H开始显示
i=0;
while(string!='\0')
{
senddate(string);
i++;
delay(500);
}
writeaddress(0x40);//从40H处开始显示
sendaddress(0x01);//清屏
i=0;
while(string1!='\0')
{
senddate(string1);
i++;
delay(500);
}
while(5000);
}
谢谢了