这个程序是想先使“welcome”和“productor suntao”这两个字符分别在屏幕的第一行和第二行自右侧飞入,随后显示“use timed mold?”字样,现在的现象是welcome和productor suntao 能够飞入 但是会一直显示,而“use timed mold?”字样不会显示出来,而且后面显示很混乱,谁能解决这个问题?谢谢,程序如下:
//单片机主程序
- #include<reg51.h>
- #include"lcd1602.h"//调用头文件lcd1602
- #define uchar unsigned char
- uchar welcome1[]="welcome!";
- uchar welcome2[]="productor suntao";
- uchar Question[]="USE TIMED MOLD?";//这是要显示的三个字符串
- void main()
- {
- uchar i;
- E=0;
- RS=1;
- RW=1;
- P0=0xff;//液晶的基本的初始化
- init();//初始化函数
- while(1)
- {
- for(i=16;i>=0;i--)
- {
- display_lcd_text(0,i,welcome1);
- display_lcd_text(1,i,welcome2);//显示前两个字符串,飞入显示
- delay(200);
-
- }
- write(0x01,0);//清屏
- delay(1);
- display_lcd_text(0,1,Question);//显示第三个字符串
- delay(200);
- }
- }
- 头文件lcd1602的内容如下:
- #ifndef _LCD_1602_H_
- #define _LCD_1602_H_
- #include<string.h>
- #define uchar unsigned char
- sbit RS=P2^0;
- sbit RW=P2^1;
- sbit E=P2^2;//定义几个特殊功能位
- void delay(uchar r)//延时函数
- {
- uchar t;
- while(r--)
- {
- for(t=0;t<120;t++);
- }
- }
- void write(uchar i,bit j)//写命令写数据函数,其中i为要写入的内容,j为0写命令,j为1写数据
- {
- delay(1);
- E=0;
- P0=i;
- RS=j;
- RW=0;
- E=1;
- delay(1);
- E=0;
- delay(1);
- }
- void init()//初始化函数
- {
- write(0x38,0);
- delay(1);
- write(0x0c,0);
- delay(1);
- write(0x06,0);
- delay(1);
- write(0x01,0);
- delay(1);
- }
- void display_lcd_byte(uchar y,uchar x,uchar z)//显示单个字符的函数
- {
- if(y)
- {
- x+=0x40;
- }
- x+=0x80;
- write(x,0);
- write(z,1);
- }
- void display_lcd_text(uchar y,uchar x,uchar table[])//显示字符串的函数
- {
- uchar z=0;
- uchar t;
- t=strlen(table)+x;
- while(x<t)
- {
- display_lcd_byte(y,x,table[z]);
- x++;
- z++;
- }
- display_lcd_byte(y,x,' ');//最后加入空格
- }
- #endif
复制代码 |