3771|7

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

12864驱动程序总是停在查忙,求大神解答 [复制链接]

之前写的驱动程序可以正常使用,今天需要用,程序拿出来结果发现程序没法用了,总是停在查询忙的循环里,不知道怎么回事,于是我把查忙的子程序注掉,12864还是没有显示,一行一行的查寄存器的值都正确。一下午搞的好不爽,但还是没有解决问题,于是跑来向各位大神求救。
  1. #define LCD_DATA_OUT       P4OUT          //数据口
  2. #define LCD_DATA_SEL       P4SEL
  3. #define LCD_DATA_DIR       P4DIR  
  4. #define LCD_DATA_IN        P4IN
  5. #define LCD_COM_SEL        P6SEL         //控制指令口
  6. #define LCD_COM_DIR        P6DIR
  7. #define LCD_COM_OUT        P6OUT

  8. #define LCD_RS_H      LCD_COM_OUT |= BIT3
  9. #define LCD_RS_L      LCD_COM_OUT &= ~BIT3

  10. #define LCD_RW_H      LCD_COM_OUT |= BIT2
  11. #define LCD_RW_L      LCD_COM_OUT &= ~BIT2

  12. #define LCD_EN_H      P7OUT |= BIT7
  13. #define LCD_EN_L      P7OUT &= ~BIT7

  14. #define LCD_COM_INIT      LCD_COM_SEL &= ~(BIT2 + BIT3);LCD_COM_DIR |= (BIT2 + BIT3);P7DIR |= BIT7

  15. #define LCD_DATA_INIT     LCD_DATA_SEL = 0X00;LCD_DATA_DIR = 0XFF


  16. /*******************************************************************************
  17. **函数名称:LCD_Busy()
  18. **函数功能:判断LCD的BF位是否忙,BF不忙时随时可以写入数据或指令
  19. **输 入 口:无
  20. **输 出 口:无
  21. **返 回 值:无
  22. **备    注:如果BF一直处于忙碌状态,i加到60000后会退出循环
  23. **日    期:2013.5.25
  24. *******************************************************************************/
  25. /*void LCD_Busy(void)
  26. {
  27.     //uchar busy = 0;
  28.     //uint i = 60000;
  29.     LCD_DATA_DIR = 0X00;             //数据口作为输入功能
  30.     _NOP();
  31.     LCD_RS_L;                        //读数据    rs=0   rw=1  
  32.     LCD_RW_H;
  33.     LCD_EN_H;                        //使能端高电平读出数据
  34.     while(LCD_DATA_IN & 0x80);    //判断最高位BF是否为1,为1时等待
  35.     LCD_DATA_DIR = 0XFF;             //数据口作为输出功能
  36.     LCD_EN_L;
  37. }*/
  38. /*******************************************************************************
  39. **函数名称:LCD_Write_dat()
  40. **函数功能:写LCD数据函数
  41. **输 入 口:dat:是写入的数据
  42. **输 出 口:无
  43. **返 回 值:无
  44. **备    注:EN下降沿写入一个数据
  45. **日    期:2013.5.25
  46. *******************************************************************************/
  47. void LCD_Write_dat(uchar dat)
  48. {
  49.    // LCD_Busy();
  50.     LCD_RS_H;                  //r0 = h,rw = 0 写数据
  51.     LCD_RW_L;
  52.     LCD_EN_H;
  53.     LCD_DATA_OUT = dat;        //en下降沿写入数据
  54.     LCD_EN_L;
  55. }
  56. /*******************************************************************************
  57. **函数名称:LCD_Write_com()
  58. **函数功能:写LCD指令函数
  59. **输 入 口:com:是写入的指令
  60. **输 出 口:无
  61. **返 回 值:无
  62. **备    注:EN下降沿写入一个指令
  63. **日    期:2013.5.25
  64. *******************************************************************************/
  65. void LCD_Write_com(uchar com)
  66. {
  67.    // LCD_Busy();
  68.     LCD_RS_L;                 //rs = 0,rw = 0 写com
  69.     LCD_RW_L;
  70.     LCD_EN_H;
  71.     LCD_DATA_OUT = com;       //en下降沿写入数据
  72.     LCD_EN_L;
  73. }
  74. /*******************************************************************************
  75. **函数名称:LCD_Write_str()
  76. **函数功能:在LCD上写入一串字符
  77. **输 入 口:add 要写入的地址   *s要写入的指针数组
  78. **输 出 口:无
  79. **返 回 值:无
  80. **备    注:strlen()是引用库函数string.h  ,可以求出数组的长度
  81. **日    期:2013.5.25
  82. *******************************************************************************/
  83. void LCD_Write_str(uchar add,uchar*s)
  84. {
  85.         //LCD_Busy();
  86.     uchar i;
  87.     uchar length = 0;
  88.     LCD_Write_com(add);
  89.     length = strlen(s);
  90.     LCD_RS_H;                  //r0 = h,rw = 0 写数据
  91.     LCD_RW_L;
  92.     //LCD_EN_H;
  93.     for(i=0;i<length;i++)
  94.     {
  95.             LCD_EN_H;
  96.             LCD_Write_dat(*s++);          //指针送完数据后自加一
  97.             LCD_EN_L;
  98.     }
  99. }

  100. void LCD_Init(void)
  101. {
  102.    
  103.     LCD_DATA_INIT;                  //数据IO口初始化
  104.     LCD_COM_INIT;                   //控制IO口初始化
  105.     LCD_Write_com(0x30);
  106.     __delay_cycles(1000);
  107.     LCD_Write_com(0x30);
  108.     __delay_cycles(1000);
  109.     LCD_Write_com(0x0F);
  110.     __delay_cycles(1000);
  111.     LCD_Write_com(0x01);
  112.     __delay_cycles(10000);
  113.     LCD_Write_com(0X80);
  114.     __delay_cycles(500000);
  115.     LCD_Write_dat('1');
  116.     LCD_Write_dat('0');
  117.     LCD_Write_dat('0');
  118.     //LCD_Write_str(0x88,"王智生");
  119. }
复制代码


  1. #include <msp430f6638.h>
  2. #include <string.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;
  5. typedef unsigned long ulong;


  6. #include "LCD_File.h"
  7. #include "Clock_Init.h"


  8. main()
  9. {
  10.         WDTCTL = WDTPW + WDTHOLD;
  11.     //Clock_Init();
  12.     LCD_Init();
  13.     while(1);

  14. }
复制代码


此帖出自单片机论坛

最新回复

楼主问题解决了吗,我也遇到了一模一样的问题,若解决了可否指点一下~谢谢  详情 回复 发表于 2014-7-31 16:57
点赞 关注
 

回复
举报

1976

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
先检查一下接线是否正确,还有5V供电是不是正常
此帖出自单片机论坛

点评

接线刚刚看过了,没有问题,电源也是正常的=。=  详情 回复 发表于 2014-7-15 09:30
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
bobde163 发表于 2014-7-14 20:51
先检查一下接线是否正确,还有5V供电是不是正常

接线刚刚看过了,没有问题,电源也是正常的=。=
此帖出自单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

4
 
你看看有没有低电平啊,你用的什么液晶?
此帖出自单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

5
 
"之前写的驱动程序可以正常使用",你确定现在这个程序就是当时正常使用的吗.是的话,从硬件上找,示波器看总线的波形.
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
搞定了没有?我最近也在学习12864,BF一直高电平,注释掉后 屏幕依然一片亮光,什么都不显示 怀疑很可能线路有问题,白天试试
此帖出自单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

7
 
12864属于比较慢的器件,不同的厂家的实际通讯速率也不完全一样。反正先多加延时是比较好的一种方法。先确定总线或者模拟的时序是否正确。
如果查询一直忙你注释掉这一句显然是没有用的,如果确实是器件忙的话你是写不进去数据的。
还有一点儿注意调节液晶的对比度,最好调的比较暗,如果太亮了有可能显示出字了但是看不见。
此帖出自单片机论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(中级)

8
 
楼主问题解决了吗,我也遇到了一模一样的问题,若解决了可否指点一下~谢谢
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表