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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3590|回復: 0
打印 上一主題 下一主題
收起左側

MSP430單片機OS洗衣機例程

[復制鏈接]
跳轉到指定樓層
樓主
ID:108615 發表于 2016-3-14 18:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
完整例程下載(包含工程文件 OS洗衣機(例3.4.4)):http://www.zg4o1577.cn/bbs/dpj-46245-1.html

關于本程序的詳細解說大家可以下載電子書點擊上圖即可
  1. /*
  2.                
  3.                   MSP430F4XX系列LCD顯示通用驅動程序


  4.   說明:該驅動程序庫包含了常用的LCD顯示功能,如顯示數字、字母等
  5.         可以作為各種程序的底層驅動使用。
  6.         要使用該庫函數,需要將本文件(LCD_Display.c)添加進工程,并在
  7.         需要調用顯示函數的文件開頭處包含"LCD_Display.h"


  8.   (C)西安電子科技大學 測控技術與儀器教研中心 編寫:謝楷 2008/02/02
  9.   
  10. */
  11. //
  12. //
  13. //                  MSP430F4XX
  14. //               +---------------+         Digital Number
  15. //               |               |         左8+ 7654321右
  16. //               |               |    +----------------------+
  17. //               |A0+      S0-S15|--->|   SoftBaugh LCD_048  |
  18. //               |A0-   COM0-COM3|--->|   7.1Digit,4-Mux LCD |
  19. //               |P2.0           |    +----------------------+
  20. //               |P2.1           |
  21. //               |VRef    R03-R33|<---LCD Voltage Ladder Rs
  22. //               |               |
  23. //               |       XIN/XOUT|<---32.768KHz Watch Crystal
  24. //               |               |
  25. //               +---------------+

  26. #include "msp430x42x.h"

  27. /*宏定義,數碼管a-g各段對應的比特,更換硬件只用改動以下8行*/
  28. #define d       0x01                            //  AAAA
  29. #define g       0x02                            // F    B
  30. #define b       0x04                            // F    B
  31. #define a       0x08                            //  GGGG
  32. #define DOTSEG  0x10                            // E    C
  33. #define e       0x20                            // E    C
  34. #define f       0x40                            //  DDDD
  35. #define c       0x80
  36. #define NEGSEG  0x02  
  37. /*用宏定義自動生成段碼表,很好的寫法,值得學習*/
  38. /*更換硬件無需重寫段碼表*/
  39. const char LCD_Tab[] = {
  40.   a + b + c + d + e + f,                        // Displays "0"
  41.   b + c,                                        // Displays "1"
  42.   a + b + d + e + g,                            // Displays "2"
  43.   a + b + c + d + g,                            // Displays "3"
  44.   b + c + f + g,                                // Displays "4"
  45.   a + c + d + f +g,                             // Displays "5"
  46.   a + c + d + e + f + g,                        // Displays "6"
  47.   a + b + c,                                    // Displays "7"
  48.   a + b + c + d + e + f + g,                    // Displays "8"
  49.   a + b + c + d + f + g,                        // Displays "9"
  50.   a + b + c + e + f + g,                        // Displays "A"
  51.   c + d + e + f + g,                            // Displays "B"  
  52.   a + d + e + f,                                // Displays "C"
  53.   b + c + d + e + g,                               // Displays "D"
  54.   a + d + e + f + g,                            // Displays "E"
  55.   a + e + f + g,                                // Displays "F"
  56.   a + c + d + e + f,                            // Displays "G"
  57.   b + c + e + f + g,                            // Displays "H"  
  58.   e + f,                                        // Displays "I"
  59.   b + c + d + e,                                    // Displays "J"
  60.   b + d + e + f + g,                            // Displays "K"
  61.   d + e + f,                                    // Displays "L"  
  62.   a + c + e + g,                                    // Displays "M"
  63.   a + b + c + e + f,                            // Displays "N"   
  64.   c + e + g,                                    // Displays "n"
  65.   c + d + e + g,                                    // Displays "o"
  66.   a + b + c + d + e + f,                        // Displays "O"
  67.   a + b + e + f + g,                            // Displays "P"
  68.   a + b + c + f + g,                            // Displays "Q"
  69.   e + g,                                        // Displays "r"
  70.   a + c + d + f +g,                             // Displays "S"
  71.   d + e + f + g,                                    // Displays "t"
  72.   a + e + f ,                                    // Displays "T"
  73.   b + c + d + e + f,                            // Displays "U"
  74.   c + d + e,                                    // Displays "v"
  75.   b + d + f + g,                                    // Displays "W"
  76.   b + c + d + f + g,                            // Displays "Y"
  77.   a + b + d + e + g,                            // Displays "Z"
  78.   g,                                            // Displays "-"
  79.   b,                                            // Displays "'"  
  80.   0                                                    // Displays " "
  81. };
  82. #undef a
  83. #undef b
  84. #undef c
  85. #undef d
  86. #undef e
  87. #undef f
  88. #undef g

  89. #define AA 10
  90. #define BB AA+1
  91. #define CC BB+1
  92. #define DD CC+1
  93. #define EE DD+1
  94. #define FF EE+1
  95. #define GG FF+1
  96. #define HH GG+1
  97. #define II HH+1
  98. #define JJ II+1
  99. #define KK JJ+1
  100. #define LL KK+1
  101. #define mm LL+1
  102. #define NN mm+1
  103. #define nn NN+1
  104. #define oo nn+1
  105. #define OO oo+1
  106. #define PP OO+1
  107. #define QQ PP+1
  108. #define rr QQ+1
  109. #define SS rr+1
  110. #define tt SS+1
  111. #define TT tt+1
  112. #define UU TT+1
  113. #define VV UU+1
  114. #define WW VV+1
  115. #define YY WW+1
  116. #define ZZ YY+1
  117. #define BR ZZ+1     /*   -  */
  118. #define DT BR+1     /*   '  */
  119. #define SP DT+1     /* 空白 */

  120. /****************************************************************************
  121. * 名    稱:LCD_Init()
  122. * 功    能:初始化LCD顯示屏。
  123. * 入口參數:無
  124. * 出口參數:無
  125. * 說    明: 在主程序LCD操作之前,需要調用該函數設置LCD參數。由于LCD刷新率發生
  126.             器復用了BasicTimer,因此調用LCD_Init()之前需要先初始化BasicTimer。
  127.             可以調用BasicTimer程序庫中的BT_Init()函數或直接對BTCTL賦值之后再
  128.             調用LCD_Init()函數。若程序中不使用BasicTimer,在調用LCD_Init()之
  129.             前需要加一句BTCTL=0;用來復位BTCTL寄存器(第一次通電,BTCTL的值是隨
  130.             機的)。
  131. ****************************************************************************/
  132. void LCD_Init()
  133. { char i;
  134.   char *pLCD = (char *)&LCDM1;                  // 取LCDM1寄存器(最低位)的地址
  135.   for (i = 0; i < 8; i++)                       // Clear LCD memory
  136.   *pLCD++ = 0;                                  // 清屏
  137.   LCDCTL  = LCDSG0_1 + LCD4MUX + LCDON;         // LCD模式:4mux LCD, segs0-15
  138.   BTCTL  |= BT_fLCD_DIV64;                      // 設置 LCD 刷新率
  139.   /*刷新率越慢功耗越低,但速度太慢LCD會閃爍*/
  140. }

  141. /****************************************************************************
  142. * 名    稱:LCD_DisplayLongDecimal()
  143. * 功    能:在LCD上顯示一個帶有小數點的長數據。
  144. * 入口參數:Number:顯示數值  (-999999~9999999)
  145.             DOT   :小數點位數(0~3)
  146. * 出口參數:無
  147. * 范    例: LCD_DisplayDecimal( 123456,2); 顯示結果: 1234.56 (2位小數)
  148.             LCD_DisplayDecimal(-123456,1); 顯示結果:-12345.6 (1位小數)
  149. * 說    明: 該函數能夠顯示滿屏7位數字,但執行時間較長,耗電大。
  150. ****************************************************************************/
  151. void LCD_DisplayLongDecimal( long int Number, char DOT)
  152. {
  153.   char Neg;
  154.   char i;unsigned char temp;
  155.   char *pLCD = (char *)&LCDM1;
  156.   char PolarLocate;
  157.   char DispBuff[8];

  158.   if(Number<0) {Number=-Number; Neg=1;}  //處理負數
  159.   else          Neg=0;
  160.   for(i=0;i<7;i++)                       //拆分數字
  161.    {
  162.      DispBuff[i]=Number%10;
  163.      Number/=10;
  164.    }
  165.   for(i=6;i>DOT;i--)                     //消隱無效"0"
  166.    {
  167.      if (DispBuff[i]==0) DispBuff[i]=SP;   
  168.      else break;
  169.    }
  170.   PolarLocate=i+1;    // 負號顯示在第一個有效數字左邊  
  171.   if(DOT>3) DOT=255;  // 無效的小數點不顯示
  172.   if(DOT<1) DOT=255;  // LCD048段碼中只有123位數字有小數點
  173.   for(i=0;i<7;i++)
  174.     {
  175.       temp=LCD_Tab[DispBuff[i]]; //查表
  176.       if (DOT==i)            temp|=DOTSEG;//顯示小數點
  177.       if ((PolarLocate==i)&&(Neg))   temp|=NEGSEG;//負號
  178.       pLCD[i]=temp; //寫入顯存
  179.     }
  180. }
  181. /****************************************************************************
  182. * 名    稱:LCD_DisplayDecimal()
  183. * 功    能:在LCD上顯示一個帶有小數點的短整型數據。
  184. * 入口參數:Number:顯示數值  (-32768~32767)
  185.             DOT   :小數點位數(0~3)
  186. * 出口參數:無
  187. * 范    例: LCD_DisplayDecimal( 12345,2); 顯示結果: 123.45 (2位小數)
  188.             LCD_DisplayDecimal(-12345,1); 顯示結果:-1234.5 (1位小數)
  189. * 說    明: 該函數顯示數值范圍小,但執行時間短,耗電小。
  190. ****************************************************************************/
  191. void LCD_DisplayDecimal( int Number, char DOT)
  192. {
  193.   char Neg;
  194.   char i;unsigned char temp;
  195.   char *pLCD = (char *)&LCDM1;
  196.   char PolarLocate;
  197.   char DispBuff[8];

  198.   if(Number<0) {Number=-Number; Neg=1;}  //處理負數
  199.   else          Neg=0;
  200.   for(i=0;i<7;i++)                       //拆分數字
  201.    {
  202.      DispBuff[i]=Number%10;
  203.      Number/=10;
  204.    }
  205.   for(i=6;i>DOT;i--)                     //消隱無效"0"
  206.    {
  207.      if (DispBuff[i]==0) DispBuff[i]=SP;   
  208.      else break;
  209.    }
  210.   PolarLocate=i+1;    // 負號顯示在第一個有效數字左邊  
  211.   if(DOT>3) DOT=255;  // 無效的小數點不顯示
  212.   if(DOT<1) DOT=255;  // LCD048段碼中只有123位數字有小數點
  213.   for(i=0;i<7;i++)
  214.     {
  215.       temp=LCD_Tab[DispBuff[i]]; //查表
  216.       if (DOT==i)            temp|=DOTSEG;//顯示小數點
  217.       if ((PolarLocate==i)&&(Neg))   temp|=NEGSEG;//負號
  218.       pLCD[i]=temp; //寫入顯存
  219.     }
  220. }

  221. /****************************************************************************
  222. * 名    稱:LCD_DisplayLongNumber()
  223. * 功    能:在LCD上顯示一個長整數。
  224. * 入口參數:Number:顯示數值  (-999999~9999999)
  225. * 出口參數:無
  226. * 范    例: LCD_DisplayNumber( 123456); 顯示結果: 123456
  227.             LCD_DisplayNumber(-123456); 顯示結果:-123456
  228. * 說    明: 該函數能夠顯示滿屏7位數字,但執行時間較長,耗電大。
  229. ****************************************************************************/
  230. void LCD_DisplayLongNumber(long int Number)
  231. {
  232.    LCD_DisplayLongDecimal(Number,0) ;//整數沒有小數點
  233. }
  234. /****************************************************************************
  235. * 名    稱:LCD_DisplayNumber()
  236. * 功    能:在LCD上顯示一個短整數。
  237. * 入口參數:Number:顯示數值  (-32768~32767)
  238. * 出口參數:無
  239. * 范    例: LCD_DisplayNumber( 12345); 顯示結果: 12345
  240.             LCD_DisplayNumber(-12345); 顯示結果:-12345
  241. ****************************************************************************/
  242. void LCD_DisplayNumber(int Number)
  243. {
  244.    LCD_DisplayDecimal(Number,0) ;//整數沒有小數點
  245. }
  246. /****************************************************************************
  247. * 名    稱:LCD_DisplayChar()
  248. * 功    能:在LCD上顯示一個字符。
  249. * 入口參數:ch      :顯示內容  可顯示字母請參考LCD_Display.h中的宏定義
  250.             Location:顯示位置  從左至右對應76543210
  251. * 出口參數:無
  252. * 說    明: 調用該函數不影響LCD其他位的顯示。但顯示數字的函數會覆蓋該函數的結
  253.             果,因此該函數要在顯示數據函數之后調用。
  254. * 范    例: LCD_DisplayChar(AA,4);
  255.             LCD_DisplayChar(PP,5);
  256.             LCD_DisplayChar(2 ,6); 顯示結果: 2PAXXXX
  257. ****************************************************************************/
  258. void LCD_DisplayChar(char ch,char Location)
  259. {
  260.    char *pLCD = (char *)&LCDM1;
  261.    pLCD[Location]=LCD_Tab[ch];
  262. }
  263. /****************************************************************************
  264. * 名    稱:LCD_InsertChar()
  265. * 功    能:在LCD最右端插入一個字符。
  266. * 入口參數:ch      :插入字符  可顯示字母請參考LCD_Display.h中的宏定義
  267. * 出口參數:無
  268. * 說    明: 調用該函數后,LCD所有已顯示字符左移一位,新的字符插入在最右端一位。
  269.             該函數可以實現滾屏動畫效果,或用于在數據后面顯示單位。
  270. * 范    例: LCD_DisplayDecimal(1234,1);
  271.             LCD_InsertChar(PP);
  272.             LCD_InsertChar(FF);顯示結果: 123.4PF
  273.             
  274. ****************************************************************************/
  275. void LCD_InsertChar(char ch)
  276. {  char i;
  277.    char *pLCD = (char *)&LCDM1;
  278.    for(i=6;i>=1;i--) pLCD[i]=pLCD[i-1];
  279.    pLCD[0]=LCD_Tab[ch];
  280. }
  281. /****************************************************************************
  282. * 名    稱:LCD_ON()
  283. * 功    能:開啟LCD顯示
  284. * 入口參數:無
  285. * 出口參數:無
  286. * 說    明: 調用該函數將開啟LCD顯示。開啟后LCD仍顯示最后一次顯示內容
  287. ****************************************************************************/
  288. void LCD_ON()
  289. {
  290.    LCDCTL  |= LCDON;
  291. }
  292. /****************************************************************************
  293. * 名    稱:LCD_ON()
  294. * 功    能:關閉LCD顯示
  295. * 入口參數:無
  296. * 出口參數:無
  297. * 說    明: 調用該函數將關閉LCD顯示,可節省3~5uA電流。該函數不清除顯示內容。
  298. ****************************************************************************/
  299. void LCD_OFF()
  300. {
  301.    LCDCTL  &=~ LCDON;
  302. }

  303. /****************************************************************************
  304. * 名    稱:LCD_Clear()
  305. * 功    能: 清除LCD顯示
  306. * 入口參數:無
  307. * 出口參數:無
  308. * 說    明: 調用該函數將LCD顯示清除,但并不關閉LCD模塊。
  309. ****************************************************************************/
  310. void LCD_Clear()
  311. { char i;
  312.   char *pLCD = (char *)&LCDM1;     // 取LCDM1寄存器(最低位)的地址
  313.   for (i = 0; i < 8; i++)          // Clear LCD memory
  314.   {
  315.     *pLCD++ = 0;                    //清屏
  316.   }
  317. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩黄色一级片 | 二区三区在线观看 | 亚洲欧美日韩一区 | 国产欧美一区二区三区日本久久久 | 在线播放一区 | 国产精品久久久久久久久动漫 | 日韩一级精品视频在线观看 | 亚洲欧美日韩激情 | 午夜网址 | 亚洲综合一区二区三区 | 日韩精品一区二区三区视频播放 | 99久久婷婷 | 免费的一级视频 | 男人天堂视频在线观看 | 天天插天天操 | 国产成人免费在线观看 | 天天操夜夜看 | 国产二区三区 | 国产成人精品午夜 | 在线观看免费高清av | 久久精品国产一区二区三区 | 久久av一区二区三区 | 91看片网站 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 欧美日韩国产在线观看 | 欧美激情在线精品一区二区三区 | 亚洲一区二区三区免费在线 | 精品少妇一区二区三区日产乱码 | 精品一区久久 | 国产在线视频一区二区董小宛性色 | 99视频精品 | 亚洲夜夜爽| 国产福利视频导航 | 国产精品精品久久久 | 欧美专区在线 | 91av视频在线观看 | 欧美一级二级视频 | 在线视频亚洲 | 中文字幕视频在线 | 色妞av| 亚洲精彩免费视频 |