[求助] msp430f5529 lp 如何驱动12864显示屏画出心电图

junhui510   2015-1-8 11:10 楼主
小弟,最近在用5529lp测心电,在驱动12864方面卡住咯,求各位大侠指教、、、

回复评论 (11)

2推荐 hnsdyd 

引用: luwang0225 发表于 2015-7-16 09:01
能不能把msp430f5529驱动LCD12864附一份在下面给我呢?  感谢
  1. /*
  2. * Cry12864.c
  3. *
  4. *  Created on: 2015-7-12
  5. *      Author: dell
  6. */
  7. #include "msp430f5529.h"
  8. typedef unsigned char uchar;
  9. typedef unsigned int  uint;

  10. extern const unsigned char shuzi_table[];

  11. #define LCD_DataIn    P3DIR=0x00    //数据口方向设置为输入
  12. #define LCD_DataOut   P3DIR=0xff    //数据口方向设置为输出
  13. #define LCD2MCU_Data  P3IN
  14. #define MCU2LCD_Data  P3OUT
  15. #define LCD_CMDOut    P4DIR|=0x07     //P4口的低三位设置为输出
  16. #define LCD_RS_H      P4OUT|=BIT0      //P4.0
  17. #define LCD_RS_L      P4OUT&=~BIT0     //P4.0
  18. #define LCD_RW_H      P4OUT|=BIT1      //P4.1
  19. #define LCD_RW_L      P4OUT&=~BIT1     //P4.1
  20. #define LCD_EN_H      P4OUT|=BIT2      //P4.2
  21. #define LCD_EN_L      P4OUT&=~BIT2     //P4.2

  22. /*******************************************
  23. 函数名称:Delay_1ms
  24. 功    能:延时约1ms的时间
  25. 参    数:无
  26. 返回值  :无
  27. ********************************************/
  28. void Delay_1ms(void)
  29. {
  30.         uchar i;

  31.         for(i = 150;i > 0;i--)  _NOP();
  32. }
  33. /*******************************************
  34. 函数名称:Delay_Nms
  35. 功    能:延时N个1ms的时间
  36. 参    数:n--延时长度
  37. 返回值  :无
  38. ********************************************/
  39. void Delay_Nms(uint n)
  40. {
  41.     uint i;

  42.     for(i = n;i > 0;i--)    Delay_1ms();
  43. }
  44. /*******************************************
  45. 函数名称:Write_Cmd
  46. 功    能:向液晶中写控制命令
  47. 参    数:cmd--控制命令
  48. 返回值  :无
  49. ********************************************/
  50. void Write_Cmd(uchar cmd)
  51. {
  52.     uchar lcdtemp = 0;

  53.     LCD_RS_L;
  54.     LCD_RW_H;
  55.     LCD_DataIn;
  56.     do                       //判忙
  57.     {
  58.         LCD_EN_H;
  59.                _NOP();
  60.                lcdtemp = LCD2MCU_Data;
  61.                LCD_EN_L;

  62.     }
  63.     while(lcdtemp & 0x80);

  64.     LCD_DataOut;
  65.     LCD_RW_L;
  66.     MCU2LCD_Data = cmd;
  67.     LCD_EN_H;
  68.     _NOP();
  69.     LCD_EN_L;
  70. }
  71. /*******************************************
  72. 函数名称:Write_Data
  73. 功    能:向液晶中写显示数据
  74. 参    数:dat--显示数据
  75. 返回值  :无
  76. ********************************************/
  77. void  Write_Data(uchar dat)
  78. {
  79.     uchar lcdtemp = 0;

  80.     LCD_RS_L;
  81.     LCD_RW_H;
  82.     LCD_DataIn;
  83.     do                       //判忙
  84.     {
  85.         LCD_EN_H;
  86.         _NOP();
  87.         lcdtemp = LCD2MCU_Data;
  88.         LCD_EN_L;
  89.     }
  90.     while(lcdtemp & 0x80);

  91.     LCD_DataOut;
  92.     LCD_RS_H;
  93.     LCD_RW_L;

  94.     MCU2LCD_Data = dat;
  95.     LCD_EN_H;
  96.     _NOP();
  97.     LCD_EN_L;
  98. }
  99. /*******************************************
  100. 函数名称:Ini_Lcd
  101. 功    能:初始化液晶模块
  102. 参    数:无
  103. 返回值  :无
  104. ********************************************/
  105. void Ini_Lcd(void)
  106. {
  107.     LCD_CMDOut;    //液晶控制端口设置为输出

  108.     Delay_Nms(500);
  109.     Write_Cmd(0x30);   //基本指令集
  110.     Delay_1ms();
  111.     Write_Cmd(0x02);   // 地址归位
  112.     Delay_1ms();
  113.         Write_Cmd(0x0c);   //整体显示打开,游标关闭
  114.     Delay_1ms();
  115.         Write_Cmd(0x01);   //清除显示
  116.     Delay_1ms();
  117.         Write_Cmd(0x06);   //游标右移
  118.     Delay_1ms();
  119.         Write_Cmd(0x80);   //设定显示的起始地址
  120. }
  121. /*******************************************
  122. 函数名称:Disp_HZ
  123. 功    能:控制液晶显示汉字
  124. 参    数:addr--显示位置的首地址
  125.           pt--指向显示数据的指针
  126.           num--显示字符个数
  127. 返回值  :无
  128. ********************************************/
  129. void Disp_HZ(uchar addr,const uchar * pt,uchar num)
  130. {
  131.     uchar i;

  132.     Write_Cmd(addr);
  133.       for(i = 0;i < (num*2);i++)
  134.       Write_Data(*(pt++));
  135. }

  136. void DispNChar2(uchar addr,float data)
  137. {
  138.   uchar result[10];
  139.   unsigned long data1;
  140.   unsigned int i;
  141.   data1=(unsigned long)(data*10000);
  142.   if(data1/10000)
  143.   {
  144.     result[0]=data1/10000;
  145.     result[1]=0x2e;
  146.     result[2]=data1/1000%10;
  147.     result[3]=data1/100%10;
  148.     result[4]=data1/10%10;
  149.     result[5]=data1%10;
  150.     Write_Cmd(addr);
  151.     for(i=0;i<6;i++)
  152.     {
  153.       if(result[i]==0x2e) {Write_Data(result[i]);continue;}
  154.       Write_Data(result[i]+0x30);
  155.     }
  156.   }
  157.   else
  158.   {
  159.     result[0]=0;
  160.     result[1]=0x2e;
  161.     result[2]=data1/1000;
  162.     result[3]=data1/100%10;
  163.     result[4]=data1/10%10;
  164.     result[5]=data1%10;
  165.     Write_Cmd(addr);
  166.     for(i=0;i<6;i++)
  167.     {
  168.       if(result[i]==0x2e) {Write_Data(result[i]); continue;}
  169.       Write_Data(result[i]+0x30);
  170.     }
  171.   }
  172. }

  173. void DispNChar1(unsigned char addr,unsigned int data)
  174. {
  175.   uchar result[10];
  176.   unsigned int a;
  177.   if(data/10000)
  178.   {
  179.     result[0]=data/10000;
  180.     result[1]=data/1000%10;
  181.     result[2]=data/100%10;
  182.     result[3]=data/10%10;
  183.     result[4]=data%10;
  184.     result[5]='H';
  185.     result[6]='Z';
  186.      Write_Cmd(addr);
  187.     for(a=0;a<7;a++)
  188.     {
  189.        if(a>4){Write_Data(result[a]);continue;}
  190.       Write_Data(result[a]+0x30);
  191.     }
  192.   }
  193.   else
  194.   {
  195.     result[0]=0;
  196.     result[1]=data/1000;
  197.     result[2]=data/100%10;
  198.     result[3]=data/10%10;
  199.     result[4]=data%10;
  200.     result[5]='H';
  201.     result[6]='Z';
  202.      Write_Cmd(addr);
  203.     for(a=0;a<7;a++)
  204.     {
  205.       if(a>4){Write_Data(result[a]);continue;}
  206.       Write_Data(result[a]+0x30);

  207.     }

  208.   }
  209. }





点赞  2015-7-16 10:02
先写好画点程序,然后使用Bresenham方法画线就OK了~
construction complete!
点赞  2015-1-8 13:41
暂时对这个没研究啊
点赞  2015-1-8 13:44
引用: zqjqq88 发表于 2015-1-8 13:41
先写好画点程序,然后使用Bresenham方法画线就OK了~
bresenham是啥



强者为尊,弱者,死无葬身之地
点赞  2015-1-8 13:52
【LCD12864学习】第8篇任意直线   可以看一下这个帖子有楼上提到的算法!希望对你有所帮助!
人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
点赞  2015-1-8 17:59
引用: huixianfxt 发表于 2015-1-8 17:59
【LCD12864学习】第8篇任意直线   可以看一下这个帖子有楼上提到的算法!希望对你有所帮助!


好的,谢谢

点赞  2015-1-9 10:02
能不能把msp430f5529驱动LCD12864附一份在下面给我呢?  感谢
点赞  2015-7-16 09:01
请问你用过5529lp串口来驱动12864吗?能不能给我讲下
点赞  2015-7-22 10:23
兄弟昨晚这个心率计了么》我也在做这个。能不能发我一份参考一下。2459846416@qq.com。我跟你板子一样也是用12864,谢谢了大兄弟
点赞  2016-6-5 10:36
发我一份
点赞  2016-6-5 10:39
也发我一份
点赞  2016-8-12 12:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复