單片機(jī)課程設(shè)計(jì)--數(shù)字時(shí)鐘及溫度采集系統(tǒng)的設(shè)計(jì)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  題 目:數(shù)字時(shí)鐘及溫度采集系統(tǒng)的設(shè)計(jì)</p><p><b>  學(xué) 院:</b></p><p><b>  專 業(yè):</b></p><p><b>  姓 名: </b></p><p>  學(xué) 號(hào): &

2、lt;/p><p>  指導(dǎo)老師: </p><p><b>  設(shè)計(jì)時(shí)間: </b></p><p><b>  目 錄</b></p><

3、;p>  1總設(shè)計(jì)方案- 3 -</p><p>  1.1主控制器選擇方案- 3 -</p><p>  1.2溫度芯片選擇方案- 4 -</p><p>  1.3顯示選擇方案- 5 -</p><p>  1.4數(shù)字時(shí)鐘方案- 6 -</p><p>  1.5鍵盤選擇方案- 6 -</p

4、><p>  2硬件設(shè)計(jì)- 7 -</p><p>  2.1顯示模塊設(shè)計(jì)- 7 -</p><p>  2.2測(cè)溫模塊設(shè)計(jì)- 7 -</p><p>  2.3矩陣式鍵盤設(shè)計(jì)- 7 -</p><p>  3軟件設(shè)計(jì)- 8 -</p><p>  3.1主程序流程圖- 8 -</

5、p><p>  3.2測(cè)溫流程圖- 8 -</p><p>  3.3時(shí)鐘顯示流程圖- 9 -</p><p>  4系統(tǒng)調(diào)試過程- 10 -</p><p>  4.1系統(tǒng)調(diào)試流程- 10 -</p><p>  4.2部分實(shí)物測(cè)試畫面- 11 -</p><p>  5設(shè)計(jì)心得體會(huì)-

6、 12 -</p><p>  6總結(jié)- 15 -</p><p>  參考文獻(xiàn)- 17 -</p><p>  附錄一總體電路原理圖- 18 -</p><p>  附錄二程序清單- 19 -</p><p>  附錄三元器件清單- 24 -</p><p>  數(shù)字時(shí)鐘及溫度采集系

7、統(tǒng)的設(shè)計(jì)</p><p>  摘要:溫度和時(shí)鐘作為常用的物理量在我們的日常生活中起著十分重要的作用,所以對(duì)數(shù)字時(shí)鐘及溫度采集的設(shè)計(jì)也十分必要。在此介紹一種智能數(shù)字時(shí)鐘及溫度采集系統(tǒng),本設(shè)計(jì)采用LCD液晶屏幕顯示系統(tǒng),以STC89C52RC單片機(jī)為核心,由鍵盤、定時(shí)鬧鈴、日期提醒、溫度顯示等功能模塊組成,該系統(tǒng)可以方便的實(shí)現(xiàn)溫度的采集和報(bào)警,可以根據(jù)需要任意設(shè)置上下限報(bào)警溫度。適合于我們?nèi)粘I詈凸ぁ⑥r(nóng)業(yè)生產(chǎn)中的溫

8、度測(cè)量,也可以當(dāng)做溫度處理模塊潛入其他系統(tǒng)中,作為其他主系統(tǒng)的輔助擴(kuò)展。DS18B20與AT89C52結(jié)合實(shí)現(xiàn)最簡(jiǎn)溫度報(bào)警系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,抗干擾能力強(qiáng),適合于惡劣環(huán)境下進(jìn)行現(xiàn)場(chǎng)溫度測(cè)量,有廣泛的應(yīng)用前景。</p><p>  關(guān)鍵詞:液晶顯示器LCD DS18b20 4×4鍵盤 單片機(jī)</p><p><b>  1總設(shè)計(jì)方案</b></p

9、><p>  本系統(tǒng)要求完成對(duì)時(shí)間顯示及環(huán)境溫度的采集,并進(jìn)行處理和顯示。因此,首要解決的是采用哪種微控制器以及哪種傳感器來對(duì)時(shí)間及溫度進(jìn)行采集處理包括計(jì)算,其次是采集到的時(shí)間及溫度將通過哪種方式去顯示或通過哪種方式顯示出來讓人一目了然。系統(tǒng)總設(shè)計(jì)框圖如下所示:</p><p>  圖1 系統(tǒng)總設(shè)計(jì)框圖</p><p>  1.1主控制器選擇方案</p>

10、<p>  目前是單片機(jī)產(chǎn)品百花齊放,百家爭(zhēng)鳴的時(shí)期。世界上各大芯片制造公司都推出了自己的芯片,例如我們常見的Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、Microchip公司的PIC系列、Atmel的AT90S系列等。不同型號(hào)的單片機(jī)功能各異、開發(fā)裝置也不兼容。我們最終選用了STC89C52單片機(jī)。STC89C52是高性能CMOS8位單片機(jī),片內(nèi)含8KB的可反復(fù)擦寫的只讀程序存儲(chǔ)器(P

11、EROM)和256B的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),與標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及8051產(chǎn)品引腳兼容,片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲(chǔ)單元,功能強(qiáng)大STC89C52單片機(jī)適用于許多較為復(fù)雜控制應(yīng)用場(chǎng)合。盡管STC89C52單片機(jī)現(xiàn)在并不是最完善最先進(jìn)的單片機(jī),但是就其功能及相關(guān)資料在市面上非常豐富,編譯器已經(jīng)比較優(yōu)化,我們對(duì)其開發(fā)環(huán)境及開發(fā)語言也相當(dāng)熟悉,因此我們選擇STC89C5

12、2單片機(jī)作為主控制器來實(shí)現(xiàn)本設(shè)計(jì)系統(tǒng)。</p><p>  圖2 STC89C52芯片</p><p>  1.2溫度芯片選擇方案</p><p>  對(duì)于常用的中、低溫度范圍的測(cè)量,一般可使用熱敏電阻,半導(dǎo)體溫度傳感器等。但利用這些器件構(gòu)成的測(cè)溫電路線性度不高,電路組成較復(fù)雜,往往需要使用A/D轉(zhuǎn)換器等,使得系統(tǒng)成本增加,互換性差且不便于調(diào)試維護(hù)?,F(xiàn)在很多公司設(shè)計(jì)

13、制造了集成電路的溫度傳感器,使得芯片和單片機(jī)之間的連接相當(dāng)簡(jiǎn)單。在這些集成溫度傳感器中,以美國(guó)的DALLAS公司生產(chǎn)的DS18B20的性能較為突出。</p><p>  DS18B20的主要特性:</p><p>  單線接口,僅需一根接口線與單片機(jī)連接。</p><p>  每個(gè)芯片的內(nèi)部存儲(chǔ)器中存儲(chǔ)有該器件唯一的64位序列號(hào)。</p><p&

14、gt;  無需外圍元件即可實(shí)現(xiàn)溫度測(cè)量。</p><p>  可通過數(shù)據(jù)線供電,工作電壓范圍為3.0~5.5V。</p><p>  測(cè)溫范圍為-55~+125℃,在-10~+85℃范圍內(nèi)精度為±0.5℃.</p><p>  用戶可以選擇9~12位的分辨率,其中9位分辨率轉(zhuǎn)換時(shí)間為93.75ms,12位分辨率轉(zhuǎn)換時(shí)間為750ms。</p>

15、<p>  用戶可自行設(shè)定溫度報(bào)警的上、下限,其值在斷電后仍可保存,利用報(bào)警搜索命令可識(shí)別超限報(bào)警的器件。</p><p>  DS18B20的引腳排列如下圖所示:</p><p>  圖3 DS18B20引腳圖</p><p><b>  1.3顯示選擇方案</b></p><p>  方案一:直接用數(shù)碼管

16、或者7段數(shù)碼管加MAX7219驅(qū)動(dòng)顯示。MAX7219驅(qū)動(dòng)7段數(shù)碼管采用低電壓掃描驅(qū)動(dòng)具有:可以節(jié)約單片機(jī)I/O口,耗電少、使用壽命長(zhǎng)、成本低、亮度高、故障少、視角大、可視距離遠(yuǎn)等特點(diǎn);但是顯示單一,只能顯示數(shù)字和幾個(gè)字母。就本設(shè)計(jì)而言需要顯示很多的操作提示信息和報(bào)警信息,數(shù)碼管是難以達(dá)到的;且本設(shè)計(jì)需要單片機(jī)I/O口并不多,就STC89C52的資源來說不需要考慮I/O口資源不足的問題。</p><p>  方案

17、二:LED點(diǎn)陣顯示。LED點(diǎn)陣可以顯示多種字符以及圖形,可視距離遠(yuǎn),可用軟件進(jìn)行調(diào)制,有很強(qiáng)的兼容性以及可操作性。但是需要占要很多系統(tǒng)資源來對(duì)其控制;而就STC89C52單片機(jī)的速度或系統(tǒng)資源來說控制LED點(diǎn)陣的效果并不很理想,而且LED點(diǎn)陣結(jié)構(gòu)比較龐大,不利隨身攜帶。</p><p>  方案三:LCD液晶顯示。LCD液晶零輻射、低功耗、散熱小、體積小、圖像還原精確、字符顯示銳利控制簡(jiǎn)單等。與數(shù)碼管相比顯得更為

18、專業(yè)、漂亮;液晶顯示屏以其微功耗體積小,顯示內(nèi)容豐富、超薄輕巧、使用方便等諸多優(yōu)點(diǎn),在通訊、儀器儀表、電子設(shè)備、家用電器等低功耗應(yīng)用系統(tǒng)中得到原來越廣泛的應(yīng)用,使這些電子設(shè)備的人機(jī)界面變得越來越形象,目前已廣泛的應(yīng)用于電子表、計(jì)算器、IC卡電話機(jī)機(jī),液晶電視機(jī)、掌上玩具等許多方面。</p><p>  對(duì)于本設(shè)計(jì)來說只是顯示字符串和電子鐘,溫度的顯示,不需要遠(yuǎn)距離觀察,如果需要遠(yuǎn)距離觀察的話應(yīng)該首選LED點(diǎn)陣顯示

19、。本例結(jié)合需要及實(shí)際經(jīng)濟(jì)情況綜合考慮使用液晶LCD1602作為時(shí)間、溫度及信息顯示。</p><p>  液晶LCD1602如下圖所示:</p><p>  圖4 LCD1602液晶顯示器</p><p><b>  1.4數(shù)字時(shí)鐘方案</b></p><p>  數(shù)字時(shí)鐘根據(jù)需要可采用以下兩種方案實(shí)現(xiàn):</p&g

20、t;<p>  方案一:方案完全用軟件實(shí)現(xiàn)數(shù)字時(shí)鐘。原理為:在單片機(jī)內(nèi)部存儲(chǔ)器設(shè)三個(gè)字節(jié)分別存放時(shí)鐘的時(shí)、分、秒信息。利用定時(shí)器與軟件結(jié)合實(shí)現(xiàn)1秒定時(shí)中斷,每產(chǎn)生一次中斷,存儲(chǔ)器內(nèi)相應(yīng)的秒值加1;若秒值達(dá)到60,則將其清零,并將相應(yīng)的分字節(jié)值加1;若分值達(dá)到60,則清零分字節(jié),并將時(shí)字節(jié)值加1;若時(shí)值達(dá)到24,則將時(shí)字節(jié)清零。該方案具有硬件電路簡(jiǎn)單的特點(diǎn),但當(dāng)單片機(jī)不上電,程序?qū)⒉粓?zhí)行。而且由于每次執(zhí)行程序時(shí),定時(shí)器都要重

21、新賦初值,所以該時(shí)鐘精度不高。</p><p>  方案二:方案采用Dallas公司的專用時(shí)鐘芯片DS1302。該芯片內(nèi)部采用石英晶體振蕩器,其芯片精度不大于10ms/年,且具有完備的時(shí)鐘鬧鐘功能,因此,可直接對(duì)其以用于顯示或設(shè)置,使得軟件編程相對(duì)簡(jiǎn)單。為保證時(shí)鐘在電網(wǎng)電壓不足或突然掉電等突發(fā)情況下仍能正常工作,芯片內(nèi)部包含鋰電池。當(dāng)電網(wǎng)電壓不足或突然掉電時(shí),可使系統(tǒng)自動(dòng)轉(zhuǎn)換到內(nèi)部鋰電池供電系統(tǒng)。而且即使系統(tǒng)不上

22、電,程序不執(zhí)行時(shí),鋰電池也能保證芯片的正常運(yùn)行,以備隨時(shí)提供正確的時(shí)間。</p><p>  數(shù)字時(shí)鐘是作為我們的拓展方案進(jìn)行的,由于時(shí)間緊迫,器件選買時(shí)間脫節(jié),因此我們選用方案一軟件實(shí)現(xiàn)數(shù)字時(shí)鐘。</p><p><b>  1.5鍵盤選擇方案</b></p><p>  鍵盤有獨(dú)立式和矩陣式。獨(dú)立式鍵盤一線一鍵,按鍵識(shí)別簡(jiǎn)單,但占用較多口線

23、,適用于簡(jiǎn)單的鍵盤設(shè)置中。矩陣式鍵盤按鍵識(shí)別采用掃描法或線路反轉(zhuǎn)法,編程復(fù)雜,但節(jié)省口資源,適用于復(fù)雜的鍵盤設(shè)置中。</p><p>  本設(shè)計(jì)中我們兩種鍵盤都用到了,利用獨(dú)立式按鍵進(jìn)行不同顯示界面的切換;利用矩陣式鍵盤進(jìn)行時(shí)鐘時(shí)間設(shè)置,溫度上,下限報(bào)警參數(shù)設(shè)置,需用按鍵較多,且為了以后將鍵盤嵌入到其他系統(tǒng)中使用,特將其獨(dú)立出來成一個(gè)模塊,我們選擇了4×4矩陣式鍵盤來調(diào)節(jié)溫度報(bào)警的上、下限,進(jìn)行時(shí)間的設(shè)

24、置。</p><p><b>  2硬件設(shè)計(jì)</b></p><p><b>  2.1顯示模塊設(shè)計(jì)</b></p><p>  采用LCD1602液晶顯示,其中RS接P1.2;RW接P1.3;E接p1.4;D0~接P0.0~P0.7,具體如圖所示:</p><p>  圖5 LCD液晶顯示模塊&

25、lt;/p><p><b>  2.2測(cè)溫模塊設(shè)計(jì)</b></p><p>  DS18B20采用一線傳輸協(xié)議,可以使用外部電源工作方式也可以采用寄生電源工作方式,本設(shè)計(jì)中采用外部電源工作模式,具體電路如圖</p><p><b>  圖6 測(cè)溫模塊</b></p><p>  2.3矩陣式鍵盤設(shè)計(jì)&l

26、t;/p><p>  設(shè)計(jì)采用矩陣式鍵盤進(jìn)行時(shí)鐘設(shè)置,溫度上下限的調(diào)節(jié),如圖所示:</p><p><b>  圖7矩陣式鍵盤</b></p><p><b>  3軟件設(shè)計(jì)</b></p><p><b>  3.1主程序流程圖</b></p><p> 

27、 通過外部中斷0控制顯示界面的轉(zhuǎn)換,每按一次按鍵產(chǎn)生一次中斷,顯示界面轉(zhuǎn)換一次 。</p><p><b>  圖8 主流程圖</b></p><p><b>  3.2測(cè)溫流程圖</b></p><p>  通過單片機(jī)讀取ds18b20溫度值并顯示,若超過所設(shè)報(bào)警上下限則報(bào)警。</p><p>&

28、lt;b>  圖9 測(cè)溫流程圖</b></p><p>  3.3時(shí)鐘顯示流程圖</p><p>  通過定時(shí)器0中斷產(chǎn)生時(shí)間基準(zhǔn)1s,并按照一定規(guī)律產(chǎn)生時(shí)間。</p><p>  圖10 時(shí)鐘顯示流程圖</p><p><b>  4系統(tǒng)調(diào)試過程</b></p><p><

29、;b>  4.1系統(tǒng)調(diào)試流程</b></p><p>  系統(tǒng)調(diào)試流程過程如下圖所示:</p><p>  圖11 系統(tǒng)調(diào)試流程圖</p><p>  4.2部分實(shí)物測(cè)試畫面</p><p>  圖12 開機(jī)畫面顯示</p><p>  圖13 小組成員顯示</p><p>

30、  圖 14 溫度信息顯示</p><p>  圖 15 時(shí)鐘顯示</p><p><b>  5設(shè)計(jì)心得體會(huì) </b></p><p><b>  設(shè)計(jì)心得體會(huì)</b></p><p><b>  - </b></p><p>  課程設(shè)計(jì)是我

31、們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不可少的過程?!扒Ю镏惺加谧阆隆保ㄟ^這次課程設(shè)計(jì),我深深體會(huì)到這句千古名言的真正含義。我今天認(rèn)真的進(jìn)行課程設(shè)計(jì),學(xué)會(huì)腳踏實(shí)地邁開這一步,就是為明天能穩(wěn)健地在社會(huì)大潮中奔跑打下堅(jiān)實(shí)的基礎(chǔ)。</p><p>  一周的課程設(shè)計(jì)很快結(jié)束了,短短的一周時(shí)間里,不僅檢驗(yàn)了我們課堂上所學(xué)的理論知識(shí),也考驗(yàn)了我們團(tuán)隊(duì)之間的分工合作能力。作為組里唯一的女生

32、,我負(fù)責(zé)撰寫論文,這并不意味著等我的搭檔完成軟硬件工作之后才開始工作。在組隊(duì)之后,我們先各抒己見,提出自己覺得合適的課題,最終討論總結(jié)得出一致意見。之后我們分頭找資料,最后統(tǒng)一出設(shè)計(jì)雛形。在進(jìn)行實(shí)際軟硬件焊接調(diào)試過程中,我主要幫隊(duì)友做一些輔助工作。論文這里的要求的確挺高的,但對(duì)自己也是一種挑戰(zhàn)。不過我覺得只有想不到的,沒有做不到的,面對(duì)問題,不能逃避。只有一步一步的去發(fā)現(xiàn)去探索才可以解決問題。</p><p> 

33、 課程設(shè)計(jì)就是要我們?cè)趯?shí)踐中尋找理論的價(jià)值。我這次深刻的體會(huì)到了深刻的理解理論知識(shí)是實(shí)踐成功的根本,細(xì)節(jié)決定成敗。團(tuán)隊(duì)的合作很重要,只要很好的利用團(tuán)隊(duì)合作事情就會(huì)事倍功半。在以后的學(xué)習(xí)工作中我會(huì)總結(jié)這次的經(jīng)驗(yàn)努力做到最好。這次的設(shè)計(jì)讓我有很大的成就感,雖然有時(shí)候也有一整天什么也做不出來的郁悶,但自己學(xué)會(huì)一些東西是這么愉快的一件事。通過這次學(xué)習(xí),讓我對(duì)各種電路都有了大概的了解。所以說,坐而言不如立而行,對(duì)于這些電路還是應(yīng)該自己動(dòng)手實(shí)際操作

34、才會(huì)有深刻理解。我真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。</p><p>  在本次設(shè)計(jì)完成之際,我心中滿懷感激之情,在此我代表我們?nèi)M向老師,同學(xué)和身邊所有關(guān)心過我們組的和為我們組提供過幫助的人表示感謝!</p><p><b>  設(shè)

35、計(jì)心得體會(huì)</b></p><p><b>  - </b></p><p>  經(jīng)過這一周課程設(shè)計(jì)的實(shí)際鍛煉,我對(duì)于單片機(jī)及一些元器件的認(rèn)識(shí)有了極大的提高,同時(shí)我在編程方法及技巧方面也得到很大的鍛煉。作為此次課程設(shè)計(jì)的軟件主要負(fù)責(zé)人,要想編程及調(diào)試成功,首先要了解并掌握所用到的元器件,此次課程設(shè)計(jì)中我們用到了lcd、4*4矩陣鍵盤及ds18b20等,因此

36、在編程之前我好好學(xué)習(xí)了這些方面的知識(shí),同時(shí)也熟練了一下單片機(jī)方面的知識(shí)。在編程調(diào)試過程中我深深體會(huì)到分階段、有次序編程調(diào)試以及編程算法和編程思想的重要性,在編程之前首先要確定所要實(shí)現(xiàn)的一些基本功能,并針對(duì)各功能分別進(jìn)行編程調(diào)試,然后再一個(gè)個(gè)將各功能模塊融合調(diào)試,所定義的功能都實(shí)現(xiàn)后,然后可以再增加功能并調(diào)試,另外,在每一環(huán)節(jié)的編程調(diào)試中,都首先要在頭腦中形成一個(gè)編程算法,即要明確一個(gè)功能一步步的實(shí)現(xiàn)過程,這樣編程就容易多了,出現(xiàn)問題后,

37、首先對(duì)導(dǎo)致問題的原因進(jìn)行猜測(cè)并逐一嘗試排除,最終找出問題的根源并解決,編程調(diào)試過程可能比較繁瑣,有時(shí)候一個(gè)問題很難找出其原因,不過在每一步的成功之后,都會(huì)感到無比的喜悅,同時(shí)也激勵(lì)了我不斷前進(jìn)的意志。此次課程設(shè)計(jì)讓我感受最深的是團(tuán)隊(duì)合作的重要性,我們組員之間在這次課程設(shè)計(jì)中相互配合非</p><p>  最后,感謝老師長(zhǎng)期以來的辛勤教誨!</p><p><b>  設(shè)計(jì)心得體會(huì)

38、 </b></p><p><b>  - </b></p><p>  本次課程設(shè)計(jì)中,我主要負(fù)責(zé)電路板各模塊的布局及焊接,設(shè)計(jì)系統(tǒng)的仿真(proteus軟件)及部分程序的調(diào)試。</p><p>  對(duì)我自己而言,初次接觸數(shù)字電子時(shí)鐘及溫度采集的課設(shè)是非常感興趣的,因?yàn)樽约合矚g動(dòng)手焊接電路板,所以組內(nèi)我負(fù)責(zé)硬件部分。辛苦雖然是不可

39、避免的,但收獲還是令人尤為欣慰。知識(shí)固然得到了鞏固和提高,我一直相信在實(shí)踐過程中的切身體會(huì)將會(huì)使我在以后學(xué)習(xí)中更加透徹的理解知識(shí)。我不僅對(duì)理論有了更深一步的認(rèn)識(shí),而且增強(qiáng)了和外界技術(shù)的溝通,還培養(yǎng)了自學(xué)能力和分析解決問題的能力,更重要的是,培養(yǎng)了克服困難的勇氣和信心。</p><p>  一開始對(duì)用到的主要元器件(LCD1602、DS18b20)的結(jié)構(gòu)、原理并不是很了解,通過查閱資料,學(xué)習(xí)電路原理及各部件的組成,

40、了解芯片功能以及各引腳如何接線,最主要的是清楚地知道電路設(shè)計(jì)中用到的各元器件的功能作用和型號(hào)。學(xué)習(xí)了這些相關(guān)的知識(shí)后就是進(jìn)行電路板的焊接工作了,當(dāng)然不是直接開始動(dòng)手,而是要對(duì)電路板上的各模塊進(jìn)行布局,這樣在焊接過程中就不會(huì)感覺到電路很亂很難看,也不會(huì)影響到后面插線等一系列工作。焊接電路過程中并沒有出現(xiàn)什么大的問題,最多就是接線連接錯(cuò)誤,通過和組員的認(rèn)真討論和認(rèn)真仔細(xì)就不會(huì)有這種錯(cuò)誤了。我清楚的明白了合理的布線對(duì)于別的組員看電路板以及之后

41、有錯(cuò)誤時(shí)檢查非常重要。</p><p>  Proteus軟件仿真的認(rèn)識(shí),Proteus軟件提供了數(shù)千種元器件和多達(dá)30多個(gè)元件庫。在Proteus軟件中,理論上同一種儀器可以在一個(gè)電路中隨意的調(diào)用。除了現(xiàn)實(shí)存在的儀器外,Proteus還可以以圖形的方式實(shí)時(shí)地顯示線路上變化的信號(hào)。虛擬儀器儀表具有理想的參數(shù)指標(biāo),可減少儀器對(duì)測(cè)量結(jié)果的影響。Proteus提供了比較豐富的測(cè)試信號(hào)用于電路的測(cè)試。這些測(cè)試信號(hào)包括模擬

42、信號(hào)和數(shù)字信號(hào)。</p><p>  最后通過組員的編程序修正調(diào)試,數(shù)字電子時(shí)鐘及溫度采集系統(tǒng)已經(jīng)完成,達(dá)到了設(shè)計(jì)要求。</p><p>  本次我們?cè)O(shè)計(jì)的數(shù)字電子時(shí)鐘及溫度采集系統(tǒng)已經(jīng)完成,達(dá)到了設(shè)計(jì)要求。在這一周實(shí)習(xí)的過程中讓我受益匪淺,這是一個(gè)理論結(jié)合實(shí)踐的過程。雖然在過程中遇到了許多問題,但是都通過查閱資料,和同學(xué)討論得到了解決。在這次實(shí)習(xí)中,我自己焊接電路,這是一個(gè)對(duì)于我們理解理

43、論知識(shí)非常有用的過程。在這一系列設(shè)計(jì)的過程中通過我們共同的努力,學(xué)習(xí)到了不少知識(shí)和經(jīng)驗(yàn),感受頗多。通過這一次實(shí)踐,增強(qiáng)了我們的動(dòng)手能力,提高和鞏固了單片機(jī)方面的知識(shí),特別是軟件方面。從中增強(qiáng)了我們的團(tuán)隊(duì)合作精神,并讓我們認(rèn)識(shí)到把理論應(yīng)用到實(shí)踐中去是多么重要。同時(shí),我的人際交流能力得到鍛煉。人非生而知之者!人的學(xué)識(shí)總是不能面面俱到的,這就要求我們必須善于借鑒別人的成功經(jīng)驗(yàn)或失敗教訓(xùn),使自己少走彎路。在以后的時(shí)間里面我將會(huì)用這種精神去工作。

44、</p><p><b>  6總結(jié)</b></p><p>  本設(shè)計(jì)是以溫度采集及時(shí)鐘顯示為總目標(biāo),以STC89C52單片機(jī)最小應(yīng)用系統(tǒng)為總控制中心,外圍設(shè)計(jì)有溫度采集電路,矩陣式鍵盤,LCD顯示器等。</p><p>  本設(shè)計(jì)的重點(diǎn)、難點(diǎn)是:</p><p> ?。?)要掌握LCD顯示器、溫度傳感器的原理、結(jié)構(gòu)、

45、應(yīng)用等;</p><p> ?。?)熟悉C語言編程技術(shù),實(shí)現(xiàn)單片機(jī)對(duì)溫度的調(diào)節(jié)控制;</p><p> ?。?)字符串之間的轉(zhuǎn)換及顯示;</p><p> ?。?)整體電路的仿真調(diào)試。</p><p>  本次設(shè)計(jì)優(yōu)點(diǎn):采用的單片機(jī)STC89C52 性價(jià)比高;DS18B20溫度傳感器轉(zhuǎn)化溫度的方法非常簡(jiǎn)潔且精度高、測(cè)試范圍較廣。由于時(shí)間及精力

46、所限,對(duì)溫度控制系統(tǒng)做了整體設(shè)計(jì),具體實(shí)現(xiàn)了其中的溫度報(bào)警部分設(shè)計(jì),即溫度控制系統(tǒng)的采集、顯示及報(bào)警模塊。實(shí)物圖如下所示:</p><p><b>  圖16 實(shí)物圖 </b></p><p><b>  致謝</b></p><p>  在論文完成之際,我們首先要向劉老師,王老師表示最真摯的謝意。兩位老師不僅工作認(rèn)真,他

47、們嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度令我們受益匪淺,給我們以后的生活學(xué)習(xí)帶來了深遠(yuǎn)的影響。在此衷心的向老師表達(dá)我們的感激之情。</p><p>  我們還要特別感謝各位同學(xué)給予了我們無私的幫助,他們幫我們解決了很多設(shè)計(jì)中遇到的難題。由于學(xué)識(shí)有限,加之時(shí)間倉促,文中不免有錯(cuò)誤和待改進(jìn)之處,真誠歡迎老師、同學(xué)提出寶貴意見。</p><p><b>  參考文獻(xiàn):</b></p>

48、<p>  [1]柴鈺,單片機(jī)原理及應(yīng)用 西安電子科技大學(xué)出版社,2009</p><p>  [2]張義和,陳敵北,例說8051[M]北京 人民郵電出版社,2006</p><p>  [3]李丹妮,單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)[J]九江學(xué)院報(bào)2005</p><p>  [4]謝龍漢,莫衍,Proteus電子電路設(shè)計(jì)及仿真 電子工業(yè)出版社,2012<

49、/p><p>  [5]劉篤仁,韓保君,傳感器原理及應(yīng)用技術(shù) 西安電子科技大學(xué)出版社,2008</p><p>  附錄一總體電路原理圖</p><p><b>  附錄二程序清單</b></p><p>  #include<reg51.h></p><p>  #define ucha

50、r unsigned char</p><p>  #define uint unsigned int</p><p>  sbit speak=P1^0;//蜂鳴器接口定義</p><p>  sbit dq=P1^6;//ds18b20數(shù)據(jù)線接口定義</p><p>  sbit RS=P1^2;</p><p>

51、  sbit RW=P1^3;</p><p>  sbit E=P1^4;</p><p><b>  /*函數(shù)定義*/</b></p><p>  void delay(uint k);</p><p>  void init_watch(void);</p><p>  void lcd_i

52、nit(void);</p><p>  void showchar(void);</p><p>  void lcd_write_command(uchar dat);</p><p>  void lcd_write_data(uchar dat);</p><p>  void display(uchar *p);</p>

53、<p>  void watch_show(void);</p><p>  uint read_temp(void);</p><p>  void ds18b20_reset(void);</p><p>  uchar ds18b20_readdata(void);</p><p>  void ds18b20_write

54、data(uchar dat);</p><p>  void ds18b20_temp_display(void);</p><p>  void key_scan(void);</p><p>  uchar code table[]={0x10,0x06,0x09,</p><p>  0x08,0x08,0x09,0x06,0x00}

55、;//字符℃</p><p>  uchar tab[]={0x30,0x31,0x32,0x33,0x34,</p><p>  0x35,0x36,0x37,0x38,0x39};//0~9ASCII碼</p><p>  /*字符串及變量定義*/</p><p>  uchar code str1[]={"currentT:&

56、quot;};</p><p>  uchar code str2[]={"TH:"};</p><p>  uchar code str3[]={"TL:"};</p><p>  uchar code str4[]={"member1:"};</p><p>  uchar co

57、de str5[]={"wang yan li!"};</p><p>  uchar code str6[]={"member2:"};</p><p>  uchar code str7[]={"lan rong!"};</p><p>  uchar code str8[]={"member

58、3:"};</p><p>  uchar code str9[]={"chen qiu qiu!"};</p><p>  uchar code str10[]={" Welcome"};</p><p>  uchar code str11[]={"To Dian Kong!"};<

59、;/p><p>  uchar hour1,hour2,min1,min2,sec1,</p><p>  sec2,t,hour,min,sec,tflag;</p><p>  uchar year1,year2,year3,year4,month,</p><p>  month1,month2,day,day1,day2;</p&g

60、t;<p>  uchar moshi=0;//初始顯示界面定義</p><p>  uint year,tvalue,temph=30,templ=15;</p><p>  unsigned data disdata[5];</p><p>  void delay(uint k)</p><p>  { while(k--

61、);}</p><p>  /*lcd初始化*/</p><p>  void lcd_init(void)</p><p>  { lcd_write_command(0x30);</p><p>  lcd_write_command(0x30);</p><p>  lcd_write_command(0x30)

62、;</p><p>  lcd_write_command(0x38);</p><p>  lcd_write_command(0x08);</p><p>  lcd_write_command(0x01);</p><p>  lcd_write_command(0x06);</p><p>  lcd_writ

63、e_command(0x0c);</p><p><b>  }</b></p><p>  /*始終初始化及中斷定義*/</p><p>  void init_watch()</p><p>  { hour=10;year=2012;month=7;day=5;</p><p>  lcd_

64、init();</p><p>  TMOD=0x01; //工作方式1 </p><p>  TH0=(65536-5000)/256; </p><p>  TL0=(65536-5000)%256; </p><p>  EA=1; //開總中

65、斷 </p><p>  ET0=1; //開定時(shí)器中斷0 </p><p>  EX0=1; //開外部中斷0</p><p>  IT0=1;//外部中斷0下降沿觸發(fā)</p><p>  TR0=1;//啟動(dòng)定時(shí)器0 </p><p

66、><b>  }</b></p><p>  /*顯示溫度界面提示字符*/</p><p>  void showchar(void)</p><p>  { lcd_init();</p><p>  lcd_write_command(0x80);</p><p>  display(s

67、tr1);//顯示字符串str1</p><p><b>  }</b></p><p>  /*lcd寫命令子程序*/</p><p>  void lcd_write_command(uchar dat)</p><p><b>  { P0=dat;</b></p><p&

68、gt;<b>  RS=0;</b></p><p><b>  RW=0;</b></p><p><b>  E=1;</b></p><p><b>  E=0;</b></p><p>  delay(100);</p><p&

69、gt;<b>  }</b></p><p>  /*lcd寫數(shù)據(jù)子程序*/</p><p>  void lcd_write_data(uchar dat)</p><p><b>  { P0=dat;</b></p><p><b>  RS=1;</b></p&g

70、t;<p><b>  RW=0;</b></p><p><b>  E=1;</b></p><p><b>  E=0;</b></p><p>  delay(100);</p><p><b>  }</b></p>

71、<p>  /*lcd顯示時(shí)間*/</p><p>  void watch_show()</p><p>  { year1=year/1000;year2=year/100%10;</p><p>  year3=year%100/10;year4=year%10; </p><p>  month1=month/10;mo

72、nth2=month%10;</p><p>  day1=day/10;day2=day%10;hour1=hour/10; </p><p>  hour2=hour%10;min1=min/10;</p><p>  min2=min%10; sec1=sec/10;sec2=sec%10;</p><p>  lcd_write_c

73、ommand(0x84); </p><p>  lcd_write_data(tab[hour1]);//顯示時(shí)高位 </p><p>  lcd_write_data(tab[hour2]);//顯示時(shí)低位 </p><p>  lcd_write_data(0x3a); </p><p

74、>  lcd_write_data(tab[min1]);//顯示分高位 </p><p>  lcd_write_data(tab[min2]);//顯示分低位 </p><p>  lcd_write_data(0x3a); </p><p>  lcd_write_data(tab[sec1]);//顯示秒高

75、位</p><p>  lcd_write_data(tab[sec2]);//顯示秒低位</p><p>  lcd_write_command(0xc3);//下四行顯示年</p><p>  lcd_write_data(tab[year1]);</p><p>  lcd_write_data(tab[year2]);</p&g

76、t;<p>  lcd_write_data(tab[year3]);</p><p>  lcd_write_data(tab[year4]);</p><p>  lcd_write_data('-');//顯示-</p><p>  lcd_write_data(tab[month1]);//顯示月高位</p>&l

77、t;p>  lcd_write_data(tab[month2]);//顯示月低位</p><p>  lcd_write_data('-');</p><p>  lcd_write_data(tab[day1]);//顯示日高位</p><p>  lcd_write_data(tab[day2]);//顯示日低位</p>&

78、lt;p><b>  }</b></p><p>  /*顯示字符子程序*/</p><p>  void display(uchar *p)</p><p>  { while(*p!='\0')</p><p>  { lcd_write_data(*p);p++; }</p>&

79、lt;p><b>  }</b></p><p>  /*ds18b20復(fù)位*/ </p><p>  void ds18b20_reset(void)</p><p><b>  { dq=0;</b></p><p>  delay(100);</p><p&g

80、t;<b>  dq=1;</b></p><p>  delay(50);</p><p><b>  }</b></p><p>  /*讀ds8b20數(shù)據(jù)*/</p><p>  uchar ds18b20_readdata(void)</p><p>  { ucha

81、r i,value;</p><p><b>  value=0;</b></p><p>  for(i=8;i>0;i--)</p><p><b>  { dq=0;</b></p><p>  value>>=1;</p><p><b>

82、  dq=1;</b></p><p><b>  if(dq)</b></p><p>  { value|=0x80;}</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  

83、return(value);</p><p><b>  }</b></p><p>  /*ds18b20寫數(shù)據(jù)*/</p><p>  void ds18b20_writedata(uchar dat)</p><p>  { uchar i;</p><p>  for(i=8;i>0

84、;i--)</p><p><b>  { dq=0;</b></p><p>  dq=dat&0x01;</p><p><b>  delay(5);</b></p><p><b>  dq=1;</b></p><p><b>

85、;  dat>>=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*讀取溫度并轉(zhuǎn)換*/</p><p>  uint read_temp(void)</p><p>  { uchar

86、 a,b;</p><p>  ds18b20_reset();</p><p>  ds18b20_writedata(0xcc);</p><p>  ds18b20_writedata(0x44);</p><p>  delay(100);</p><p>  ds18b20_reset();</p>

87、;<p>  ds18b20_writedata(0xcc);</p><p>  ds18b20_writedata(0xbe);</p><p>  delay(100);</p><p>  a=ds18b20_readdata();</p><p>  b=ds18b20_readdata();</p>&

88、lt;p><b>  tvalue=b;</b></p><p>  tvalue<<=8;</p><p>  tvalue=tvalue|a;</p><p>  if(tvalue<=0x0fff)</p><p>  tflag=0;//溫度符號(hào)位為正</p><p&g

89、t;<b>  else</b></p><p>  { tvalue=~tvalue+1;tflag=1; }//符號(hào)位為負(fù)</p><p>  tvalue=tvalue*0.625;</p><p>  return(tvalue);</p><p><b>  }</b></p>

90、<p><b>  /*溫度顯示*/</b></p><p>  void ds18b20_temp_display(void)</p><p>  { char flagdat,m=0; </p><p>  disdata[0]=tvalue/1000+0x30;</p><p>  disdata[1

91、]=(tvalue%1000)/100+0x30;</p><p>  disdata[2]=(tvalue%100)/10+0x30;</p><p>  disdata[3]=tvalue%10+0x30;</p><p>  if(tflag==0) flagdat=' ';//溫度為正不顯示</p><p>  el

92、se flagdat=0x2d;//溫度為負(fù)則顯示-</p><p>  if(disdata[0]==0x30)</p><p>  { disdata[0]=0x20;//溫度最高位為0不顯示</p><p>  if(disdata[1]==0x30)</p><p>  { disdata[1]=0x20; }</p>

93、<p><b>  }</b></p><p>  lcd_write_command(0x89);</p><p>  lcd_write_data(flagdat);//顯示符號(hào)位</p><p>  lcd_write_data(disdata[0]);//顯示溫度</p><p>  lcd_writ

94、e_data(disdata[1]);</p><p>  lcd_write_data(disdata[2]);</p><p>  lcd_write_data(0x2e);//顯示小數(shù)點(diǎn)</p><p>  lcd_write_data(disdata[3]);//顯示溫度小數(shù)位</p><p>  lcd_write_command(

95、0x40); for(m=0;m<8;m++) //CGRAM中寫入字符℃ </p><p>  { lcd_write_data(table[m]); } </p><p>  lcd_write_command(0x8f); </p><p>  lcd_write_data(0x00);//顯示字符℃ <

96、;/p><p>  lcd_write_command(0xc0);</p><p>  display(str2);</p><p>  lcd_write_data((temph/10)+0x30);</p><p>  lcd_write_data((temph%10)+0x30);</p><p>  lcd_wr

97、ite_command(0xc5); </p><p>  lcd_write_data(0x00); </p><p>  lcd_write_command(0xc9);</p><p>  display(str3);</p><p>  lcd_write_data((templ/10)+0x30);</p>

98、<p>  lcd_write_data((templ%10)+0x30);</p><p>  lcd_write_command(0xce); </p><p>  lcd_write_data(0x00);</p><p><b>  }</b></p><p>  /*定時(shí)器0中斷產(chǎn)生

99、時(shí)間*/</p><p>  void timer0() interrupt 1</p><p>  {TH0=(65536-50000)/256; </p><p>  TL0=(65536-50000)%256;</p><p><b>  t++;</b></p>&l

100、t;p>  if(t==20) </p><p><b>  { t=0;</b></p><p>  sec++; </p><p>  if(sec==60) </p><p>

101、;<b>  { sec=0;</b></p><p><b>  min++;</b></p><p>  if(min==60)</p><p><b>  { min=0;</b></p><p><b>  hour++;</b></p>

102、;<p>  if(hour==24)</p><p><b>  { hour=0;</b></p><p>  day++; </p><p>  if((month==1||month==3||month==5||</p><p>  month=7||month==8||m

103、onth==10||</p><p>  month==12)&&day==32)</p><p><b>  { day=1;</b></p><p><b>  month++;</b></p><p>  } </p><p>  

104、if((month==4||month==6||month==9||</p><p>  month==11)&&day==31)</p><p><b>  { day=1;</b></p><p><b>  month++;</b></p><p>  }

105、</p><p>  if(year%4!=0&&month==2&&day==29)</p><p><b>  { day=1;</b></p><p><b>  month++;</b></p><p>  } </p>&l

106、t;p>  if(year%4==0&&month==2&&day==30)</p><p><b>  { day=1;</b></p><p><b>  month++;</b></p><p><b>  }</b></p><p>

107、;  if(month==13)</p><p>  { month=1;</p><p><b>  year++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

108、;/b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*外部中斷0實(shí)現(xiàn)顯示界面的轉(zhuǎn)換*/</p><p>  void iint0() inter

109、rupt 0</p><p>  { moshi++;//一次中斷則顯示界面轉(zhuǎn)換一次</p><p>  if(moshi==6) moshi=0;//共6個(gè)顯示界面</p><p><b>  } </b></p><p>  /*4*4鍵盤掃描*/</p><p>  uchar Keyca

110、n(void) </p><p>  { uchar rcode, ccode;</p><p>  P2=0xF0; </p><p>  if((P2&0xF0) != 0xF0) </p><p>  { delay(30000);</p><p>  if((P2&0xF0) != 0

111、xF0)</p><p>  {rcode=0xFE; </p><p>  while((rcode&0x10) != 0)</p><p>  {P2=rcode; </p><p>  if((P2&0xF0) != 0xF0) </p><

112、;p>  { ccode = (P2&0xF0)|0x0F;</p><p>  do{;}while((P2&0xF0)!=0xF0);</p><p>  return ((~rcode) + (~ccode)); </p><p><b>  }</b></p><p><b>  

113、Else</b></p><p>  rcode = (rcode<<1)|0x01; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  

114、return 0; </p><p><b>  }</b></p><p>  /*根據(jù)掃描結(jié)果調(diào)整報(bào)警上下限、日期及時(shí)間*/</p><p>  void KeyDispaly(uchar key)</p><p>  { switch(key)</p><p>  {case 0x11: t

115、emph++; break;//提高報(bào)警上限</p><p>  case 0x21: temph--; break;//降低報(bào)警上限</p><p>  case 0x41: templ++; break;//提高報(bào)警下限</p><p>  case 0x81: templ--; break;//降低報(bào)警下限</p><p>  case

116、 0x12: sec++; break;//按鍵增加秒</p><p>  case 0x22: sec--; break;//按鍵降低秒</p><p>  case 0x42: min++; break;//按鍵增加分</p><p>  case 0x82: min--; break;//按鍵降低分</p><p>  case 0x1

117、4: hour++; break;//按鍵增加時(shí)</p><p>  case 0x24: hour--; break;//按鍵降低時(shí)</p><p>  case 0x44: day++; break;//按鍵增加日</p><p>  case 0x84: day--; break;//按鍵降低日</p><p>  case 0x18:

118、 month++; break;//按鍵增加月</p><p>  case 0x28: month--; break;//按鍵降低月</p><p>  case 0x48: year++; break;//按鍵增加年</p><p>  case 0x88: year--; break;//按鍵降低年</p><p>  default:

119、 break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*主程序*/</b></p><p>  void main(void)</p><p>  { uchar Key; <

120、/p><p><b>  dq=1;</b></p><p>  speak=1;//初始蜂鳴器不報(bào)警</p><p>  init_watch();</p><p><b>  while(1)</b></p><p>  { if(moshi==0)//顯示界面1</p

121、><p>  { lcd_write_command(0x01);</p><p>  while(moshi==0)</p><p>  { lcd_write_command(0x80);</p><p>  display(str10);</p><p>  lcd_write_command(0xc1);</

122、p><p>  display(str11);</p><p><b>  }</b></p><p><b>  } </b></p><p>  if(moshi==1)//顯示界面2</p><p>  { lcd_write_command(0x01);//lcd清屏&l

123、t;/p><p>  while(moshi==1)</p><p>  { lcd_write_command(0x80);</p><p>  display(str4);</p><p>  lcd_write_command(0xc2);</p><p>  display(str5);</p>&l

124、t;p><b>  }</b></p><p><b>  }</b></p><p>  if(moshi==2)//顯示界面3</p><p>  { lcd_write_command(0x01);</p><p>  while(moshi==2)</p><p&g

125、t;  { lcd_write_command(0x80);</p><p>  display(str6);</p><p>  lcd_write_command(0xc3);</p><p>  display(str7);</p><p><b>  }</b></p><p><b

126、>  }</b></p><p>  if(moshi==3)//顯示界面4</p><p>  { lcd_write_command(0x01);</p><p>  while(moshi==3)</p><p>  { lcd_write_command(0x80);</p><p>  di

127、splay(str8);</p><p>  lcd_write_command(0xc1);</p><p>  display(str9);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(moshi==4)//顯

128、示界面5</p><p>  { lcd_write_command(0x01);</p><p>  showchar();</p><p>  while(moshi==4)</p><p>  { read_temp();//讀溫度</p><p>  if(((tvalue/10)%100)>=temph

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論