久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
(單片機(jī)代碼詳細(xì)注釋)Proteus仿真DS18B20溫度測量在LCD1602顯示
[打印本頁]
作者:
jinlingpop
時(shí)間:
2022-3-14 16:21
標(biāo)題:
(單片機(jī)代碼詳細(xì)注釋)Proteus仿真DS18B20溫度測量在LCD1602顯示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(70.49 KB, 下載次數(shù): 59)
下載附件
2022-3-14 16:26 上傳
單片機(jī)源程序如下:
//-----------------------------------------------------------------
// 1-Wire總線溫度傳感器DS18B20應(yīng)用測試
//-----------------------------------------------------------------
// 說明: 運(yùn)行本例時(shí),外界溫度將實(shí)時(shí)刷新顯示在1602LCD上.
//
//-----------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar Temp_Disp_Buff[17];
extern uchar Temp_Value[];
extern void LCD_Initialise();
extern void LCD_ShowString(uchar r, uchar c,uchar *str);
extern void delay_ms(uint);
extern uchar Read_Temperature();
//-----------------------------------------------------------------
// 主函數(shù)
//-----------------------------------------------------------------
void main()
{
float temp = 0.0; //浮點(diǎn)溫度變量
LCD_Initialise(); //液晶初始化
LCD_ShowString(0,0," DS18B20 Test "); //顯示標(biāo)題
LCD_ShowString(1,0," Waiting..... "); //顯示等待信息
Read_Temperature(); //預(yù)讀取溫度
delay_ms(1500); //長延時(shí)
while(1) //循環(huán)讀取溫度并顯示
{
if( Read_Temperature() ) //讀取正常則顯示
{
//計(jì)算溫度浮點(diǎn)值
temp = (int)(Temp_Value[1]<<8 | Temp_Value[0])*0.0625;
//生成顯示字符串
sprintf(Temp_Disp_Buff,"TEMP: %5.1f \xDF\X43", temp);
//如果只需要顯示溫度整數(shù)部分,消除浮點(diǎn)運(yùn)算,還可以改用下面的語句
//sprintf(Temp_Disp_Buff,"TEMP: %5d \xDF\X43");
//(int)(Temp_Value[1]<<8 | Temp_Value[0]>>4);
//液晶顯示
LCD_ShowString(1,0, Temp_Disp_Buff);
}
delay_ms(50);
}
}
復(fù)制代碼
//-----------------------------------------------------------------
// 名稱: DS18B20驅(qū)動(dòng)程序
// (源代碼中所標(biāo)延時(shí)值均為11.0592MHz晶振下的延時(shí))
//-----------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^4; //DS18B20 DQ引腳定義
uchar Temp_Value[] = {0x00,0x00}; //從DS18B20讀取的溫度值
//-----------------------------------------------------------------
// 延時(shí)宏定義及函數(shù)定義
//-----------------------------------------------------------------
#define delay4us(); { _nop_();_nop_();_nop_();_nop_(); }
void delay_ms(uint x) { uchar i; while( x-- ) for(i = 0; i<120; i++);}
void DelayX(uint x) { while (--x); }
//-----------------------------------------------------------------
// 初始化DS18B20(注意在選定的振蕩器頻率11.0592MHz下設(shè)置符合時(shí)序規(guī)定的延時(shí))
//-----------------------------------------------------------------
uchar Init_DS18B20()
{
uchar status;
DQ=1; DelayX(8); //DQ置高電平并短暫延時(shí)(實(shí)際約為77μs)
DQ=0; DelayX(90); //主機(jī)拉低DQ至少480μs(實(shí)際約為788μs)
DQ=1; DelayX(5); //主機(jī)寫1釋放總線等待15~60μs(實(shí)際約為50μs)
status=DQ; DelayX(90); //讀取在線脈沖,延時(shí)至少480μs(實(shí)際約為788μs)
return status; //讀取 0 時(shí)正常,否則失敗
}
//-----------------------------------------------------------------
// 讀一字節(jié)
//-----------------------------------------------------------------
uchar ReadOneByte()
{
uchar i, dat=0x00;
for(i=0x01; i!=0x00;i<<=1)
{
DQ=0; _nop_(); //主機(jī)拉低 DQ=0,讀時(shí)隙開始
DQ=1; _nop_(); //主機(jī)釋放 DQ,準(zhǔn)備讀
if(DQ) dat |=i; //在>1μs后主機(jī)開始讀取1位
DelayX(8); //讀取1位整個(gè)過程60~120μs(實(shí)際延時(shí) 77μs)
//DQ=1; //主機(jī)釋放總線(此行可省,因 for循環(huán)第2行已釋放)
}
return dat;
}
//-----------------------------------------------------------------
// 寫一字節(jié)
//-----------------------------------------------------------------
void WriteOneByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{ //主機(jī)拉低 DQ,待輸出位通過移位操作先進(jìn)入PSW的CY位
DQ=0; dat>>=1;
//1μs后,DQ=CY,如果CY為0則主機(jī)繼續(xù)拉低
///否則主機(jī)置DQ=1,釋放總線,上拉電阻拉高DQ輸出 1
//整個(gè)過程60~120μs(實(shí)際延時(shí)77μs)
DQ=CY; DelayX(8);
//確保主機(jī)釋放總線,此行不可省略
//除非上一行的DQ=CY 中 CY 恒為 1,顯然這是不可能的
DQ=1;
}
}
//-----------------------------------------------------------------
// 讀取溫度值
//-----------------------------------------------------------------
uchar Read_Temperature()
{
if(Init_DS18B20() == 1) return 0; //DS18B20故障檢查
else
{
WriteOneByte(0xcc); //跳過序列號
WriteOneByte(0x44); //啟動(dòng)溫度轉(zhuǎn)換
Init_DS18B20(); //再次初始化
WriteOneByte(0xcc); //跳過序列號
WriteOneByte(0xbe); //讀溫度寄存器
Temp_Value[0] = ReadOneByte(); //讀取溫度低8位
Temp_Value[1] = ReadOneByte(); //讀取溫度高8位
return 1;
}
}
復(fù)制代碼
Keil代碼與Proteus仿真下載:
123.zip
(64.34 KB, 下載次數(shù): 123)
2022-3-14 16:28 上傳
點(diǎn)擊文件名下載附件
Proteus仿真DS18B20溫度測量在LCD1602顯示
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本天天操
|
国产高清一区二区三区
|
久精品久久
|
一级免费毛片
|
国产精品美女久久久久久免费
|
亚洲va欧美va人人爽午夜
|
av高清
|
999免费网站
|
亚洲一区二区三区在线视频
|
国产欧美精品一区二区三区
|
国产精品欧美日韩
|
国产精品成人一区二区三区
|
亚洲高清视频在线观看
|
国产一区二区三区
|
av电影一区
|
久久y
|
黄色一级片视频
|
www.国产精品
|
91精品久久久久久久久久小网站
|
欧美乱做爰xxxⅹ久久久
|
国产精品二区三区在线观看
|
a级片在线观看
|
中文字幕一区二区三区精彩视频
|
欧美日韩在线视频一区
|
色综合99
|
久久久久久亚洲精品
|
每日在线更新av
|
日韩精品极品视频在线观看免费
|
九九99靖品
|
午夜寂寞影院列表
|
成在线人视频免费视频
|
久久久噜噜噜久久中文字幕色伊伊
|
中文字幕在线视频一区二区三区
|
一区二区av
|
国产日韩欧美在线
|
一区二区免费
|
亚洲少妇综合网
|
欧美日韩在线播放
|
国产成人精品午夜
|
亚洲成人自拍
|
99在线播放
|