求助,为什么我的proteus仿真LCD1602滚动显示程序也没错误没警告怎么就是不出来啊?
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^6;
sbit RW=P2^5;
sbit EP=P2^7;
uchar code dis1[]={" hello "};
uchar code dis2[]={ " 2014.08.01 " };
uchar code dis3[]={"qi xi kuai le ha "};
uchar code dis4[]={"WU LI KAN LUAN "};
uchar code dis5[]={"NI HAO BNAG AO"};
void delay(uint k )
{
uint m,n;
for(m=0;m<k;m++)
{
for(n=0;n<120;n++);
}
}
void delay1(uchar b)
{
for(b=0;b<4;b++)
{
_nop_();
}
}
uchar Busy_check(void)
{
uchar LCD_Status;
RS=0;
RW=1;
EP=1;
delay1(4);
LCD_Status=P0&0x80;
EP=0;
return LCD_Status;
}
void lcd_wcmd(uchar cmd)
{
while(Busy_check());
RS=0; //选择指令寄存器
RW=0; //写指令操作
EP=0;
_nop_();
_nop_();
P0=cmd;
delay1(4);
EP=1;
delay1(4);
EP=0;
}
void lcd_pos(uchar pos)
{
lcd_wcmd(pos|0x80);
}
void lcd_wdat(uchar dat)
{
while(Busy_check());
RS=1; //选择数据寄存器
RW=0; //写数据操作
EP=0;
P0=dat; //数据送到P0口
delay1(4);
EP=1; //给一个高电平
delay1(4);
EP=0;
}
void LCD_disp(void) //向上滚动
{
uchar i;
lcd_pos(1); //设置第一行的第二个字符
i=0;
while (dis1
!=' ')
{
lcd_wdat(dis1); //在第一行显示字符串”hello“ 1
i++;
}
delay(1200);
lcd_pos(0x41);
i=0;
while(dis2!=' ')
{
lcd_wdat(dis2); //在第二行显示字符串“ 2
i++ ;
}
delay(200);
lcd_wcmd(0x01); //清除显示
delay(1);
lcd_pos(1); //第二屏开始
i=0;
while(dis2!=' ')
{
lcd_wdat(dis2); //第二屏第一行显示字符串2
i++;
}
delay(1200);
lcd_pos(0x41) ;
i=0 ;
while(dis3!=' ')
{
lcd_wdat(dis3); // 第二屏第一行显示字符串3
i++;
}
delay(200);
lcd_wcmd(0x01); //清除显示
delay(1);
lcd_pos(1);
i=0;
while(dis3!=' ' )
{
lcd_wdat(dis3); // 第3屏第一行显示字符串3
i++;
}
delay(1200);
lcd_pos(0x41);
i=0;
while(dis4!=' ' )
{
lcd_wdat(dis4); // 第3屏第一行显示字符串4
i++;
}
delay(200);
lcd_wcmd(0x01);
delay(1);
lcd_pos(1);
i=0;
while(dis4!=' ')
{
lcd_wdat(dis4); // 第4屏第一行显示字符串4
i++;
}
delay(1200);
lcd_pos(0x41);
i=0;
while(dis5!=' ') // 第4屏第一行显示字符串5
{
lcd_wdat(dis5);
i++;
}
delay(200);
lcd_wcmd(0x01);
lcd_pos(1);
i++;
while(dis5!=' ')
{
lcd_wdat(dis5); // 第5屏第一行显示字符串5
i++;
}
delay(1200);
lcd_pos(0x41);
i=0;
while(dis1!=' ')
{
lcd_wdat(dis1); // 第5屏第一行显示字符串1
i++;
}
delay(200);
lcd_wcmd(0x01);
delay(1);
}
void lcd_init()
{
lcd_wcmd(0x38);
delay(1);
lcd_wcmd(0x3c);
delay(1);
lcd_wcmd(0x06);
delay(1);
lcd_wcmd(0x01);
delay(1);
}
void main(void)
{
lcd_init();
delay(10);
while(1)
{
LCD_disp();
}
}
-
proteus仿真图
一周热门 更多>