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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

G2口袋板MSP430G2553 slope adc源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:303111 發表于 2018-4-7 13:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用G2口袋板,改變電位器阻值,使用adc測量阻值,再使用LCD和led顯示

單片機源程序如下:
  1. /*警告:由于G2 LaunchPad上的LED2使用了P1.6(I2C引腳),所以所有涉及到I2C的實驗都必須把P1.6跳線拔除,包含本例程!
  2. * main.c
  3. */
  4. #include"MSP430G2553.h"
  5. #include "Slope.h"
  6. #include "TCA6416A.h"
  7. #include "HT1621.h"
  8. #include "LCD_128.h"

  9. unsigned char Key=0;                //輪盤電位器的電阻等效按鍵值
  10. //-----待測“傳感器電阻”的分檔值,實際接入了5k定值電阻+10k輪盤電位器-----
  11. const unsigned char R_Class[8]={55,67,82,97,113,128,138,144};                //單位為百歐

  12. void WDT_OnTime();
  13. void Slope_R_Dect();                        //測得待測電阻后的事件處理函數
  14. void TCA6416A_LED(unsigned char num);                //LED燈柱顯示函數
  15. void Display_SLOPE();
  16. void Display_RSENS(unsigned char Rsens);

  17. void main(void) {
  18.         WDTCTL=WDTPW+WDTHOLD;
  19.     BCSCTL1 = CALBC1_16MHZ;      /* Set DCO to16MHz */
  20.     DCOCTL = CALDCO_16MHZ;
  21.         __delay_cycles(100000);                        //等待電壓穩定
  22.         TCA6416A_Init();
  23.         Slope_Measure_Init();
  24.         HT1621_init();
  25.         LCD_Clear();
  26.         Display_SLOPE();
  27.         HT1621_Reflash(LCD_Buffer);
  28.         //-----設定WDT為16ms定時中斷-----
  29.         WDTCTL=WDT_ADLY_16;
  30.         //-----WDT中斷使能-----
  31.     IE1|=WDTIE;
  32.          _enable_interrupts();

  33.         while(1);
  34. }

  35. /******************************************************************************************************
  36. * 名       稱:WDT_ISR(void)
  37. * 功       能:WDT定時中斷子函數
  38. * 入口參數:無
  39. * 出口參數:無
  40. * 說       明:直接調用事件處理函數即可
  41. * 范       例:無
  42. ******************************************************************************************************/
  43. #pragma vector=WDT_VECTOR
  44. __interrupt void WDT_ISR(void)
  45. {
  46.          IE1&=~WDTIE;
  47.         WDT_OnTime();
  48.          IE1|=WDTIE;
  49. }
  50. /******************************************************************************************************
  51. * 名       稱:WDT_OnTime()
  52. * 功       能:WDT定時中斷的事件處理函數
  53. * 入口參數:無
  54. * 出口參數:無
  55. * 說       明:主要工作都在事件處理函數中體現
  56. * 范       例:無
  57. ******************************************************************************************************/
  58. void WDT_OnTime()
  59. {
  60.         static unsigned char Charge_Ready=0;                        //充滿電標志位
  61.         static unsigned char REF_Mreasure_Ready=0;        //等于8表明參考電阻已測完
  62.         static unsigned long R_REF_Sum=0;                        //暫存參考電阻的累加值
  63.                 if(Charge_Ready==0)                //未充滿電
  64.                 {
  65.                         Slope_Port_Charge();        //充電
  66.                         Slope_R_Dect();                        //執行顯示LED的任務
  67.                         Charge_Ready=1;                //充滿電標志
  68.                 }
  69.                 else
  70.                 {
  71.                         //-----測量8次參考電阻值-----
  72.                         if(REF_Mreasure_Ready<8)                                        // 判斷是否繼續測量參考電阻值
  73.                         {
  74.                                 Slope_Measure_REF();                                                //測參考電阻值
  75.                                 R_REF_Sum=R_REF_Sum+R_REF;                //累加電阻值
  76.                                 if(REF_Mreasure_Ready==7)        R_REF=R_REF_Sum>>3;        //測量完畢求出參考電阻的平均值
  77.                                 REF_Mreasure_Ready++;                                        //測量次數累加
  78.                         }
  79.                         //-----得到參考電阻值后,開始不停的測量傳感器電阻值-----
  80.                         else
  81.                                 Slope_Measure_SENS();                                        //測完參考電阻才測傳感器電阻
  82.                                 Charge_Ready=0;                                                        //測完一次,又該充電了
  83.                 }
  84. }

  85. /******************************************************************************************************
  86. * 名       稱:Slope_R_Dect()
  87. * 功       能:對傳感器電阻判斷檔位,調用LED顯示程序
  88. * 入口參數:無
  89. * 出口參數:無
  90. * 說       明:主要工作都在事件處理函數中體現
  91. * 范       例:無
  92. ******************************************************************************************************/
  93. void Slope_R_Dect()
  94. {
  95.         static unsigned int Rsens=0;
  96.         unsigned char Key_Last=0;                //用于判斷是否數據有更新
  97.         Key_Last=Key;
  98.         //-----通過10k參考電阻,計算電阻絕對值,單位百歐-----
  99.         Rsens=(((unsigned long int)100)*(unsigned long int)R_SENS)/R_REF;
  100.         //-----傳感器電阻分檔判斷,5k至15k之間,分8檔-----
  101.         if(Rsens<=R_Class[0])                         Key=0;
  102.         else if (Rsens<=R_Class[1])         Key=1;
  103.         else if (Rsens<=R_Class[2])        Key=2;
  104.         else if (Rsens<=R_Class[3])         Key=3;
  105.         else if (Rsens<=R_Class[4])         Key=4;
  106.         else if (Rsens<=R_Class[5])         Key=5;
  107.         else if (Rsens<=R_Class[6])         Key=6;
  108.         else         if(Rsens<=R_Class[7])         Key=7;
  109.         else                                                                                        Key=8;
  110.         //-----調用一系列顯示任務-----
  111.         Display_RSENS(Rsens);                //顯示實際電阻值
  112.         if(!(Key==Key_Last))                        //顯示電阻分檔值
  113.         {
  114.                 LCD_DisplayDigit(LCD_DIGIT_CLEAR ,6);
  115.                 LCD_DisplayDigit(Key,6);
  116.                 HT1621_Reflash_Digit(6);
  117.         }
  118.         TCA6416A_LED(Key);                         //LED燈柱顯示
  119. }
  120. /******************************************************************************************************
  121. * 名       稱:TCA6416A_LED()
  122. * 功       能:根據傳感器電阻值,實現LED燈柱效果
  123. * 入口參數:無
  124. * 出口參數:無
  125. * 說       明:需要調用I2C和TCA6416控制LED
  126. * 范       例:無
  127. ******************************************************************************************************/
  128. void TCA6416A_LED(unsigned char num)
  129. {
  130.         unsigned char i = 0;
  131.         for(i=0;i<8;i++)
  132.         {
  133.                 if(i<num)                                        // 判斷當前需要點亮幾盞燈
  134.                         PinOUT(i,0);                        //根據LED接法,IO低電平為點亮LED
  135.                 else
  136.                         PinOUT(i,1);                        //根據LED接法,IO高電平為熄滅LED
  137.         }
  138. }
  139. /******************************************************************************************************
  140. * 名       稱:Display_SLOPE()
  141. * 功       能:在LED上顯示固定不變的內容
  142. * 入口參數:無
  143. * 出口參數:無
  144. * 說       明:包括顯示SLOPE,2個小數點,logo,kΩ單位。
  145. * 范       例:無
  146. ******************************************************************************************************/
  147. void Display_SLOPE()
  148. {
  149.         //-----顯示S-----
  150.         LCD_DisplayDigit(5,1);
  151.         //-----顯示L-----
  152.         LCD_DisplayDigit(0,2);
  153.         LCD_ClearSeg(_LCD_2A);
  154.         LCD_ClearSeg(_LCD_2B);
  155.         LCD_ClearSeg(_LCD_2C);
  156.         //-----顯示O-----
  157.         LCD_DisplayDigit(0,3);
  158.         //-----顯示P-----
  159.         LCD_DisplayDigit(8,4);
  160.         LCD_ClearSeg(_LCD_4C);
  161.         LCD_ClearSeg(_LCD_4D);
  162.         //-----顯示E-----
  163.         LCD_DisplayDigit(8,5);
  164.         LCD_ClearSeg(_LCD_5B);
  165.         LCD_ClearSeg(_LCD_5C);
  166.         //-----顯示小數點-----
  167.         LCD_DisplaySeg(_LCD_DOT4);
  168.         LCD_DisplaySeg(_LCD_DOT6);
  169.         //-----顯示logo-----
  170.         LCD_DisplaySeg(_LCD_TI_logo);
  171.         LCD_DisplaySeg(_LCD_QDU_logo);
  172.         //-----顯示kΩ-----
  173.         LCD_DisplaySeg(_LCD_k_OHOM);
  174.         LCD_DisplaySeg(_LCD_OHOM);
  175. }
  176. /******************************************************************************************************
  177. * 名       稱:Display_RSENS()
  178. * 功       能:在LED的小8字段上顯示實測傳感器電阻值
  179. * 入口參數:無
  180. * 出口參數:無
  181. * 說       明:哪位內容有改變才更新該位的顯存。
  182. * 范       例:無
  183. ******************************************************************************************************/
  184. void Display_RSENS(unsigned char Rsens)
  185. {
  186.         unsigned char i=0;
  187.         static unsigned char Digit[3]={0};
  188.         unsigned char Digit_Past[3]={0};                //用于對比數值是否有改變
  189.         for(i=0;i<3;i++){
  190.                 Digit_Past[i]=Digit[i];
  191.         }
  192.         //-----拆分數字-----
  193.         Digit[2]=Rsens/100;
  194.         Digit[1]=(Rsens%100)/10;
  195.         Digit[0]=Rsens%10;
  196.         //-----判別數位的改變,并更新該位顯存-----
  197.         for(i=0;i<3;i++)
  198.         {
  199.                 if(!(Digit[i]==Digit_Past[i]))                //如果有變化
  200.                 {
  201.                         LCD_DisplayDigit(LCD_DIGIT_CLEAR ,i+8);        //清除該8字段
  202.                         LCD_DisplayDigit(Digit[i],i+8);                                                //寫顯存映射
  203.                         HT1621_Reflash_Digit(i+8);                                                        //僅更新該8字段的顯存
  204.                 }
  205.         }
  206. }

復制代碼

所有資料51hei提供下載:
17_Slope_ADC.rar (93.4 KB, 下載次數: 21)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线免费看黄 | 国产69精品久久久久777 | 99精品一区二区 | 日韩成人免费视频 | 精品国产乱码久久久久久88av | 免费看a | 黄色片视频免费 | aaa一区 | 欧美日韩精品一区二区 | 观看毛片 | 免费午夜电影 | 中文一区 | 最近日韩中文字幕 | 在线观看欧美日韩视频 | 久久黄色| 免费影视在线观看 | 免费看一区二区三区 | 午夜精品一区二区三区在线 | 精品久久国产 | 国产免费一二三区 | 精品国产欧美一区二区三区成人 | 国产日产欧产精品精品推荐蛮挑 | 有码一区 | 黄色片亚洲 | 欧美伊人影院 | 国产精品久久久久久久久久久久久久 | 久久av影院 | 午夜小电影| 国产成人在线视频播放 | 91天堂网| 99这里只有精品 | 欧美毛片免费观看 | 视频一区二区在线观看 | 免费观看av网站 | 天天干天天操天天看 | 精品国产99 | 国产高清视频 | 2018天天干天天操 | 一级视频在线免费观看 | 国产精品伦一区二区三级视频 | 欧美日韩一区二区三区四区 |