久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6514|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av天天看 | 日韩免费视频一区二区 | 国产精品99免费视频 | 色视频网站免费 | 91视频日本| 99re视频在线观看 | 欧美一区二区二区 | 久久久久久亚洲精品 | 在线国产一区二区 | 欧美综合视频 | 亚洲欧美在线一区 | 国产精品国产精品国产专区不卡 | 99久久精品免费视频 | 亚洲高清电影 | 黄网免费| 亚洲视频国产 | 一区二区三区在线免费观看 | 日韩中文字幕网 | 国产精品精品久久久 | 特a毛片| 欧美激情精品久久久久久变态 | av免费入口 | 国产精品日韩 | 国产精品国产馆在线真实露脸 | 久草免费在线视频 | 伊人超碰 | 欧美日韩国产精品一区二区 | 99久久精品免费 | 成人免费视频网 | 拍真实国产伦偷精品 | 99国产精品久久久 | 精品欧美激情在线观看 | 国产美女一区二区 | 夜夜精品浪潮av一区二区三区 | 欧美天堂 | 国产精品欧美一区二区三区不卡 | 国产一区二区精品自拍 | 亚洲不卡一 | 黄色在线免费播放 | 久久久久久久一级 | 中国一级特黄视频 |