|
這個程序是想先使“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
復制代碼 |
|