登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看3868|回6|收藏
楼主 ID:388655 只看他
2018-8-22 09:26
小白学液晶,在课本上照写的代码,不知道为什么不能正常显示,有没有大神可以帮忙看一下,这代码有没有问题
十分感谢

代码:

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<stdlib.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define LCD_data P0
  7. sbit LCD_RS=P3^5;
  8. sbit LCD_RW=P3^6;
  9. sbit LCD_EN=P3^4;
  10. sbit LCD_PSB=P3^7;
  11. sbit wela=P2^6;
  12. sbit dula=P2^7;
  13. uchar dis1[10];
  14. uchar code dis2[]={"www.txmcu.com"};
  15. uchar code dis3[]={"天祥电子"};
  16. uchar code dis4[]={"--------"};
  17. void delay(uint x)
  18. {
  19.         uint i,j;
  20.         for(j=0;j<x;j++)
  21.                 for(i=0;i<110;i++);
  22. }

  23. void write_cmd(uchar cmd)
  24. {
  25.         LCD_RS=0;
  26.         LCD_RW=0;
  27.         LCD_EN=0;
  28.         P0=cmd;
  29.         delay(5);
  30.         LCD_EN=1;
  31.         delay(5);
  32.         LCD_EN=0;
  33. }

  34. void write_dat(uchar dat)
  35. {
  36.         LCD_RS=1;
  37.         LCD_RW=0;
  38.         LCD_EN=0;
  39.         P0=dat;
  40.         delay(5);
  41.         LCD_EN=1;
  42.         delay(5);
  43.         LCD_EN=0;
  44. }

  45. void lcd_pos(uchar x,uchar y)
  46. {
  47.         uchar pos;
  48.         if(x==0)
  49.         {x=0x80;}
  50.         else if(x==1)
  51.         {x=0x90;}
  52.         else if(x==2)
  53.         {x=0x88;}
  54.         else if(x==3)
  55.         {x=0x98;}
  56.         pos=x+y;
  57.         write_cmd(pos);
  58. }

  59. void makerand()
  60. {
  61.         uint ran;
  62.         ran=rand();
  63.         dis1[0]=ran/10000+0x30;
  64.         dis1[1]=ran%10000/1000+0x30;
  65.         dis1[2]=ran%1000/100+0x30;
  66.         dis1[3]=ran%100/10+0x30;
  67.         dis1[4]=ran%10+0x30;
  68.         ran=rand();
  69.         dis1[5]=ran/10000+0x30;
  70.         dis1[6]=ran%10000/1000+0x30;
  71.         dis1[7]=ran%1000/100+0x30;
  72.         dis1[8]=ran%100/10+0x30;
  73.         dis1[9]=ran%10+0x30;
  74. }

  75. void lcd_init()
  76. {
  77.         LCD_PSB=1;
  78.         write_cmd(0x30);
  79.         delay(5);
  80.         write_cmd(0x0C);
  81.         delay(5);
  82.         write_cmd(0x01);
  83.         delay(5);
  84. }

  85. main()
  86. {
  87.         uchar i;
  88.         wela=0;
  89.         dula=0;
  90.         delay(10);
  91.         lcd_init();
  92.         lcd_pos(1,0);
  93.         i=0;
  94.         while(dis2[i]!='\0')
  95.         {
  96.                 write_dat(dis2[i]);
  97.                 i++;
  98.         }
  99.         lcd_pos(2,0);
  100.         i=0;
  101.         while(dis3[i]!='\0')
  102.         {
  103.                 write_dat(dis3[i]);
  104.                 i++;
  105.         }
  106.         lcd_pos(3,0);
  107.         i=0;
  108.         while(dis4[i]!='\0')
  109.         {
  110.                 write_dat(dis4[i]);
  111.                 i++;
  112.         }
  113.         while(1)
  114.         {
  115.                 lcd_pos(0,0);
  116.                 makerand();
  117.                 for(i=0;i<10;i++)
  118.                 {
  119.                         write_dat(dis1[i]);
  120.                 }
  121.         }
  122. }


沙发 ID:111634 只看他
2018-8-23 16:43
本帖最后由 zl2168 于 2018-8-23 22:00 编辑

LCD12864显示屏显示汉字
Proteus仿真一下,确认有效。
实验25 LCD12864显示屏显示.rar (60.48 KB)
(下载次数: 19, 2018-8-23 21:59 上传)
12864.jpg
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行,可演示,可观测,程序语句条条有注解。
板凳 ID:389489 只看他
2018-8-24 08:37
p0口驱动能力有限,这个问题困扰我太久,之前所有屏到我手里都不显示,就是这原因
地板 ID:389564 只看他
2018-8-24 10:33
不是很懂 来学习的
5# ID:382243 只看他
2018-8-24 11:37
接口对不对
6# ID:389621 只看他
2018-8-24 13:40

不是很懂 来学习的
7# ID:98526 只看他
2018-8-24 17:18
看看液晶屏后面的串并口跳线端是不是直接被短接成串行通信了。应该是有个S P字样的

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版