找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5766|回复: 5
打印 上一主题 下一主题
收起左侧

基于MSP430F169的LCD12864显示一个动态波形

[复制链接]
跳转到指定楼层
楼主
ID:165873 发表于 2017-3-1 16:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
波形是自己给定的数值,并不是采集的值

完整代码下载:
12864基于msp430 动态.zip (27.71 KB, 下载次数: 76)


部分代码预览:
  1. #include<msp430f169.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. //延时函数,IAR自带,经常使用到
  5. #define CPU_F ((double)8000000)   //外部高频晶振8MHZ
  6. //#define CPU_F ((double)32768)   //外部低频晶振32.768KHZ
  7. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  8. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. #define ulong unsigned long
  12. #define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入
  13. #define LCD_DataOut P4DIR=0xff //数据口方向设置为输出
  14. #define LCD2MCU_Data P4IN
  15. #define MCU2LCD_Data P4OUT
  16. #define RS_CLR    P5OUT &= ~BIT5           //RS置低
  17. #define RS_SET    P5OUT |=  BIT5           //RS置高
  18. #define RW_CLR    P5OUT &= ~BIT6           //RW置低
  19. #define RW_SET    P5OUT |=  BIT6           //RW置高
  20. #define EN_CLR    P5OUT &= ~BIT7           //E置低
  21. #define EN_SET    P5OUT |=  BIT7           //E置高
  22. #define PSB_CLR          P5OUT &= ~BIT0            //PSB置低,串口方式
  23. #define PSB_SET          P5OUT |=  BIT0            //PSB置高,并口方式
  24. #define RST_CLR          P5OUT &= ~BIT1            //RST置低
  25. #define RST_SET          P5OUT |= BIT1             //RST置高


  26. uchar DIS1[] = {"Vpp:"};
  27. uchar DIS2[] = {"F:"};
  28. uchar DIS3[] = {"5V"};
  29. uchar DIS4[] = {"12Hz"};
  30. uchar D1[]={"0123456789"};

  31. //正弦波代码
  32. uchar tab[]={
  33. 126,100,80,70,65,62,65,70,80,100,126,152,172,182,187,190,187,182,172,152
  34. };

  35. //背景图片
  36. uchar Photo1[]={
  37. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  38. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  39. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  40. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  41. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  42. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  44. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
  45. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  46. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  49. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  50. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  51. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  52. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  54. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  55. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  56. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  57. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  58. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  59. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  60. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
  61. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  62. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  63. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  64. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  65. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  66. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  67. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  68. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
  69. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  70. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  71. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  72. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  73. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  74. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  75. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  76. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
  77. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  78. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  79. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  80. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  81. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  82. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  83. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  84. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  87. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  88. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  89. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  90. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  91. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  92. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
  93. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  94. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  95. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  96. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  97. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  98. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  99. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  100. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00
  101. };
  102. /******************************************************************************
  103. 函数名称:                              Clock_Init
  104. 功 能:                                 外部时钟初始化
  105. 参 数:                                 无
  106. 返回值 :                               无
  107. ******************************************************************************/
  108. void Clock_Init()
  109. {
  110.   uchar i;
  111.   BCSCTL1&=~XT2OFF;                 //打开XT2振荡器
  112.   BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  113.   do{
  114.     IFG1&=~OFIFG;                   //清楚振荡器错误标志
  115.     for(i=0;i<100;i++)
  116.        _NOP();
  117.   }
  118.   while((IFG1&OFIFG)!=0);           //如果标志位1,则继续循环等待
  119.   IFG1&=~OFIFG;
  120. }
  121. /******************************************************************************
  122. 函数名称:                              Port_Init
  123. 功 能:                                 端口初始化
  124. 参 数:                                 无
  125. 返回值 :                               无
  126. ******************************************************************************/
  127. void Port_Init()
  128. {
  129.   P4SEL = 0x00;
  130.   P5SEL = 0x00;
  131.   P5DIR|= BIT0 + BIT1 + BIT5 + BIT6 + BIT7;
  132. }
  133. /******************************************************************************
  134. 函数名称:                              Delay_1ms
  135. 功 能:                                 延时约1ms的时间
  136. 参 数:                                 无
  137. 返回值 :                               无
  138. *******************************************************************************/
  139. void Delay_1ms(void)
  140. {
  141.   uchar i;
  142.   for(i = 150;i > 0;i--) _NOP();
  143. }
  144. /*******************************************************************************
  145. 函数名称:                                Delay_Nms
  146. 功 能:                                   延时N个1ms的时间
  147. 参 数:                                   n--延时长度
  148. 返回值 :                                 无
  149. *******************************************************************************/
  150. void Delay_Nms(uint n)
  151. {
  152.   uint i;
  153.   for(i = n;i > 0;i--) Delay_1ms();
  154. }
  155. /*******************************************************************************
  156. 函数名称:                                 Write_Cmd
  157. 功 能:                                    向液晶中写控制命令
  158. 参 数:                                    cmd--控制命令
  159. 返回值 :                                  无
  160. *******************************************************************************/
  161. void Write_Cmd(uchar cmd)
  162. {
  163.   uchar lcdtemp = 0;
  164.   RS_CLR;
  165.   RW_SET;
  166.   LCD_DataIn;
  167.   do //判忙
  168.   {
  169.     EN_SET;
  170.     _NOP();
  171.     lcdtemp = LCD2MCU_Data;
  172.     EN_CLR;
  173.   }while(lcdtemp & 0x80);
  174.   
  175.   LCD_DataOut;
  176.   RW_CLR;
  177.   MCU2LCD_Data = cmd;
  178.   EN_SET;
  179.   _NOP();
  180.   EN_CLR;
  181. }

  182. /******************************************************************************
  183. 函数名称:                                   Write_Data
  184. 功 能:                                      向液晶中写显示数据
  185. 参 数:                                      dat--显示数据
  186. 返回值 :                                    无
  187. *******************************************************************************/
  188. void Write_Data(uchar dat)
  189. {
  190.   uchar lcdtemp = 0;
  191.   RS_CLR;
  192.   RW_SET;
  193.   LCD_DataIn;
  194.   do //判忙
  195.   {
  196.     EN_SET;
  197.     _NOP();
  198.     lcdtemp = LCD2MCU_Data;
  199.     EN_CLR;
  200.   }while(lcdtemp & 0x80);
  201.   
  202.   LCD_DataOut;
  203.   RS_SET;
  204.   RW_CLR;
  205.   MCU2LCD_Data = dat;
  206.   EN_SET;
  207.   _NOP();
  208.   EN_CLR;
  209. }

  210. /*******************************************************************************
  211. 函数名称:                              Read_Data
  212. 功 能:                                 读数据
  213. 参 数:                                 无
  214. 返回值 :                               readvalue
  215. ********************************************/
  216. uchar Read_Data()
  217. {
  218.   uint readvalue;
  219.   LCD_DataOut;
  220.   MCU2LCD_Data |=0xff;
  221.   RS_SET;
  222.   RW_SET;
  223.   LCD_DataIn;
  224.   EN_CLR;
  225.   EN_SET;
  226.   readvalue=LCD2MCU_Data;
  227.   Delay_1ms();
  228.   EN_CLR;
  229.   return readvalue;
  230. }
  231. /******************************************************************************
  232. 函数名称:                               Lcd_Pos
  233. 功 能:                                  定位函数
  234. 参 数:                                  X(行),Y(列)
  235. 返回值 :无
  236. ******************************************************************************/
  237. void Lcd_Pos(uchar X,uchar Y)
  238. {                          
  239.    uchar  pos;
  240.    if (X==1)
  241.      {X=0x80;}
  242.    else if (X==2)
  243.      {X=0x90;}
  244.    else if (X==3)
  245.      {X=0x88;}
  246.    else if (X==4)
  247.      {X=0x98;}
  248.    pos = X+Y ;

  249.    Write_Cmd(pos);     //显示地址
  250. }
  251. /******************************************************************************
  252. 函数名称:                               Clear_GDRAM
  253. 功 能:                                  所有GDRAM 写0x00
  254. 参 数:                                  无
  255. 返回值 :                                无
  256. ******************************************************************************/
  257. void Clear_RDRAM() //使用图形模式时,应对所有GDRAM 写0x00 才算清屏,清屏命令(write_cmd(0x01))是对使用自带字库显示时用的
  258. {
  259.   uchar i, j, k ;
  260.   Write_Cmd(0x34); //打开扩展指令集,绘图显示关
  261.   Write_Cmd(0x36); //打开扩展指令集,绘图显示开
  262.   for( i = 0 ; i < 2 ; i++ ) //分上下两屏写
  263.   {
  264.     for( j = 0 ; j < 32 ; j++ )
  265.     {
  266.       Write_Cmd( 0x80 + j ) ; //写Y 坐标
  267.       Delay_1ms();
  268.       if( i == 0 ) //写X 坐标
  269.       {
  270.         Write_Cmd( 0x80 ) ;
  271.         Delay_1ms();
  272.       }
  273.       else //写下半屏
  274.       {
  275.         Write_Cmd( 0x88 ) ;
  276.         Delay_1ms();
  277.       }
  278.       for( k = 0 ; k < 16 ; k++ ) //写一整行数据
  279.       {
  280.         Write_Data(0x00) ;
  281.         Delay_1ms();
  282.       }
  283.     }
  284.   }
  285.   Write_Cmd( 0x30 ) ; //关闭扩展指令集
  286. }
  287. /******************************************************************************
  288. 函数名称:                               Picture_Display
  289. 功 能:                                  显示图片
  290. 参 数:                                  bmp
  291. 返回值 :                                无
  292. ******************************************************************************/
  293. void Picture_Display(uchar *bmp)       
  294. {
  295.   uchar i,j;

  296.   Write_Cmd(0x34);        //写数据时,关闭图形显示

  297.   for(i=0;i<32;i++)
  298.   {
  299.     Write_Cmd(0x80+i);    //先写入水平坐标值
  300.     Write_Cmd(0x80);      //写入垂直坐标值
  301.     for(j=0;j<16;j++)   //再写入两个8位元的数据   
  302.     Write_Data(*bmp++);     
  303.     delay_ms(1);
  304.   }

  305.   for(i=0;i<32;i++)
  306.   {
  307.     Write_Cmd(0x80+i);
  308.     Write_Cmd(0x88);
  309.     for(j=0;j<16;j++)         
  310.         Write_Data(*bmp++);   
  311.         delay_ms(1);
  312.   }
  313.   Write_Cmd(0x36);       //写完数据,开图形显示
  314. }
  315. /******************************************************************************
  316. 函数名称:                               Clear_Screen
  317. 功 能:                                  清屏
  318. 参 数:                                  无
  319. 返回值 :                                无
  320. ******************************************************************************/
  321. void  Clear_Screen()
  322. {
  323.    Write_Cmd(0x34);      //扩充指令操作
  324.    Delay_Nms(3);   
  325.    Write_Cmd(0x30);      //基本指令操作
  326.    Delay_Nms(3);
  327.    Write_Cmd(0x01);      //清屏
  328.    Delay_Nms(3);     
  329. }
  330. /*******************************************************/
  331. uchar Y_wz(uchar a)
  332. {
  333.         uchar i;
  334.         for(i=0;i<64;i++)
  335.         {       
  336.                 if((a>(i*4))&&(a<=((i+1)*4)))break;
  337.         }
  338.         return i;
  339. }
  340. /*******************************************************************************
  341. 函数名:                 Draw_Point
  342. 函数说明:               画点
  343. 传入参数:               打点位置(x0,y0);color=1,点亮;color=0,擦除
  344.                          x0为列作标,y0为行坐标
  345. 传出参数:               无
  346. 返回值:                 无
  347. *******************************************************************************/

  348. void Draw_Point(unsigned char x,unsigned char y,unsigned char color)

  349. {       
  350.         unsigned char row,collum,cbite;
  351.         unsigned char tempH,tempL;
  352.         Write_Cmd(0x34);         //设置扩充指令集,关闭绘图
  353.         Write_Cmd(0x36);         //扩充指令集,打开绘图
  354.         collum=x>>4;         //列   左移四位
  355.         cbite=x&0x0f;
  356.         if(y<32)
  357.           row=y;
  358.         else
  359.         {
  360.           row=y-32;
  361.           collum+=8;
  362.         }
  363.         Write_Cmd(0x80+row);       
  364.         Write_Cmd(0x80+collum);
  365.         Read_Data();
  366.         tempH=Read_Data();
  367.         tempL=Read_Data();       
  368.         Write_Cmd(0x80+row);
  369.         Write_Cmd(0x80+collum);
  370.         if (color)
  371.         {
  372.           if(cbite<8)
  373.           {
  374.             tempH|=(1<<(7-cbite));
  375.             //tempL=(1<<(7-cbite));
  376.            }
  377.           else
  378.           {
  379.             //tempH=(1<<(15-cbite));       
  380.             tempL|=(1<<(15-cbite));
  381.           }
  382.         }
  383.         else
  384.         {
  385.           if(cbite<8)
  386.           {
  387.             tempH&=~(1<<(7-cbite));
  388.             //tempL=(1<<(7-cbite));
  389.           }
  390.           else
  391.           {
  392.             //tempH=(1<<(15-cbite));
  393.             tempL&=~(1<<(15-cbite));
  394.           }
  395.         }
  396.         Write_Data(tempH);
  397.         Write_Data(tempL);
  398.         Write_Cmd(0x30);
  399. }
  400. /*******************************************************************************
  401. 函数名:                 Write_LineX
  402. 函数说明:               画水平线
  403. 传入参数:               x0为列作标,y0为行坐标
  404. 传出参数:               无
  405. 返回值:                 无
  406. *******************************************************************************/
  407. void Write_LineX( unsigned char X0, unsigned char X1, unsigned char Y)
  408. {    unsigned char Temp ;
  409.     if( X0 > X1 )
  410.     {
  411.         Temp = X1 ;
  412.         X1  = X0 ;
  413.         X0  = Temp ;
  414.     }
  415.     for( ; X0 <= X1 ; X0++ )
  416.     Draw_Point( X0, Y,1 ) ;   
  417. }
  418. /*******************************************************************************
  419. 函数名:                 Write_LineY
  420. 函数说明:               画水平线
  421. 传入参数:               x0为列作标,y0为行坐标
  422. 传出参数:               无
  423. 返回值:                 无
  424. *******************************************************************************/
  425. void Write_LineY( unsigned char X, unsigned char Y0, unsigned char Y1 )
  426. {
  427.     unsigned char Temp ;
  428.     if( Y0 > Y1 )
  429.     {
  430.         Temp = Y1 ;
  431.         Y1  = Y0 ;
  432.         Y0  = Temp ;
  433.     }
  434.     for(; Y0 <= Y1 ; Y0++)
  435.     Draw_Point( X, Y0,1);
  436. }
  437. /*******************************************************************************
  438. 函数名:                 Write_LineY
  439. 函数说明:               画水平线
  440. 传入参数:               x0为列作标,y0为行坐标
  441. 传出参数:               无
  442. 返回值:                 无
  443. *******************************************************************************/
  444. void Write_Line( unsigned char StartX, unsigned char StartY, unsigned char EndX, unsigned char EndY)
  445. {
  446.     signed int t, distance;      /*根据屏幕大小改变变量类型(如改为int型)*/
  447.     signed int x = 0 , y = 0 , delta_x, delta_y ;
  448.     signed char incx, incy ;

  449.     delta_x = EndX - StartX ;
  450.     delta_y = EndY - StartY ;

  451.     if( delta_x > 0 )
  452.     {
  453.         incx = 1;
  454.     }
  455.     else if( delta_x == 0 )
  456.     {
  457.         Write_LineY( StartX, StartY, EndY ) ;
  458.         return ;
  459.     }
  460.     else
  461.     {
  462.         incx = -1 ;
  463.     }
  464.     if( delta_y > 0 )
  465.     {
  466.         incy = 1 ;
  467.     }
  468.     else if(delta_y == 0 )
  469.     {
  470.         Write_LineX( StartX, EndX, StartY ) ;   
  471.         return ;
  472.     }
  473.     else
  474.     {
  475.         incy = -1 ;
  476.     }

  477.     delta_x = abs( delta_x );   
  478.     delta_y = abs( delta_y );
  479.     if( delta_x > delta_y )
  480.     {
  481.         distance = delta_x ;
  482.     }
  483.     else
  484.     {
  485.         distance = delta_y ;
  486.     }
  487.     Draw_Point( StartX, StartY ,1) ;   
  488.     /* Draw Line*/
  489.     for( t = 0 ; t <= distance+1  ; t++ )
  490.     {
  491.         Draw_Point( StartX, StartY,1 ) ;
  492.         x += delta_x ;
  493.         y += delta_y ;
  494.         if( x > distance )
  495.         {
  496.             x -= distance ;
  497.             StartX += incx ;
  498.         }
  499.         if( y > distance )
  500.         {
  501.             y -= distance ;
  502.             StartY += incy ;
  503.         }
  504.     }
  505. }
  506. /*******************************************************************************
  507. 函数名:                 Lcd_Init
  508. 函数说明:               LCD初始化
  509. 传入参数:               无
  510. 传出参数:               无
  511. 返回值:                 无
  512. *******************************************************************************/
  513. void Lcd_Init(void)
  514. {
  515.   Delay_Nms(500);
  516.   Write_Cmd(0x30); //基本指令集
  517.   Delay_1ms();
  518.   Write_Cmd(0x02); // 地址归位
  519.   Delay_1ms();
  520.   Write_Cmd(0x0c); //整体显示打开,游标关闭
  521.   Delay_1ms();
  522.   Write_Cmd(0x01); //清除显示
  523.   Delay_1ms();
  524.   Write_Cmd(0x06); //游标右移
  525.   Delay_1ms();
  526.   Write_Cmd(0x80); //设定显示的起始地址
  527. }





  528. /*******************************************************************************
  529. 函数名:                 main
  530. 函数说明:               主函数
  531. 传入参数:               无
  532. 传出参数:               无
  533. 返回值:                 无
  534. *******************************************************************************/
  535. void main( void )
  536. {
  537.   Port_Init();
  538.   WDTCTL = WDTPW + WDTHOLD; //关狗
  539.    uchar i,*a,x,y,z=0;
  540.    uint nn=0,mm=9;
  541.    y=0x00;
  542.    Delay_Nms(100);                 //上电,等待稳定
  543.   Lcd_Init(); //初始化液晶
  544.   a=Photo1;
  545.   while(1)
  546.   {
  547.    
  548.   Lcd_Pos(1,6);             //设置显示位置为第一行
  549.      for(i=0;i<4;i++)
  550.      {
  551.        Write_Data(DIS1[i]);
  552.      }

  553.      Lcd_Pos(3,6);             //设置显示位置为第3行
  554.      for(i=0;i<2;i++)
  555.      {
  556.        Write_Data(DIS2[i]);
  557.      }
  558.      
  559.          
  560.          
  561.          Lcd_Pos(2,6);             //设置显示位置为第2行
  562.          if(nn==10)nn=0;
  563.      for(i=0;i<4;i++)
  564.      {
  565.       
  566.            DIS3[0]=D1[nn];
  567.            Write_Data(DIS3[i]);

  568.      }
  569.      nn++;
  570.          
  571.          Lcd_Pos(4,6);             //设置显示位置为第四行
  572.          if(mm==0)mm=9;
  573.      for(i=0;i<4;i++)
  574.      {
  575.       
  576. ………余下代码请下载附件………
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:189638 发表于 2017-4-14 20:02 | 只看该作者
//************************************************************************ void xian_shi(void) {     int i,j,k,l;     Temp=(caltmp[0]*3300)/4095;//计算十进制的电压值     ptr[0]=Temp/1000;                 ptr[2]=Temp%1000/100;     ptr[3]=Temp%100/10;     ptr[4]=Temp%10;     ptr[5]=11;     ptr[1]=10;     LCD_write_com(0x80);     DisplayCgrom(0x80,"一通道电压");     for(i=0;i<6;i++)     {       delay_ms(10);       LCD_write_data(shuzi[ptr]);      }         Temp=(caltmp[1]*3300)/4095;     ptr[0]=Temp/1000;                 ptr[2]=Temp%1000/100;     ptr[3]=Temp%100/10;     ptr[4]=Temp%10;     ptr[5]=11;     ptr[1]=10;     LCD_write_com(0x90);     DisplayCgrom(0x90,"二通道电压");     for(j=0;j<6;j++)     {       delay_ms(10);       LCD_write_data(shuzi[ptr[j]]);      }         Temp=(caltmp[2]*3300)/4095;     ptr[0]=Temp/1000;                 ptr[2]=Temp%1000/100;     ptr[3]=Temp%100/10;     ptr[4]=Temp%10;     ptr[5]=11;     ptr[1]=10;     LCD_write_com(0x88);     DisplayCgrom(0x88,"三通道电压");     for(k=0;k<6;k++)     {       delay_ms(10);       LCD_write_data(shuzi[ptr[k]]);      }     Temp=(caltmp[3]*3300)/4095;     ptr[0]=Temp/1000;                 ptr[2]=Temp%1000/100;     ptr[3]=Temp%100/10;     ptr[4]=Temp%10;     ptr[5]=11;     ptr[1]=10;     LCD_write_com(0x98);     DisplayCgrom(0x98,"四通道电压");     for(l=0;l<6;l++)     {       delay_ms(10);       LCD_write_data(shuzi[ptr[l]]);      }  }
回复

使用道具 举报

板凳
ID:189638 发表于 2017-4-14 20:03 | 只看该作者
厉害了
回复

使用道具 举报

地板
ID:217858 发表于 2017-7-8 12:28 | 只看该作者
     不错!!!
回复

使用道具 举报

5#
ID:162634 发表于 2017-7-31 20:55 | 只看该作者
楼主可否贴个效果图看看?

回复

使用道具 举报

6#
ID:162634 发表于 2017-7-31 21:04 | 只看该作者
楼主可否贴个效果图看看?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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