亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
基于MSP430G2553的溫度采集和控制系統程序
[打印本頁]
作者:
Qiuist
時間:
2021-11-3 18:53
標題:
基于MSP430G2553的溫度采集和控制系統程序
(1)LED顯示系統運行狀態;
(2)外接鋰電池供電,設計的系統具有低功耗特點;
(3)使用AD采集電池電壓,并且在OLED顯示;
(4)采集溫度數據,實時OLED顯示;
(5)具有OLED顯示屏顯示功能,顯示測量的溫度,電池電壓;
(6)根據溫度傳感器測量的溫度,輸出PWM控制直流電機的轉速,模擬智能溫控風扇。
文檔內容:
http://www.denmoz.com/bbs/dpj-213910-1.html
單片機源程序如下:
#include<MSP430G2553.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "OLED.h"
#define uchar unsigned char
#define uint unsigned int
#define DS18B20_IO_IN P2DIR &= ~BIT0
#define DS18B20_IO_OUT P2DIR |= BIT0
#define DS18B20_DQ_H P2OUT |= BIT0
#define DS18B20_DQ_L P2OUT &= ~BIT0
#define DS18B20_DQ_IN (P2IN & BIT0)
float TEMP_Result;
float ADC10_Result=0;
//復位DS18B20
void DS18B20_Rst(void)
{
DS18B20_IO_OUT;
DS18B20_DQ_L;
_delay_cycles(600);
DS18B20_DQ_H;
DS18B20_IO_IN;
while(DS18B20_DQ_IN);
while(!DS18B20_DQ_IN);
}
//寫一個字節到DS18B20
//dat:要寫入的字節
void DS18B20_Write_Byte(uchar dat)
{
uchar j;
DS18B20_IO_OUT;
for (j=1;j<=8;j++)
{
DS18B20_DQ_L;
_delay_cycles(8);
if(dat&0x01)
{DS18B20_DQ_H;}
else
{DS18B20_DQ_L;}
_delay_cycles(80);
DS18B20_DQ_H;
dat>>=1;
}
}
//從DS18B20讀一個字節
uchar DS18B20_Read_Byte()
{
uchar i=0;
uchar dat=0;
for(i=0;i<8;i++)
{
dat>>=1;
DS18B20_IO_OUT;
DS18B20_DQ_L;
_delay_cycles(1);
DS18B20_DQ_L;
DS18B20_IO_IN;
_delay_cycles(12);
if(DS18B20_DQ_IN)
dat|=0x80;
_delay_cycles(55);
}
return(dat);
}
//開始溫度轉換
void DS18B20_Start(void)
{
DS18B20_Rst();
DS18B20_Write_Byte(0xCC);
DS18B20_Write_Byte(0x44);
}
//從ds18b20得到溫度值
//精度:0.1C
//返回值:溫度值 (-550~1250)
float DS18B20_Get_Temp(void)
{
uchar TL,TH;
uint t=0;
float tt=0;
DS18B20_Start ();
DS18B20_Rst();
DS18B20_Write_Byte(0xCC);
DS18B20_Write_Byte(0xBE);
TL=DS18B20_Read_Byte();
TH=DS18B20_Read_Byte();
t=TH;
t<<=8;
t|=TL;
tt=((float)(0.0625*(t&0x0f))+(t>>4)*1.000);
tt=tt*10+0.5;
tt=tt/10;
return tt;
}
void PMW_OUT_Init () //PWM 輸出初始化
{
P3DIR |= BIT5;
P3SEL |= BIT5;
TA0CTL |= TASSEL_1+TACLR+MC_1;
TA0CCTL1 |= OUTMOD_7; //選擇高電平模式的 PWM 輸出
TA0CCR0=500; // TA1CCR0 寫入 2000(1MHZ/2000)輸出達到了 500HZ
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
LCD_Init();//OLED初始化
PMW_OUT_Init ();
P3DIR|=BIT2;
P3DIR|=BIT6;
P3OUT&=~BIT6;
ADC10CTL1 |= CONSEQ_2; //單通道重復采樣模式
ADC10CTL0 |= SREF_1+REFON+REF2_5V;//選擇內部參考源 2.5V,打開基準源
ADC10CTL0 |= ADC10SHT_3+MSC; //過采樣率設置為 64 個采樣周期,打開 AD 轉換
ADC10CTL1|= ADC10SSEL_1+ADC10DIV_1+SHS_0; //ACLK2 分 頻 為 采 樣 時 鐘 , 用ADC10SC 觸發采集
ADC10CTL1 |=INCH_3; //選擇通道 A1
ADC10CTL0 |= ADC10ON; //開啟 ADC10
ADC10AE0 |= BIT3; //開啟外部通道 A1
while(1)
{
P3OUT^=BIT2;
P3OUT^=BIT3;
int i;
for(i=0;i<20;i++)
{
ADC10CTL0 |=ENC+ADC10SC; //開始轉換
while((ADC10CTL0 &ADC10IFG)==0); //等待 ADC10IFG 標志變高(轉換完成)
ADC10_Result+=ADC10MEM; //讀取采樣結果
}
ADC10_Result= ADC10_Result/20*2.5/1023*2;
TEMP_Result=DS18B20_Get_Temp();
int temp=TEMP_Result;
TA0CCR1 =160+(temp-24)*34;
LCD_P8x16Str(18,0,"PWM:");
LCD_Write_8x16Int(68,0,(TA0CCR1)/5);
LCD_P8x16Str(86,0,"%");
LCD_P8x16Str(0,2,"Voltage:");
LCD_Write_8x16Float(68,2,ADC10_Result);
LCD_P8x16Str(110,2,"V");
LCD_P8x16Str(8,4,"Temp:");
LCD_Write_8x16Float(52,4,TEMP_Result);
LCD_P8x16Str(104,4,"C");
ADC10_Result=0;
_delay_cycles(500000);
}
}
復制代碼
代碼下載:
RZD.zip
(110.46 KB, 下載次數: 42)
2021-11-3 18:52 上傳
點擊文件名下載附件
ccs程序
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1