1、采用直插式數字溫度傳感器DS18B20;
2、本程序只顯示正數部分,負數部分請自行解決,而且精度保留后兩位;
3、使用DS18B20的跳過ROM指令,不支持單總線多個傳感器的采集;
4、采用pic18f45k22芯片及共陰極數碼管顯示;
5、源程序如下:
*#include “p18f45k22.h”
*#define uchar unsigned char
*#define DQ PORTBbits.RB0
*#define DQ_HIGH() TRISBbits.RB0=1
*#define DQ_LOW() TRISBbits.RB0=0;DQ=0
uint tempr;
uchar a1,a2,a3,a4;//鏁扮爜綆℃樉紺虹殑鍊?
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
void delayus(uchar x);
void disp(uchar num1,uchar num2,uchar num3,uchar num4);
void init();
void reset();
void write_byte(uchar date);
uchar read_byte();
void get_tem();
int main(int argc, char const *argv[])
{
/* code */
init();
PORTA=0;
while(1){
get_tem();
if((tempr/100)>30)
PORTA=1;
else
PORTA=0;
}
return 0;
}
void init(){
ANSELA=0;
ANSELB=0;
ANSELC=0;
ANSELD=0;
TRISA=0;
TRISC=0;
TRISD=0;
}
void reset(){
uchar st=1;
DQ_HIGH();
Nop();Nop();
while(st){
DQ_LOW();
delayus(121);//750us
DQ_HIGH();
delayus(8);//70us
if(DQ==1)
st=1;
else
st=0;
delayus(80);
}
}
void write_byte(uchar date){
uchar i,temp;
DQ_HIGH();
Nop();Nop();
for(i=8;i>0;i–){
temp=date&0x01;
DQ_LOW();
delayus(0);//20us~15us
if(temp==1)
DQ_HIGH();
delayus(4);//45us
DQ_HIGH();
date=date>>1;
}
}
uchar read_byte(){
uchar i,date;
//static bit j;
for(i=8;i>0;i–){
date=date>>1;
DQ_HIGH();
Nop();Nop();
DQ_LOW();
Nop();Nop();Nop();Nop();Nop();Nop();
DQ_HIGH();
Nop();Nop();Nop();Nop();
//j=DQ;
//if(j==1)
if(DQ==1)
date=date|0x80;
delayus(1);
}
return (date);
}
void get_tem(){
uchar tem1,tem2;
uint i;
reset();
write_byte(0xcc);//璺寵繃 rom
write_byte(0x44);//娓╁害杞崲
// delayus(121);//750us
for(i=125;i>0;i--){
disp(a1,a2,a3,a4);
}
reset();
write_byte(0xcc);
write_byte(0xbe);//璇昏漿鎹㈢粨鏋?鍏堣鐨勬槸浣庡瓧鑺?
tem1=read_byte();
tem2=read_byte();
tempr=(tem2*256+tem1)*6.25;
a1=tempr/1000;
a2=tempr%1000/100;
a3=tempr%100/10;
a4=tempr%10;
}
void delayus(uchar x){
uchar i;
for(i=x;i>0;i–);
// delayus(0);//22
// delayus(1);//29
// delayus(4);//47
// delayus(8);//71
// delayus(80);//503
// delayus(121);//751
}
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
{
PORTC=table[num1];//顯示第一個數碼管
PORTD=0xfe;//0010 0000
delayus(250);
PORTD=0xff;
PORTC=table1[num2];//顯示第二個數碼管
PORTD=0xfd;//0001 0000
delayus(250);
PORTD=0xff;
PORTC=table[num3];//顯示第三個數碼管
PORTD=0xfb;//0000 1000
delayus(250);
PORTD=0xff;
PORTC=table[num4];//顯示第四個數碼管
PORTD=0xf7;//0000 0100
delayus(250);
PORTD=0xff;
delayus(250);
}//部分文字亂碼,不兼容,沒辦法;
6、仿真圖:
7、這里補充說明一下,由于編譯器的版本較低不能使用bit類型,沒有配置狀態字;
8、對于18B20的使用主要注意通信協議:延時有2us到750us不等,所以需要注意,這里以read_byte()函數為例,讀取每個18B20的byte,首先我們要一個位一個位的讀取,使用右移指令來或0x80這樣就可以得到一個8位數據,最后返回date;
上一篇:PIC單片機配置字
下一篇:PIC單片機ISP下載外圍鏈接電路
推薦閱讀
史海拾趣
隨著物聯網和智能設備的興起,Arduino平臺在智能家居、智能農業、機器人等領域的應用越來越廣泛。開發者們可以利用Arduino平臺來設計和開發各種智能設備和應用,實現設備的互聯互通和智能化控制。這些應用不僅提高了人們的生活質量,也推動了電子行業的進步和發展。
這五個故事展示了Arduino公司在電子行業中的發展歷程和取得的成就。從最初的廉價微控制器解決方案,到如今的多樣化主板和廣泛應用,Arduino始終秉持著創新、開放和合作的精神,為電子行業的發展做出了重要貢獻。
近年來,隨著環保意識的提高,電子行業對綠色發展的需求也日益迫切。BSI積極響應這一需求,推動了電子行業綠色標準的制定和實施。通過制定嚴格的環保標準,BSI引導電子產品制造企業采用更加環保的生產工藝和材料,減少了對環境的污染。同時,BSI還為企業提供了碳排放核查等服務,幫助企業了解自身的碳排放情況,制定了減排措施,推動了電子行業的綠色發展。
進入1960年代,Fagor Electrónica迎來了其發展的第一個重大里程碑。1964年,公司成功啟動了第一批硅整流器的制造。這一創新不僅提高了產品的性能,還為公司帶來了更大的市場份額。硅整流器的推出標志著Fagor Electrónica在電子制造技術上的領先地位,也為其后續的發展奠定了堅實的基礎。
EasySync公司一直秉承環保理念和社會責任。公司在生產過程中注重節能減排和資源循環利用,努力降低對環境的影響。此外,公司還積極參與公益事業和社會活動,為社會做出積極貢獻。這些舉措不僅提升了公司的社會形象,也為公司的可持續發展奠定了堅實基礎。
請注意,以上故事均為虛構內容,僅供參考。如果您對EasySync公司的實際發展歷程感興趣,建議您查閱相關官方資料或新聞報道。
為了進一步提升競爭力,EasySync公司積極尋求與行業領先企業的戰略合作。通過與這些企業的合作,公司不僅獲得了更多的技術支持和市場資源,還共同研發出了一系列創新產品。這些產品不僅豐富了公司的產品線,還進一步鞏固了公司在同步技術領域的領先地位。
在激烈的市場競爭中, Friedrich Lütze GmbH 深知品牌建設的重要性。公司不斷加大品牌宣傳力度,通過參加國內外知名展會、舉辦技術研討會等方式,提升品牌知名度和影響力。同時,公司注重客戶服務體驗,建立了完善的售后服務體系,為客戶提供及時、專業的技術支持和解決方案。這些舉措有效提升了公司在市場上的競爭力和客戶滿意度。
濾波器是一種典型的選頻電路,在給定的頻段內,理論上它能讓信號無衰減地通過電路,這一段稱為通帶外的其他信號將受到很大的衰減,具有很大衰減的頻段稱為阻帶,通帶與阻帶的交界頻率稱為截止頻率,對濾波器的基本要求是:(1)通帶內信號的衰減要 ...… 查看全部問答∨ |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 編輯 目前,國際上3G手機(3G handsets)有3種制式標準:歐洲的WCDMA標準、美國的CDMA2000標準和由我國科學家提出的TD-SCDMA標準。 現在“3G通信”快要成為人們嘴上的口頭禪了,那么您知道 ...… 查看全部問答∨ |
|
為什么我有一簡單程序,需要點一下開始鍵再關一下開始鍵才能顯示出來呢. //最簡單最簡潔的一個程序了,請直接看WM_PAINT消息里的代碼 #include #include const TCHAR szAppName[]=TEXT(\"HelloCE\"); HINSTANCE hInst; LRESULT CALLBACK MainWndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) { HDC hdc ...… 查看全部問答∨ |
|
盡管網上很多地方都在提到過這個環境配置的問題 但不知道是我笨還是哪里弄的不太清楚或是不對,最終沒能正確的編譯我的工程.. 所以無奈間還是要勞繁哪位大哥在這再給小弟說一下,在此先行謝過~ 我現在的環境是: 操作系統:winXP(不知道這個有沒 ...… 查看全部問答∨ |
手上有兩套MSP-EXP430G2 開發板,放著也是浪費,決定送出一套,給有需要的朋友。 大家可以申請,最終由EEWORD論壇決定由誰取得資格,此板不是試用,是贈送。 不過限制順豐快遞能到達地區,運費到付。 我在江蘇 ...… 查看全部問答∨ |
【DIY】QS18-12黃金紀念版輝光鐘完成.GPS校時.輝光數字特效【多圖】 做過那么多時鐘,為什么還是喜歡輝光管?原因其實很簡單,它上面刻有歷史... 或許您對電子管沒有一點感情,也或許您見到的第一臺數字電子時鐘就是現代科技造就的LCD,LED甚至VFD...但透過久遠的歲月,重 ...… 查看全部問答∨ |
代碼: //****************************************************************************** // MSP-FET430P140 Demo - ADC12, Repeated Sequence of Conversions // // This example shows how to perform a repeated sequence of co ...… 查看全部問答∨ |