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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MSP430單片機帶攝氏度/華氏度切換的超低功耗溫度計程序 帶前臺與后臺

[復制鏈接]
跳轉到指定樓層
樓主
ID:108615 發表于 2016-3-14 19:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本程序是《MSP430系列單片機系統工程設計與實踐》書里面的源碼,(包含工程文件(例3.1) )完整例程下載:http://www.zg4o1577.cn/bbs/dpj-46245-1.html


關于本程序的詳細解說大家可以點擊上圖下載電子書

  1. /*
  2.                
  3.                 帶攝氏度/華氏度切換的超低功耗溫度計程序


  4.   說明:在《溫度計_基本原理》程序中,已經實現了一個溫度測量和顯示的系統,
  5.         但因為采樣速率很快,且對基準源不加控制,耗電很大(800uA左右)。
  6.             本例中,將溫度采集速度降到1秒一次,且采樣間隙時間不僅關閉基
  7.         準源,還讓CPU進入LPM3休眠狀態,大大節省了耗電。該程序功耗僅10uA
  8.         左右,可用紐扣電池長期運行(2年)。實際上對于環境溫度1秒1次采樣仍
  9.         屬浪費,如果降到5秒一次,功耗可下降到4uA左右(CR2032電池工作5年)。
  10.             按KEY3后,CPU進入LPM4,功耗下降到0.1uA,這是一種常用的不斷電
  11.         的關機方法。
  12.             同時,該程序示例了如何例用程序庫快速的完成開發任務。

  13. //=============================操作說明方法==============================

  14.     按KEY1鍵切換到攝氏度顯示,按KEY2鍵切換到華氏度顯示,按KEY3關機,
  15.     關機后按復位鍵可以開機。

  16. //===========================溫度計算公式推導============================

  17.             430單片機內部溫度傳感器溫度系數是:1.32mV/K (1.32mv/開爾文)
  18.         開爾文溫度=攝氏溫度+273K
  19.             在內部基準電壓Vref=1200mV條件下,ADC數據格式設置為"有符號"時,
  20.         0V對應采樣值0,1/2Vref(600mV)對應ADC采樣值32767(忽略實際誤差)。
  21.             推導出傳感器輸出Vsensor = (ADC采樣值)/32768 * Vref/2
  22.             Vsensor除以溫度系數(1.32mV/K)得到開氏溫度:
  23.               DegK = ADC采樣值/65536 * 1200/1.32
  24.        化簡后 DegK = (ADC采樣值 * 909)/65536
  25.        再減去273,得到攝氏溫度:
  26.               DegC = (ADC采樣值 * 909)/65536 - 273
  27.        為了能顯示小數點后一位,計算過程中先擴大10倍,顯示時加一位小數點。得
  28.        到最終計算公式:
  29.               DegC = (ADC采樣值 * 9090)/65536 - 2730
  30.        華氏度/攝氏度的轉換公式是
  31.               DegF=DegC*(9/5)+32
  32.        同樣擴大10倍得到DegF=DegC*9/5+320

  33. //===========================溫度校準與修正============================
  34.        上述公式是在理想狀況下求得的,實際上ADC、溫度傳感器都存在誤差。(誤差
  35.   原理參《超低功耗電壓表》程序),因此需要校準。在《超低功耗電壓表》中提出的
  36.   校準方法在這里同樣適用,即輸入兩個已知溫度(例如0/100度),記錄ADC讀數,然后
  37.   根據兩點坐標寫出新的直線公式,即可校準。
  38.       但是該方法存在2個難點:第一是在業余條件下,標準溫度產生比較困難(相對
  39.   來說,電壓表程序中產生已知電壓容易得多);第二是溫度傳感器位于片內,難以置入
  40.   標準溫度中(比如冰水混合物/沸水)。
  41.       因此,這里提出一種相對簡單的近似校準方法。該溫度計大部分情況測量的是室
  42.   溫附近的范圍(按0-50度考慮),而傳感器的輸出比例系數是按絕對零度開始的,因此微
  43.   小的比例誤差乘以273都是不可忽略的。%2的比例誤差,在27度下(300K)會造成7.92mV
  44.   誤差,約6度。因為難以產生標準溫度,所以比例系數難以校準;但偏移誤差很容易通過
  45.   顯示值和普通溫度計示數之差得到。我們可以將所有的誤差都折算成偏移誤差,這樣雖
  46.   然比例誤差無法完全消除,但因為測溫范圍不大,影響也相對小得多。
  47.       在25度左右的室溫下,抄下430顯示的溫度標與準溫度計的溫度差T_OFFSET,在顯示
  48.   的時候將這個誤差扣除。按0-50度量程考慮,25度必然是準確的,按量程25度程正負25
  49.   K計算,2%比例誤差造成的溫度誤差只有正負0.5度,精度已經足夠高了。
  50.      
  51. //=========================================================================
  52.   注意事項:用手觸摸芯片表面可以觀察到顯示溫度立刻上升。但請注意430單片機
  53.             屬于靜電敏感芯片,觸摸芯片之前一定要先用手接觸一下大地(水管、
  54.             電腦機箱等)再捏住電路板的GND端子(左下角),另一只手才可觸摸芯片。

  55.   (C)西安電子科技大學 測控技術與儀器教研中心   編 寫:謝 楷 2020/02/20
  56.   
  57. */
  58. //
  59. //                   MSP430FE425
  60. //             ----------------------
  61. //            |                   XIN|-
  62. //            |                      | 32kHz
  63. //            |RST               XOUT|-
  64. //            |                      |    +----------------------+
  65. //            |A0.6+ -|        S0-S15|--->|   SoftBaugh LCD_048  |
  66. //            |A0.6-  |     COM0-COM3|--->|   7.1Digit,4-Mux LCD |
  67. //            |     | |              |    +----------------------+
  68. //            |     | |         VREF |---+
  69. //      (P1.5)|    \| |/             |   |
  70. //   KEY1---->|     \_/              |  -+- 100nF
  71. //            |    內部              |  -+-
  72. //            | 溫度傳感器           |   |
  73. //      (P1.6)|                 AVss |---+
  74. //   KEY2---->|                      |
  75. //            |                      |
  76. //            |                      |
  77. //      (P1.7)|                      |
  78. //   KEY3---->|                      |
  79. //            |                      |
  80. //*****************************************************************************
  81. #include "MSP430X42X.h"      /*430單片機寄存器頭文件*/
  82. #include "LCD_Display.h"     /*LCD顯示函數庫頭文件*/
  83. #include "BasicTimer.h"      /*基礎定時器函數庫頭文件*/
  84. #include "ADC16.h"           /*16位ADC函數庫頭文件*/

  85. #define KEY1 (P1IN&BIT5)     /*KEY1=P1.5*/
  86. #define KEY2 (P1IN&BIT6)     /*KEY1=P1.6*/
  87. #define KEY3 (P1IN&BIT7)     /*KEY1=P1.7*/

  88. char Timer1s=16;             /*1秒計時累加變量*/
  89. char DegMode=1;              /*溫度模式變量*/
  90. #define Mode_C 1             /*攝氏度 宏定義*/
  91. #define Mode_F 0             /*華氏度 宏定義*/

  92. #define T_OFFSET (0)         /*25度左右條件下,顯示溫度減去標準溫度計溫度*/
  93.                              /*作為校準偏移值。注意要乘10倍,10=1.0度*/
  94. /****************************************************************************
  95. * 名    稱:PowerOff()
  96. * 功    能:關機
  97. * 入口參數:無
  98. * 出口參數:無
  99. * 說    明: 關機后按復位鍵開機。
  100. ****************************************************************************/
  101. void PowerOff()
  102. {
  103.    LCD_Clear();
  104.    LCD_DisplayChar(BR,5);   
  105.    LCD_DisplayChar(OO,4);
  106.    LCD_DisplayChar(FF,3);  //顯示 '-OFF-'
  107.    LCD_DisplayChar(FF,2);   
  108.    LCD_DisplayChar(BR,1);  
  109.    Cpu_SleepDelay(32);     //'-OFF-' 停留2秒
  110.    LCD_OFF();              //關閉LCD
  111.    _DINT();                //禁止所有中斷(禁止喚醒CPU)
  112.    LPM4;                   //進入LPM4休眠(最省電的模式,0.1uA)
  113.                            //只有復位才能喚醒CPU,重新執行程序
  114.    _NOP(); //程序永遠不會運行到這一行
  115. }
  116. /****************************************************************************
  117. * 名    稱:main()主程序
  118. * 功    能:每1秒采集溫度一次并顯示;每1/16秒掃描一次按鍵并處理。
  119. * 入口參數:無
  120. * 出口參數:無
  121. ****************************************************************************/
  122. void main( void )
  123. { int i;
  124.   int ADC_Result=0;
  125.   int DegC;int DegF;
  126.   WDTCTL=WDTPW+WDTHOLD;  //停止看門狗
  127.   FLL_CTL0|=XCAP18PF;          //配置晶振負載電容
  128.   P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4;
  129.   P2DIR|=BIT0+BIT1+BIT2+BIT3;       //懸空的IO口要置為輸出
  130.   P1OUT =0;                         //不確定電平會造成IO耗電
  131.   P2OUT =0;   
  132.   BT_Init(16);     //BasicTimer設置為1/16秒中斷(喚醒)CPU一次
  133.   LCD_Init();      //LCD初始化
  134.   UART_Init(2400,n,8,1);
  135.   ADC16_Init(0,6,'S',1);//ADC16初始化,設置ADC0采樣溫度傳感器,有符號,增益=1
  136.   while(1)
  137.   {
  138.     Cpu_SleepWaitBT();//CPU休眠,等待被BasicTimer喚醒
  139.     //-----------以下代碼1/16秒運行一次--------------
  140.     if(KEY1==0) DegMode=Mode_C;  //如果KEY1被按下,切換成攝氏度顯示模式
  141.     if(KEY2==0) DegMode=Mode_F;  //如果KEY2被按下,切換成華氏度顯示模式
  142.     if(KEY3==0) PowerOff();      //如果KEY3被按下,關機
  143.     Timer1s++;                   //1秒累加計數
  144.     if(Timer1s>=16)              //16次累加=1秒
  145.     {
  146.        Timer1s=0;
  147.     //-----------以下代碼1秒運行一次-----------------
  148.        ADC16_VrefOn();           //打開基準源
  149.        for(i=0;i<30;i++);       //略等待,等基準穩定
  150.        ADC_Result=ADC16_Sample(0,1);//采樣ADC0,單次采樣
  151.        ADC16_VrefOff();          //關閉基準源
  152.        DegC=((long int)ADC_Result * 9090)/65536 - 2730;//計算攝氏度
  153.        DegC-=T_OFFSET;            //扣除校準偏移量
  154.        DegF=DegC*9/5+320;                              //計算華氏度
  155.        if(DegMode==Mode_C)       //如果處于攝氏度顯示模式
  156.        {
  157.          LCD_DisplayDecimal(DegC,1); //顯示攝氏度,帶1位小數
  158.          LCD_InsertChar(DT);         
  159.          LCD_InsertChar(CC);         // 尾部添加單位: 'C  
  160.        }
  161.        if(DegMode==Mode_F)       //如果處于華氏度顯示模式
  162.        {
  163.          LCD_DisplayDecimal(DegF,1);//顯示攝氏度,帶1位小數
  164.          LCD_InsertChar(DT);
  165.          LCD_InsertChar(FF);     // 尾部添加單位: 'F
  166.        }        
  167.     }
  168.   }
  169. }
復制代碼



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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区免费电影 | 啪视频在线 | 国产精品久久久久久久7电影 | 一级免费在线视频 | 国产乱码精品一区二区三区av | 国产精品久久久久久久久 | 免费看片在线播放 | 亚洲狠狠 | 91久久| 国产超碰人人爽人人做人人爱 | 亚洲品质自拍视频网站 | 国产欧美一区二区三区日本久久久 | 久久91精品国产一区二区三区 | 国产成人免费视频网站高清观看视频 | 青草青草久热精品视频在线观看 | 在线观看亚洲 | 一区二区三区在线观看免费视频 | 亚洲精品免费在线 | 欧美一区二区在线观看 | 三极网站 | 成人国产在线视频 | 久久九 | 亚洲成人三级 | 欧美视频一区 | 国产精品永久免费 | 国产精品二区三区 | 精品一区二区三区视频在线观看 | 日韩久久精品电影 | 中文字幕日韩欧美一区二区三区 | 日韩欧美国产成人一区二区 | 中文一区二区 | julia中文字幕久久一区二区 | 国产成人精品高清久久 | 91在线看网站 | 亚洲精品久久久一区二区三区 | 亚洲人在线 | 色吊丝2288sds中文字幕 | 男人的天堂在线视频 | 91视视频在线观看入口直接观看 | 欧美一级www片免费观看 | 久久久久久久久久久久久9999 |