搜索
bottom↓
回复: 9

LCD2004驱动调了一周没调通

[复制链接]

出0入0汤圆

发表于 2016-2-6 16:21:59 | 显示全部楼层 |阅读模式
LCD2004驱动调了一周没调通,4bit模式,有好心人有调试通过的代码不?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2016-2-6 16:35:56 | 显示全部楼层
跟1602代码一样的,只是多了两行,每行多了4个字,命令都通用,只能帮你到这里了

出0入42汤圆

发表于 2016-2-6 16:49:48 | 显示全部楼层
可用的代码,是51用的:


  1. #pragma db cd sb oe
  2. /* sUTB_mini板LCD20X2显示驱动程序
  3.         数据线为4位
  4.     本设计中,RW线恒为LO,没有驱动
  5.        
  6. */
  7. /*LCD DISPLAY MODULE */
  8. #include <reg52.h>
  9. #define uchar unsigned char

  10. sbit LCD_RS = P0^1;
  11. sbit LCD_E  = P0^0;
  12. #define LCD_BUS P0        //P04..P07

  13. extern void Delay5mS( uchar t );


  14. void LCD_Command(uchar c);
  15. void LCD_Data(uchar c);
  16. void LCD_Init();
  17. void LCD_Clr();
  18. void LCD_XY(uchar x,uchar y);
  19. void LCD_StringXY(uchar x,uchar y,uchar *c);
  20. void LCD_Integer( unsigned int val );
  21. void LCD_IntegerXY(uchar x,uchar y,unsigned int val);
  22. void LCD_sIntegerXY(uchar x,uchar y, int val);
  23. void LCD_Integer_100( unsigned int val );
  24. void LCD_IntegerXY_100(uchar x,uchar y,unsigned int val);
  25. void LCD_IntegerXY_1000(uchar x, uchar y, unsigned int val);
  26. void LCD_sIntegerXY_1000(uchar x, uchar y, int val);
  27. void LCD_sInteger( int val);
  28. //void LCD_IntegerXY_L(uchar x,uchar y,unsigned int val);
  29. //void LCD_LongIntXY(uchar x,uchar y,unsigned long val);
  30. void LCD_LongIntXY_D(uchar x,uchar y,unsigned long val, uchar digbit );
  31. void LCD_byteXY(uchar x,uchar y,uchar val);
  32. //void LCD_BCDXY(uchar x,uchar y,uchar b);


  33. void LCD_Char( uchar c );
  34. void LCD_CharXY( uchar x, uchar y, uchar c );
  35. void LCD_String(uchar *c);
  36. void LCD_CharHex( uchar c );
  37. void LCD_CharHexXY( uchar x , uchar y , uchar c );
  38. void LCD_CharBin( uchar c );
  39. void LCD_CharBinXY( uchar x , uchar y , uchar c );
  40. void LCD_Space( uchar i );
  41. void LCD_SpaceXY( uchar x , uchar y , uchar c );
  42. //void setblink(uchar x,uchar y)
  43. void LCD_BUS_Port( uchar x );
  44. //void LCD_PercentXY( uchar x, uchar y, int per );
  45. //void LCD_Weight2XY( uchar x, uchar y, long w );
  46. void LCD_Bit( bit b );


  47. void Delay25uS( void )
  48. {
  49.   unsigned int i;
  50.   for( i=0;i<10;i++ );
  51. }



  52. void LCD_Command(uchar c)
  53. {
  54.         LCD_RS = 0;
  55. //        LCD_RW = 0;
  56.         LCD_BUS = LCD_BUS & 0x0f;
  57.         LCD_BUS = LCD_BUS | ( c & 0xf0 ) ;
  58.         LCD_E = 1;
  59.         LCD_E = 1;
  60.         LCD_E = 0;

  61.         LCD_BUS = LCD_BUS & 0x0f;
  62.         LCD_BUS = LCD_BUS | ( ( c * 16 ) & 0xf0 );
  63.         LCD_E = 1;
  64.         LCD_E = 1;
  65.         LCD_E = 0;
  66.            Delay25uS();
  67. }

  68. void LCD_Data(uchar c)
  69. {
  70.         LCD_RS=1;
  71. //        LCD_RW = 0;
  72.         LCD_BUS = LCD_BUS & 0x0f;
  73.         LCD_BUS = LCD_BUS | ( c & 0xf0 ) ;
  74.         LCD_E = 1;
  75.         LCD_E = 1;
  76.         LCD_E = 0;

  77.         LCD_BUS = LCD_BUS & 0x0f;
  78.         LCD_BUS = LCD_BUS | ( ( c * 16 ) & 0xf0 );
  79.         LCD_E = 1;
  80.         LCD_E = 1;
  81.         LCD_E = 0;
  82.            Delay25uS();
  83. }

  84. void LCD_Init()
  85. {
  86.   LCD_RS=1;
  87.   LCD_E=1;
  88.   Delay5mS( 3 );
  89.   LCD_Command( 0x28 );
  90.   Delay5mS( 2 );
  91.   LCD_Command( 0x28 );
  92.   Delay5mS( 2 );
  93.   LCD_RS=1;
  94.   LCD_E=1;
  95.   LCD_Command(0x28);
  96.   Delay25uS();
  97.   LCD_Command(0x28);
  98.   Delay25uS();
  99.   LCD_Command(0x06);
  100.   Delay25uS();
  101.   LCD_Command(0x0c);
  102.   Delay25uS();
  103.   LCD_Command(0x01);
  104.   Delay5mS( 2 );
  105. }

  106. void LCD_Clr(void)
  107. {
  108.   LCD_Command(0x01);
  109.   Delay5mS( 2 );
  110. }

  111. void LCD_XY(uchar y,uchar x)
  112. //LCM 20x4
  113. {
  114.         if( x == 0 )
  115.                 LCD_Command( 0x80 + y );
  116.         else if( x == 1 )
  117.                 LCD_Command( 0xc0 + y );
  118.         else if( x == 2 )
  119.                 LCD_Command( 0x80 + y + 20 );
  120.         else if( x == 3 )
  121.                 LCD_Command( 0xc0 + y + 20 );
  122. }
  123. /* LCM 20x2
  124. {  
  125.   if((x&0x01)==0)
  126.      LCD_Command(0x80|(y));
  127.   else
  128.      LCD_Command(0xc0|(y));
  129. }
  130. */




  131. void LCD_Char( uchar c )
  132. {
  133.         LCD_Data( c );
  134. }

  135. void LCD_CharXY( uchar x, uchar y, uchar c )
  136. {
  137.         LCD_XY( x, y );
  138.         LCD_Char( c );
  139. }


  140. void LCD_String(uchar *c)
  141. {
  142.    uchar d=0;
  143.    while(c[d]!=0)
  144.    {
  145.       LCD_Data(c[d++]);
  146.    }
  147.    
  148. }


  149. void LCD_StringXY(uchar x,uchar y,uchar *c)
  150. {
  151.    uchar d=0;
  152.    LCD_XY(x,y);
  153.    while(c[d]!=0)
  154.    {
  155.       LCD_Data(c[d++]);
  156.    }
  157. }
复制代码

出0入0汤圆

 楼主| 发表于 2016-2-6 16:57:53 | 显示全部楼层
多谢多谢,我试试

出0入0汤圆

发表于 2016-2-6 17:30:03 | 显示全部楼层
LCD 使用第一步:

先接电源正负,看看第一行是否出现黑块,有的话,就可以接上其它的讯号及控制线。如没有黑块,可能是反差未调好或液晶已损坏。

出0入0汤圆

 楼主| 发表于 2016-2-6 18:44:41 | 显示全部楼层
恩,液晶是好的

出0入0汤圆

发表于 2016-2-6 18:50:41 | 显示全部楼层
alias 发表于 2016-2-6 17:30
LCD 使用第一步:

先接电源正负,看看第一行是否出现黑块,有的话,就可以接上其它的讯号及控制线。如没有 ...

为什么第1行会出现一行黑块?是lcd模块的硬件特性吗?
我用的lcd1602也是,上电后第1行会出现一行小方块,然后复位一下单片机才开始正常显示。

出0入8汤圆

发表于 2016-2-6 19:04:54 来自手机 | 显示全部楼层
肯定是数据端口选择指令只送了一次,事实上要送两次

出0入0汤圆

发表于 2016-2-6 20:02:58 | 显示全部楼层
winterw 发表于 2016-2-6 18:50
为什么第1行会出现一行黑块?是lcd模块的硬件特性吗?
我用的lcd1602也是,上电后第1行会出现一行小方块 ...

为什么第1行会出现一行黑块?

可能是lcd模块未初始化的原因吧。对lcd进行初始化后便可正常使用。

出0入0汤圆

发表于 2016-2-12 11:24:48 | 显示全部楼层
注意下锁存数据的时机。也就是EN线变化的位置,确保是在数据稳定的时候下降的(我记得是下降沿锁存)。这地方不同液晶模块兼容性也不一样,有的随便变化一下就能锁存,有的对时序要求就比较严格
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-27 04:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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