STM32/STM8技术论坛
直播中

551992

12年用户 49经验值
私信 关注
[问答]

LCD1602显示

   我在郭天祥的单片机板子上面用了下面的代码,液晶显示1602就不显示了呢?
其他引脚的功能我没有变化,只是把RS,RW,EN分别插到引脚P1.0,P1.1,P1.2。望哪位大神帮忙解答一下,
在此谢谢!

  1. #include
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define Lcd_DB P0
  5. ***it Lcd_RS = P1^0;
  6. ***it Lcd_RW = P1^1;
  7. ***it Lcd_EN = P1^2;
  8. ***it dula = P2^6;
  9. ***it wela = P2^7;

  10. void InitLcd1602();
  11. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);

  12. void main()
  13. {
  14.         wela = 0;
  15.         dula = 0;
  16.         InitLcd1602();
  17.         LcdShowStr(2,0,"UESTC.COM");
  18.         LcdShowStr(0,1,"WELCOME TO UESTC");
  19.         while(1);
  20. }

  21. void LcdWaitReady()
  22. {
  23.         unsigned char sta;

  24.         Lcd_DB = 0xff;
  25.         Lcd_RS = 0;
  26.         Lcd_RW = 1;       

  27.         do{
  28.                 Lcd_EN = 1;
  29.                 sta = Lcd_DB;
  30.                 Lcd_EN = 0;
  31.         }while(sta&0x80);
  32. }

  33. void LcdWriteCmd(unsigned char cmd)
  34. {
  35.         LcdWaitReady();
  36.         Lcd_RS = 0;
  37.         Lcd_RW = 0;
  38.         Lcd_DB = cmd;
  39.         Lcd_EN = 1;
  40.         Lcd_EN = 0;
  41. }

  42. void InitLcd1602()
  43. {
  44.         LcdWriteCmd(0x38);
  45.         LcdWriteCmd(0x0C);
  46.         LcdWriteCmd(0x06);
  47.         LcdWriteCmd(0x01);
  48. }

  49. void LcdShowCursor(unsigned char x, unsigned char y)
  50. {
  51.         unsigned char addr;
  52.         if(0==y)
  53.         {
  54.                 addr = 0x00 + x;
  55.         }
  56.         else
  57.                 addr = 0x40 + x;

  58.         LcdWriteCmd(addr | 0x80);
  59. }

  60. void LcdWriteDat(unsigned char dat)
  61. {
  62.         LcdWaitReady();
  63.         Lcd_RS = 1;
  64.         Lcd_RW = 0;
  65.         Lcd_DB = dat;
  66.         Lcd_EN = 1;
  67.         Lcd_EN = 0;
  68. }

  69. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
  70. {
  71.         LcdShowCursor(x,y);
  72.        
  73.         while(*str != '\0')
  74.         {
  75.                 LcdWriteDat(*str++);
  76.         }
  77. }



已退回5积分

回帖(8)

曲终人散

2016-8-29 11:29:28
自己写一下,不要总是用例程
举报

551992

2016-8-29 22:07:39
引用: @曲终人散@ 发表于 2016-8-29 11:29
自己写一下,不要总是用例程

我感觉差不多呀,不知道哪儿出了问题
举报

曲终人散

2016-8-29 22:51:57
引用: mcqueen 发表于 2016-8-29 22:07
我感觉差不多呀,不知道哪儿出了问题

一个函数一个函数调试一下
举报

ochrise

2016-8-30 14:24:14
哥哥,别逗了! P1口是lcd的数据口(如果我没有猜错的话),把这三个控制口换到别的端口去
举报

888919

2016-8-30 15:11:11
我来看看 主要来向大神学习嵌入式培训www.arm8.net
举报

551992

2016-8-30 22:14:07
引用: ochrise 发表于 2016-8-30 14:24
哥哥,别逗了! P1口是lcd的数据口(如果我没有猜错的话),把这三个控制口换到别的端口去

PO口才是LCD的数据口,”郭天祥“的上面的代码直接就把R/W接在了低电平上面,所以就没有判断LCD的状态是否忙,就添加了很多延时在上面。我现在想根据另外一种方式,通过判断LCD处在闲的状态,然后写命令和数据,就不用添加延时了。昨天把R/W还在了P3.7接口就成功了,但是不知道怎么回事。
举报

邱黎明

2016-8-30 23:30:26
看下你的开发板原理图,这三根线可能都不需要你自己单独接线!
举报

快乐、就好

2016-8-31 07:01:47
你就按着他给那个视频教程或者书写就行,讲的还是很详细的。最后想研究在对比你这个例子 一般都是 RS,RW,E时序的问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分