亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
msp430開發板溫度傳感器DS18B20控制程序,顯示環境溫度
[打印本頁]
作者:
weizhong993
時間:
2018-1-17 18:21
標題:
msp430開發板溫度傳感器DS18B20控制程序,顯示環境溫度
/********************************************************************
//DM430-L型開發板溫度傳感器DS18B20控制程序,顯示環境溫度,未校準
//將溫度的個位顯示在LED8上,觸摸傳感器LED燈會變化,測試參考用
//DS18b20的C語言驅動程序,讀取當前環境溫度,顯示精度達0.1度,溫度范圍0-99度
//DS18B20 詳細引腳功能描述1、GND 地信號;2、DQ數據輸入出引腳。開漏單總線接口引腳。當被用在寄生電源下
//也可以向器件提供電源;3、VDD可選擇的VDD 引腳。當工作于寄生電源時,此引腳必須接地。
//DS18B20 的使用方法。DS18B20 采用的是1-Wire 總線協議方式
//即在一根數據線實現數據的雙向傳輸,數據腳接在P17上
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
uint temp_value;
uint temp,A1,A2,A3; //定義的變量,顯示數據處理
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_Init()
{
LED8DIR = 0xFF; //設置IO口方向為輸出
LED8 = 0xFF; //P2口初始設置為FF
}
//*************************************************************************
// DS18B20初始化
//*************************************************************************
unsigned char DS18B20_Reset(void) //初始化和復位
{
unsigned char i;
DQ_OUT;
DQ_CLR;
delay_us(500); //延時500uS(480-960)
DQ_SET;
DQ_IN;
delay_us(80); //延時80uS
i = DQ_R;
delay_us(500); //延時500uS(保持>480uS)
if (i)
{
return 0x00;
}
else
{
return 0x01;
}
}
//*************************************************************************
// DS18B20讀一個字節函數
//*************************************************************************
unsigned char ds1820_read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for (i = 8; i != 0; i--)
{
value >>= 1;
DQ_OUT;
DQ_CLR;
delay_us(4); //*延時4uS
DQ_SET;
DQ_IN ;
delay_us(10); //*延時10uS
if (DQ_R)
{
value|=0x80;
}
delay_us(60); //*延時60uS
}
return(value);
}
//*************************************************************************
// 向18B20寫一個字節函數
//*************************************************************************
/*DS18B20字節寫入函數*/
void ds1820_write_byte(unsigned char value)
{
unsigned char i;
for (i = 8; i != 0; i--)
{
DQ_OUT;
DQ_CLR;
delay_us(4); //延時4uS
if (value & 0x01)
{
DQ_SET;
}
delay_us(80); //延時80uS
DQ_SET; //位結束
value >>= 1;
}
}
//*************************************************************************
// 發送溫度轉換命令
//*************************************************************************
/*啟動ds1820轉換*/
void ds1820_start(void)
{
DS18B20_Reset();
ds1820_write_byte(0xCC); //勿略地址
ds1820_write_byte(0x44); //啟動轉換
}
//*************************************************************************
// DS8B20讀取溫度信息
//*************************************************************************
unsigned int ds1820_read_temp(void)
{
unsigned int i;
unsigned char buf[9];
DS18B20_Reset();
ds1820_write_byte(0xCC); //勿略地址
ds1820_write_byte(0xBE); //讀取溫度
for (i = 0; i < 9; i++)
{
buf[i] = ds1820_read_byte();
}
i = buf[1];
i <<= 8;
i |= buf[0];
temp_value=i;
temp_value=(uint)(temp_value*0.625); //不是乘以0.0625的原因是為了把小數點后一位數據也轉化為可以顯示的數據
//比如溫度本身為27.5度,為了在后續的數據處理程序中得到BCD碼,我們先放大到275
//然后在顯示的時候確定小數點的位置即可,就能顯示出27.5度了
return i;
}
//*************************************************************************
// 溫度數據處理函數
//*************************************************************************
void data_do(uint temp_d)
{
uint A2t;
A1=temp_d/100; //分出百,十,和個位
A2t=temp_d%100;
A2=A2t/10;
A3=A2t%10;
}
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
uchar j;
WDT_Init(); //看門狗初始化
Clock_Init(); //時鐘初始化
Port_Init(); //端口初始化,用于控制IO口輸入或輸出
DS18B20_Reset(); //復位D18B20
while(1)
{
ds1820_start(); //啟動一次轉換
ds1820_read_temp(); //讀取溫度數值
data_do(temp_value); //處理數據,得到要顯示的值
for(j=0;j<200;j++)
{
//Display_DS18B20(A1,A2,A3); //顯示溫度值,用戶外擴顯示器件后可用
LED8 = A2; //將溫度的個位顯示在LED8上,觸摸傳感器LED燈會變化
}
}
}
復制代碼
作者:
zyluglugl
時間:
2021-11-14 10:23
有沒有低功耗的例子
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1