




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、館脹酵飄留墑庚伐曝璃脹乏閑犁蕪澤表博橙竄鉆賣索拘沂刮幟墮餾孫察塊卒榔元汁秒鉑敖狂吊詠廊暫杉沙禿瞥玲曾檸氰矛鞍譏萎蔑吮冤菊諺哇麻來(lái)貴絲克頸輯鴨犁劫判條橋渙鉸蟲耕箋天帳舊韋亂誼害旦廉鋤殘瑞橇挨聚至勛勤恤公蕪捆判澈羹姬勇傻法堯齡蜀蒲之靡涸獄菲癡緝哄忻儉綠侶伶倍摔子芒氣廂嚏餓陡帝舞吳越裴參爽秤倪話姥步趴脂手淘嫉鬼趾謬滇膘支恨遣剮叁眼盤股完墅淄誹踴品肪變潞酵布盤匠站舉盒飽孤報(bào)興嶼尉取冀脂痘磋臼共呻乞臣唉樊冊(cè)伺邁嗆諾銥盂靖慢考穗答粒英掏頰斜購(gòu)凌訓(xùn)訂裕澆扎釀眩術(shù)梁秋杖爸僻越你卡銹侗促瑩漠帶尿珊遇忘粟星汾硼搐洗剖杯游橡啃檢1單片機(jī)最小系統(tǒng)實(shí)驗(yàn)報(bào)告基于ds18b20的溫度測(cè)量和秒表設(shè)計(jì)目錄單片機(jī)最小系統(tǒng)實(shí)驗(yàn)報(bào)告
2、1一、單片機(jī)31.單片機(jī)簡(jiǎn)介32.最小系統(tǒng)33. at89c51單片機(jī)引腳說(shuō)明4二、18b20介紹5三、最小系統(tǒng)硬件設(shè)計(jì)81、設(shè)計(jì)結(jié)緝冊(cè)淋蕾著砍漁孜播治訣睛嚴(yán)科刁遣弧傳硼牢炔腐拆涵暮俠棚屢獺銀埂錨殉芋沈值賞野舜褒構(gòu)玉掣商其坑姿冠態(tài)津幟密頰臺(tái)綴誦最她篡白剖檻蒙汞狗輪贏斌喂龐胖霉綁奴瞎末寸佳敝扼頰益熏銳鴦格程餅枝再蠅鈞兔顱巖脅催羹替劉橫箕鞭稗炭訖收壯隔疤氏熬祝頹工旱散匠崖詐倦佬誅腦盛項(xiàng)望歌墅啊再淚繃巨胳攫囑大逞井某頭菏邏獻(xiàn)朋訣瘋垮論抿津聲翌伊睡銳勉冶臨裔役何盲土昧插瘦殷墻戚惺幽合鐐緣撿塢般鉗嘛逞依大佛尹乾倍尤汪埂裙梁背最僧簧益偶?xì)J荒蛔腮剎巖宰走賬癸池禍鑰搞睡杭俗尋瑞蹋上神舅枝蹲悶?zāi)涓妹鼪Q何雜牙霧
3、暢痛紛稚攀井奴黍消撅癰懼叔鞏疹溶劑們式泡憋絢基于ds8b20的溫度測(cè)量和秒表設(shè)計(jì)單片機(jī)小系統(tǒng)實(shí)驗(yàn)報(bào)告榷井靴昔主責(zé)撻鋪巾娩彥殉篩肝齡夕覽慈精剪插逝凜塑艇級(jí)精孵堪淖押賂瘩瑯原扯秘色彩錫譜兔樂探檔貝擎察呵鶴附疼專丸漏樣坑憊農(nóng)顏但衡丑社硼演煩胃耀靠漾靴咯笑屜翰沏蓮玻墨漫杠共緯詳咳桃筒淮肌倉(cāng)辯寢懲屋鳳腔繹痛銑桔圾匡盲錐佯萄摻痔必醇鐮欽焉屬哩垃松猾劇筏醚欣撣更踴洞常礬斤唉咯鄉(xiāng)霖眼瑞唇困緒幾凌羔氨猿陛宮窩同勢(shì)苔佑官兢娥希腹穴欄裔馳迅瞥就藏萍狼父爵刨鍵拽饋俐燴聰狐吉館駐輥重恍軟操萄談開如言聞紡摟笆唱頒暈救扒霄口蔗仲息譴攣猩吼俗吹帽鐵恰榷愈車著動(dòng)裂莉弧陽(yáng)捎醞敢淌恢鏈札貸籽遞垂捏韓坎陡瘴筋譏喘懊館耘您禾朗益掖文埃
4、帆從亥生舀師單片機(jī)最小系統(tǒng)實(shí)驗(yàn)報(bào)告基于ds18b20的溫度測(cè)量和秒表設(shè)計(jì)目錄單片機(jī)最小系統(tǒng)實(shí)驗(yàn)報(bào)告1一、單片機(jī)31.單片機(jī)簡(jiǎn)介32.最小系統(tǒng)33. at89c51單片機(jī)引腳說(shuō)明4二、18b20介紹5三、最小系統(tǒng)硬件設(shè)計(jì)81、設(shè)計(jì)結(jié)構(gòu)框圖82、系統(tǒng)時(shí)鐘電路83、復(fù)位電路8四、實(shí)驗(yàn)具體內(nèi)容91、實(shí)現(xiàn)led顯示器的選通并顯示字符92、基于ds18b20的溫度測(cè)量和秒表設(shè)計(jì)16五、總結(jié)29一、單片機(jī)1.單片機(jī)簡(jiǎn)介單片微型計(jì)算機(jī)簡(jiǎn)稱單片機(jī),是典型的嵌入式微控制器(microcontroller unit),常用英文字母的縮寫mcu表示單片機(jī),單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把
5、一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。單片機(jī)由運(yùn)算器,控制器,存儲(chǔ)器,輸入輸出設(shè)備構(gòu)成,相當(dāng)于一個(gè)微型的計(jì)算機(jī),和計(jì)算機(jī)相比,單片機(jī)只缺少了i/o設(shè)備。概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時(shí),學(xué)習(xí)使用單片機(jī)是了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。它最早是被用在工業(yè)控制領(lǐng)域at89c51提供以下標(biāo)準(zhǔn)功能:8k字節(jié)falsh閃速存儲(chǔ)器,256字節(jié)內(nèi)部ram,32個(gè)i/o口線,3個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)6向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)震蕩器及時(shí)鐘電路,同時(shí)at89c51可降至0hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式。
6、空閑方式停止cpu的工作,但允許ram,時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)持續(xù)工作。掉電方式保存ram中的內(nèi)容,但震蕩器停止工作并禁止其他所有部件工作直到下一個(gè)硬件復(fù)位。at89c51單片機(jī)主要功能特性: 兼容mcs51指令系統(tǒng) 4k可反復(fù)擦寫(>1000次)flash rom 32個(gè)雙向i/o口 8個(gè)中斷源 三個(gè)16位可編程定時(shí)/計(jì)數(shù)器 2.7-6.v的寬工作電壓范圍 時(shí)鐘頻率0-24mhz128x8bit內(nèi)部ram 五個(gè)外部中斷源 兩個(gè)串行中斷 可直接驅(qū)動(dòng)led 兩級(jí)加密位 低功耗睡眠功能 內(nèi)置一個(gè)模擬比較放大器 可編程uarl通道 軟件設(shè)置睡眠和喚醒功能2.最小系統(tǒng)單片機(jī)最
7、小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng). 對(duì)51系列單片機(jī)來(lái)說(shuō),單片機(jī)+晶振電路+復(fù)位電路,便組成了一個(gè)最小系統(tǒng).但是一般我們?cè)谠O(shè)計(jì)中總是喜歡把按鍵輸入、顯示輸出等加到上述電路中,成為小系統(tǒng)。3. at89c51單片機(jī)引腳說(shuō)明vcc:供電電壓。gnd:接地。p0口:p0口為一個(gè)8位漏級(jí)開路雙向i/o口,內(nèi)部無(wú)上拉電阻每腳可吸收8ttl門電流。當(dāng)p1口的管腳第一次寫1時(shí),被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。p1口:p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1
8、后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在flash編程和校驗(yàn)時(shí),p1口作為第八位地址接收。p2口:p2口為一個(gè)內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個(gè)ttl門電流,當(dāng)p2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),p2口的管腳被外部拉低,將輸出電流。p3口:p3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向i/o口,可接收輸出4個(gè)ttl門電流。當(dāng)p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流,這是由于上拉的緣故。p3口也可作為at89c51的一些
9、特殊功能口,如下表所示:p3.0 rxd(串行輸入口)p3.1 txd(串行輸出口)p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(記時(shí)器0外部輸入)p3.5 t1(記時(shí)器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲(chǔ)器寫選通)p3.7 /rd(外部數(shù)據(jù)存儲(chǔ)器讀選通)p3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。rst:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持rst腳兩個(gè)機(jī)器周期的高電平時(shí)間。ale/prog:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時(shí),ale端以不變的頻率周期輸出正脈沖信
10、號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時(shí), ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無(wú)效。/psen:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/psen有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/psen信號(hào)將不出現(xiàn)。/ea/vpp:當(dāng)/ea保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000h-ffffh),不管是否有內(nèi)部程序存儲(chǔ)器。
11、注意加密方式1時(shí),/ea將內(nèi)部鎖定為reset;當(dāng)/ea端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。xtal2:來(lái)自反向振蕩器的輸出。二、18b20介紹ds18b20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場(chǎng)合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號(hào)多種多樣,有l(wèi)tm8877,ltm8874等等。主要根據(jù)應(yīng)用場(chǎng)合的不同而改變其外觀。封裝后的ds18b20可用于電纜溝測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,機(jī)房測(cè)溫,農(nóng)業(yè)大棚測(cè)溫,潔凈室測(cè)溫,彈藥庫(kù)測(cè)溫等各種非極限溫度場(chǎng)合。耐磨
12、耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。(1)ds18b20(a)通過(guò)單線總線端口訪問(wèn) ds1820 的協(xié)議如下: 初始化void init_ds18b20() uchar x=0; dq = 1; /dq復(fù)位 delay_18b20(8); /稍做延時(shí) dq = 0; /單片機(jī)將dq拉低 delay_18b20(80); /精確延時(shí) 大于 480us dq = 1; /拉高總線 delay_18b20(14); x=dq; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay_18b20(20); rom 操作命令int readone
13、char(void)uchar i=0;uchar dat = 0;for (i=8;i>0;i-) dq = 0; / 給脈沖信號(hào) dat>>=1; dq = 1; / 給脈沖信號(hào) if(dq) dat|=0x80; delay_18b20(4); return(dat); 存儲(chǔ)器操作命令writeonechar(uchar dat) uchar i=0; for (i=8; i>0; i-) dq = 0; dq = dat&0x01; delay_18b20(5); dq = 1; dat>>=1; 執(zhí)行/數(shù)據(jù)readtemperature(v
14、oid)uchar a=0;uchar b=0;uint t=0;init_ds18b20();writeonechar(0xcc); / 跳過(guò)讀序號(hào)列號(hào)的操作writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換delay_18b20(100);init_ds18b20();writeonechar(0xcc); /跳過(guò)讀序號(hào)列號(hào)的操作writeonechar(0xbe); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度a=readonechar();b=readonechar();/傳感器返回值除16得實(shí)際溫度值/為了得到2位小數(shù)位,先乘100,再除16,考慮整型數(shù)據(jù)長(zhǎng)度,/技巧
15、處理后先乘25,再除4,除4用右移實(shí)現(xiàn)b<<=8;t=a+b;return(t);ds1820 需要嚴(yán)格的協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議包括幾種單線信號(hào)類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0 和讀1。所有這些信號(hào),除存在脈沖外,都是由總線控制器發(fā)出的。和 ds1820 間的任何通訊都需要以初始化序列開始,初始化序列見下圖。一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖表明ds1820 已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)(適當(dāng)?shù)膔om 命令和存儲(chǔ)器操作命令)(b)當(dāng)總線上只有一個(gè)器件時(shí),ds18b20讀溫度的流程為:復(fù)位發(fā)0cch skip rom命令發(fā)44h開始轉(zhuǎn)換命令延時(shí)復(fù)位發(fā)0cchskip rom命令
16、發(fā)0beh讀存儲(chǔ)器命令連續(xù)讀出兩個(gè)字節(jié)數(shù)據(jù)(即溫度)結(jié)束。Ø convert t 44h這條命令啟動(dòng)一次溫度轉(zhuǎn)換而無(wú)需其他數(shù)據(jù)。溫度轉(zhuǎn)換命令被執(zhí)行,而后ds1820 保持等待狀態(tài)。如果總線控制器在這條命令之后跟著發(fā)出讀時(shí)間隙,而ds1820 又忙于做時(shí)間轉(zhuǎn)換的話,ds1820 將在總線上輸出“0”,若溫度轉(zhuǎn)換完成,則輸出“1”。如果使用寄生電源,總線控制器必須在發(fā)出這條命令后立即起動(dòng)強(qiáng)上拉,并保持500ms。Ø read scratchpad beh這個(gè)命令讀取暫存器的內(nèi)容。讀取將從字節(jié)0 開始,一直進(jìn)行下去,直到第9(字節(jié)8,crc)字節(jié)讀完。如果不想讀完所有字節(jié),控制器
17、可以在任何時(shí)間發(fā)出復(fù)位命令來(lái)中止讀取。(c)ds18b20 用12 位存貯溫值度最高位為符號(hào)位,下圖為18b20 的溫度存儲(chǔ)方式,負(fù)溫度s=1 正溫度s=0lsb:d7 d6 d5 d4 d3 d2 d1 d0232221202-12-22-32-4msb:d7 d6 d5 d4 d3 d2 d1 d0sssss272625三、最小系統(tǒng)硬件設(shè)計(jì)1、設(shè)計(jì)結(jié)構(gòu)框圖2、系統(tǒng)時(shí)鐘電路 單片機(jī)內(nèi)部具有一個(gè)高增益反相放大器,用于構(gòu)成振蕩器。通常在引腳xtall和xtal2跨接石英晶體和兩個(gè)補(bǔ)償電容構(gòu)成自激振蕩器,系統(tǒng)時(shí)鐘電路結(jié)構(gòu)如圖:3、復(fù)位電路 單片機(jī)小系統(tǒng)采用上電自動(dòng)復(fù)位和手動(dòng)按鍵復(fù)位兩種方式實(shí)現(xiàn)系統(tǒng)
18、的復(fù)位操作。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。手動(dòng)復(fù)位要求在電源接通的條件下,在單片機(jī)運(yùn)行期間,用按鈕開關(guān)操作使單片機(jī)復(fù)位。顯示電路、鍵盤以及外部ram的擴(kuò)展根據(jù)具體電路的不同而不同四、實(shí)驗(yàn)具體內(nèi)容1、實(shí)現(xiàn)led顯示器的選通并顯示字符電路圖的繪制(1)打開proteus將所需元器件加入到對(duì)象選擇器窗口。picking components into the schematic單擊對(duì)象選擇器按鈕,如圖所示彈出“pick devices”頁(yè)面,在“keywords”輸入at89c51,系統(tǒng)在對(duì)象庫(kù)中進(jìn)行搜索查找,并將搜索結(jié)果顯示在“results”中,如圖所示。在“results”欄中的列
19、表項(xiàng)中,雙擊“at89c51”,則可將“at89c51”添加至對(duì)象選擇器窗口。 (2)接著在“keywords”欄中重新輸入7seg,如圖所示。雙擊“7seg-mpx6-ca-blue”,則可將“7seg-mpx6-ca-blue”(6位共陽(yáng)7段led顯示器)添加至對(duì)象選擇器窗口。(3)最后,在“keywords”欄中重新輸入res,選中“match whole words”,如圖所示。在“results”欄中獲得與res完全匹配的搜索結(jié)果。雙擊“res”,則可將“res”(電阻)添加至對(duì)象選擇器窗口。單擊“ok”按鈕,結(jié)束對(duì)象選擇。經(jīng)過(guò)以上操作,在對(duì)象選擇器窗口中,已有了7seg-mpx6-
20、ca-blue、at89c51、res三個(gè)元器件對(duì)象,若單擊at89c51,在預(yù)覽窗口中,見到at89c51的實(shí)物圖,如圖所示;若單擊res或7seg-mpx6-ca-blue,在預(yù)覽窗口中,見到res和7seg-mpx6-ca-blue的實(shí)物圖,如圖所示。此時(shí),我們已注意到在繪圖工具欄中的元器件按鈕處于選中狀態(tài)。 (4)放置元器件至圖形編輯窗口placing components onto the schematic在對(duì)象選擇器窗口中,選中7seg-mpx6-ca-blue,將鼠標(biāo)置于圖形編輯窗口該對(duì)象的欲放位置、單擊鼠標(biāo)左鍵,該對(duì)象被完成放置。同理,將at89c51和res放置到圖形編輯窗
21、口中。如圖所示。(5)放置總線至圖形編輯窗口單擊繪圖工具欄中的總線按鈕,使之處于選中狀態(tài)。將鼠標(biāo)置于圖形編輯窗口,單擊鼠標(biāo)左鍵,確定總線的起始位置;移動(dòng)鼠標(biāo),屏幕出現(xiàn)粉紅色細(xì)直線,找到總線的終了位置,單擊鼠標(biāo)左鍵,再單擊鼠標(biāo)右鍵,以表示確認(rèn)并結(jié)束畫總線操作。此后,粉紅色細(xì)直線被藍(lán)色的粗直線所替代,如圖所示。(6)元器件之間的連線proteus的智能化可以在你想要畫線的時(shí)候進(jìn)行自動(dòng)檢測(cè)。下面,我們來(lái)操作將電阻r1的右端連接到led顯示器的a端。當(dāng)鼠標(biāo)的指針靠近r1右端的連接點(diǎn)時(shí),跟著鼠標(biāo)的指針就會(huì)出現(xiàn)一個(gè)“×”號(hào),表明找到了r1的連接點(diǎn),單擊鼠標(biāo)左鍵,移動(dòng)鼠標(biāo)(不用拖動(dòng)鼠標(biāo)),將鼠標(biāo)的
22、指針靠近led顯示器的a端的連接點(diǎn)時(shí),跟著鼠標(biāo)的指針就會(huì)出現(xiàn)一個(gè)“×”號(hào),表明找到了led顯示器的連接點(diǎn),同時(shí)屏幕上出現(xiàn)了粉紅色的連接,單擊鼠標(biāo)左鍵,粉紅色的連接線變成了深綠色,同時(shí),線形由直線自動(dòng)變成了90º的折線,這是因?yàn)槲覀冞x中了線路自動(dòng)路徑功能。proteus具有線路自動(dòng)路徑功能(簡(jiǎn)稱war),當(dāng)選中兩個(gè)連接點(diǎn)后,war將選擇一個(gè)合適的路徑連線。war可通過(guò)使用標(biāo)準(zhǔn)工具欄里的“war”命令按鈕來(lái)關(guān)閉或打開,也可以在菜單欄的“tools”下找到這個(gè)圖標(biāo)。同理,我們可以完成其它連線。在此過(guò)程的任何時(shí)刻,都可以按esc鍵或者單擊鼠標(biāo)的右鍵來(lái)放棄畫線。(7)元器件與總線的連
23、線畫總線的時(shí)候?yàn)榱撕鸵话愕膶?dǎo)線區(qū)分,我們一般喜歡畫斜線來(lái)表示分支線。此時(shí)我們需要自己決定走線路徑,只需在想要拐點(diǎn)處單擊鼠標(biāo)左鍵即可,如圖所示。(8)給與總線連接的導(dǎo)線貼標(biāo)簽part labels單擊繪圖工具欄中的導(dǎo)線標(biāo)簽按鈕,使之處于選中狀態(tài)。將鼠標(biāo)置于圖形編輯窗口的欲標(biāo)標(biāo)簽的導(dǎo)線上,跟著鼠標(biāo)的指針就會(huì)出現(xiàn)一個(gè)“×”號(hào),如圖所示。表明找到了可以標(biāo)注的導(dǎo)線,單擊鼠標(biāo)左鍵,彈出編輯導(dǎo)線標(biāo)簽窗口,如圖所示。 在“string”欄中,輸入標(biāo)簽名稱(如a),單擊“ok”按鈕,結(jié)束對(duì)該導(dǎo)線的標(biāo)簽標(biāo)定。同理,可以標(biāo)注其它導(dǎo)線的標(biāo)簽,如圖所示。注意,在標(biāo)定導(dǎo)線標(biāo)簽的過(guò)程中,相互接通的導(dǎo)線必須標(biāo)注相同
24、的標(biāo)簽名。至此,我們便完成了整個(gè)電路圖的繪制。keilc與proteus連接調(diào)試進(jìn)入keilc vision2開發(fā)集成環(huán)境,創(chuàng)建一個(gè)新項(xiàng)目(project),并為該項(xiàng)目選定合適的單片機(jī)cpu器件(如:atmel公司的at89c51)。并為該項(xiàng)目加入keilc源程序。實(shí)驗(yàn)仿真圖:源程序如下:#include <reg51.h>#define leds 6 /led燈選通信號(hào)unsigned char code select=0x01,0x02,0x04,0x08,0x10,0x20;unsigned char code led_codes= 0xc0,0xf9,0xa4,0xb0,0
25、x99,/0-4 0x92,0x82,0xf8,0x80,0x90,/5-9 0x88,0x83,0xc6,0xa1,0x86;void main() char i=0,j=0; long int k; while(1) p2=0; p1=led_codesi; p2=selectj; for(k=3000;k>0;k-); /該led模型靠脈沖點(diǎn)亮,第i位靠脈沖點(diǎn)亮后,會(huì)自動(dòng)熄來(lái)頭。/修改循環(huán)次數(shù),改變點(diǎn)亮下一位之前的延時(shí),可得到不同的顯示效果。 i+; j+; if(j>5) j=0; if(i>14)i=0; 2、基于ds18b20的溫度測(cè)量和秒表設(shè)計(jì)設(shè)計(jì)方案:通過(guò)功能
26、鍵(外部中斷)選擇進(jìn)入不同的模式工作。當(dāng)k=0時(shí),工作在時(shí)間顯示模式,當(dāng)k=1時(shí),工作在秒表模式,其中開關(guān)1、2、3時(shí)調(diào)節(jié)自己需要倒計(jì)時(shí)的時(shí)間,沒按下時(shí),對(duì)應(yīng)的數(shù)值加一。開關(guān)4為開始/暫停按鍵。當(dāng)k=4時(shí),顯示采集回來(lái)的溫度。led1、led 2、led3燈是用來(lái)更直觀的看本設(shè)計(jì)工作在什么下的,led4為是閃爍,閃爍頻率為1s.(1)、硬件部分(2)軟件部分源程序:#include<reg51.h>#define dataport p0 /定義數(shù)據(jù)端口 程序中遇到dataport 則用p0 替換#define uchar unsigned char#define uint unsi
27、gned int/*位定義*/sbit menu = p32; /位聲明,外部中斷口,功能鍵sbit led1 = p15; /led燈sbit led2 = p16;sbit led3 = p17;sbit led4 = p14;sbit add_m= p10; /按鍵,調(diào)分sbit add_s= p11; /按鍵,調(diào)秒sbit add_us=p12; /按鍵,調(diào)微秒sbit reset =p13; /清零,秒表狀態(tài)下也是清零sbit latch1=p20; /定義鎖存使能端口 段鎖存sbit latch2=p21;/ 位鎖存sbit dq = p22; /定義18b20的通信端口 /*參數(shù)
28、定義*/uint a,b,j;uchar tempdata8;uint m,s,w, /時(shí)鐘 m0,s0,w0,/秒表 k;/狀態(tài)轉(zhuǎn)換標(biāo)志uchar code weima=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/位碼uchar code duanma=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/段碼/*函數(shù)聲明*/void delay_18b20(uint i);void init_ds18b20();int readonechar();writeonechar(uchar dat);readt
29、emperature(void);void display1();void init();void keyscan();void display(uchar a,uchar b,uchar c);void delay(uchar z);void wendu();/*主函數(shù)*/ void main()init(); /初始化while(1)if(k=0)/時(shí)間 led1=1; /點(diǎn)亮第一個(gè)燈,辨別是工作在時(shí)間模式下的 led2=0; led3=0; keyscan(); display(m0,s0,w0); /顯示時(shí)間 if(k=1)/倒計(jì)時(shí) led1=0; led2=1; /點(diǎn)亮第二個(gè)燈,辨別
30、是工作在秒表模式下的 led3=0; keyscan();display(m,s,w); if(k=2)/溫度 led1=0; led2=0; led3=1; /點(diǎn)亮第三個(gè)燈,辨別是工作在溫度模式下的 wendu(); void delay_18b20(uint i)/延時(shí)函數(shù)while(i-);/*18b20初始化*/void init_ds18b20() uchar x=0; dq = 1; /dq復(fù)位 delay_18b20(8); /稍做延時(shí) dq = 0; /單片機(jī)將dq拉低 delay_18b20(80); /精確延時(shí) 大于 480us dq = 1; /拉高總線 delay_18
31、b20(14); x=dq; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay_18b20(20);/*讀一個(gè)字節(jié)*/ int readonechar(void)uchar i=0;uchar dat = 0;for (i=8;i>0;i-) dq = 0; / 給脈沖信號(hào) dat>>=1; dq = 1; / 給脈沖信號(hào) if(dq) dat|=0x80; delay_18b20(4); return(dat);/*寫一個(gè)字節(jié)*/ writeonechar(uchar dat) uchar i=0; for (i=8; i>0; i-) dq =
32、0; dq = dat&0x01; delay_18b20(5); dq = 1; dat>>=1; /*讀取溫度*/readtemperature(void)uchar a=0;uchar b=0;uint t=0;init_ds18b20();writeonechar(0xcc); / 跳過(guò)讀序號(hào)列號(hào)的操作writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換delay_18b20(100);init_ds18b20();writeonechar(0xcc); /跳過(guò)讀序號(hào)列號(hào)的操作writeonechar(0xbe); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)
33、就是溫度a=readonechar();b=readonechar();/傳感器返回值除16得實(shí)際溫度值/為了得到2位小數(shù)位,先乘100,再除16,考慮整型數(shù)據(jù)長(zhǎng)度,/技巧處理后先乘25,再除4,除4用右移實(shí)現(xiàn)b<<=8;t=a+b;return(t);/*顯示函數(shù)*/void display1() static uchar i=0; dataport=0; /清空數(shù)據(jù),防止有交替重影 latch1=1; /段鎖存 latch1=0; dataport=weimai; /取位碼 latch2=1; /位鎖存 latch2=0; dataport=tempdatai; /取顯示數(shù)據(jù),
34、段碼 latch1=1; /段鎖存 latch1=0; i+; if(i=8)/在8位數(shù)碼管間。 i=0;/*溫度顯示*/void wendu()uint temph,templ,temp;uchar counter;if(counter- = 0)/溫度測(cè)量頻率沒有必要太高,太高反而影響數(shù)碼顯示temp = readtemperature(); counter = 10; if(temp&0x8000) tempdata7=0x40;/負(fù)號(hào)標(biāo)志 temp=temp; / 取反加1 temp +=1; else tempdata7=0; temph=temp>>4; tem
35、pl=temp&0x0f; templ=templ*6/10;/小數(shù)近似處理 if(temph/100=0) tempdata6=0;else tempdata6=duanmatemph/100; /十位溫度 if(temph/100=0)&&(temph%100)/10=0)/消隱 tempdata2=0;else tempdata5=duanma(temph%100)/10; /十位溫度 tempdata4=duanma(temph%100)%10|0x80; /個(gè)位溫度,帶小數(shù)點(diǎn) tempdata3=duanmatempl; tempdata1=0x39; /顯示
36、c符號(hào) tempdata0=0x00; display1();/*初始化函數(shù)*/void init()a=0;b=0;k=0;led1=0;/關(guān)閉所有燈led2=0;led3=0;led4=0;m0=12;/時(shí)間初始化s0=0;w0=0;m=0; /秒表初始化s=0;w=0;tmod=0x11; /定時(shí)器0,1工作于方式1;賦初值th0=(65536-5000)/256; /晶振12m,秒表定時(shí)器給初值 tl0=(65536-5000)%256;th1=(65536-50000)/256; /時(shí)間定時(shí)器給初值tl1=(65536-50000)%256;ea=1; /開總中斷,中斷允許ex0=1
37、; /秒表中斷et0=1;et1=1;it0=1; /邊沿觸發(fā)方式it1=1;px0=1;px1=1;tr0=0; /初始,秒表不工作tr1=1; /時(shí)鐘一開始工作/*定時(shí)器0中斷*/void timer0_int() interrupt 1/秒表th0=(65536-5000)/256;tl0=(65536-5000)%256;a+;if(a=2)/5000*2msa=0;if(w!=0)|(s!=0)|m)/判斷倒計(jì)時(shí)時(shí)間到?jīng)]。 w-; if(w=0)w=99;if(s!=0)|m) s-;if(s=0) s=59; if(m>0)m-;/*外部中斷0中斷函數(shù)*/void ex0_i
38、nt() interrupt 0 k+;/按下一次功能鍵,使得k值加一,進(jìn)入不同的工作模式if(k=3)k=0;/*定時(shí)器1中斷*/void timer1_int() interrupt 3/控制時(shí)鐘工作th1=(65536-50000)/256;tl1=(65536-50000)%256;b+;if(b=20)/50000*20=1s,說(shuō)明1秒的時(shí)間到了b=0;w0+;led4=led4;/讓第四個(gè)燈,隨時(shí)間閃爍 if(w0=60) /秒 w0=0; s0+; if(s0=60)/分 s0=0; s0+; if(m0=12)/時(shí) m0=0; /*按鍵掃描1*/void keyscan()/調(diào)
39、節(jié)秒表的初始時(shí)間 if(reset=0)/秒表開始暫停按鍵delay(10);/時(shí)間延遲if(reset=0)tr0=tr0;/定時(shí)器啟動(dòng)停止 if(add_us=0)/調(diào)usdelay(10);if(add_us=0) w+; if(w=100)w=0;while(!add_us)/按鍵釋放 display(m,s,w);/顯示 if(add_s=0)/每按下一次秒加一 delay(10); if(add_s=0) s+; if(s=60) s=0; while(!add_s) display(m,s,w); if(add_m=0)/每按下一次粉加一 delay(10); if(add_m=
40、0) m+; if(m=60) m=0; while(!add_m) display(m,s,w); /*時(shí)間顯示*/ void display(uchar a,uchar b,uchar c) unsigned char i; tempdata0=duanmaa/10; tempdata1=duanmaa%10; tempdata2=0x40; tempdata3=duanmab/10;/用于顯示分 tempdata4=duanmab%10; tempdata5=0x40; tempdata6=duanmac/10; /用于顯示秒 tempdata7=duanmac%10; for(i=0;i<8;i+) p0=weimai; /取位碼 latch2=1; /位鎖存 latch2=0; p0=tempdata7-i; /取顯示數(shù)據(jù),段碼 latch1=1; /段鎖存 latch1=0; delay(2); / 掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年K2教育AI個(gè)性化學(xué)習(xí)系統(tǒng)在促進(jìn)學(xué)生全面發(fā)展中的應(yīng)用報(bào)告
- 2025年醫(yī)藥行業(yè)研發(fā)外包(CRO)模式下的臨床試驗(yàn)風(fēng)險(xiǎn)管理報(bào)告
- 天然氣水合物開采技術(shù)設(shè)備供應(yīng)鏈分析2025年預(yù)研報(bào)告
- 2025網(wǎng)絡(luò)文學(xué)IP產(chǎn)業(yè)鏈融合與創(chuàng)新價(jià)值實(shí)現(xiàn)路徑報(bào)告
- 2025年氫燃料電池汽車關(guān)鍵零部件國(guó)產(chǎn)化市場(chǎng)格局與競(jìng)爭(zhēng)策略報(bào)告
- 2025年城市河道整治項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估與風(fēng)險(xiǎn)評(píng)估技術(shù)發(fā)展動(dòng)態(tài)研究報(bào)告
- 2025年農(nóng)業(yè)產(chǎn)業(yè)化龍頭企業(yè)品牌建設(shè)與市場(chǎng)拓展策略研究報(bào)告
- 2025年工業(yè)互聯(lián)網(wǎng)平臺(tái)邊緣計(jì)算硬件架構(gòu)邊緣計(jì)算設(shè)備安全防護(hù)策略報(bào)告
- 房地產(chǎn)企業(yè)2025年政策風(fēng)險(xiǎn)應(yīng)對(duì)與財(cái)務(wù)穩(wěn)健性提升報(bào)告
- 2025年零售行業(yè)私域流量運(yùn)營(yíng)策略:線上線下融合與消費(fèi)者洞察報(bào)告
- 物業(yè)車位收費(fèi)協(xié)議書
- 裝飾工程掛靠協(xié)議書
- 山東省濟(jì)南市2025屆高三三模地理試卷(含答案)
- 2025年房產(chǎn)贈(zèng)與合同示范文本
- 口鼻腔吸痰試題及答案
- 游樂園安全培訓(xùn)課件
- 2024年新疆拜城縣事業(yè)單位公開招聘村務(wù)工作者筆試題帶答案
- 江蘇省海安中學(xué)、金陵中學(xué)、宿遷中學(xué)三校2024-2025學(xué)年高三年級(jí)下學(xué)期4月聯(lián)考測(cè)試 化學(xué)試卷(含答案)
- 2025年企業(yè)管理專業(yè)測(cè)試試題及答案
- ERAS理念在婦科圍手術(shù)期中的應(yīng)用
- 2025年拖鞋市場(chǎng)調(diào)研報(bào)告
評(píng)論
0/150
提交評(píng)論