![]() |
謝謝各位 問題解決了,是我本人大意錯把小括號應用了大括號上,也沒有細查一下。 |
我看到了: 你的38行if語句,39行用的是小括號(),應該用大括號{} |
void Init_DS18B20(void){//初始化ds1820溫度傳感器 unsigned char x=0; DQ = 1; //DQ復位 delayy(80); //稍做延時 DQ = 0; //單片機將DQ拉低 delayy(800); //精確延時 大于 480us DQ = 1; //拉高總線 delayy(140); x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delayy(200); } unsigned char ReadOneChar(void){//讀一個字節(DS18B20驅動) unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 給脈沖信號 dat>>=1; DQ = 1; // 給脈沖信號 if(DQ) dat|=0x80; delayy(40); } return(dat); } void WriteOneChar(unsigned char dat){ unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delayy(50); DQ = 1; dat>>=1; } } unsigned int wd(void){ unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳過讀序號列號的操作 WriteOneChar(0x44); // 啟動溫度轉換 Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器 a=ReadOneChar(); //讀低8位 b=ReadOneChar(); //讀高8位 t=b; t<<=8; t=t|a; tt=t*0.0625; t= tt*10; //放大10倍輸出并四舍五入 return(t); } |