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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

msp430g2553單片機ADC轉換程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:280288 發表于 2021-11-28 13:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<msp430g2553.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define BIT(x)   (1<<(x))
  5. #define Range_3V  0         //量程為0~3V
  6. #define Range_15V   1       //量程為0~15V
  7. /*********************************************************
  8.                         函數聲明
  9. *********************************************************/
  10. void System_Init(void);
  11. void ADC_Init(void);  
  12. void LCD_Init();  
  13. void LCD_Send(uchar type,uchar transdata);
  14. void Delay_nms(uint n);
  15. void LCD_Pos(uchar x,uchar y);
  16. void LCD_Display_String(const uchar *pt,uchar num);
  17. void LCD_Display(long int Data);
  18. void LCD_Display_Digit(long int num);
  19. uchar LCD_Table[]={'0','1','2','3','4','5','6','7','8','9','.','V'};
  20. long int Voltage;       //全局變量Voltage
  21. uint Voltage_Range;
  22. /*********************************************************
  23. 函數功能:系統初始化
  24. 入口參數:無
  25. 出口參數:無
  26. 函數說明:無
  27. *********************************************************/
  28. void System_Init(void)
  29. {
  30.   WDTCTL = WDT_ADLY_1000;               //看門狗工作在定時器模式,1s中斷一次
  31.   IE1 |= WDTIE;                         //使能看門狗中斷
  32.   P1DIR |= BIT0 + BIT1;                        //相應的位端口設置為輸出  
  33.   P1SEL |= BIT4;                        //P1.4為A4通道
  34.   Voltage_Range = Range_15V;            //Range_3V即量程為3V,Range_15V即量程為15V
  35.   ADC_Init();                           //ADC初始化;  
  36.   LCD_Init();                                //液晶初始化
  37. }
  38. /*********************************************************
  39. 函數功能:ADC初始化
  40. 入口參數:無
  41. 出口參數:無
  42. 函數說明:無
  43. *********************************************************/
  44. void ADC_Init (void)  
  45. {  
  46.   ADC10CTL0 &= ~ENC;   //復位轉換允許位
  47.   ADC10CTL0 |= ADC10ON + ADC10SHT_0 + SREF_0 + ADC10IE ;
  48.   //設置轉換控制寄存器ADC10CTL0,ADC10ON=0x010,使ADC10內核工作
  49.   //ADC10SHT_0=0*0x800u,確定采樣周期為4xADC10CLKs              
  50.   //SREF_0=0*0x2000u,選擇參考電壓為VR+=AVCC,VR-=AVSS
  51.   //ADC10IE=0x00使對應通道轉換后產生中斷

  52.   ADC10CTL1 |= INCH_4 + CONSEQ_0;
  53.   //設置AD轉換控制寄存器ADC10CTL1,INCH_0=0*0x1000u,選擇通道A4
  54.   //CONSEQ_1=1*2u,設置工作模式為單通道、單次轉換模式      
  55.   ADC10CTL0 |= ENC + ADC10SC;
  56.   //設置轉換控制寄存器ADC12CTL0,ENC=0x002使轉換允許位為1                                
  57.   //ADC12SC=0x001使采樣/轉換控制位為1  
  58.   _EINT();  //總中斷使能  
  59. }
  60. /***************************ADC中斷函數****************************/
  61. #pragma vector = ADC10_VECTOR
  62. __interrupt void ADC10_Interrupt(void)   
  63. {
  64.   uint data;
  65.   data = ADC10MEM;                         //將AD采樣值存入data
  66.   if(Voltage_Range == Range_3V)          //V(實際)=(VR+ - VR-)*data/1023 + VR-
  67.     Voltage = (uint)(35.4*data/10.23);     //Voltage是實際電壓值的1000倍
  68.   else
  69.     Voltage = (uint)(35.4*data/10.23*5.38);
  70. }                                    
  71. /***************************WDT中斷函數****************************/
  72. #pragma vector = WDT_VECTOR
  73. __interrupt void watchdog_timer(void)
  74. {
  75.   LCD_Display(Voltage);                   //顯示電壓值
  76. }
  77. /*********************************************************
  78. 函數名稱:LCD初始化函數
  79. 入口參數:無
  80. 出口參數:無
  81. 函數說明:無
  82. *********************************************************/  
  83. void LCD_Init()
  84. {
  85.   Delay_nms(5);
  86.   LCD_Send(0,0x01);      //清屏指令
  87.   Delay_nms(5);          //延時等待液晶完成復位
  88.   LCD_Send(0,0x30);         //功能設定:基本指令集操作
  89.   Delay_nms(5);
  90.   LCD_Send(0,0x02);         //地址歸0
  91.   Delay_nms(5);
  92.   LCD_Send(0,0x0c);         //開顯示,且關閉光標及其反白顯示
  93.   Delay_nms(5);
  94. }
  95. /*********************************************************
  96. 函數功能:寫指令或數據
  97. 入口參數:type,transdata
  98. 出口參數:無
  99. 函數說明:無
  100. *********************************************************/  
  101. void LCD_Send(uchar type,uchar transdata)
  102. {
  103.   uchar firstbyte = 0xf8;
  104.   uchar temp,i,j;
  105.   if(type)
  106.     firstbyte |= 0x02;
  107.   P1OUT &= ~BIT1;
  108.   for(j=3;j>0;j--)
  109.   {
  110.     switch(j)
  111.     {
  112.       case 3:temp=firstbyte;break;
  113.       case 2:temp=transdata&0xf0;break;
  114.       case 1:temp=(transdata<<4)&0xf0;break;
  115.     }
  116.     for(i=8;i>0;i--)
  117.     {
  118.       if(temp&0x80)
  119.         P1OUT |= BIT0;
  120.       else
  121.         P1OUT &= ~BIT0;
  122.       P1OUT |= BIT1;
  123.       temp <<= 1;
  124.       P1OUT &= ~BIT1;
  125.     }
  126.     Delay_nms(1);
  127.   }
  128.   P1OUT &= ~BIT0;
  129. }
  130. /**********************定位函數************************/
  131. void LCD_Pos(uchar x,uchar y)
  132. {
  133.   int pos;
  134.   switch(x)
  135.   {
  136.     case 1:pos=0x80;break;
  137.     case 2:pos=0x90;break;
  138.     case 3:pos=0x88;break;
  139.     case 4:pos=0x98;break;
  140.     default:pos=0x80;
  141.   }
  142.   pos += y;
  143.   LCD_Send(0,pos);
  144. }
  145. /*********************************************************
  146. 函數功能:字符串顯示函數
  147. 入口參數:*pt ,num
  148. 出口參數:無
  149. 函數說明:無
  150. *********************************************************/  
  151. void LCD_Display_String(const uchar *pt,uchar num)
  152. {
  153.   uchar i;
  154.   for(i = 0;i < (num*2);i++)
  155.     LCD_Send(1,*(pt++));
  156. }
  157. /*********************************************************
  158. 函數功能:數字顯示函數
  159. 入口參數:num
  160. 出口參數:無
  161. 函數說明:無
  162. *********************************************************/  
  163. void LCD_Display_Digit(long int num)
  164. {
  165.   uint SHOW[7],i=0;
  166.   SHOW[0]=(num/10000)%10;   //十位
  167.   SHOW[1]=(num/1000)%10;    //個位
  168.   SHOW[2]=10;               //.
  169.   SHOW[3]=(num/100)%10;     //十分位
  170.   SHOW[4]=num/10%10;        //百分位
  171.   SHOW[5]=num%10;           //千分位  
  172.   SHOW[6]=11;               //V
  173.   switch(Voltage_Range)
  174.   {
  175.     case Range_3V:  for(i=1;i<7;i++)
  176.                      LCD_Send(1,LCD_Table[SHOW[i]]); break;
  177.     case Range_15V:  for(i=0;i<7;i++)
  178.                     {
  179.                       if(i==5)++i;  
  180.                         LCD_Send(1,LCD_Table[SHOW[i]]);
  181.                     } break;
  182.     default:  break;
  183.   }  
  184. }
  185. /***********************延時函數*************************/
  186. void Delay_nms(uint n)
  187. {
  188.   uchar i;
  189.   while(n--)
  190.     for(i=0;i<115;i++);
  191. }
  192. /*************************************************************
  193. 函數名稱:顯示函數
  194. 入口參數:Data
  195. 出口參數:無
  196. 函數說明:每行最多8個字,2個字母或數字相當于1個字的長度,注意
  197.           漢字沒法跨格顯示。
  198. *************************************************************/  
  199. void LCD_Display(long int Data)
  200. {
  201.   //LCD_Pos(1,0);                           //第一行
  202.   //LCD_Display_String("",0);
  203.   LCD_Pos(2,0);                             //第二行
  204.   LCD_Display_String("  數字式電壓表",7);
  205.   LCD_Pos(3,0);                             //第三行
  206.   LCD_Display_String("當前電壓:",5);
  207.   LCD_Display_Digit(Data);
  208.   //LCD_Pos(4,0);                           //第四行
  209.   //LCD_Display_String(12.13);
  210. }
  211. /*********************************************************
  212. 函數名稱:主函數
  213. 入口參數:無
  214. 出口參數:無
  215. 函數說明:請看完最上面程序說明再運行程序
  216. *********************************************************/
  217. void main()
  218. {
  219.   System_Init();
  220.   while(1)
  221.   {   
  222.     ADC10CTL0 |= ENC + ADC10SC;         //開啟ADC轉換
  223.   }
  224. }
復制代碼

評分

參與人數 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区高清 | 日韩精品免费在线观看 | 亚洲国产一区二区三区在线观看 | 91成人精品视频 | 一区2区| 亚洲欧美日本在线 | 中文字幕日韩一区 | 午夜av成人 | 国产免费自拍 | 狠狠天天| 中文在线观看视频 | 91精品久久久久久久久 | 亚洲免费婷婷 | 国产精品1 | 成人永久免费视频 | 91精品福利| 久久久久国产精品 | 久久久免费在线观看 | 亚洲精品日韩在线 | 国产ts人妖系列高潮 | 日韩精品人成在线播放 | 亚洲九九 | 欧美综合在线观看 | 亚洲欧美日韩中文在线 | 久久久久国产精品 | 亚洲精品视频一区二区三区 | 亚洲福利av| 国产乱码精品一区二区三区五月婷 | 成人在线看片 | 国产精品福利网 | 噜噜噜色网 | 欧美区日韩区 | 国产成人福利在线观看 | 久久久91精品国产一区二区精品 | 免费性视频 | 国产精品久久久久久久久久妇女 | 亚洲欧美一区二区三区情侣bbw | 亚洲一区久久 | 亚洲精品欧美一区二区三区 | 日韩成人av在线播放 | 精品九九九 |