單片機(jī)課程設(shè)計(jì)匯本自動(dòng)滾動(dòng)廣告牌的設(shè)計(jì)_第1頁(yè)
單片機(jī)課程設(shè)計(jì)匯本自動(dòng)滾動(dòng)廣告牌的設(shè)計(jì)_第2頁(yè)
單片機(jī)課程設(shè)計(jì)匯本自動(dòng)滾動(dòng)廣告牌的設(shè)計(jì)_第3頁(yè)
單片機(jī)課程設(shè)計(jì)匯本自動(dòng)滾動(dòng)廣告牌的設(shè)計(jì)_第4頁(yè)
單片機(jī)課程設(shè)計(jì)匯本自動(dòng)滾動(dòng)廣告牌的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

...wd......wd......wd...單片機(jī)課程設(shè)計(jì)題目:自動(dòng)滾動(dòng)廣告牌所在院系:機(jī)電汽車工程學(xué)院專業(yè):機(jī)101-4班學(xué)號(hào):姓名:完成日期:指導(dǎo)教師:目錄課程設(shè)計(jì)任務(wù)書設(shè)計(jì)工程簡(jiǎn)介〔一〕設(shè)計(jì)思路〔二〕任務(wù)分工設(shè)計(jì)過程〔一〕電路原理圖及各器件原理介紹〔二〕程序模塊程序框圖程序清單系統(tǒng)功能簡(jiǎn)介〔一〕產(chǎn)品的功能簡(jiǎn)介〔二〕產(chǎn)品使用方法〔三〕產(chǎn)品性能簡(jiǎn)介產(chǎn)品說明書總結(jié)課程設(shè)計(jì)任務(wù)書基于單片機(jī)的自動(dòng)滾動(dòng)廣告牌的設(shè)計(jì)廣告牌有四張宣傳彩頁(yè),卷入一卷軸,依次來回顯示每一頁(yè),每一頁(yè)顯示的時(shí)間一樣。本設(shè)計(jì)以MCS-51系列單片機(jī)為核心,采用常用電子器件設(shè)計(jì),自行設(shè)計(jì)電源。設(shè)計(jì)廣告彩頁(yè)的顯示時(shí)間長(zhǎng)度,時(shí)間一到就用直流電動(dòng)機(jī)旋轉(zhuǎn)控制彩頁(yè)切換,用一臺(tái)直流電動(dòng)機(jī)控制廣告彩頁(yè)的旋轉(zhuǎn)〔正轉(zhuǎn)/反轉(zhuǎn)〕。用一個(gè)光敏電阻傳感器測(cè)量光強(qiáng)度,當(dāng)光線較暗的時(shí)候啟動(dòng)背景燈。設(shè)置三個(gè)按鍵:手動(dòng)/自動(dòng)切換、手動(dòng)正轉(zhuǎn)和手動(dòng)反轉(zhuǎn),用一個(gè)發(fā)光二極管顯示手動(dòng)/自動(dòng)狀態(tài)。設(shè)置假設(shè)干個(gè)位置控制行程開關(guān),設(shè)置彩頁(yè)的顯示位置。按鍵輸入采用中斷方式。設(shè)計(jì)工程簡(jiǎn)介設(shè)計(jì)思路〔1〕選用ATMEL公司的AT89C51單片機(jī)?!づcMCS-51兼容·4K字節(jié)可編程FLASH存儲(chǔ)器·壽命:1000寫/擦循環(huán)·數(shù)據(jù)保存時(shí)間:10年·全靜態(tài)工作:0Hz-24MHz·三級(jí)程序存儲(chǔ)器鎖定·128×8位內(nèi)部RAM·32可編程I/O線·兩個(gè)16位定時(shí)器/計(jì)數(shù)器·5個(gè)中斷源·可編程串行通道·低功耗的閑置和掉電模式·片內(nèi)振蕩器和時(shí)鐘電路〔2〕通過I/O口直接控制廣告彩頁(yè)的切換,通過程序?qū)崿F(xiàn)顯示延時(shí),通過debug確定準(zhǔn)確延時(shí)時(shí)間長(zhǎng)度。〔3〕通過掃描按鍵實(shí)現(xiàn)監(jiān)測(cè)自動(dòng)與手動(dòng)、正轉(zhuǎn)與反轉(zhuǎn)按鍵狀態(tài)。由于選用單片機(jī)沒有足夠的外部中斷,且掃描按鍵的方法更加簡(jiǎn)潔,故此處違背了設(shè)計(jì)任務(wù)書,希望可以得到諒解?!?〕利用比擬器設(shè)計(jì)光感電路〔仿真中使用電位器模擬光敏電阻〕,提供光線信號(hào)。通過I/O口輸出信號(hào),控制背景燈驅(qū)動(dòng)器〔仿真中使用74HC573驅(qū)動(dòng)一拍黃色LED小燈模擬〕,進(jìn)而控制背景燈開關(guān)?!?〕利用L298驅(qū)動(dòng)器驅(qū)動(dòng)直流電機(jī),通過I/O口信號(hào)控制L298輸出信號(hào),進(jìn)而控制電機(jī)正轉(zhuǎn),反轉(zhuǎn)及停轉(zhuǎn)的狀態(tài)?!?〕通過I/O口信號(hào)直接控制“手動(dòng)/自動(dòng)〞狀態(tài)顯示指示燈亮滅?!?〕使用四個(gè)行程開關(guān)〔仿真中使用按鍵模擬〕在自動(dòng)狀態(tài)下控制電機(jī)正轉(zhuǎn),反轉(zhuǎn)及停轉(zhuǎn)。通過掃描按鍵的方式實(shí)現(xiàn)監(jiān)測(cè)行程開關(guān)狀態(tài)?!?〕設(shè)計(jì)外部晶振及復(fù)位電路?!?〕由于以上任務(wù)較簡(jiǎn)單,較早完成了任務(wù),經(jīng)過組內(nèi)商議,為挑戰(zhàn)一下自己,決定添加溫度檢測(cè)并顯示的功能。通過DS18b20芯片完成溫度檢測(cè),A/D轉(zhuǎn)換,使用串口通信單片機(jī)將檢測(cè)的溫度讀取,經(jīng)數(shù)據(jù)轉(zhuǎn)換,并通過I/O口顯示在四位共陰極數(shù)碼管上。任務(wù)分工分四個(gè)工段:獨(dú)立模塊功能單獨(dú)設(shè)計(jì)電路、程序,仿真;各模塊整合,調(diào)試,仿真;修整,優(yōu)化,添加擴(kuò)展及附加功能;整理產(chǎn)品說明書、課程報(bào)告及其他材料。分三個(gè)小組:任務(wù)分工表:第一小組第二小組第三小組工段一按鍵模塊電機(jī)驅(qū)動(dòng)模塊行程開關(guān)監(jiān)測(cè)自動(dòng)展示程序光感模塊背景燈模塊工段二電路原理圖仿真電路圖程序整合程序調(diào)試提前整理產(chǎn)品說明書工段三添加擴(kuò)展及附加功能修整,優(yōu)化整理產(chǎn)品說明書,確定初稿工段四修正產(chǎn)品說明書,整理課程報(bào)告及其他材料。設(shè)計(jì)過程電路原理圖及各器件原理介紹〔1〕整體電路圖展示各模塊原理介紹光感比擬電路U光線越強(qiáng)RV1越小,U3越小,當(dāng)小到一定值〔設(shè)定5KΩ〕U3<U2。通過比擬器比擬U2、U3,U3<U2時(shí)輸出0,控制背景燈關(guān),U3>U2時(shí)輸出1,控制背景燈開。DS18b20溫度傳感器DSl820數(shù)字溫度計(jì)提供9位(二進(jìn)制)溫度讀數(shù),指示器件的溫度。信息經(jīng)過單線接口送入DSl820或從DSl820送出,因此從主機(jī)CPU到DSl820僅需一條線(和地線),DSl820的電源可以由數(shù)據(jù)線本身提供而不需要外部電源。DSl820的測(cè)量范圍從-55到+125增量值為0.5可在ls(典型值)內(nèi)把溫度變換成數(shù)字。每一個(gè)DSl820包括一個(gè)唯一的64位長(zhǎng)的序號(hào),該序號(hào)值存放在DSl820內(nèi)部的ROM(只讀存貯器)中,開場(chǎng)8位是產(chǎn)品類型編碼(DSl820編碼均為10H)接著的48位是每個(gè)器件唯一的序號(hào),最后8位是前面56位的CRC(循環(huán)冗余校驗(yàn))碼DSl820中還有用于貯存測(cè)得的溫度值的兩個(gè)8位存貯器RAM,編號(hào)為0號(hào)和1號(hào),1號(hào)存貯器存放溫度值的符號(hào)如果溫度為負(fù),則1號(hào)存貯器8位全為1,否則全為0,0號(hào)存貯器用于存放溫度值的補(bǔ)碼LSB(最低位)的1表示0.5攝氏度,將存貯器中的二進(jìn)制數(shù)求補(bǔ)再轉(zhuǎn)換成十進(jìn)制數(shù),并除以2就得到被測(cè)溫度值(-55~125攝氏度)。L298芯片驅(qū)動(dòng)電機(jī)L298N為SGS-THOMSONMicroelectronics所出產(chǎn)的雙全橋步進(jìn)電機(jī)專用驅(qū)動(dòng)芯片(DualFull-BridgeDriver),內(nèi)部包含4信道邏輯驅(qū)動(dòng)電路,可同時(shí)驅(qū)動(dòng)2個(gè)減速直流電機(jī),內(nèi)含二個(gè)H-Bridge的高電壓、大電流雙全橋式驅(qū)動(dòng)器,接收標(biāo)準(zhǔn)TTL邏輯準(zhǔn)位信號(hào),可驅(qū)動(dòng)46V、2A以下的步進(jìn)電機(jī),且可以直接透過電源來調(diào)節(jié)輸出電壓;此芯片可直接由單片機(jī)的IO端口來提供模擬時(shí)序信號(hào),控制轉(zhuǎn)速。OUTl、OUT2和OUT3、OUT4之間分別接2個(gè)電機(jī);input1~input4輸入控制電位來控制電機(jī)的正反轉(zhuǎn);Enable則控制電機(jī)停轉(zhuǎn)。四位共陰極數(shù)碼管的驅(qū)動(dòng)74HC573芯片驅(qū)動(dòng)數(shù)碼管顯示接口,通過單片機(jī)I/O接口直接控制數(shù)碼管位選。共陰極數(shù)碼管真值表十六進(jìn)制0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x000x40顯示符號(hào)0123456789空-74HC573為八進(jìn)制3態(tài)非反轉(zhuǎn)透明鎖存器,輸入是和標(biāo)準(zhǔn)CMOS輸出兼容的;加上拉電阻,他們能和LS/ALSTTL輸出兼容。當(dāng)鎖存使能端LE為高時(shí),這些器件的鎖存對(duì)于數(shù)據(jù)是透明的〔也就是說輸出同步〕。當(dāng)鎖存使能變低時(shí),符合建設(shè)時(shí)間和保持時(shí)間的數(shù)據(jù)會(huì)被鎖存。獨(dú)立按鍵模塊按鍵一端接地,另一端與單片機(jī)I/O口相連并外接上拉電阻。按鍵按下時(shí)I/O口由高電位轉(zhuǎn)為低點(diǎn)位,經(jīng)單片機(jī)讀取引腳信號(hào),將按鍵狀態(tài)輸入。外部晶振電路5151單片機(jī)單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反向放大器,引腳XTAL1為輸入端,XTAL2為輸出端。兩個(gè)引腳間跨接晶體振蕩器與微調(diào)電容組成并聯(lián)諧振電路,構(gòu)成一個(gè)自激振蕩器為內(nèi)部時(shí)鐘提供振蕩時(shí)鐘。振蕩期的頻率主要取決于晶體的振蕩頻率,一般晶體可在1.2MHz~12MHz之間任選。電容C1,C2通常取30pF左右。復(fù)位電路5151單片機(jī)51系列單片機(jī)系統(tǒng)通常有上電復(fù)位和按鍵復(fù)位兩種方式。最簡(jiǎn)單的一種上電復(fù)位及按鍵復(fù)位電路圖如上圖所示。上電后,由于電容充電,使RST持續(xù)一段時(shí)間的高電平,完成復(fù)位操作;當(dāng)單片機(jī)處于運(yùn)行中或者死鎖時(shí),按下“復(fù)位〞按鈕,也可以使單片機(jī)進(jìn)入復(fù)位狀態(tài)。程序模塊數(shù)碼管動(dòng)態(tài)掃描函數(shù)voidrefresh_led(){ P2=Disp_Tab[a[0]];P1=dispbit[0];P1=0xff; //每個(gè)數(shù)碼管按負(fù)值、翻開、關(guān)閉的順序 P2=Disp_Tab[a[1]];P1=dispbit[1];P1=0xff; P2=Disp_Tab[a[2]]|0x80;P1=dispbit[2];P1=0xff; P2=Disp_Tab[a[3]];P1=dispbit[3];P1=0xff;}每個(gè)數(shù)碼管依次按負(fù)值、翻開、關(guān)閉的順序受控,從而實(shí)現(xiàn)動(dòng)態(tài)掃描。溫度轉(zhuǎn)換模塊程序voidstart_temp_sensor(void){ DS18b20_reset(); write_byte(0xCC);//發(fā)SkipROM命令 write_byte(0x44);//發(fā)轉(zhuǎn)換命令}/**讀存溫度*/voidread_temp(){ uint8temp_data[2];//讀出溫度暫放 uint16temp=0,c; doublewd; start_temp_sensor(); delay_ms(100); DS18b20_reset();//復(fù)位 write_byte(0xCC);//發(fā)SkipROM命令 write_byte(0xBE);//發(fā)讀命令 temp_data[0]=read_byte();//溫度低8位 temp_data[1]=read_byte();//溫度高8位 temp=temp_data[1]; //一下三步將溫度高八位低八位整合 temp<<=8; temp|=temp_data[0]; if(temp_data[1]&0xf0) //判斷溫度是否為負(fù) { temp=(~temp)+1; //為負(fù)時(shí),取反加一 wd=temp*0.0625;//轉(zhuǎn)為攝氏溫度,0.0625為溫感芯片儲(chǔ)存精度 a[0]=11; //為負(fù)時(shí),第一個(gè)數(shù)碼管顯示負(fù)號(hào) } else { wd=temp*0.0625; a[0]=10; //為正時(shí),第一個(gè)數(shù)碼管不顯示 } c=wd; //將攝氏溫度轉(zhuǎn)為整型 a[2]=c%10; //第三個(gè)數(shù)碼管顯示個(gè)位 a[1]=c/10%10; //第二個(gè)數(shù)碼管顯示十位 c=wd*10; a[3]=c%10; //第四個(gè)數(shù)碼管顯示小數(shù)位}背景燈控制模塊程序voidbeijingdeng() { if(ggxh) led_bjd=1; else led_bjd=0;}光感信號(hào)為高電平時(shí),背景燈控制引腳輸出高電平,控制背景燈關(guān);光感信號(hào)為低電平時(shí),背景燈控制引腳輸出低電平,控制背景燈亮。自動(dòng)控制模塊程序voidzidong() { led_zs=0; //點(diǎn)亮自動(dòng)/手動(dòng)指示燈 while(1) { if(i) //判斷電機(jī)正反轉(zhuǎn)狀態(tài),并控制電機(jī)正反轉(zhuǎn) { dj_zz=1; dj_fz=0; } else { dj_zz=0; dj_fz=1; } if(kg1==0) //監(jiān)測(cè)行程開關(guān)1狀態(tài) { dj_zz=0; //關(guān)閉電機(jī)并延時(shí) dj_fz=0; delay_ms(100); i++; //控制電機(jī)下次啟動(dòng)換向 read_temp(); //讀存溫度信息 } if(kg2==0) //監(jiān)測(cè)行程開關(guān)2狀態(tài) { dj_zz=0; dj_fz=0; delay_ms(100); read_temp(); } if(kg3==0) //監(jiān)測(cè)行程開關(guān)3狀態(tài) { dj_zz=0; dj_fz=0; delay_ms(100); read_temp(); } if(kg4==0) //監(jiān)測(cè)行程開關(guān)4狀態(tài) { dj_zz=0; dj_fz=0; delay_ms(100); i--; //控制電機(jī)下次啟動(dòng)換向 read_temp(); } beijingdeng(); //調(diào)入背景燈控制函數(shù),監(jiān)測(cè)感光信號(hào) refresh_led(); //顯示溫度信息 if(aj_qh==0) //監(jiān)測(cè)自動(dòng)/手動(dòng)切換_按鍵狀態(tài) { dj_zz=0; //監(jiān)測(cè)到切換到手動(dòng)狀態(tài)時(shí),電機(jī)停轉(zhuǎn) dj_fz=0; break; //跳出自動(dòng)控制循環(huán),進(jìn)入主函數(shù) } }}自動(dòng)控制狀態(tài)下,手動(dòng)/自動(dòng)指示燈控制引腳輸出為低電平,指示燈亮;判斷電機(jī)正反轉(zhuǎn)狀態(tài),并控制電機(jī)正反轉(zhuǎn);監(jiān)測(cè)行程開關(guān)1狀態(tài),假設(shè)為低電平,則關(guān)閉電機(jī),延時(shí)并控制電機(jī)下次啟動(dòng)換向;假設(shè)為高電平,則不變。然后讀存溫度信息并依次監(jiān)測(cè)行程開關(guān)2、3狀態(tài),假設(shè)為低電平,則關(guān)閉電機(jī),延時(shí)并讀存溫度信息。然后監(jiān)測(cè)行程開關(guān)4狀態(tài),假設(shè)為低電平,則關(guān)閉電機(jī),延時(shí)并控制電機(jī)下次啟動(dòng)換向。最后監(jiān)測(cè)自動(dòng)/手動(dòng)切換_按鍵狀態(tài),假設(shè)為低電平,則電機(jī)停轉(zhuǎn),跳出自動(dòng)控制循環(huán),進(jìn)入主函數(shù)。手動(dòng)控制模塊程序voidshoudong() //手動(dòng)控制子函數(shù){ led_zs=1; //關(guān)閉自動(dòng)/手動(dòng)指示燈 while(1) { if(aj_zz==0) //按下正轉(zhuǎn)按鍵時(shí),電機(jī)正轉(zhuǎn) { dj_zz=0; dj_fz=1; } if(aj_fz==0) //按下反轉(zhuǎn)按鍵時(shí),電機(jī)反轉(zhuǎn) { dj_zz=1; dj_fz=0; } if(aj_fz==1&&aj_zz==1) //無按鍵按下,電機(jī)停轉(zhuǎn) { dj_zz=0; dj_fz=0; } if(aj_qh==1) //監(jiān)測(cè)自動(dòng)/手動(dòng)切換_按鍵狀態(tài) { break; //監(jiān)測(cè)到切換到自動(dòng)狀態(tài)時(shí),跳出手動(dòng)控制循環(huán), } //進(jìn)入主函數(shù) refresh_led(); //顯示溫度信息 beijingdeng(); //調(diào)入背景燈控制函數(shù),監(jiān)測(cè)感光信號(hào) }}手動(dòng)控制狀態(tài)下,手動(dòng)/自動(dòng)指示燈控制引腳輸出為高電平,指示燈滅;假設(shè)按下正轉(zhuǎn)按鍵,則L298芯片OUT1輸出+12V,OUT2輸出0V,電機(jī)正轉(zhuǎn);假設(shè)按下反轉(zhuǎn)按鍵,則L298芯片OUT1輸出0V,OUT2輸出+12V,電機(jī)反轉(zhuǎn);假設(shè)無按鍵按下,則L298芯片OUT1輸出0V,OUT2輸出0V,電機(jī)停轉(zhuǎn)。主程序模塊程序main(){ while(1) { if(aj_qh==0) //監(jiān)測(cè)自動(dòng)/手動(dòng)切換_按鍵狀態(tài), { //并控制進(jìn)入相應(yīng)子函數(shù) shoudong(); } else { zidong(); } }}假設(shè)自動(dòng)/手動(dòng)切換_按鍵按下時(shí),控制引腳輸出為低電平,電機(jī)狀態(tài)為手動(dòng)控制;假設(shè)自動(dòng)/手動(dòng)切換_按鍵無按下時(shí),控制引腳輸出為高電平,電機(jī)狀態(tài)為自動(dòng)控制。程序框圖程序清單#include<reg52.h>extern void _nop_(void);typedefunsigned charuint8;typedefunsigned intuint16;typedefunsigned longuint32;typedefcharint8;typedefintint16;codeuint8Disp_Tab[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00,0x40};codeuint8dispbit[4]={0xfe,0xfd,0xfb,0xf7};//數(shù)碼管位選控制變量uint8a[4]; //數(shù)碼管顯示控制變量uint8 i=0; //電機(jī)正反轉(zhuǎn)控制變量#definenops();{_nop_();_nop_();_nop_();_nop_();}//定義空指令,調(diào)整控制溫感驅(qū)動(dòng)時(shí)序sbitdj_zz=P3^0; //定義電機(jī)正反轉(zhuǎn)控制引腳sbitdj_fz=P3^1;sbitled_bjd =P3^2; //定義背景燈控制引腳sbitled_zs =P3^3; //定義指示燈控制引腳sbitDQ =P3^6; //溫度輸入口sbitggxh=P3^7; //定義感光信號(hào)引腳sbitkg1=P0^0; //定義行程開關(guān)1信號(hào)引腳sbitkg2=P0^1; //定義行程開關(guān)2信號(hào)引腳sbitkg3=P0^2; //定義行程開關(guān)3信號(hào)引腳sbitkg4=P0^3; //定義行程開關(guān)4信號(hào)引腳sbitaj_fz =P0^4; //定義電機(jī)正反轉(zhuǎn)_按鍵信號(hào)引腳sbitaj_zz =P0^5;sbitaj_qh =P0^6; //定義自動(dòng)/手動(dòng)切換_按鍵信號(hào)引腳/*數(shù)碼管動(dòng)態(tài)掃描函數(shù)*/voidrefresh_led(){ P2=Disp_Tab[a[0]];P1=dispbit[0];P1=0xff; //每個(gè)數(shù)碼管按負(fù)值、翻開、關(guān)閉的順序 P2=Disp_Tab[a[1]];P1=dispbit[1];P1=0xff; P2=Disp_Tab[a[2]]|0x80;P1=dispbit[2];P1=0xff; P2=Disp_Tab[a[3]];P1=dispbit[3];P1=0xff;}/*兩個(gè)延時(shí)函數(shù)*/voiddelay(uint16n){ while(n--);}voiddelay_ms(uint16n){ uint8m=120; while(n--) while(m--) refresh_led(); //刷新顯示溫度信息}/*18B20復(fù)位函數(shù)*/voidDS18b20_reset(void){ bitflag=1; while(flag) { while(flag) { DQ=1; delay(1); DQ=0; delay(50); //延時(shí)550us DQ=1; delay(6); //延時(shí)66us flag=DQ; } delay(45); //延時(shí)500us flag=~DQ; } DQ=1;}/**18B20寫1個(gè)字節(jié)函數(shù)*/voidwrite_byte(uint8val){ uint8i; for(i=0;i<8;i++) { DQ=1; _nop_(); DQ=0; nops();//4us DQ=val&0x01; //最低位移出 delay(6); //延時(shí)66us val>>=1; //右移一位 } DQ=1; delay(1);}/**18B20讀1個(gè)字節(jié)函數(shù)*/uint8read_byte(void){ uint8i,value=0; for(i=0;i<8;i++) { DQ=1; _nop_(); value>>=1; DQ=0; nops(); //延時(shí)4us DQ=1; nops(); //延時(shí)4us if(DQ) value|=0x80; delay(6); //延時(shí)66us } DQ=1; return(value);}/**啟動(dòng)溫度轉(zhuǎn)換*/voidstart_temp_sensor(void){ DS18b20_reset(); write_byte(0xCC); //發(fā)SkipROM命令 write_byte(0x44); //發(fā)轉(zhuǎn)換命令}/**讀存溫度*/voidread_temp(){ uint8temp_data[2]; //讀出溫度暫放 uint16temp=0,c; doublewd; start_temp_sensor(); delay_ms(100); DS18b20_reset(); //復(fù)位 write_byte(0xCC); //發(fā)SkipROM命令 write_byte(0xBE);//發(fā)讀命令 temp_data[0]=read_byte(); //溫度低8位 temp_data[1]=read_byte(); //溫度高8位 temp=temp_data[1]; //一下三步將溫度高八位低八位整合 temp<<=8; temp|=temp_data[0]; if(temp_data[1]&0xf0) //判斷溫度是否為負(fù) { temp=(~temp)+1; //為負(fù)時(shí),取反加一 wd=temp*0.0625; //轉(zhuǎn)為攝氏溫度,0.0625為溫感芯片儲(chǔ)存精度 a[0]=11; //為負(fù)時(shí),第一個(gè)數(shù)碼管顯示負(fù)號(hào) } else { wd=temp*0.0625; a[0]=10; //為正時(shí),第一個(gè)數(shù)碼管不顯示 } c=wd; //將攝氏溫度轉(zhuǎn)為整型 a[2]=c%10; //第三個(gè)數(shù)碼管顯示個(gè)位 a[1]=c/10%10; //第二個(gè)數(shù)碼管顯示十位 c=wd*10; a[3]=c%10; //第四個(gè)數(shù)碼管顯示小數(shù)位}/*背景燈控制子函數(shù)*/voidbeijingdeng() { if(ggxh) led_bjd=1; else led_bjd=0;}/*自動(dòng)控制子函數(shù)*/voidzidong() { led_zs=0; //點(diǎn)亮自動(dòng)/手動(dòng)指示燈 while(1) { if(i) //判斷電機(jī)正反轉(zhuǎn)狀態(tài),并控制電機(jī)正反轉(zhuǎn) { dj_zz=1; dj_fz=0; } else { dj_zz=0; dj_fz=1; } if(kg1==0) //監(jiān)測(cè)行程開關(guān)1狀態(tài) { dj_zz=1; //關(guān)閉電機(jī)并延時(shí) dj_fz=1; delay_ms(100); i++; //控制電機(jī)下次啟動(dòng)換向 read_temp(); //讀存溫度信息 } if(kg2==0) //監(jiān)測(cè)行程開關(guān)2狀態(tài) { dj_zz=1; dj_fz=1; delay_ms(100); read_temp(); } if(kg3==0) //監(jiān)測(cè)行程開關(guān)3狀態(tài) { dj_zz=1; dj_fz=1; delay_ms(100); read_temp(); } if(kg4==0) //監(jiān)測(cè)行程開關(guān)4狀態(tài) { dj_zz=1; dj_fz=1; delay_ms(100); i--; //控制電機(jī)下次啟動(dòng)換向 read_temp(); } beijingdeng(); //調(diào)入背景燈控制函數(shù),監(jiān)測(cè)感光信號(hào) refresh_led(); //顯示溫度信息 if(aj_qh==0) //監(jiān)測(cè)自動(dòng)/手動(dòng)切換_按鍵狀態(tài) { dj_zz=1; //監(jiān)測(cè)到切換到手動(dòng)狀態(tài)時(shí),電機(jī)停轉(zhuǎn) dj_fz=1; break; //跳出自動(dòng)控制循環(huán),進(jìn)入主函數(shù) } }}voidshoudong() //手動(dòng)控制子函數(shù){ led_zs=1; //關(guān)閉自動(dòng)/手動(dòng)指示燈 while(1) { if(aj_zz==0) //按下正轉(zhuǎn)按鍵時(shí),電機(jī)正轉(zhuǎn) { dj_zz=0; dj_fz=1; } if(aj_fz==0) //按下反轉(zhuǎn)按鍵時(shí),電機(jī)反轉(zhuǎn) { dj_zz=1; dj_fz=0; } if(aj_fz==1&&aj_zz==1) //無按鍵按下,電機(jī)停轉(zhuǎn) { dj_zz=1; dj_fz=1; } if(aj_qh==1) //監(jiān)測(cè)自動(dòng)/手動(dòng)切換_按鍵狀態(tài) { break; //監(jiān)測(cè)到切換

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論