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

正文內(nèi)容

基于89c51單片機的溫度控制器的設計-資料下載頁

2024-12-07 09:54本頁面

【導讀】溫度控制器是一種提供溫度顯示、語音報溫和報警的裝置。警溫度,實現(xiàn)控溫目的,并且根據(jù)下位機測量的溫度繪出溫度變化曲線。Keyword:SCM;DS18B20;ISD1420;7bitcodedisplays;食品、機械、石油等工業(yè)中,具有舉足輕重的作用。隨著電子技術(shù)和微型計算

  

【正文】 。 //錄音芯片地址表 void TXReset()。 //DS18B20復位函數(shù) void ack_18b20()。 bit read_bit()。 //讀取數(shù)據(jù) uchar read_byte()。 void del(uint z)。 //延時函數(shù) void write_bit(uchar dat)。 //寫數(shù)據(jù) void Tem_Start()。 void ReadTem()。 //讀取溫度值 uint CalTemp()。 //轉(zhuǎn)換溫度 void display()。 //顯示函數(shù) void Serial_init()。 //初始化函數(shù) 36 void record(uchar address)。 //錄音函數(shù) void play(uchar address)。 //放音函數(shù) void record_init()。 //錄入語庫函數(shù) void main() { Serial_init()。 //初始化函數(shù) while(1) { if(BUF==0x01) //初始化語音庫 { BUF=0。 record_init()。 //錄放音函數(shù) } if(flagbaoshi==1) { play(0x34)。 //當前溫度是 play(tre[temp/100])。 //溫度值 if((temp%100)/10==0) play(tre[10])。 if((temp%100)/10) { play(tre[10])。 play(tre[(temp%100)/10])。 } play(tre[11])。 //點 play(tre[temp%10])。 play(0x3c)。 //度 } } } void Serial_init() { EA=1。 ES=1。 REC=1。 PL=1。 TWR=1。 TMOD=0x21。 ET0=1。 TH0=(65553620210)/256。 TL0=(6553620210)%256。 TH1=0xfd。 TL1=0xfd。 37 TR0=1。 TR1=1。 SM0=0。 SM1=1。 REN=1。 BUF=35。 flagbaoshi=0。 TWR=0。 P1=0xc0。 TWR=1。 del(10)。 } void del(uint z) { uint j。 while(z) for(j=0。j125。j++)。 } void TXReset() { uchar i=120。 DQ=0。 //單片機拉低總線 while(i0)i。 //延時 us DQ=1。 //拉高總線 i=4。 while(i0)i。 //延時 us } void ack_18b20() { uchar i=4。 while(DQ)。 while(~DQ)。 //等待應答信號 while(i0)i。 //延時 us } bit read_bit() //讀取數(shù)據(jù) { bit b。 uint i=0。 38 DQ=0。 //總線拉低 i++。 //至少維持 us DQ=1。 i++。 i++。 b=DQ。 i=8。 while(i0)i。 return b。 } uchar read_byte(void) { uint i。 uchar j,dat。 for(i=0。i8。i++) { j=read_bit()。 //讀取一位 dat=(j7)|(dat1)。//得到溫度值(二進制) } return dat。 } void write_bit(uchar dat) { uchar i。 uint j。 bit b。 for(i=0。i8。i++) { b=datamp。0x01。 dat=dat1。 if(b) //發(fā)送的是 { DQ=0。 //拉低總線 j++。 //至少維持 us j++。 DQ=1。 //拉高總線 j=8。 while(j0)j。//延時 } else //發(fā)送的是 { DQ=0。 j=8。 39 while(j0)j。 DQ=1。 //準備釋放 j++。 j++。 } } } void Tem_Start() { TXReset()。 //復位信號 ack_18b20()。 //等待應帶信號 del(1)。 write_bit(0xcc)。 //只掛了一個,跳過 ROM write_bit(0x44)。 //溫度轉(zhuǎn)換 } void ReadTem() //讀取溫度值 { TXReset()。 //復位信號 ack_18b20()。 //等待應帶信號 del(1)。 write_bit(0xcc)。 //只掛了一個,跳過 ROM write_bit(0xbe)。 //開始讀暫存器 } uint CalTemp() //獲取十進制溫度 { uint tempval,value。 uint tpl,tph。 float t。 ReadTem()。 //讀取溫度值 tpl=read_byte()。 //獲得低八位 tph=read_byte()。 //獲得高八位 tempval=tph。 tempval=tempval8。 //把以上八位數(shù)據(jù)從低八位移到高八位 tempval=tempval|tpl。//兩字節(jié)合成一個整型變量 value=tempval。 t=value*。 //得到真實十進制溫度值 value=t*10+。 return value。 //變成位數(shù)好顯示 } void display() 40 { count++。 temp2=temp。 if(temp2999) //溫度限制 temp2=999。 if(temp20) temp2=0。 switch (count) //數(shù)碼管顯示 { case 1:{wela=1。P0=0xfe。wela=0。 dula=1。P0=table[temp2/100]。dula=0。}break。 //十位 case 2:{wela=1。P0=0xfd。wela=0。 dula=1。P0=table[temp2%100/10]|0x80。dula=0。}break。//個位 case 3:{wela=1。P0=0xfb。wela=0。 dula=1。P0=table[temp2%10]。dula=0。count=0。}break。 //小數(shù)位 default :break。 } } void Serial() interrupt 4 { BUF=SBUF。 while(!RI)。 RI=0。 } void play(uchar address) //播放對應地址的語音信息 { TWR=0。 //用上升沿將 P1數(shù)據(jù)打進去 P1=address。 TWR=1。 del(10)。 TWR=0。 PL=0。 //PL為低電平,開始放音 if(address==0x34) //播放最后一段 del(400)。 else del(100)。 PL=1。 //PL置高電平,停止放音 } void record(uchar address) //錄制對應地址語音信息 41 { P1=0xc0。 //0xff也行,只要保證前兩位是 TWR=0。 del(10)。 TWR=1。 del(30)。 //用上升沿將 P1數(shù)據(jù)打進去 ,地址復位 P1=address。 TWR=0。 //在 address地址錄音 del(10)。 TWR=1。 del(10)。 REC=1。 del(10)。 REC=0。 //REC低電平開始錄音 if(address==0x34) { del(400)。 //錄制最后一段 REC=1。 del(400)。 } else { del(100)。 REC=1。 del(100)。 } } void record_init() //初始化錄音 { uchar time=0。 for(time=0。time14。time++)//總共十五段 { record(tre[time])。 } /* for(time=0。time14。time++)//總共十五段 { record(tre[time])。 }*/ } void time0()interrupt 1 //定時器中斷 42 { TH0=(6553620210)/256。 TL0=(6553620210)%256。 //定時器賦初值 Tem_Start()。 //開始測溫 temp=CalTemp()。 //獲得十進制溫度值 if(tempBUF*10amp。amp。BUF!=0) //溫度超過范圍報警 { P1=BUF。 beep=0。 del(10)。 beep=1。 } display()。 //溫度顯示 time++。 if(time==50) //每隔秒掃描一次溫度 { ES=0。 time=0。 SBUF=temp/100。 while(!TI)。 TI=0。 SBUF=(temp%100)/10。 while(!TI)。 TI=0。 SBUF=temp%10。 while(!TI)。 TI=0。 ES=1。 } time2++。 if(time2==1500) //30秒定時報溫 { time2=0。 flagbaoshi=1。 } }
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1