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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3485|回復: 0
收起左側

基于MSP430G2553的溫度采集和控制系統程序

[復制鏈接]
ID:977412 發表于 2021-11-3 18:53 | 顯示全部樓層 |閱讀模式
(1)LED顯示系統運行狀態;
(2)外接鋰電池供電,設計的系統具有低功耗特點;
(3)使用AD采集電池電壓,并且在OLED顯示;
(4)采集溫度數據,實時OLED顯示;
(5)具有OLED顯示屏顯示功能,顯示測量的溫度,電池電壓;
(6)根據溫度傳感器測量的溫度,輸出PWM控制直流電機的轉速,模擬智能溫控風扇。

文檔內容:http://m.zg4o1577.cn/bbs/dpj-213910-1.html

單片機源程序如下:
  1. #include<MSP430G2553.h>
  2. #include  <string.h>
  3. #include  <stdio.h>
  4. #include  <math.h>
  5. #include  "OLED.h"
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. #define     DS18B20_IO_IN      P2DIR &= ~BIT0
  9. #define     DS18B20_IO_OUT     P2DIR |=  BIT0
  10. #define     DS18B20_DQ_H       P2OUT |=  BIT0
  11. #define     DS18B20_DQ_L       P2OUT &= ~BIT0
  12. #define     DS18B20_DQ_IN         (P2IN & BIT0)
  13. float TEMP_Result;
  14. float ADC10_Result=0;


  15. //復位DS18B20
  16. void DS18B20_Rst(void)
  17. {
  18.     DS18B20_IO_OUT;
  19.     DS18B20_DQ_L;
  20.     _delay_cycles(600);
  21.     DS18B20_DQ_H;
  22.     DS18B20_IO_IN;
  23.     while(DS18B20_DQ_IN);
  24.     while(!DS18B20_DQ_IN);
  25. }


  26. //寫一個字節到DS18B20
  27. //dat:要寫入的字節
  28. void DS18B20_Write_Byte(uchar dat)
  29. {
  30.     uchar j;
  31.     DS18B20_IO_OUT;
  32.     for (j=1;j<=8;j++)
  33.     {
  34.         DS18B20_DQ_L;
  35.         _delay_cycles(8);
  36.         if(dat&0x01)
  37.             {DS18B20_DQ_H;}
  38.         else
  39.             {DS18B20_DQ_L;}
  40.         _delay_cycles(80);
  41.         DS18B20_DQ_H;
  42.         dat>>=1;
  43.     }
  44. }

  45. //從DS18B20讀一個字節
  46. uchar DS18B20_Read_Byte()
  47. {
  48.     uchar i=0;
  49.     uchar dat=0;
  50.     for(i=0;i<8;i++)
  51.     {
  52.         dat>>=1;
  53.         DS18B20_IO_OUT;
  54.         DS18B20_DQ_L;
  55.         _delay_cycles(1);
  56.         DS18B20_DQ_L;
  57.         DS18B20_IO_IN;
  58.         _delay_cycles(12);
  59.         if(DS18B20_DQ_IN)
  60.         dat|=0x80;
  61.         _delay_cycles(55);
  62.     }
  63.     return(dat);
  64. }

  65. //開始溫度轉換
  66. void DS18B20_Start(void)
  67. {
  68.     DS18B20_Rst();
  69.     DS18B20_Write_Byte(0xCC);
  70.     DS18B20_Write_Byte(0x44);
  71. }

  72. //從ds18b20得到溫度值
  73. //精度:0.1C
  74. //返回值:溫度值 (-550~1250)
  75. float DS18B20_Get_Temp(void)
  76. {
  77.     uchar TL,TH;
  78.     uint t=0;
  79.     float tt=0;
  80.     DS18B20_Start ();
  81.     DS18B20_Rst();
  82.     DS18B20_Write_Byte(0xCC);
  83.     DS18B20_Write_Byte(0xBE);
  84.     TL=DS18B20_Read_Byte();
  85.     TH=DS18B20_Read_Byte();
  86.     t=TH;
  87.     t<<=8;
  88.     t|=TL;
  89.     tt=((float)(0.0625*(t&0x0f))+(t>>4)*1.000);
  90.     tt=tt*10+0.5;
  91.     tt=tt/10;
  92.     return tt;
  93. }


  94. void PMW_OUT_Init () //PWM 輸出初始化
  95. {
  96. P3DIR |= BIT5;
  97. P3SEL |= BIT5;
  98. TA0CTL |= TASSEL_1+TACLR+MC_1;
  99. TA0CCTL1 |= OUTMOD_7; //選擇高電平模式的 PWM 輸出
  100. TA0CCR0=500; // TA1CCR0 寫入 2000(1MHZ/2000)輸出達到了 500HZ
  101. }



  102. void main(void)
  103. {
  104.     WDTCTL=WDTPW+WDTHOLD;
  105.     LCD_Init();//OLED初始化
  106.     PMW_OUT_Init ();
  107.     P3DIR|=BIT2;
  108.     P3DIR|=BIT6;
  109.     P3OUT&=~BIT6;
  110.     ADC10CTL1 |= CONSEQ_2; //單通道重復采樣模式
  111.      ADC10CTL0 |= SREF_1+REFON+REF2_5V;//選擇內部參考源 2.5V,打開基準源
  112.      ADC10CTL0 |= ADC10SHT_3+MSC; //過采樣率設置為 64 個采樣周期,打開 AD 轉換
  113.      ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2 分 頻 為 采 樣 時 鐘 , 用ADC10SC 觸發采集
  114.      ADC10CTL1 |=INCH_3; //選擇通道 A1
  115.      ADC10CTL0 |= ADC10ON; //開啟 ADC10
  116.     ADC10AE0 |= BIT3; //開啟外部通道 A1
  117.     while(1)
  118.     {
  119.         P3OUT^=BIT2;
  120.         P3OUT^=BIT3;
  121.         int i;
  122.             for(i=0;i<20;i++)
  123.             {
  124.             ADC10CTL0 |=ENC+ADC10SC; //開始轉換
  125.              while((ADC10CTL0 &ADC10IFG)==0); //等待 ADC10IFG 標志變高(轉換完成)
  126.              ADC10_Result+=ADC10MEM; //讀取采樣結果
  127.             }
  128.             ADC10_Result= ADC10_Result/20*2.5/1023*2;
  129.         TEMP_Result=DS18B20_Get_Temp();
  130.         int temp=TEMP_Result;
  131.         TA0CCR1 =160+(temp-24)*34;
  132.         LCD_P8x16Str(18,0,"PWM:");
  133.         LCD_Write_8x16Int(68,0,(TA0CCR1)/5);
  134.         LCD_P8x16Str(86,0,"%");
  135.         LCD_P8x16Str(0,2,"Voltage:");
  136.         LCD_Write_8x16Float(68,2,ADC10_Result);
  137.         LCD_P8x16Str(110,2,"V");
  138.         LCD_P8x16Str(8,4,"Temp:");
  139.         LCD_Write_8x16Float(52,4,TEMP_Result);
  140.         LCD_P8x16Str(104,4,"C");
  141.         ADC10_Result=0;
  142.         _delay_cycles(500000);
  143.     }
  144. }
復制代碼

代碼下載:
RZD.zip (110.46 KB, 下載次數: 42)


評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频精品区 | 欧美日韩综合视频 | av中文字幕在线 | 天堂精品 | 国产在线一区二区三区 | 成人精品鲁一区一区二区 | 天堂在线网 | 本地毛片| 一区日韩 | 美女国内精品自产拍在线播放 | 亚洲精品综合一区二区 | 日韩精品视频网 | 久久久99国产精品免费 | 国产精选一区 | 2一3sex性hd | 久久久久久国产 | 国产精品免费大片 | 伊人91在线 | 亚洲激情一区二区 | 欧美理论 | 精品国产18久久久久久二百 | 日韩精品一区二区三区老鸭窝 | 久久久国产一区二区三区 | 国产精品色 | 久久中文视频 | 三区在线观看 | 99re视频这里只有精品 | 久久久999国产精品 中文字幕在线精品 | 久久久成人一区二区免费影院 | 天天草天天爱 | 91视频在线观看免费 | 欧美成人性生活 | 成人网在线 | 国产高清精品一区二区三区 | 国产成人一区二区 | 国产免费黄网 | 欧美日韩一区二区三区四区 | 欧美人妇做爰xxxⅹ性高电影 | 日本一二三区电影 | 久久久亚洲一区 | 天天干精品 |