久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
18B20采集溫度仿真電路原理圖與單片機代碼
[打印本頁]
作者:
2006sunmoon
時間:
2017-5-4 13:08
標題:
18B20采集溫度仿真電路原理圖與單片機代碼
18B20采集溫度+仿真電路,自己學習,歡迎參考下載,包含完整的單片機代碼與proteus仿真
0.png
(19.18 KB, 下載次數: 83)
下載附件
2017-5-4 17:21 上傳
0.png
(58.23 KB, 下載次數: 66)
下載附件
2017-5-4 17:21 上傳
#include<reg52.h>
#include <intrins.h>
#include "led--display.h"
sbit DQ=P2^2;
uchar time; //供延時用全局變量
/**************************************
18b20初始化
***************************************/
bit lnit18B20()
{
bit DS18B20;//儲存DS18B20是否存在的標志,DS18B20=0,表示存在;DS18B20=1,表示不存在
DQ=1;
_nop_(); //延時一個機器周期
DQ=0;
for(time=0;time<170;time++);//延時510us左右,以向DS18B20發出一持續480~960us的低電平復位脈沖
DQ=1;
for(time=0;time<10;time++);//延時約30us(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)
DS18B20=DQ; //讓單片機檢測是否輸出了存在脈沖(DQ=0表示存在)
for(time=0;time<40;time++);
return (DS18B20); //返回檢測成功標志
}
/**************************************
函數功能:向DS18B20寫入一個字節數據
入口參數:dat
***************************************/
void write18b20(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=1;
_nop_(); //延時一個機器周期
DQ=0; //將數據線從高拉低時即啟動寫時序
for(time=0;time<1;time++);
DQ=dat&0x01; //利用與運算取出要寫的某位二進制數據,
//并將其送到數據線上等待DS18B20采樣
for(time=0;time<10;time++);//延時約30us,DS18B20在拉低后的約15~60us期間從數據線上采樣
DQ=1; //釋放數據線
for(time=0;time<1;time++);//延時3us,兩個寫時序間至少需要1us的恢復期
dat=dat>>1;
}
for(time=0;time<2;time++); //稍作延時,給硬件一點反應時間
}
/*****************************************************
函數功能:從DS18B20讀取一個字節數據
出口參數:dat
***************************************************/
uchar read18b20()
{
uchar i;
uchar dat;
for(i=0;i<8;i++)
{
DQ=1;
_nop_(); //延時一個機器周期
DQ=0; //將數據線從高拉低時即啟動讀時序
_nop_();
dat=dat>>1;
DQ=1;
for(time=0;time<1;time++);////延時約3us,使主機在15us內采樣
if(DQ==1)
dat|=0x80; ////如果讀到的數據是1,則將1存入dat
else
dat|=0x00; //如果讀到的數據是0,則將0存入dat
for(time=0;time<15;time++);////延時60us以上,讀時序必須有大于60us
DQ=1;
for(time=0;time<1;time++);//延時3us,兩個讀時序之間必須有大于1us的恢復期
}
for(time=0;time<1;time++);////稍作延時,給硬件一點反應時間
return dat;
}
/*****************************************************
函數功能:做好讀溫度的準備
***************************************************/
void ready18B20()
{
lnit18B20(); //復位18b20
write18b20(0XCC); //跳過序列號搜索
write18b20(0X44); //啟動溫度轉換
for(time=0;time<100;time++);//延時時間等待轉換完成
lnit18B20(); ////復位18b20
write18b20(0XCC); //跳過序列號搜索
write18b20(0XBE); //寫入讀取溫度命令
}
/*****************************************************
函數功能:讀溫度數據
***************************************************/
uint dutemp()
{
uint temp;//定義返回值變量
uchar lsb;//在變量lsb存儲低8位數據
uchar msb;//在變量msb存儲高8位數據
uchar fu;
ready18B20();//18b20讀溫度準備
lsb=read18b20();//第一次讀取低八位數據
msb=read18b20();//第二次讀取高八位數據
if((msb&0xf8)==0xf8)//高8位與0xf8按位與判斷是否為負溫度,真值為負
{
temp=(~(msb*256+lsb)+1)*6.25;//如果為負則將16位數據按位取反加1然后再乘以0.0625*100保留兩位小數
if((994<temp)&&(temp<5500)) //判斷16位數據是否大于10度小于55度
fu=1; //成立則賦值數碼管顯示列
else //否則
{
if(temp<=994) //顯示另外列
fu=2; //
else fu=8; //
}
led3_display(fu); //負號列顯示函數
}
else
{
temp=(msb*256+lsb)*6.25;//將16位數據乘以0.0625*100保留兩位小數
}
return temp; //返回要顯示數據
}
void main()
{
du=0;
we=0;
while(1)
{
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
下載:
18b20數碼管顯示.rar
(128.73 KB, 下載次數: 34)
2017-5-4 13:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhoulin02
時間:
2017-5-30 15:31
謝謝分享
作者:
酷酷的陽少
時間:
2019-5-29 19:51
樓主,為什么我運行仿真的時候會報錯呢?
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产1区2区在线观看
|
亚洲每日更新
|
久久极品
|
久久麻豆精品
|
亚洲精品在线免费看
|
香蕉视频91
|
国产综合欧美
|
日韩视频中文字幕
|
欧美精品一区二区三区在线播放
|
精品伊人久久
|
一区二区三区四区在线免费观看
|
av天空
|
91伦理片
|
国产a级黄色录像
|
亚洲欧美一区二区三区情侣bbw
|
成人免费片
|
国产高清视频
|
国产欧美精品一区二区色综合
|
亚洲精品成人av久久
|
亚洲视频免费
|
99久久99
|
欧美一区二区在线播放
|
日本欧美视频
|
亚洲精品久久久一区二区三区
|
久久亚洲综合
|
亚洲一区二区在线播放
|
五月天婷婷狠狠
|
久久尤物免费一区二区三区
|
欧美精品在线一区
|
国产精品久久久久久久久久久久午夜片
|
国产中文原创
|
久久精品
|
日韩精品一区二区三区中文字幕
|
精产国产伦理一二三区
|
久久综合九色综合欧美狠狠
|
亚洲欧美成人
|
中文字幕av一区
|
精品一区二区电影
|
色综合天天天天做夜夜夜夜做
|
欧美日韩精品一区二区三区四区
|
欧美色综合一区二区三区
|