找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2513|回复: 1
收起左侧

单片机驱动lcd1602显示的问题 清屏语句没有起到作用

[复制链接]
ID:301728 发表于 2018-7-17 15:49 | 显示全部楼层 |阅读模式
这个程序是想先使“welcome”和“productor suntao”这两个字符分别在屏幕的第一行和第二行自右侧飞入,随后显示“use timed mold?”字样,现在的现象是welcome和productor suntao 能够飞入 但是会一直显示,而“use timed mold?”字样不会显示出来,而且后面显示很混乱,谁能解决这个问题?谢谢,程序如下:
//单片机主程序
  1. #include<reg51.h>
  2. #include"lcd1602.h"//调用头文件lcd1602
  3. #define uchar unsigned char
  4. uchar welcome1[]="welcome!";
  5. uchar welcome2[]="productor suntao";
  6. uchar Question[]="USE TIMED MOLD?";//这是要显示的三个字符串
  7. void main()
  8. {
  9.   uchar i;
  10.   E=0;
  11.   RS=1;
  12.   RW=1;
  13.   P0=0xff;//液晶的基本的初始化
  14.   init();//初始化函数
  15.   while(1)
  16.   {
  17.    for(i=16;i>=0;i--)
  18.    {
  19.     display_lcd_text(0,i,welcome1);
  20.     display_lcd_text(1,i,welcome2);//显示前两个字符串,飞入显示
  21.     delay(200);

  22.    }
  23.      write(0x01,0);//清屏
  24.      delay(1);
  25.    display_lcd_text(0,1,Question);//显示第三个字符串
  26.      delay(200);
  27.   }
  28. }
  29. 头文件lcd1602的内容如下:
  30. #ifndef _LCD_1602_H_
  31. #define _LCD_1602_H_
  32. #include<string.h>
  33. #define uchar unsigned char
  34. sbit RS=P2^0;
  35. sbit RW=P2^1;
  36. sbit E=P2^2;//定义几个特殊功能位
  37. void delay(uchar r)//延时函数
  38. {
  39. uchar t;
  40. while(r--)
  41. {
  42.   for(t=0;t<120;t++);
  43. }
  44. }
  45. void write(uchar i,bit j)//写命令写数据函数,其中i为要写入的内容,j为0写命令,j为1写数据
  46. {
  47. delay(1);
  48. E=0;
  49. P0=i;
  50. RS=j;
  51. RW=0;
  52. E=1;
  53. delay(1);
  54. E=0;
  55. delay(1);
  56. }
  57. void init()//初始化函数
  58. {
  59. write(0x38,0);
  60. delay(1);
  61. write(0x0c,0);
  62. delay(1);
  63. write(0x06,0);
  64. delay(1);
  65. write(0x01,0);
  66. delay(1);
  67. }
  68. void display_lcd_byte(uchar y,uchar x,uchar z)//显示单个字符的函数
  69. {
  70.   if(y)
  71.   {
  72.    x+=0x40;
  73.   }
  74.   x+=0x80;
  75.   write(x,0);
  76.   write(z,1);
  77. }
  78. void display_lcd_text(uchar y,uchar x,uchar table[])//显示字符串的函数
  79. {
  80. uchar z=0;
  81. uchar t;
  82. t=strlen(table)+x;
  83. while(x<t)
  84. {
  85.   display_lcd_byte(y,x,table[z]);
  86.   x++;
  87.   z++;
  88. }
  89. display_lcd_byte(y,x,' ');//最后加入空格
  90. }
  91. #endif
复制代码

飞入正常

飞入正常

开始显示正常

开始显示正常

显示开始混乱

显示开始混乱
回复

使用道具 举报

ID:301728 发表于 2018-7-17 15:50 | 显示全部楼层
清屏语句没有起到作用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表