freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于ds18b20測溫系統(tǒng)論文-資料下載頁

2025-11-07 20:40本頁面

【導讀】本文結合實際使用經驗,介紹了DS18B20數(shù)字溫度傳感器在單片機下。的硬件連接及軟件編程,并給出了軟件流程圖。該系統(tǒng)由上位機和下位機兩大部分組成。下位機實現(xiàn)溫度的檢測并提供標準。該系統(tǒng)可應用于倉庫測溫、樓宇空調控制和生產過程監(jiān)控等領域。

  

【正文】 retc=retc1。 if(SDA==1)retc=retc+1。 /*讀數(shù)據(jù)位 ,接收的數(shù)據(jù)位放入 retc 中 */ _Nop()。 _Nop()。 } SCL=0。 _Nop()。 _Nop()。 return(retc)。 } //主控器進行應答信號 (可以是應答或非應答信號,由位參數(shù) a 決定 ) void Ack_I2c(bit a) { if(a==0)SDA=0。 /*在此發(fā)出應答或非應答信號 */ else SDA=1。 _Nop()。 _Nop()。 _Nop()。 SCL=1。 _Nop()。 _Nop()。 /*時鐘低電平周期大于 4μ s*/ _Nop()。 _Nop()。 _Nop()。 SCL=0。 /*清時鐘線,鉗住 I2C 總線以便繼續(xù)接收 */ _Nop()。 _Nop()。 } /******************************************************************* 向有子地址 器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù) 函數(shù)原型 : bit ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no)。 功能 : 從啟動總線到發(fā)送地址,子地址 ,數(shù)據(jù),結束總線的全過程 ,從器件 34 地址 sla,子地址 suba,發(fā)送內容是 s 指向的內容,發(fā)送 no 個字節(jié)。 如果返回 1 表示操作成功,否則操作有誤。 注意: 使用前必須已結束總線。 ********************************************************************/ bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) { uchar i。 Start_I2c()。 /*啟動總線 */ SendByte(sla)。 /*發(fā)送器件地址 */ if(ack==0)return(0)。 SendByte(suba)。 /*發(fā)送器件子地址 */ if(ack==0)return(0)。 for(i=0。ino。i++) { SendByte(*s)。 /*發(fā)送數(shù)據(jù) */ if(ack==0)return(0)。 s++。 } Stop_I2c()。 /*結束總線 */ return(1)。 } /******************************************************************* 向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù) 函數(shù)原型 : bit RedStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no)。 功能 : 從啟動總線到發(fā)送地址,子地址 ,讀數(shù)據(jù),結束總線的全過程 ,從器件 地址 sla,子地址 suba,讀出的內容放入 s 指向的存儲區(qū),讀 no 個字節(jié)。 如果返回 1 表示操作成功,否則操作有誤。 注意: 使用前必須已結束總線。 ********************************************************************/ bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) { uchar i。 Start_I2c()。 /*啟動總線 */ SendByte(sla)。 /*發(fā)送器件地址 */ if(ack==0)return(0)。 SendByte(suba)。 /*發(fā)送器件子地址 */ if(ack==0)return(0)。 Start_I2c()。 /*重新啟動總線 */ SendByte(sla+1)。 35 if(ack==0)return(0)。 for(i=0。ino1。i++) { *s=RcvByte()。 /*發(fā)送數(shù)據(jù) */ Ack_I2c(0)。 /*發(fā)送就答位 */ s++。 } *s=RcvByte()。 Ack_I2c(1)。 /*發(fā)送非應位 */ Stop_I2c()。 /*結束總線 */ return(1)。 } [4]SPI THE REAL TIMER DS1302 DRIVER LIB COPYRIGHT (c) 2020 BY JJJ. ALL RIGHTS RESERVED File Name: Author: Jiang Jian Jun Created: 2020/7/21 Modified: NO Revision: ***************************************************************************/ include include sbit DS1302_CLK = P3^5。 //實時時鐘時鐘線引腳 sbit DS1302_IO = P3^6。 //實時時鐘數(shù)據(jù)線引腳 sbit DS1302_RST = P3^7。 //實時時鐘復位線引腳 sbit ACC0 = ACC^0。 sbit ACC7 = ACC^7。 void DS1302InputByte(unsigned char d) //實時時鐘寫入一字節(jié) (內部函數(shù) ) { unsigned char i。 ACC = d。 for(i=8。 i0。 i) { 36 DS1302_IO = ACC0。 //相當于匯編中的 RRC DS1302_CLK = 1。 DS1302_CLK = 0。 ACC = ACC 1。 } } unsigned char DS1302OutputByte(void) //實時時鐘讀取一字節(jié) (內部函數(shù) ) { unsigned char i。 for(i=8。 i0。 i) { ACC = ACC 1。 //相當于匯編中的 RRC ACC7 = DS1302_IO。 DS1302_CLK = 1。 DS1302_CLK = 0。 } return(ACC)。 } void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302 地址 , ucData: 要寫的數(shù)據(jù) { DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。 DS1302InputByte(ucAddr)。 // 地址,命令 DS1302InputByte(ucDa)。 // 寫 1Byte 數(shù)據(jù) DS1302_CLK = 1。 DS1302_RST = 0。 } unsigned char Read1302(unsigned char ucAddr) //讀取 DS1302 某地址的數(shù)據(jù) { unsigned char ucData。 DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。 DS1302InputByte(ucAddr|0x01)。 // 地址,命令 ucData = DS1302OutputByte()。 // 讀 1Byte 數(shù)據(jù) DS1302_CLK = 1。 DS1302_RST = 0。 return(ucData)。 } 37 void DS1302_SetProtect(bit flag) //是否寫保護 { if(flag) Write1302(0x8E,0x10)。 else Write1302(0x8E,0x00)。 } void DS1302_SetTime(unsigned char Address, unsigned char Value) // 設置時間函數(shù) { DS1302_SetProtect(0)。 Write1302(Address, ((Value/10)4 | (Value%10)))。 } void DS1302_GetTime(SYSTEMTIME *Time) { unsigned char ReadValue。 ReadValue = Read1302(DS1302_SECOND)。 TimeSecond = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 ReadValue = Read1302(DS1302_MINUTE)。 TimeMinute = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 ReadValue = Read1302(DS1302_HOUR)。 TimeHour = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 ReadValue = Read1302(DS1302_DAY)。 TimeDay = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 ReadValue = Read1302(DS1302_WEEK)。 TimeWeek = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 ReadValue = Read1302(DS1302_MONTH)。 TimeMonth = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 ReadValue = Read1302(DS1302_YEAR)。 TimeYear = ((ReadValueamp。0x70)4)*10 + (ReadValueamp。0x0F)。 } void Initial_DS1302(void) { unsigned char Second=Read1302(DS1302_SECOND)。 if(Secondamp。0x80) DS1302_SetTime(DS1302_SECOND,0)。 } /******************************************************************************** 38 void BurstWrite1302(unsigned char *pWClock) //往 DS1302 寫入時鐘數(shù)據(jù) (多字節(jié)方式 ) { unsigned char i。 Write1302(0x8e,0x00)。 // 控制命令 ,WP=0,寫操作 ? DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1