注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! • 打開購物車 • 查看留言 • 付款方式 • 聯系我們 |
![]() |
首頁 | 電子入門 | 學單片機 | 免費資源 | 下載中心 | 商品列表 | 象棋在線 | 在線繪圖 | 加盟五一 | 加入收藏 | 設為首頁 |
選擇分類:當前分類——學單片機 相關聯或者相類似的文章: 三十分鐘一個小時學會單片機(9045) 什么是單片機?單片機有什么用? (8723) 如何用STC板將代碼燒錄進IC(8681) 怎樣安裝AT51編程板的USB轉串口軟件?(8206) 送給單片機愛好者——LED在線編碼器(1814) 送給單片機愛好者——LED點陣在線編碼器(1544) 單片機系統中的漢字顯示(1492) 帶語音報數功能的搶答器(1489) 用VB進行串口實時數據采集(1347) 用AT89C2051設計超聲波測距儀(1171) 小小電子鬧鐘 生活學習良伴(1165) DS1820測溫原理(1129) 幾句代碼實現控制攝像頭(轉)(1117) STC單片機選型指南(1111) 自制PIC單片機編程器(1105) USB轉串口芯片CH340(1010) 快速學習單片機之黃金機會!(1010) 告戒購單片機開發實驗板初學者(970) 新款實用旋轉LED顯示屏A(890) 使用市售 USB轉RS232串口與PLC通信的測試報告 (881) 首頁 前頁 后頁 尾頁 本站推薦: | 四個DS1820溫度讀取C源程序 四個DS1820溫度讀取C源程序 日期:2006-1-14 9:29:30 人氣:3 查看:[大字體 中字體 小字體] // 以下是四個DS1820溫度讀取程序 //使用時先調用"rom()"子程序讀出每個器件的序列號 //再將各個序列號填入SN數組中才能讀出各個溫度 #include #define uchar unsigned char sbit TMDAT = P0^1; //根據實實際情況設定 uchar TMP[4]; //讀取后的4個溫度值,將其除以2即可得出實際溫度; uchar SN[4][8]; //4個器件的序列號,先讀出單個序列號后填上才可以讀取溫度 uchar f[4]; //結果是否為負溫,“0”為正溫,“1”為負溫! ////////////////////////////////////////延時部分////////////////////////// void dmsec (unsigned int count) // { // unsigned int i; // while (count) // { // i = 115; // while (i>0) i--; // count--; // } // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////// 發送復位////////////////////////// void tmreset (void) // { // unsigned int i; // TMDAT = 0; // i = 103; // while (i>0) i--; // 延時 900 uS(11.0592Mhz時) // TMDAT = 1; // i = 4; // while (i>0) i--; // } // ////////////////////////////////////////////////////////////////////////// //判斷DS1820是否存在的子程序。最好不要用,因為當器件不存在時將會進入死循環 ////////////////////////////////////// 等待存在脈沖/////////////////////// void tmpre (void) //判斷器件是否存在 // { // unsigned int i; // while (TMDAT); // while (~TMDAT); // i = 4; while (i>0) i--; // } // ////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// 讀一位////////////////////////////// bit tmrbit (void) // { // unsigned int i; // bit dat; // TMDAT = 0; i++; // TMDAT = 1; i++; i++; //微量延時 // dat = TMDAT; // i = 8; while (i>0) i--; // 延時 // return (dat); // } // ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////// 讀一個字節/////////////////////// unsigned char tmrbyte (void) // { // unsigned char i,j,dat; // dat = 0; // for (i=1;i<=8;i++) // { // j = tmrbit (); // dat = (j << 7) | (dat >> 1); // } // return (dat); // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////// 寫一個字節//////////////////////// void tmwbyte (unsigned char dat) // { // unsigned int i; // unsigned char j; // bit testb; // for (j=1;j<=8;j++) // { // testb = dat & 0x01; // dat = dat >> 1; // if (testb) // { // TMDAT = 0; // 寫0 // i++; i++; // TMDAT = 1; // i = 8; while (i>0) i--; // } // else // { // TMDAT = 0; // 寫0 // i = 8; while (i>0) i--; // TMDAT = 1; // i++; i++; // } // } // } // ////////////////////////////////////////////////////////////////////////// /////////////////////////////////發送ds1820 開始轉換////////////////////// void tmstart (void) // { // tmreset (); //復位 // //tmpre (); //等待存在脈沖 // dmsec (1); //延時 // tmwbyte (0xcc); //跳過序列號命令,對所有器件有效 // tmwbyte (0x44); //發轉換命令 44H, // } // ////////////////////////////////////////////////////////////////////////// //////////////////////////////////讀取溫度//////////////////////////////// void tmrtemp () // { // uchar i,j; // uchar a,b; // for(j=0;j<4;j++) // { // tmreset(); //復位 // dmsec(1); //延時 // tmwbyte(0x55); //發送ROM匹配命令 // for(i=0;i<8;i++) // { // tmwbyte(SN[j][i]); //發送64位序列號 // } // tmwbyte (0xbe); //發送讀取命令 // a = tmrbyte (); //連續讀取兩位溫度 // b = tmrbyte (); // f[j]=b; //若b為1則為負溫 // if(f[j]) // { // TMP[j]=~a+1; //如果為負溫則去除其補碼 // } // else // { // TMP[j]=a; // } // } // } // ////////////////////////////////////////////////////////////////////////// //以下是讀取器件序列號的子程序,需要讀取序列時可在程序中調用; //調用時確?偩中只有一只器件,若有多個器件時則讀取出來的號碼無效; //將讀取出來的序列號填到前面的數組中即可使用; //平時可以將此子程序刪除以節約空間。 //////////////////////////讀取器件序列號子程序//////////////////////////// void rom() // { // //以下是定義8個序列號變量 // uchar sn1; // uchar sn2; // uchar sn3; // uchar sn4; // uchar sn5; // uchar sn6; // uchar sn7; // uchar sn8; // // tmreset (); //復位 // dmsec (1); //延時 // tmwbyte(0x33); //發送讀序列號子程序 // sn1=tmrbyte(); //讀取第一個序列號,應為16H; // sn2=tmrbyte(); //讀取第二個序列號,應為10H; // sn3=tmrbyte(); // sn4=tmrbyte(); // sn5=tmrbyte(); // sn6=tmrbyte(); // sn7=tmrbyte(); // sn8=tmrbyte(); // } // ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// main() // { // do{ // rom(); //調用讀序列號子程序 // //tmstart(); // dmsec(100); //如果是不斷地讀取的話可以不延時 // //tmrtemp(); //讀取溫度,執行完畢溫度將存于TMP[]數組中// }while(1); // } // ////////////////////////////////////////////////////////////////////////// 1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。 2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! |
本站協議。
版權信息。
關于我們。
本站地圖。
營業執照。
發票說明。
付款方式。
聯系方式
深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102 E-mail:51dz$163.com($改為@);Tel:(0755)27947428 工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389 |