【英雄帖】【急!!】基于msp430g2553+qc12864b串行显示问题

junggle   2013-9-5 11:20 楼主
  1. #include
  2. #include"LCD12864P.h"

  3. void main()
  4. {
  5.         WDTCTL = WDTPW + WDTHOLD;
  6.         Ini_Lcd();
  7.            lcd_pos(1,0);
  8.            Disp_HZ("液晶12864",5);
  9.            lcd_pos(3,4);
  10.            Disp_HZ("欢迎使用",4);
  11.            lcd_pos(2,3);
  12.            Disp_SZ(0);
  13.            Disp_SZ(3);
  14.     while(1);
  15. }

以上是我的代码,3条控制线连接也没问题,求大神指点,

回复评论 (4)

英雄,你的问题是显示不了?
《MCU工程师炼成记》作者之一
点赞  2013-9-5 11:28

回复 楼主junggle 的帖子

  1. //LCD12864P.c
  2. #include
  3. #define BIT(x)        (1 << (x))
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. uchar LCD_table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789

  7. void Send(uchar type,uchar transdata);

  8. #define cyCS      0    //P1.0,片选信号
  9. #define cySID     1    //P1.1,串行数据
  10. #define cyCLK     2    //P1.2,同步时钟
  11. #define cyPORT    P1OUT
  12. #define cyDDR     P1DIR

  13. void delay_1ms()
  14. {
  15.         uint i;
  16.         for(i=0;i<1140;i++);
  17. }

  18. void delay_nms(uint n)
  19. {
  20.     uint i = 0;
  21.     for(i = n;i > 0;i--)
  22.         delay_1ms();
  23. }

  24. void Ini_Lcd(void)
  25. {
  26.         cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS);   //相应的位端口设置为输出
  27.         delay_nms(600);                 //延时等待液晶完成复位
  28.         Send(0,0x30);  /*功能设置:一次送8位数据,基本指令集*/
  29.         delay_nms(10);
  30.         Send(0,0x02);  /*DDRAM地址归位*/
  31.         delay_nms(5);
  32.         Send(0,0x0c);  /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/
  33.         delay_nms(5);
  34.         Send(0,0x01);  /*清屏,将DDRAM的位址计数器调整为“00H”*/
  35.         delay_nms(500);
  36.         Send(0,0x06);  /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
  37.         delay_nms(10);
  38. }

  39. void Send(uchar type,uchar transdata)//0-写控制命令,1-写数据
  40. {
  41.         uchar firstbyte = 0xf8;
  42.         uchar temp;
  43.         uchar i,j = 3;

  44.         if(type) firstbyte |= 0x02;

  45.         cyPORT |= BIT(cyCS);
  46.         cyPORT &= ~BIT(cyCLK);
  47.         while(j > 0)
  48.         {
  49.                 if(j == 3) temp = firstbyte;
  50.                 else if(j == 2) temp = transdata&0xf0;
  51.                 else  temp = (transdata << 4) & 0xf0;

  52.                 for(i = 8;i > 0;i--)
  53.                 {
  54.                         if(temp & 0x80)        cyPORT |= BIT(cySID);
  55.                         else                        cyPORT &= ~BIT(cySID);
  56.                         cyPORT |= BIT(cyCLK);
  57.                         temp <<= 1;
  58.                         cyPORT &= ~BIT(cyCLK);
  59.                 }
  60.                 //三个字节之间一定要有足够的延时,否则易出现时序问题
  61.                 if(j == 3)        delay_nms(1);
  62.                 else               delay_nms(1);

  63.                 j--;
  64.         }

  65.         cyPORT &= ~BIT(cySID);
  66.         cyPORT &= ~BIT(cyCS);
  67. }

  68. void lcd_pos(uchar x,uchar y)//定位
  69. {
  70.          uchar pos;
  71.           switch(x)
  72.           {
  73.             case 1:pos=0x80;break;
  74.             case 2:pos=0x90;break;
  75.             case 3:pos=0x88;break;
  76.             case 4:pos=0x98;break;
  77.             default:pos=0x80;
  78.           }
  79.           pos += y;
  80.           Send(0,pos);
  81. }

  82. void Disp_HZ(const uchar * pt,uchar num)//显示汉字
  83. {
  84.     uchar i;
  85.            for(i = 0;i < (num*2);i++)
  86.            Send(1,*(pt++));
  87. }

  88. void Disp_SZ(uchar shuzi)//显示一个数字
  89. {
  90.     Send(1,LCD_table[shuzi]);
  91. }

12864p.c   大家可以参考一下
点赞  2013-9-5 11:34

回复 沙发wstt 的帖子

恩恩,屏幕上什么都没有
点赞  2013-9-5 11:35
楼主怎么判断的三线连接没问题?
点赞  2013-9-5 13:14
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复