第一篇:制冷技術(shù)教學(xué)中的單片機(jī)教學(xué)實(shí)踐_基于51單片機(jī)溫度計(jì)設(shè)計(jì)實(shí)踐
制冷技術(shù)教學(xué)中的單片機(jī)教學(xué)實(shí)踐_基于51單片機(jī)溫度計(jì)設(shè)計(jì)實(shí)踐.txt小時(shí)候覺(jué)得父親不簡(jiǎn)單,后來(lái)覺(jué)得自己不簡(jiǎn)單,再后來(lái)覺(jué)得自己孩子不簡(jiǎn)單。越是想知道自己是不是忘記的時(shí)候,反而記得越清楚。本文由372133376貢獻(xiàn)
pdf文檔可能在WAP端瀏覽體驗(yàn)不佳。建議您優(yōu)先選擇TXT,或下載源文件到本機(jī)查看。
湖南農(nóng)機(jī) 2008.1 制冷技術(shù)教學(xué)中的單片機(jī)教學(xué)實(shí)踐
——基于 51 單片機(jī)溫度計(jì)設(shè)計(jì)實(shí)踐
陳建明
(廣東省韶關(guān)市第二高級(jí)技工學(xué)校 廣東 韶關(guān) 512031)摘 要: 從事技工教育多年,深切感到單片機(jī)基礎(chǔ)知識(shí)的重要性。故從制冷專業(yè)應(yīng)用實(shí)際出 發(fā),結(jié)合單片機(jī)課程教學(xué)的內(nèi)容,提出了基于 MCS-51 溫度計(jì)的設(shè)計(jì)實(shí)習(xí)。本文針對(duì)技工 學(xué)校學(xué)生單片機(jī)知識(shí)結(jié)構(gòu),深入淺出,以應(yīng)用為基礎(chǔ),充分激發(fā)學(xué)生的興趣和求知欲。在整 個(gè)設(shè)計(jì)方案中,都從學(xué)生角度出發(fā),采用常見(jiàn)、通用、主流的芯片和方案設(shè)計(jì)規(guī)劃。對(duì)學(xué)生 全面掌握單片機(jī)知識(shí),提高學(xué)生動(dòng)手能力,了解制冷溫控制原理取得了良好的效果。關(guān)鍵詞: MCS-51 單片機(jī) 溫度計(jì) 制冷技術(shù) 中圖分類號(hào): TP301.1 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1007-8320(2008)01-0072-02 On the teaching of single chip micyoco for refrigeration specialty —— based on the thermometer experiment of MCS-51 SCM Chen Jianming Abstract: because of long-term educational work in vestibule school, the writer notices the importance of basic knowledge for SCM.This paper brings forward an exercitation based on the MCS-51 thermometer, combining with the specialty characteristic for refrigeration specialty.Key words: MCS-51 SCM(Single Chip Micyoco), thermometer, refrigeration specialty 1 序言
近年來(lái),行業(yè)內(nèi)單片機(jī)發(fā)展迅速,技術(shù)突飛猛進(jìn)。作為 從事技工教育工作的一份子,更是切身感到單片機(jī)教學(xué)的 重要性。因?yàn)槲覀兣囵B(yǎng)的人才以后是到生產(chǎn)基層工作的,是生產(chǎn)的重要環(huán)節(jié)。本文從制冷專業(yè)特色出發(fā),結(jié)合單片機(jī)課程教學(xué),提出 了基于 MCS-51 溫度計(jì)的設(shè)計(jì)實(shí)習(xí)。針對(duì)技工在校生單片 機(jī)知識(shí)結(jié)構(gòu),深入淺出,以活潑生動(dòng)的例子充分激發(fā)學(xué)生的 興趣和求知欲。在整個(gè)設(shè)計(jì)方案中,都從學(xué)生角度出發(fā),采 用常見(jiàn)、通用、主流的芯片和方案設(shè)計(jì)規(guī)劃。讓學(xué)生親自動(dòng) 手從一片片的芯片,焊接成完整的電路,再編寫(xiě)程序,成為 制冷系統(tǒng)溫度控制的一部分。對(duì)學(xué)生全面掌握單片機(jī)知 識(shí),提高學(xué)生動(dòng)手能力,了解制冷溫控制原理取得了良好的 效果。
機(jī)的理解僅僅停留在課本知識(shí)層面上,在實(shí)際應(yīng)用中出現(xiàn) 很大的歧義。單片機(jī)寄存器如何使用?中斷如何實(shí)現(xiàn)?定 時(shí)器如何工作?等等這些問(wèn)題,學(xué)生都只能從書(shū)上有一個(gè) 抽象的概念,使很多學(xué)生失去了學(xué)習(xí)的興趣甚至產(chǎn)生畏懼 情緒。故設(shè)法從制冷專業(yè)出發(fā),結(jié)合專業(yè)特色,設(shè)計(jì)一門鮮 明生動(dòng)的課程實(shí)踐來(lái)充分激發(fā)學(xué)生的興趣和求知欲,讓學(xué) 生可以改變學(xué)習(xí)狀態(tài)。在整個(gè)設(shè)計(jì)中,緊緊圍繞制冷特色,結(jié)合本專業(yè)的基本 應(yīng)用,提出基于單片機(jī) MCS-51 溫度計(jì)設(shè)計(jì)。在設(shè)計(jì)中,既 使用了單片機(jī)的計(jì)數(shù)/定時(shí)器,又使用到中斷; 既要求到外 圍擴(kuò)展,又是從最基本應(yīng)用出發(fā); 既考慮到應(yīng)用的實(shí)際性,又針對(duì)學(xué)生基礎(chǔ)知識(shí)掌握程度。溫度的采集時(shí)間控制有單 片機(jī)的定時(shí)器產(chǎn)生,可以使學(xué)生掌握定時(shí)器的運(yùn)用; 溫度采 集的控制使用了單片機(jī)的外部中斷功能,有助學(xué)生理解中 斷機(jī)制的運(yùn)行; 溫度信號(hào)轉(zhuǎn)換有外圍 A/D0809 芯片完成,使 學(xué)生對(duì)外圍設(shè)備的擴(kuò)展有了初步的了解。該設(shè)計(jì)從中技生 的知識(shí)結(jié)構(gòu)點(diǎn)出發(fā),結(jié)合本專業(yè)的基本應(yīng)用,不但可以提高 學(xué)生的興趣又具用專業(yè)特色,為學(xué)生以后的工作積累經(jīng)驗(yàn)。2 實(shí)踐目的與思路
在從事制冷技術(shù)教學(xué)多年中,常常會(huì)遇到學(xué)生對(duì)單片
收稿日期: 2008-01-03 作者簡(jiǎn)介: 陳建明,(1956-)男 廣東韶關(guān)人,韶關(guān)市第二高級(jí)技工學(xué)校一級(jí)實(shí)習(xí)指導(dǎo)教師。研究方向: 制冷技術(shù) 72 ? 2008.1 陳建明: 制冷技術(shù)教學(xué)中的單片機(jī)教學(xué)實(shí)踐 D 轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖存器用于鎖存 A/D 轉(zhuǎn)換完 的數(shù)字量,OE 端為高電平時(shí),當(dāng) 才可以從三態(tài)輸出鎖存器 取走轉(zhuǎn)換完的數(shù)據(jù)。3.3 溫度傳感器參數(shù)簡(jiǎn)介 溫度傳感器選擇集成器件 LM35。LM35 是 公司生產(chǎn) 的集成電路溫度傳感器系列產(chǎn)品之一,它具有很高的工作 精度和較寬的線性工作范圍,該器件輸出電壓與攝氏溫度 線性成比例。因而,從使用角度來(lái)說(shuō),LM35 與用開(kāi)爾文標(biāo) 準(zhǔn)的線性溫度傳感器相比更有優(yōu)越之處,LM35 無(wú)需外部 校準(zhǔn)或微調(diào),可以提供±1/4℃的常用的室溫精度。參數(shù)如下: ?工作電壓: 直流 4 ~ 30V; ?工作電流: 小于 133 A ?輸出電壓: +6V ~-1.0V ?輸出阻抗: 1mA 負(fù)載時(shí) 0.1 ; ?精度: 0.5℃精度(在+25℃時(shí)); ?漏泄電流: 小于 60 A; ?比例因數(shù): 線性+10.0mV/℃; ?非線性值: ±1/4℃; ?校準(zhǔn)方式: 直接用攝氏溫度校準(zhǔn); ?使用溫度范圍: ~+150℃額定范圍。-55 3 實(shí)踐內(nèi)容及實(shí)現(xiàn)
本實(shí)踐,是為制冷專業(yè)學(xué)生而設(shè)計(jì)。溫度是最常接觸 的參數(shù),所以學(xué)生對(duì)此較為熟悉和感興趣。經(jīng)過(guò)本次實(shí)踐,不但可以使學(xué)生在本專業(yè)知識(shí)上有更深的認(rèn)識(shí),同時(shí)也加 深了基本知識(shí)的了解和掌握。3.1 單片機(jī)的原理及運(yùn)用 單片機(jī)型號(hào)方面,選用上最常見(jiàn)的 MCS-51 系列的 AT89S51。該系列的單片機(jī)是采用高性能的靜態(tài) 80C51 設(shè) 計(jì),由先進(jìn) CMOS 工藝制造并帶有非易失性 Flash 程序存 儲(chǔ)器。支持 12 時(shí)鐘和 6 時(shí)鐘操作。包含 128 字節(jié) RAM,32 個(gè) I/O 口腳,個(gè) 16 位定時(shí)/計(jì)數(shù)器,輸入 2 優(yōu)先級(jí)嵌 2 5 套中斷結(jié)構(gòu),個(gè)串行 I/O 口可用于多機(jī)通信 I/O 擴(kuò)展或全 1 雙工 UART 以及片內(nèi)振蕩器和時(shí)鐘電路。在設(shè)計(jì)過(guò)程中,引導(dǎo)學(xué)生了解溫度控制原理。溫度計(jì) 的實(shí)時(shí)性需要利用單片機(jī)的定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)。而數(shù)據(jù)的 采樣則可以由查詢與中斷方式輸入。在實(shí)踐過(guò)程中,我們 鼓勵(lì)有能力的學(xué)生用中斷方式實(shí)現(xiàn)數(shù)據(jù)的采集。這樣可以 使學(xué)生更好地掌握單片機(jī)的知識(shí),充分調(diào)動(dòng)了優(yōu)秀學(xué)生的 主動(dòng)性和積極性。
圖 3 LM35 引腳圖 圖 1 AT89S51 引腳圖 3.4 相關(guān)外圍設(shè)備 在單片機(jī)外設(shè)擴(kuò)展方面,我們選擇常見(jiàn)的 74LS373 鎖存器 作地址總線擴(kuò)展; 使用P1、口的聯(lián)合編址對(duì)外圍A/D轉(zhuǎn)換器 P2 進(jìn)行控制,使學(xué)生有機(jī)會(huì)把課本的知識(shí)轉(zhuǎn)化有實(shí)際應(yīng)用。理論 聯(lián)系實(shí)際,對(duì)知識(shí)有更深刻的了解; 同時(shí)也可以鼓勵(lì)學(xué)生的創(chuàng) 新,思考更優(yōu)的設(shè)計(jì)方案,使優(yōu)秀的學(xué)生有更多的空間發(fā)展。在顯示溫度讀數(shù)時(shí),采用動(dòng)態(tài)方式,因?yàn)閯?dòng)態(tài) LED 顯 示在理解起來(lái)比較抽象難懂,若可以有實(shí)際操作的經(jīng)驗(yàn),學(xué) 生將更容易接受,印象深刻。對(duì)于實(shí)在有困難的學(xué)生,可以 提供靜態(tài)顯示的硬件設(shè)計(jì)電路,為學(xué)生適當(dāng)降低難度。以下提供硬件設(shè)計(jì)框圖,如圖 4,僅供考:
圖 2 ADC0809 引腳圖 3.2 A/D 的選擇與概述 至于 A/D 轉(zhuǎn)換器外設(shè)的擴(kuò)展則采用常見(jiàn)的 ADC0809??梢怨?jié)省學(xué)生查找資料的時(shí)間,也避免學(xué)生選擇器件的麻 煩。ADC0809 在市場(chǎng)上相對(duì)常見(jiàn),價(jià)格經(jīng)濟(jì),不易燒壞,在 調(diào)試中省去了不必要的麻煩。ADC0809 由一個(gè) 8 路模擬開(kāi)關(guān)、一個(gè)地址鎖存與譯碼 器、一個(gè) A/D 轉(zhuǎn)換器和一個(gè)三態(tài)輸出鎖存器組成。多路開(kāi) 關(guān)可選通 8 個(gè)模擬通道,允許 8 路模擬量分時(shí)輸入,共用 A/ 圖 4. 硬件框圖(圖中省略了顯示電路部分)(下轉(zhuǎn)第 76 頁(yè))73 ? 湖南農(nóng)機(jī)
指標(biāo),根據(jù)高職院校專業(yè)不同階段的特征來(lái)準(zhǔn)確把握專業(yè) 的發(fā)展?fàn)顩r,其目的是為高職院校專業(yè)的設(shè)置和調(diào)整提供 一個(gè)現(xiàn)實(shí)可靠的依據(jù),從而減少專業(yè)設(shè)置與發(fā)展中的盲目 性和隨意性。在確定專業(yè)發(fā)展的階段之后,必須對(duì)專業(yè)發(fā)展作出相 應(yīng)的規(guī)劃和調(diào)整。對(duì)于處于新生期的專業(yè),高職院校將其作為新專業(yè)要 積極引導(dǎo),試探性的發(fā)展,此階段要把提高專業(yè)水平作為發(fā) 展重點(diǎn),為占領(lǐng)市場(chǎng)打好基礎(chǔ),要著眼于未來(lái)的長(zhǎng)遠(yuǎn)發(fā)展,根據(jù)其初步的發(fā)展?fàn)顩r再?zèng)Q定是否擴(kuò)大規(guī)模和深度發(fā)展。對(duì)于處于衰退期的專業(yè),要逐步控制發(fā)展規(guī)模,不能再盲 目招生,最重要的是盡可能積極向別的專業(yè)轉(zhuǎn)化,減少專業(yè)衰 退帶來(lái)的畢業(yè)生就業(yè)等壓力,不能轉(zhuǎn)化或調(diào)整的,要及時(shí)刪減; 對(duì)于處于成長(zhǎng)期和成熟期的專業(yè),一方面要大力的扶 持,加大投入力度,在軟硬件上都盡可能滿足專業(yè)發(fā)展的需 要,積極創(chuàng)造條件幫助專業(yè)向縱深發(fā)展,另一方面必須占領(lǐng) 和保證一定的市場(chǎng)份額。尤其對(duì)處于成熟期的專業(yè),其優(yōu) 勢(shì)和特色已經(jīng)比較顯著,維持其健康發(fā)展非常重要,將“訂 單式”服務(wù)慣徹深入發(fā)展,這也是各類高職院校突現(xiàn)各自特 征,吸引生源的重要保障之一。將模糊識(shí)別模型運(yùn)用在高職院校專業(yè)發(fā)展階段上,為(上接第 73 頁(yè))3.5 調(diào)試步驟 按照硬件框圖設(shè)計(jì)出合理的電路并焊接,程序的燒寫(xiě) 完成,就可以進(jìn)入到調(diào)試階段了。調(diào)試階段可以分為以下 幾個(gè)步驟: 1)89S51 能正常工作; 電源模塊,復(fù)位模塊,始終模塊,三大模塊要工作正常,2)單片機(jī)才能正常的運(yùn)行。可以使用萬(wàn)用表和示波器 進(jìn)行測(cè)試個(gè)模塊的工作情況。3)89S51 總線輸出正確無(wú)誤; 在這部分的調(diào)試中,要 使用到較好的示波器,有條件的可以利用單片機(jī)仿真器。確保由 P1 口輸出的總線和經(jīng)過(guò) 74LS373 的控制總線正 確無(wú)誤。4)ADC0809 轉(zhuǎn)換數(shù)據(jù)正確; ADC0809 轉(zhuǎn)換速度會(huì)比 AT89S51 單片機(jī)的速度稍慢,所以,單片機(jī)在發(fā)送控制信號(hào) 的時(shí)候要注意對(duì) ADC0809 狀態(tài)的監(jiān)測(cè),避免指令沖突混 亂; 只要數(shù)據(jù)轉(zhuǎn)換無(wú)誤,單片機(jī)就會(huì)有溫度數(shù)值的顯示。5)整體調(diào)試; 因?yàn)檎麄€(gè)電路涉及模擬和數(shù)字兩部分,所 以整體調(diào)試的時(shí)候,要注意相互的干擾和溫度的矯正。這 部分需要溫度計(jì)及萬(wàn)用表來(lái)矯正顯示數(shù)值的偏差。學(xué)生對(duì)類似這種結(jié)合專業(yè)設(shè)計(jì)的實(shí)踐反應(yīng)熱烈,對(duì)專 業(yè)技術(shù)的提高有很大幫助。特別在教學(xué)過(guò)程中的抽象難懂 問(wèn)題,為學(xué)生提供一個(gè)能看得著,摸得到,自己能親手實(shí)踐 的機(jī)會(huì),消除了學(xué)生對(duì)技術(shù)問(wèn)題的恐懼感,在以后的學(xué)習(xí)和 工作中有莫大的幫助。圖 5. 實(shí)踐制作的溫度計(jì)兩組測(cè)量值的對(duì)比 圖 5: 2008.1 高職院校準(zhǔn)確把握高職院校專業(yè)的發(fā)展?fàn)顩r提供了科學(xué)的 理論基礎(chǔ),為高職院校調(diào)整、修改、增設(shè)、刪減專業(yè)提供了一 個(gè)比較可靠的現(xiàn)實(shí)依據(jù),減少了高職院校在專業(yè)設(shè)置與發(fā) 展上的盲目性和隨意性,使高職院校的專業(yè)設(shè)置與發(fā)展更 好地適應(yīng)產(chǎn)業(yè)結(jié)構(gòu)和市場(chǎng)的變化,從而使高職院校更加積 極蓬勃的發(fā)展。同時(shí),對(duì)于考察專業(yè)發(fā)展階段的指標(biāo)需要 不斷地進(jìn)行必要的分析和確定,保證指標(biāo)考察的科學(xué)性和 準(zhǔn)確性,以便更好地識(shí)別專業(yè)發(fā)展階段和進(jìn)行專業(yè)調(diào)整。參考文獻(xiàn):
[1] 陳新輝;喬忠.產(chǎn)品生命周期模糊的模糊識(shí)別模型 [J].中國(guó)農(nóng) 業(yè)大學(xué)學(xué)報(bào).2001(06)[2] 陳曉春;顏克高.非營(yíng)利組織多元化經(jīng)營(yíng)探析 [J].財(cái)經(jīng)理論與 實(shí)踐(雙月刊).2004(03)[3]柯其才.對(duì)高職專業(yè)設(shè)置趨勢(shì)的思考[J].職教論壇.2005(03)[4] 谷麗應(yīng);王曉虹.高職高專院校專業(yè)設(shè)置的原則和方法研究 [J].貴陽(yáng)金筑大學(xué)學(xué)報(bào).2005(12)[5]盧致俊;曾華;張海峰.高職院校專業(yè)體系的特征及其構(gòu)建[J].教育與職業(yè).2006(11)[6]歐陽(yáng)球林; 張華.高職高專教育專業(yè)設(shè)置基本原則的探討[J].九江職業(yè)技術(shù)學(xué)院學(xué)報(bào).2004 03)(可以從圖中看到,本實(shí)踐設(shè)計(jì)制作的溫度計(jì)與市面成 品測(cè)量值相差不超過(guò) 5%。由于手工焊接和制作環(huán)境因素 的影響,再加上單片機(jī)運(yùn)行環(huán)境因素的影響,5%的偏差屬 于正?,F(xiàn)象。要達(dá)到更好的精度,通過(guò)一定的補(bǔ)償和調(diào)整,可以把精度提高一個(gè)級(jí)別。老師可以籍此話題在學(xué)生中展 開(kāi)討論,引導(dǎo)學(xué)生往更深入的層次鉆研。4.2 教學(xué)效果與總結(jié) 在從事多年的教學(xué)工作中,深切感到跨專業(yè)知識(shí)的重 要性。但苦于未曾有類似相關(guān)針對(duì)技校學(xué)生的跨專業(yè)的設(shè) 計(jì)實(shí)踐。故從自身需要出發(fā),根據(jù)學(xué)生特點(diǎn)提出了跨專業(yè) 的課程實(shí)踐。本設(shè)計(jì)實(shí)踐由于其實(shí)用性強(qiáng),可大大提高了 學(xué)生對(duì)單片機(jī)的興趣,確實(shí)收到了意想不到的效果。學(xué)生對(duì)本實(shí)踐反響熱烈,鞏固了專業(yè)技術(shù)知識(shí),也提高 了學(xué)生對(duì)本專業(yè)的認(rèn)識(shí)和興趣,使學(xué)生在日后的專業(yè)學(xué)習(xí)中更加有動(dòng)力和激情。通過(guò)親自動(dòng)手,學(xué)生有一個(gè)能自己 能親手實(shí)踐的機(jī)會(huì),消除了對(duì)技術(shù)問(wèn)題的恐懼感,在以后的 學(xué)習(xí)和工作中起到莫大的幫助。4 實(shí)踐設(shè)計(jì)測(cè)試效果及總結(jié)
4.1 測(cè)試效果 以下是實(shí)踐設(shè)計(jì)制作的溫度計(jì)與市面成品的對(duì)比圖如 76 ? 1本文由372133376貢獻(xiàn)
pdf文檔可能在WAP端瀏覽體驗(yàn)不佳。建議您優(yōu)先選擇TXT,或下載源文件到本機(jī)查看。
湖南農(nóng)機(jī) 2008.1 制冷技術(shù)教學(xué)中的單片機(jī)教學(xué)實(shí)踐
——基于 51 單片機(jī)溫度計(jì)設(shè)計(jì)實(shí)踐
陳建明
(廣東省韶關(guān)市第二高級(jí)技工學(xué)校 廣東 韶關(guān) 512031)摘 要: 從事技工教育多年,深切感到單片機(jī)基礎(chǔ)知識(shí)的重要性。故從制冷專業(yè)應(yīng)用實(shí)際出 發(fā),結(jié)合單片機(jī)課程教學(xué)的內(nèi)容,提出了基于 MCS-51 溫度計(jì)的設(shè)計(jì)實(shí)習(xí)。本文針對(duì)技工 學(xué)校學(xué)生單片機(jī)知識(shí)結(jié)構(gòu),深入淺出,以應(yīng)用為基礎(chǔ),充分激發(fā)學(xué)生的興趣和求知欲。在整 個(gè)設(shè)計(jì)方案中,都從學(xué)生角度出發(fā),采用常見(jiàn)、通用、主流的芯片和方案設(shè)計(jì)規(guī)劃。對(duì)學(xué)生 全面掌握單片機(jī)知識(shí),提高學(xué)生動(dòng)手能力,了解制冷溫控制原理取得了良好的效果。關(guān)鍵詞: MCS-51 單片機(jī) 溫度計(jì) 制冷技術(shù) 中圖分類號(hào): TP301.1 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1007-8320(2008)01-0072-02 On the teaching of single chip micyoco for refrigeration specialty —— based on the thermometer experiment of MCS-51 SCM Chen Jianming Abstract: because of long-term educational work in vestibule school, the writer notices the importance of basic knowledge for SCM.This paper brings forward an exercitation based on the MCS-51 thermometer, combining with the specialty characteristic for refrigeration specialty.Key words: MCS-51 SCM(Single Chip Micyoco), thermometer, refrigeration specialty 1 序言
近年來(lái),行業(yè)內(nèi)單片機(jī)發(fā)展迅速,技術(shù)突飛猛進(jìn)。作為 從事技工教育工作的一份子,更是切身感到單片機(jī)教學(xué)的 重要性。因?yàn)槲覀兣囵B(yǎng)的人才以后是到生產(chǎn)基層工作的,是生產(chǎn)的重要環(huán)節(jié)。本文從制冷專業(yè)特色出發(fā),結(jié)合單片機(jī)課程教學(xué),提出 了基于 MCS-51 溫度計(jì)的設(shè)計(jì)實(shí)習(xí)。針對(duì)技工在校生單片 機(jī)知識(shí)結(jié)構(gòu),深入淺出,以活潑生動(dòng)的例子充分激發(fā)學(xué)生的 興趣和求知欲。在整個(gè)設(shè)計(jì)方案中,都從學(xué)生角度出發(fā),采 用常見(jiàn)、通用、主流的芯片和方案設(shè)計(jì)規(guī)劃。讓學(xué)生親自動(dòng) 手從一片片的芯片,焊接成完整的電路,再編寫(xiě)程序,成為 制冷系統(tǒng)溫度控制的一部分。對(duì)學(xué)生全面掌握單片機(jī)知 識(shí),提高學(xué)生動(dòng)手能力,了解制冷溫控制原理取得了良好的 效果。
機(jī)的理解僅僅停留在課本知識(shí)層面上,在實(shí)際應(yīng)用中出現(xiàn) 很大的歧義。單片機(jī)寄存器如何使用?中斷如何實(shí)現(xiàn)?定 時(shí)器如何工作?等等這些問(wèn)題,學(xué)生都只能從書(shū)上有一個(gè) 抽象的概念,使很多學(xué)生失去了學(xué)習(xí)的興趣甚至產(chǎn)生畏懼 情緒。故設(shè)法從制冷專業(yè)出發(fā),結(jié)合專業(yè)特色,設(shè)計(jì)一門鮮 明生動(dòng)的課程實(shí)踐來(lái)充分激發(fā)學(xué)生的興趣和求知欲,讓學(xué) 生可以改變學(xué)習(xí)狀態(tài)。在整個(gè)設(shè)計(jì)中,緊緊圍繞制冷特色,結(jié)合本專業(yè)的基本 應(yīng)用,提出基于單片機(jī) MCS-51 溫度計(jì)設(shè)計(jì)。在設(shè)計(jì)中,既 使用了單片機(jī)的計(jì)數(shù)/定時(shí)器,又使用到中斷; 既要求到外 圍擴(kuò)展,又是從最基本應(yīng)用出發(fā); 既考慮到應(yīng)用的實(shí)際性,又針對(duì)學(xué)生基礎(chǔ)知識(shí)掌握程度。溫度的采集時(shí)間控制有單 片機(jī)的定時(shí)器產(chǎn)生,可以使學(xué)生掌握定時(shí)器的運(yùn)用; 溫度采 集的控制使用了單片機(jī)的外部中斷功能,有助學(xué)生理解中 斷機(jī)制的運(yùn)行; 溫度信號(hào)轉(zhuǎn)換有外圍 A/D0809 芯片完成,使 學(xué)生對(duì)外圍設(shè)備的擴(kuò)展有了初步的了解。該設(shè)計(jì)從中技生 的知識(shí)結(jié)構(gòu)點(diǎn)出發(fā),結(jié)合本專業(yè)的基本應(yīng)用,不但可以提高 學(xué)生的興趣又具用專業(yè)特色,為學(xué)生以后的工作積累經(jīng)驗(yàn)。2 實(shí)踐目的與思路
在從事制冷技術(shù)教學(xué)多年中,常常會(huì)遇到學(xué)生對(duì)單片
收稿日期: 2008-01-03 作者簡(jiǎn)介: 陳建明,(1956-)男 廣東韶關(guān)人,韶關(guān)市第二高級(jí)技工學(xué)校一級(jí)實(shí)習(xí)指導(dǎo)教師。研究方向: 制冷技術(shù) 72 ? 2008.1 陳建明: 制冷技術(shù)教學(xué)中的單片機(jī)教學(xué)實(shí)踐 D 轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖存器用于鎖存 A/D 轉(zhuǎn)換完 的數(shù)字量,OE 端為高電平時(shí),當(dāng) 才可以從三態(tài)輸出鎖存器 取走轉(zhuǎn)換完的數(shù)據(jù)。3.3 溫度傳感器參數(shù)簡(jiǎn)介 溫度傳感器選擇集成器件 LM35。LM35 是 公司生產(chǎn) 的集成電路溫度傳感器系列產(chǎn)品之一,它具有很高的工作 精度和較寬的線性工作范圍,該器件輸出電壓與攝氏溫度 線性成比例。因而,從使用角度來(lái)說(shuō),LM35 與用開(kāi)爾文標(biāo) 準(zhǔn)的線性溫度傳感器相比更有優(yōu)越之處,LM35 無(wú)需外部 校準(zhǔn)或微調(diào),可以提供±1/4℃的常用的室溫精度。參數(shù)如下: ?工作電壓: 直流 4 ~ 30V; ?工作電流: 小于 133 A ?輸出電壓: +6V ~-1.0V ?輸出阻抗: 1mA 負(fù)載時(shí) 0.1 ; ?精度: 0.5℃精度(在+25℃時(shí)); ?漏泄電流: 小于 60 A; ?比例因數(shù): 線性+10.0mV/℃; ?非線性值: ±1/4℃; ?校準(zhǔn)方式: 直接用攝氏溫度校準(zhǔn); ?使用溫度范圍: ~+150℃額定范圍。-55 3 實(shí)踐內(nèi)容及實(shí)現(xiàn)
本實(shí)踐,是為制冷專業(yè)學(xué)生而設(shè)計(jì)。溫度是最常接觸 的參數(shù),所以學(xué)生對(duì)此較為熟悉和感興趣。經(jīng)過(guò)本次實(shí)踐,不但可以使學(xué)生在本專業(yè)知識(shí)上有更深的認(rèn)識(shí),同時(shí)也加 深了基本知識(shí)的了解和掌握。3.1 單片機(jī)的原理及運(yùn)用 單片機(jī)型號(hào)方面,選用上最常見(jiàn)的 MCS-51 系列的 AT89S51。該系列的單片機(jī)是采用高性能的靜態(tài) 80C51 設(shè) 計(jì),由先進(jìn) CMOS 工藝制造并帶有非易失性 Flash 程序存 儲(chǔ)器。支持 12 時(shí)鐘和 6 時(shí)鐘操作。包含 128 字節(jié) RAM,32 個(gè) I/O 口腳,個(gè) 16 位定時(shí)/計(jì)數(shù)器,輸入 2 優(yōu)先級(jí)嵌 2 5 套中斷結(jié)構(gòu),個(gè)串行 I/O 口可用于多機(jī)通信 I/O 擴(kuò)展或全 1 雙工 UART 以及片內(nèi)振蕩器和時(shí)鐘電路。在設(shè)計(jì)過(guò)程中,引導(dǎo)學(xué)生了解溫度控制原理。溫度計(jì) 的實(shí)時(shí)性需要利用單片機(jī)的定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)。而數(shù)據(jù)的 采樣則可以由查詢與中斷方式輸入。在實(shí)踐過(guò)程中,我們 鼓勵(lì)有能力的學(xué)生用中斷方式實(shí)現(xiàn)數(shù)據(jù)的采集。這樣可以 使學(xué)生更好地掌握單片機(jī)的知識(shí),充分調(diào)動(dòng)了優(yōu)秀學(xué)生的 主動(dòng)性和積極性。
圖 3 LM35 引腳圖 圖 1 AT89S51 引腳圖 3.4 相關(guān)外圍設(shè)備 在單片機(jī)外設(shè)擴(kuò)展方面,我們選擇常見(jiàn)的 74LS373 鎖存器 作地址總線擴(kuò)展; 使用P1、口的聯(lián)合編址對(duì)外圍A/D轉(zhuǎn)換器 P2 進(jìn)行控制,使學(xué)生有機(jī)會(huì)把課本的知識(shí)轉(zhuǎn)化有實(shí)際應(yīng)用。理論 聯(lián)系實(shí)際,對(duì)知識(shí)有更深刻的了解; 同時(shí)也可以鼓勵(lì)學(xué)生的創(chuàng) 新,思考更優(yōu)的設(shè)計(jì)方案,使優(yōu)秀的學(xué)生有更多的空間發(fā)展。在顯示溫度讀數(shù)時(shí),采用動(dòng)態(tài)方式,因?yàn)閯?dòng)態(tài) LED 顯 示在理解起來(lái)比較抽象難懂,若可以有實(shí)際操作的經(jīng)驗(yàn),學(xué) 生將更容易接受,印象深刻。對(duì)于實(shí)在有困難的學(xué)生,可以 提供靜態(tài)顯示的硬件設(shè)計(jì)電路,為學(xué)生適當(dāng)降低難度。以下提供硬件設(shè)計(jì)框圖,如圖 4,僅供考:
圖 2 ADC0809 引腳圖 3.2 A/D 的選擇與概述 至于 A/D 轉(zhuǎn)換器外設(shè)的擴(kuò)展則采用常見(jiàn)的 ADC0809??梢怨?jié)省學(xué)生查找資料的時(shí)間,也避免學(xué)生選擇器件的麻 煩。ADC0809 在市場(chǎng)上相對(duì)常見(jiàn),價(jià)格經(jīng)濟(jì),不易燒壞,在 調(diào)試中省去了不必要的麻煩。ADC0809 由一個(gè) 8 路模擬開(kāi)關(guān)、一個(gè)地址鎖存與譯碼 器、一個(gè) A/D 轉(zhuǎn)換器和一個(gè)三態(tài)輸出鎖存器組成。多路開(kāi) 關(guān)可選通 8 個(gè)模擬通道,允許 8 路模擬量分時(shí)輸入,共用 A/ 圖 4. 硬件框圖(圖中省略了顯示電路部分)(下轉(zhuǎn)第 76 頁(yè))73 ? 湖南農(nóng)機(jī)
指標(biāo),根據(jù)高職院校專業(yè)不同階段的特征來(lái)準(zhǔn)確把握專業(yè) 的發(fā)展?fàn)顩r,其目的是為高職院校專業(yè)的設(shè)置和調(diào)整提供 一個(gè)現(xiàn)實(shí)可靠的依據(jù),從而減少專業(yè)設(shè)置與發(fā)展中的盲目 性和隨意性。在確定專業(yè)發(fā)展的階段之后,必須對(duì)專業(yè)發(fā)展作出相 應(yīng)的規(guī)劃和調(diào)整。對(duì)于處于新生期的專業(yè),高職院校將其作為新專業(yè)要 積極引導(dǎo),試探性的發(fā)展,此階段要把提高專業(yè)水平作為發(fā) 展重點(diǎn),為占領(lǐng)市場(chǎng)打好基礎(chǔ),要著眼于未來(lái)的長(zhǎng)遠(yuǎn)發(fā)展,根據(jù)其初步的發(fā)展?fàn)顩r再?zèng)Q定是否擴(kuò)大規(guī)模和深度發(fā)展。對(duì)于處于衰退期的專業(yè),要逐步控制發(fā)展規(guī)模,不能再盲 目招生,最重要的是盡可能積極向別的專業(yè)轉(zhuǎn)化,減少專業(yè)衰 退帶來(lái)的畢業(yè)生就業(yè)等壓力,不能轉(zhuǎn)化或調(diào)整的,要及時(shí)刪減; 對(duì)于處于成長(zhǎng)期和成熟期的專業(yè),一方面要大力的扶 持,加大投入力度,在軟硬件上都盡可能滿足專業(yè)發(fā)展的需 要,積極創(chuàng)造條件幫助專業(yè)向縱深發(fā)展,另一方面必須占領(lǐng) 和保證一定的市場(chǎng)份額。尤其對(duì)處于成熟期的專業(yè),其優(yōu) 勢(shì)和特色已經(jīng)比較顯著,維持其健康發(fā)展非常重要,將“訂 單式”服務(wù)慣徹深入發(fā)展,這也是各類高職院校突現(xiàn)各自特 征,吸引生源的重要保障之一。將模糊識(shí)別模型運(yùn)用在高職院校專業(yè)發(fā)展階段上,為(上接第 73 頁(yè))3.5 調(diào)試步驟 按照硬件框圖設(shè)計(jì)出合理的電路并焊接,程序的燒寫(xiě) 完成,就可以進(jìn)入到調(diào)試階段了。調(diào)試階段可以分為以下 幾個(gè)步驟: 1)89S51 能正常工作; 電源模塊,復(fù)位模塊,始終模塊,三大模塊要工作正常,2)單片機(jī)才能正常的運(yùn)行??梢允褂萌f(wàn)用表和示波器 進(jìn)行測(cè)試個(gè)模塊的工作情況。3)89S51 總線輸出正確無(wú)誤; 在這部分的調(diào)試中,要 使用到較好的示波器,有條件的可以利用單片機(jī)仿真器。確保由 P1 口輸出的總線和經(jīng)過(guò) 74LS373 的控制總線正 確無(wú)誤。4)ADC0809 轉(zhuǎn)換數(shù)據(jù)正確; ADC0809 轉(zhuǎn)換速度會(huì)比 AT89S51 單片機(jī)的速度稍慢,所以,單片機(jī)在發(fā)送控制信號(hào) 的時(shí)候要注意對(duì) ADC0809 狀態(tài)的監(jiān)測(cè),避免指令沖突混 亂; 只要數(shù)據(jù)轉(zhuǎn)換無(wú)誤,單片機(jī)就會(huì)有溫度數(shù)值的顯示。5)整體調(diào)試; 因?yàn)檎麄€(gè)電路涉及模擬和數(shù)字兩部分,所 以整體調(diào)試的時(shí)候,要注意相互的干擾和溫度的矯正。這 部分需要溫度計(jì)及萬(wàn)用表來(lái)矯正顯示數(shù)值的偏差。學(xué)生對(duì)類似這種結(jié)合專業(yè)設(shè)計(jì)的實(shí)踐反應(yīng)熱烈,對(duì)專 業(yè)技術(shù)的提高有很大幫助。特別在教學(xué)過(guò)程中的抽象難懂 問(wèn)題,為學(xué)生提供一個(gè)能看得著,摸得到,自己能親手實(shí)踐 的機(jī)會(huì),消除了學(xué)生對(duì)技術(shù)問(wèn)題的恐懼感,在以后的學(xué)習(xí)和 工作中有莫大的幫助。圖 5. 實(shí)踐制作的溫度計(jì)兩組測(cè)量值的對(duì)比 圖 5: 2008.1 高職院校準(zhǔn)確把握高職院校專業(yè)的發(fā)展?fàn)顩r提供了科學(xué)的 理論基礎(chǔ),為高職院校調(diào)整、修改、增設(shè)、刪減專業(yè)提供了一 個(gè)比較可靠的現(xiàn)實(shí)依據(jù),減少了高職院校在專業(yè)設(shè)置與發(fā) 展上的盲目性和隨意性,使高職院校的專業(yè)設(shè)置與發(fā)展更 好地適應(yīng)產(chǎn)業(yè)結(jié)構(gòu)和市場(chǎng)的變化,從而使高職院校更加積 極蓬勃的發(fā)展。同時(shí),對(duì)于考察專業(yè)發(fā)展階段的指標(biāo)需要 不斷地進(jìn)行必要的分析和確定,保證指標(biāo)考察的科學(xué)性和 準(zhǔn)確性,以便更好地識(shí)別專業(yè)發(fā)展階段和進(jìn)行專業(yè)調(diào)整。參考文獻(xiàn):
[1] 陳新輝;喬忠.產(chǎn)品生命周期模糊的模糊識(shí)別模型 [J].中國(guó)農(nóng) 業(yè)大學(xué)學(xué)報(bào).2001(06)[2] 陳曉春;顏克高.非營(yíng)利組織多元化經(jīng)營(yíng)探析 [J].財(cái)經(jīng)理論與 實(shí)踐(雙月刊).2004(03)[3]柯其才.對(duì)高職專業(yè)設(shè)置趨勢(shì)的思考[J].職教論壇.2005(03)[4] 谷麗應(yīng);王曉虹.高職高專院校專業(yè)設(shè)置的原則和方法研究 [J].貴陽(yáng)金筑大學(xué)學(xué)報(bào).2005(12)[5]盧致俊;曾華;張海峰.高職院校專業(yè)體系的特征及其構(gòu)建[J].教育與職業(yè).2006(11)[6]歐陽(yáng)球林; 張華.高職高專教育專業(yè)設(shè)置基本原則的探討[J].九江職業(yè)技術(shù)學(xué)院學(xué)報(bào).2004 03)(可以從圖中看到,本實(shí)踐設(shè)計(jì)制作的溫度計(jì)與市面成 品測(cè)量值相差不超過(guò) 5%。由于手工焊接和制作環(huán)境因素 的影響,再加上單片機(jī)運(yùn)行環(huán)境因素的影響,5%的偏差屬 于正?,F(xiàn)象。要達(dá)到更好的精度,通過(guò)一定的補(bǔ)償和調(diào)整,可以把精度提高一個(gè)級(jí)別。老師可以籍此話題在學(xué)生中展 開(kāi)討論,引導(dǎo)學(xué)生往更深入的層次鉆研。4.2 教學(xué)效果與總結(jié) 在從事多年的教學(xué)工作中,深切感到跨專業(yè)知識(shí)的重 要性。但苦于未曾有類似相關(guān)針對(duì)技校學(xué)生的跨專業(yè)的設(shè) 計(jì)實(shí)踐。故從自身需要出發(fā),根據(jù)學(xué)生特點(diǎn)提出了跨專業(yè) 的課程實(shí)踐。本設(shè)計(jì)實(shí)踐由于其實(shí)用性強(qiáng),可大大提高了 學(xué)生對(duì)單片機(jī)的興趣,確實(shí)收到了意想不到的效果。學(xué)生對(duì)本實(shí)踐反響熱烈,鞏固了專業(yè)技術(shù)知識(shí),也提高 了學(xué)生對(duì)本專業(yè)的認(rèn)識(shí)和興趣,使學(xué)生在日后的專業(yè)學(xué)習(xí)中更加有動(dòng)力和激情。通過(guò)親自動(dòng)手,學(xué)生有一個(gè)能自己 能親手實(shí)踐的機(jī)會(huì),消除了對(duì)技術(shù)問(wèn)題的恐懼感,在以后的 學(xué)習(xí)和工作中起到莫大的幫助。4 實(shí)踐設(shè)計(jì)測(cè)試效果及總結(jié)
4.1 測(cè)試效果 以下是實(shí)踐設(shè)計(jì)制作的溫度計(jì)與市面成品的對(duì)比圖如 76 ? 1
第二篇:基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)課程設(shè)計(jì)
課
題:
基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
專
業(yè):
電子信息工程
班
級(jí):
班
學(xué)
號(hào):
姓
名:
指導(dǎo)教師:
設(shè)計(jì)日期:
成績(jī):
XX大學(xué)XX學(xué)院電氣學(xué)院
基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
一、設(shè)計(jì)目的1、掌握單片機(jī)電路的設(shè)計(jì)原理、組裝與調(diào)試方法。
2、掌握LED數(shù)碼顯示電路的設(shè)計(jì)和使用方法。
3、掌握DS18B20溫度傳感器的工作原理及使用方法。
二、設(shè)計(jì)要求
1、本次單片機(jī)課程設(shè)計(jì)要求以51系列單片機(jī)為核心,以開(kāi)發(fā)板為平臺(tái)。
2、設(shè)計(jì)一個(gè)數(shù)字式溫度計(jì),要求使用DS18B20溫度傳感器測(cè)量溫度。
3、經(jīng)單片機(jī)處理后,要求用4位一體共陰LED數(shù)碼管來(lái)設(shè)計(jì)顯示電路,以顯示測(cè)量的溫度值。
4、另外還要求在設(shè)計(jì)中加入報(bào)警系統(tǒng),如果我們所設(shè)計(jì)的系統(tǒng)用來(lái)監(jiān)控某一設(shè)備,當(dāng)設(shè)備的溫度超過(guò)或低于我們所設(shè)定的溫度值時(shí),系統(tǒng)會(huì)產(chǎn)生報(bào)警。
5、要求在設(shè)計(jì)中加入上下限警報(bào)溫度設(shè)置電路。
三、設(shè)計(jì)的具體實(shí)現(xiàn)
1數(shù)字溫度計(jì)設(shè)計(jì)的方案
在做數(shù)字溫度計(jì)的單片機(jī)電路中,對(duì)信號(hào)的采集電路大多都是使用傳感器,這是非常容易實(shí)現(xiàn)的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。采集之后,通過(guò)使用51系列的單片機(jī),可以對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理,再由LED顯示電路對(duì)其數(shù)據(jù)進(jìn)行顯示。
2系統(tǒng)設(shè)計(jì)框圖
溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如下圖所示,控制器采用單片機(jī)AT89C51,溫度傳感器采用DS18B20,用4位一體共陰LED數(shù)碼管以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。此外,還添加了報(bào)警系統(tǒng),對(duì)溫度實(shí)施監(jiān)控。
3主控器AT89C51芯片
對(duì)于單片機(jī)的選擇,可以考慮使用8031與8051系列,由于8031沒(méi)有內(nèi)部RAM,系統(tǒng)又需要大量?jī)?nèi)存存儲(chǔ)數(shù)據(jù),因而不適用。AT89C51
以低價(jià)位單片機(jī)可為提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域,對(duì)于簡(jiǎn)單的測(cè)溫系統(tǒng)已經(jīng)足夠。單片機(jī)AT89C51具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要該器件是INTEL公司生產(chǎn)的MCS一5l系列單片機(jī)中的基礎(chǔ)產(chǎn)品,采用了可靠的CMOS工藝制造技術(shù),具有高性能的8位單片機(jī),屬于標(biāo)準(zhǔn)的MCS—51的CMOS產(chǎn)品。
AT8951的管腳如下圖所示:
AT89C51芯片管腳圖
4時(shí)鐘電路
80C51時(shí)鐘有兩種方式產(chǎn)生,即內(nèi)部方式和外部方式。80C51中有一個(gè)構(gòu)成內(nèi)部震蕩器的高增益反向放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。本次采用內(nèi)部震蕩電路,瓷片電容采用22PF,晶振為12MHZ。
晶體震蕩電路圖
復(fù)位電路
單片機(jī)系統(tǒng)的復(fù)位電路在這里采用的是上電+按鈕復(fù)位電路形式,其中電阻R采用10KΩ的阻值,電容采用10μF的電容值。
復(fù)位電路
溫度傳感電路
DALLAS
最新單線數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,其體積更小、更適用于多種場(chǎng)合、且適用電壓更寬、更經(jīng)濟(jì)。DALLAS
半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。溫度測(cè)量范圍為-55~+125
攝氏度,可編程為9位~12
位轉(zhuǎn)換精度,測(cè)溫分辨率可達(dá)0.0625攝氏度,分辨率設(shè)定參數(shù)以及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM
中,掉電后依然保存。被測(cè)溫度用符號(hào)擴(kuò)展的16位數(shù)字量方式串行輸出。
DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列、各種封裝形式,DQ
為數(shù)據(jù)輸入/輸出引腳。開(kāi)漏單總線接口引腳。當(dāng)被用著在寄生電源下,也可以向器件提供電源;GND為地信號(hào);VDD為可選擇的VDD引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地,如下圖所示。
DS18B20管腳圖
顯示電路
對(duì)于數(shù)字溫度的顯示,我們采用4位一體共陰LED數(shù)碼管。足夠顯示0~100中各位數(shù),并且還能顯示一位小數(shù)部分。
4位LED數(shù)碼顯示管
溫度報(bào)警電路
對(duì)于數(shù)字溫度計(jì)的設(shè)計(jì),除了溫度的數(shù)字顯示功能外還加入了報(bào)警系統(tǒng),當(dāng)測(cè)量的溫度超過(guò)或低于我們所設(shè)定的溫度值時(shí),系統(tǒng)會(huì)產(chǎn)生報(bào)警并亮紅燈報(bào)警。
其電路圖如下所示。
蜂鳴器紅燈報(bào)警系統(tǒng)電路圖
源程序:
/********************************************************************
*
程序名;
基于51單片機(jī)的溫度計(jì)
*
功
能:
實(shí)時(shí)測(cè)量溫度,超過(guò)上下限報(bào)警,報(bào)警溫度可手動(dòng)調(diào)整。K1是用來(lái)
*
進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限
*
調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)
*
退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除
*
按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,*
K1是實(shí)現(xiàn)減1功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。
*********************************************************************/
#include
#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
uchar
max=0x00,min=0x00;
//max是上限報(bào)警溫度,min是下限報(bào)警溫度
bit
s=0;
//s是調(diào)整上下限溫度時(shí)溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右
bit
s1=0;
//s1標(biāo)志位用于上下限查看時(shí)的顯示
void
display1(uint
z);
#include“ds18b20.h“
#include“keyscan.h“
#include“display.h“
/******************************************************/
/*
主函數(shù)
/
/*****************************************************/
void
main()
{
beer=1;
//關(guān)閉蜂鳴器
led=1;
//關(guān)閉LED燈
timer1_init(0);
//初始化定時(shí)器1(未啟動(dòng)定時(shí)器1)
get_temperature(1);
//首次啟動(dòng)DS18B20獲取溫度(DS18B20上電后自動(dòng)將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器)
while(1)
{
keyscan();
get_temperature(0);
display(temp,temp_d*0.625);
alarm();
}
}
/**********************************************************************
*
程序名;
ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件
*
功
能:
通過(guò)定時(shí)器0延時(shí)是數(shù)碼管動(dòng)態(tài)顯示
**********************************************************************/
#ifndef
__ds18b20_display_H__
#define
__ds18b20_display_H__
#define
uint
unsigned
int
//變量類型宏定義,用uint表示無(wú)符號(hào)整形(16位)
#define
uchar
unsigned
char
//變量類型宏定義,用uchar表示無(wú)符號(hào)字符型(8位)
sbit
wei1=P2^4;
//可位尋址變量定義,用wei1表示P2.4口
sbit
wei2=P2^5;
//用wei2表示P2.5口
sbit
wei3=P2^6;
//用wei3表示P2.6口
sbit
wei4=P2^7;
//用wei4表示P2.7口
uchar
num=0;
//定義num為全局無(wú)符號(hào)字符型變量,賦初值為‘0’
uchar
code
temperature1[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//定義顯示碼表0~9
uchar
code
temperature2[]={
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
//帶小數(shù)點(diǎn)的0~9.uchar
code
temperature3[]={
0x00,0x80,0x40,0x76,0x38};//依次是‘不顯示’‘.’‘-’‘H’‘L’
/******************************************************/
/
延時(shí)子函數(shù)
/
/*****************************************************/
void
display_delay(uint
t)
//延時(shí)1ms左右
{
uint
i,j;
for(i=t;i>0;i--)
for(j=120;j>0;j--);
}
/******************************************************/
/*
定時(shí)器1初始化函數(shù)
/
/*****************************************************/
void
timer1_init(bit
t)
{
TMOD=0x10;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET1=1;
TR1=t;
//
局部變量t為1啟動(dòng)定時(shí)器1,為0關(guān)閉定時(shí)器1
}
/******************************************************/
/*
定時(shí)器1中斷函數(shù)
/
/*****************************************************/
void
timer1()
interrupt
{
TH0=0x3c;
//重新賦初值,定時(shí)50ms
TL0=0xb0;
num++;
//每進(jìn)入一次定時(shí)器中斷num加1(每50ms加1一次)
if(num<5)
{s=1;if(w==1){beer=1;led=1;}else{beer=1;led=1;}}
else
//進(jìn)入4次中斷,定時(shí)200ms時(shí)若報(bào)警標(biāo)志位w為‘1’則啟動(dòng)報(bào)警,不為‘1’不啟動(dòng)
//實(shí)現(xiàn)間歇性報(bào)警功能
{s=0;if(w==1){beer=0;led=0;}else{beer=1;led=1;}}
if(num>20)
//進(jìn)入20次中斷,定時(shí)1s
{
num=0;
//num歸0,重新定開(kāi)始定時(shí)1s
s1=0;
//定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限顯示功能
v1=1;
//定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限查看功能
}
}
/******************************************************/
/*
調(diào)整報(bào)警上下限選擇函數(shù)
/
/*****************************************************/
void
selsct_1(uchar
f,uchar
k)
//消除百位的0顯示,及正負(fù)溫度的顯示選擇
{
if(f==0)
//若為正溫度,百位為0則不顯示百位,不為0則顯示
{
if(k/100==0)
P0=temperature3[0];
else
P0=temperature1[k/100];
}
if(f==1)
//若為負(fù)溫度,若十位為0,百位不顯示,否則百位顯示‘-’
{
if(k%100/10==0)
P0=temperature3[0];
else
P0=temperature3[2];
}
}
void
selsct_2(bit
f,uchar
k)
//消除十位的0顯示,及正負(fù)溫度的顯示選擇
{
if(f==0)
//若為正溫度,百位十位均為0則不顯示十位,否則顯示十位
{
if((k/100==0)&&(k%100/10==0))
P0=temperature3[0];
else
P0=temperature1[k%100/10];
}
if(f==1)
//若為負(fù)溫度,若十位為0,十位不顯示,否則十位顯示‘-’
{
if(k%100/10==0)
P0=temperature3[2];
else
P0=temperature1[k%100/10];
}
}
/******************************************************/
/*
主函數(shù)顯示
/
/*****************************************************/
void
display(uchar
t,uchar
t_d)
//用于實(shí)測(cè)溫度、上限溫度的顯示
{
uchar
i;
for(i=0;i<4;i++)
//依次從左至右選通數(shù)碼管顯示,實(shí)現(xiàn)動(dòng)態(tài)顯示
{
switch(i)
{
case
0:
//選通第一個(gè)數(shù)碼管
wei2=1;
//關(guān)第二個(gè)數(shù)碼管
wei3=1;
//關(guān)第三個(gè)數(shù)碼管
wei4=1;
//關(guān)第四個(gè)數(shù)碼管
wei1=0;
//開(kāi)第一個(gè)數(shù)碼管
if(a==0){selsct_1(f,t);}
//若a=0則在第一個(gè)數(shù)碼管上顯示測(cè)量溫度的百位或‘-’
if(a==1)
{
P0=temperature3[3];
//若a=1則在第一個(gè)數(shù)碼管上顯示‘H’
}
if(a==2)
{
P0=temperature3[4];
//若a=2則在第一個(gè)數(shù)碼管上顯示‘L’
}
break;
case
1:
//選通第二個(gè)數(shù)碼管
wei1=1;
wei3=1;
wei4=1;
wei2=0;
if(a==0){selsct_2(f,t);}
//若a=0則在第二個(gè)數(shù)碼管上顯示測(cè)量溫度的十位或‘-’
if(a==1)
//若a=1則在第二個(gè)數(shù)碼管上顯示上限報(bào)警溫度的百位或‘-’
{
if(s==0)
selsct_1(f_max,max);//若s=0則顯示第二個(gè)數(shù)碼管,否則不顯示
else
P0=temperature3[0];
//通過(guò)s標(biāo)志位的變化實(shí)現(xiàn)調(diào)節(jié)上下限報(bào)警溫度時(shí)數(shù)碼管的閃爍
if(s1==1)
selsct_1(f_max,max);//若s1=1則顯示第二個(gè)數(shù)碼管(s1標(biāo)志位用于上下限查看時(shí)的顯示)
}
if(a==2)
//若a=2則在第二個(gè)數(shù)碼管上顯示下限報(bào)警溫度的百位或‘-’
{
if(s==0)
selsct_1(f_min,min);
else
P0=temperature3[0];
if(s1==1)
selsct_1(f_min,min);
}
break;
case
2:
//選通第三個(gè)數(shù)碼管
wei1=1;
wei2=1;
wei4=1;
wei3=0;
if(a==0){P0=temperature2[t%10];}//若a=0則在第三個(gè)數(shù)碼管上顯示測(cè)量溫度的個(gè)位
if(a==1)
//若a=1則在第三個(gè)數(shù)碼管上顯示上限報(bào)警溫度的十位或‘-’
{
if(s==0)
selsct_2(f_max,max);//若s=0則顯示第三個(gè)數(shù)碼管,否則不顯示
else
P0=temperature3[0];
if(s1==1)
selsct_2(f_max,max);//若s1=1則顯示第三個(gè)數(shù)碼管
}
if(a==2)
//若a=2則在第三個(gè)數(shù)碼管上顯示下限報(bào)警溫度的十位或‘-’
{
if(s==0)
selsct_2(f_min,min);
else
P0=temperature3[0];
if(s1==1)
selsct_2(f_min,min);
}
break;
case
3:
//選通第四個(gè)數(shù)碼管
wei1=1;
wei2=1;
wei3=1;
wei4=0;
if(a==0){P0=temperature1[t_d];}//若a=0則在第四個(gè)數(shù)碼管上顯示測(cè)量溫度的小數(shù)位
if(a==1)
//若a=1則在第四個(gè)數(shù)碼管上顯示上限報(bào)警溫度的個(gè)位
{
if(s==0)
P0=temperature1[max%10];//若s=0則顯示第四個(gè)數(shù)碼管,否則不顯示
else
P0=temperature3[0];
if(s1==1)
P0=temperature1[max%10];//若s1=1則顯示第四個(gè)數(shù)碼管
}
if(a==2)
//若a=2則在第四個(gè)數(shù)碼管上顯示下限報(bào)警溫度的個(gè)位
{
if(s==0)
P0=temperature1[min%10];
else
P0=temperature3[0];
if(s1==1)
P0=temperature1[min%10];
}
break;
}
display_delay(10);
//每個(gè)數(shù)碼管顯示3ms左右
}
}
/******************************************************/
/*
開(kāi)機(jī)顯示函數(shù)
/
/*****************************************************/
void
display1(uint
z)
//用于開(kāi)機(jī)動(dòng)畫(huà)的顯示
{
uchar
i,j;
bit
f=0;
for(i=0;i //‘z’是顯示遍數(shù)的設(shè)定 { for(j=0;j<4;j++) //依次從左至右顯示‘-’ { switch(j) { case 0: wei2=1; wei3=1; wei4=1; wei1=0; break; P0=temperature3[2];//第一個(gè)數(shù)碼管顯示 case 1: wei1=1; wei3=1; wei4=1; wei2=0;break; P0=temperature3[2];//第二個(gè)數(shù)碼管顯示 case 2: wei1=1; wei2=1; wei4=1; wei3=0;break; P0=temperature3[2];//第三個(gè)數(shù)碼管顯示 case 3: wei1=1; wei2=1; wei3=1; wei4=0;break; P0=temperature3[2];//第四個(gè)數(shù)碼管顯示 } display_delay(400); //每個(gè)數(shù)碼管顯示200ms左右 } } } #endif /******************************************************************** * 程序名; DS18B20頭文件 * 說(shuō) 明:用到的全局變量是:無(wú)符號(hào)字符型變量temp(測(cè)得的溫度整數(shù)部分),temp_d * (測(cè)得的溫度小數(shù)部分),標(biāo)志位f(測(cè)量溫度的標(biāo)志位‘0’表示“正溫度”‘1’表 * 示“負(fù)溫度”),標(biāo)志位f_max(上限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表 * 示“負(fù)溫度”),標(biāo)志位f_min(下限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表 * 示“負(fù)溫度”),標(biāo)志位w(報(bào)警標(biāo)志位‘1’啟動(dòng)報(bào)警‘0’關(guān)閉報(bào)警)。 *********************************************************************/ #ifndef __ds18b20_h__ //定義頭文件 #define __ds18b20_h__ #define uint unsigned int #define uchar unsigned char sbit DQ= P2^3; //DS18B20接口 sbit beer=P1^0; //用beer表示P1.0 sbit led=P1^1; //用led表示P1.1 uchar temp=0; //測(cè)量溫度的整數(shù)部分 uchar temp_d=0; //測(cè)量溫度的小數(shù)部分 bit f=0; //測(cè)量溫度的標(biāo)志位,0’表示“正溫度” ‘1’表示“負(fù)溫度”) bit f_max=0; //上限溫度的標(biāo)志位‘0’表示“正溫度” ‘1’表示“負(fù)溫度”) bit f_min=0; //下限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表示“負(fù)溫度”) bit w=0; //報(bào)警標(biāo)志位‘1’啟動(dòng)報(bào)警‘0’關(guān)閉報(bào)警 /******************************************************/ /* 延時(shí)子函數(shù) / /*****************************************************/ void ds18b20_delayus(uint t) //延時(shí)幾μs { while(t--); } void ds18b20_delayms(uint t) //延時(shí)1ms左右 { uint i,j; for(i=t;i>0;i--) for(j=120;j>0;j--); } /******************************************************/ /* DS18B20初始化函數(shù) / /*****************************************************/ void ds18b20_init() { uchar c=0; DQ=1; DQ=0; //控制器向DS18B20發(fā)低電平脈沖 ds18b20_delayus(80); //延時(shí)15-80μs DQ=1; //控制器拉高總線,while(DQ); //等待DS18B20拉低總線,在60-240μs之間 ds18b20_delayus(150); //延時(shí),等待上拉電阻拉高總線 DQ=1; //拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸; } /******************************************************/ /* DS18B20字節(jié)讀函數(shù) / /*****************************************************/ uchar ds18b20_read() { uchar i; uchar d=0; DQ = 1; //準(zhǔn)備讀; for(i=8;i>0;i--) { d >>= 1; //低位先發(fā); DQ = 0; _nop_(); _nop_(); DQ = 1; //必須寫(xiě)1,否則讀出來(lái)的將是不預(yù)期的數(shù)據(jù); if(DQ) //在12us處讀取數(shù)據(jù); d |= 0x80; ds18b20_delayus(10); } return d; //返回讀取的值 } /******************************************************/ /* DS18B20字節(jié)寫(xiě)函數(shù) / /*****************************************************/ void ds18b20_write(uchar d) { uchar i; for(i=8;i>0;i--) { DQ=0; DQ=d&0x01; ds18b20_delayus(5); DQ=1; d >>= 1; } } /******************************************************/ /* 獲取溫度函數(shù) / /*****************************************************/ void get_temperature(bit flag) { uchar a=0,b=0,c=0,d=0; uint i; ds18b20_init(); ds18b20_write(0xcc); //向DS18B20發(fā)跳過(guò)讀ROM命令 ds18b20_write(0x44); //寫(xiě)啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAM if(flag==1) { display1(1); //用開(kāi)機(jī)動(dòng)畫(huà)耗時(shí) } else ds18b20_delayms(1); ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0xbe); a=ds18b20_read(); //讀內(nèi)部RAM (LSB) b=ds18b20_read(); //讀內(nèi)部RAM (MSB) if(flag==1) //局部位變量f=1時(shí)讀上下線報(bào)警溫度 { max=ds18b20_read(); //讀內(nèi)部RAM (TH) min=ds18b20_read(); //讀內(nèi)部RAM (Tl) } if((max&0x80)==0x80) //若讀取的上限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度 {f_max=1;max=(max-0x80);} //將上限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將上限溫度裝換成無(wú)符號(hào)數(shù)。 if((min&0x80)==0x80)//若讀取的下限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度 {f_min=1;min=(min-0x80);} //將下限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將下限溫度裝換成無(wú)符號(hào)數(shù)。 i=b; i>>=4; if (i==0) { f=0; //i為0,正溫度,設(shè)立正溫度標(biāo)記 temp=((a>>4)|(b<<4)); //整數(shù)部分 a=(a&0x0f); temp_d=a; //小數(shù)部分 } else { f=1; //i為1,負(fù)溫度,設(shè)立負(fù)溫度標(biāo)記 a=~a+1; b=~b; temp=((a>>4)|(b<<4)); //整數(shù)部分 a=(a&0x0f); //小數(shù)部分 temp_d=a; } } /******************************************************/ /* 存儲(chǔ)極限溫度函數(shù) / /*****************************************************/ void store_t() { if(f_max==1) //若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù) max=max+0x80; if(f_min==1) //若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù) min=min+0x80; ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0x4e); //向DS18B20發(fā)寫(xiě)字節(jié)至?xí)捍嫫?和3(TH和TL)命令 ds18b20_write(max); //向暫存器TH(上限溫度暫存器)寫(xiě)溫度 ds18b20_write(min); //向暫存器TL(下限溫度暫存器)寫(xiě)溫度 ds18b20_write(0xff); //向配置寄存器寫(xiě)命令,進(jìn)行溫度值分辨率設(shè)置 ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0x48); //向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)容寫(xiě)入EEPROM } //DS18B20上電后會(huì)自動(dòng)將EEPROM中的上下限溫度拷貝到TH、TL暫存器 /******************************************************/ /* 溫度超限報(bào)警函數(shù) / /*****************************************************/ void alarm() { //若上限值是正值 if(f_max==0) { if(f_min==0) //若下限值是正值 { if(f==0) //若測(cè)量值是正值 { if(temp<=min||temp>=max) {w=1;TR1=1;} //當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 if((temp {w=0;} //當(dāng)測(cè)量值大于最小值且小于最大值時(shí)不報(bào)警 } if(f==1){w=1;TR1=1;} //若測(cè)量值是負(fù)值時(shí)報(bào)警 } if(f_min==1) //若下限值是負(fù)值 { if(f==0) //若測(cè)量值是正值 { if(temp>=max)//當(dāng)測(cè)量值大于最大值時(shí)報(bào)警 {w=1;TR1=1;} if(temp {w=0;} } if(f==1) //若測(cè)量值是負(fù)值 { if(temp>=min)//當(dāng)測(cè)量值大于最小值時(shí)報(bào)警 {w=1;TR1=1;} if(temp {w=0;} } } } if(f_max==1) //若下限值是負(fù)值 { if(f_min==1) //若下限值是負(fù)值 { if(f==1) //若測(cè)量值是負(fù)值 { if((temp<=max)||(temp>=min)) {w=1;TR1=1;} //當(dāng)測(cè)量值小于最大值或大于最小值時(shí)報(bào)警 if((temp {w=0;} //當(dāng)測(cè)量值小于最小值且大于最大值時(shí)不報(bào)警 } if(f==0){w=1;TR1=1;} //若測(cè)量值是正值時(shí)報(bào)警 } } } #endif /******************************************************************** * 程序名; 基于51單片機(jī)的溫度計(jì) * 功 能: 實(shí)時(shí)測(cè)量溫度,超過(guò)上下限報(bào)警,報(bào)警溫度可手動(dòng)調(diào)整。K1是用來(lái) * 進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限 * 調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng) * 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除 * 按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,* K1是實(shí)現(xiàn)減1功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。 *********************************************************************/ #include #include //將intrins.h頭文件包含到主程序(調(diào)用其中的_nop_()空操作函數(shù)延時(shí)) #define uint unsigned int #define uchar unsigned char uchar max=0x00,min=0x00; //max是上限報(bào)警溫度,min是下限報(bào)警溫度 bit s=0; //s是調(diào)整上下限溫度時(shí)溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右 bit s1=0; //s1標(biāo)志位用于上下限查看時(shí)的顯示 void display1(uint z); //聲明display1()函數(shù)(display.h頭文件中的函數(shù),ds18b20.h要用應(yīng)先聲明) #include“ds18b20.h“ #include“keyscan.h“ #include“display.h“ /******************************************************/ /* 主函數(shù) / /*****************************************************/ void main() { beer=1; //關(guān)閉蜂鳴器 led=1; //關(guān)閉LED燈 timer1_init(0); //初始化定時(shí)器1(未啟動(dòng)定時(shí)器1) get_temperature(1); //首次啟動(dòng)DS18B20獲取溫度(DS18B20上電后自動(dòng)將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器) while(1) { keyscan(); get_temperature(0); display(temp,temp_d*0.625); alarm(); } } /********************************************************************** * 程序名; ds18b20keyscan函數(shù) * 功 能: 通過(guò)鍵盤(pán)設(shè)定設(shè)定上下限報(bào)警溫度 **********************************************************************/ #ifndef __keyscan_H__ //定義頭文件 #define __keyscan_H__ sbit key1=P2^2; sbit key2=P2^1; sbit key3=P2^0; sbit key4=P3^3; uchar i=0; //定義全局變量i用于不同功能模式的選擇,‘0’正常模式,‘1’上限調(diào)節(jié)模式,‘2’下限調(diào)節(jié)模式 uchar a=0; //定義全局變量a用于不同模式下數(shù)碼管顯示的選擇 bit k4=0; //K4按鍵雙功能選擇位,k4=0時(shí)K4按鍵選擇消按鍵音的功能,k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能 bit v=0; //K2、K3按鍵雙功能選擇位,v=0時(shí)選擇上下限查看功能,v=1時(shí)選擇上下限溫度加減功能 bit v1=0; //v1=1時(shí)定時(shí)1250ms時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能 bit v2=0; /消按鍵音功能調(diào)整位,為‘0’時(shí)開(kāi)按鍵音,為‘1’時(shí)關(guān)按鍵音 /******************************************************/ /* 讀鍵盤(pán)延時(shí)子函數(shù) / /*****************************************************/ void keyscan_delay(uint z) //延時(shí)1ms左右 { uint i,j; for(i=z;i>0;i--) for(j=120;j>0;j--); } /******************************************************/ /* 溫度調(diào)節(jié)函數(shù) / /*****************************************************/ int temp_change(int count,bit f) //上下限溫度調(diào)整 { if(key2==0) //判斷K2是否按下 { if(v2==0)beer=0; //v2=0開(kāi)按鍵音,否則消按鍵音 keyscan_delay(10); //延時(shí)10ms if(key2==0) //再次判斷K2是否按下(實(shí)現(xiàn)按按鍵時(shí)消抖) { beer=1; //K2按下關(guān)按鍵音 if(f==0) //若溫度為正 { count++; //每按一下K2溫度上調(diào)1 if(a==1){if(count>125) count=125;}//當(dāng)溫度值大于125時(shí)不上調(diào) if(a==2){if(count>125) count=125;} } if(f!=0) //若溫度為負(fù) { count++; //每按一下K2溫度下調(diào)1 if(a==1){if(count>55) count=55;}//當(dāng)溫度值小于-55時(shí)不再下調(diào) if(a==2){if(count>55) count=55;} } } while(key2==0); //K2松開(kāi)按鍵時(shí)消抖 keyscan_delay(10); } if(key3==0) { if(v2==0)beer=0; keyscan_delay(10); if(key3==0) //K3按按鍵時(shí)消抖 { beer=1; count--; //每按一下K3溫度為正時(shí)下調(diào)1,為負(fù)時(shí)上調(diào)1 if(a==1){if(count<0) count=0;}//當(dāng)溫度值達(dá)到0時(shí)不再調(diào) if(a==2){if(count<0) count=0;} } while(key3==0); keyscan_delay(10); //K3松開(kāi)按鍵時(shí)消抖 } return count; } /******************************************************/ /* 讀鍵盤(pán)函數(shù) / /*****************************************************/ void keyscan() { if(key1==0) { if(v2==0)beer=0; keyscan_delay(10); if(key1==0) //K1按按鍵時(shí)消抖 { beer=1; TR1=1; //開(kāi)定時(shí)器1,通過(guò)s標(biāo)志位的變化,實(shí)現(xiàn)在上下限溫度調(diào)整時(shí)溫度顯示時(shí)閃爍的功能 k4=1; //在上下溫度調(diào)節(jié)功能模式下選擇K4的調(diào)整上下限溫度正負(fù)的功能 v=1; //在上下溫度調(diào)節(jié)功能模式下選擇K2、K3的溫度加減功能 i++; //K1按一下i加1,i=‘0’進(jìn)入正常模式,i=‘1’進(jìn)入調(diào)上限模式,i=‘2’進(jìn)入調(diào)下限模式 if(i>2) //K1按下三次后退出調(diào)節(jié)模式 { i=0; //進(jìn)入正常模式 TR1=0; //關(guān)定時(shí)器1 k4=0; //在正常模式下選擇K4的消按鍵音功能 v=0; //在正常模式下選擇K2、K3的查看上下限報(bào)警溫度功能 store_t(); //存儲(chǔ)調(diào)整后的上下限報(bào)警溫度 } switch(i) //顯示選擇 { case 0:a=0;break; //a=0選擇顯示測(cè)得的溫度 case 1:a=1;break; //a=1選擇顯示上限溫度 case 2:a=2;break; //a=2選擇顯示下限溫度 default:break; } } while(key1==0); //K1松按鍵時(shí)消抖 keyscan_delay(10); } if(a==1&&v==1) //a=1選擇顯示上限溫度且v=1時(shí)選擇上下限溫度加功能 {led=0;max=temp_change(max,f_max);}//顯示上限溫度 else if(a==2&&v==1) //a=2選擇顯示下限溫度且v=1時(shí)選擇上下限溫度減功能 {led=1;min=temp_change(min,f_min);} else; if(k4==1) //k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能 { if(key4==0) { if(v2==0)beer=0; keyscan_delay(5); if(key4==0) { beer=1; if(a==1) {if(max>55) f_max=0;else f_max=~f_max;}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 if(a==2) {if(min>55) f_max=0;else f_min=~f_min;}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 } while(key4==0); keyscan_delay(10); } } if(v==0) //v=0時(shí)選擇上下限查看功能 { if(key2==0) { if(v2==0)beer=0; keyscan_delay(10); if(key2==0) { beer=1; a=1; //選擇上限顯示 TR1=1; //開(kāi)定時(shí)器1開(kāi)始定時(shí)一分鐘左右 s1=1; //上限顯示不閃爍,顯示一分鐘左右自動(dòng)退出 } while(key2==0); keyscan_delay(10); } if(key3==0) { if(v2==0)beer=0; keyscan_delay(10); if(key3==0) { beer=1; a=2; //選擇下限顯示 TR1=1; //開(kāi)定時(shí)器1開(kāi)始定時(shí)1s s1=1; //下限顯示不閃爍,顯示1s自動(dòng)退出 } while(key3==0); keyscan_delay(10); } if(v1==1) //v1=1時(shí)定時(shí)1s時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能 {a=0;v1=0;TR1=0;} //a=0顯示實(shí)測(cè)溫度,v1清零,關(guān)定時(shí)器1 if(k4==0) //k4=0時(shí)K4按鍵選擇消按鍵音的功能 { if(key4==0) { if(v2==0)beer=0; keyscan_delay(10); if(key4==0) { beer=1; v2=~v2; //為‘0’時(shí)開(kāi)按鍵音,為‘1’時(shí)關(guān)按鍵音 } while(key4==0); keyscan_delay(10); } } } } #endif 四、總結(jié) 單片機(jī)的學(xué)習(xí)與應(yīng)用相關(guān)的總結(jié)與體會(huì)。在課設(shè)過(guò)程中,我們不僅鞏固了平時(shí)所學(xué)習(xí)的單片機(jī)知識(shí),而且通過(guò)不斷查閱相關(guān)資料,學(xué)習(xí)新的知識(shí),可以說(shuō),通過(guò)這次單片機(jī)的實(shí)踐學(xué)習(xí),我們學(xué)到了很多,而且對(duì)單片機(jī)的有關(guān)知識(shí)以及其在現(xiàn)實(shí)生活中的多方面應(yīng)用有了更深層次的認(rèn)識(shí),這對(duì)于我們以后的學(xué)習(xí)和步入社會(huì)后參加工作都有很大的幫助。 在此次課程設(shè)計(jì)的進(jìn)程中,我們遇到了很多問(wèn)題,例如,一開(kāi)始我們?cè)诖_定課設(shè)題目后,在編寫(xiě)程序時(shí),由于思路不太清晰,而且設(shè)計(jì)要求中需要使用新器件DS18B20智能測(cè)溫,而其相關(guān)知識(shí)我們很模糊甚至可以說(shuō)一無(wú)所知,不過(guò)后來(lái),我們通過(guò)查找一些相關(guān)的資料書(shū)以及尋求輔導(dǎo)老師的幫助,又經(jīng)過(guò)我們的主動(dòng)思考,理清思路,終于將程序修改正確。在仿真時(shí),由于我們有了之前的數(shù)模電課設(shè)仿真經(jīng)驗(yàn),所以此時(shí)我們課設(shè)進(jìn)行的很順利,并沒(méi)有受到什么大的阻礙。 通過(guò)此次單片機(jī)課程設(shè)計(jì),我們明白了很多,理論指導(dǎo)實(shí)踐,但是理論也需要實(shí)踐給予證明,不能盲目的相信書(shū)本,凡事都要通過(guò)自己的思考推敲,否則自己不會(huì)取的大的進(jìn)步。而且在平時(shí)的學(xué)習(xí)生活中應(yīng)該多和周圍的同學(xué)相互學(xué)習(xí),交流經(jīng)驗(yàn),遇到不會(huì)的東西時(shí),切忌焦躁,首先要經(jīng)過(guò)自己的獨(dú)立思考,有了一定想法后,可以去查找相關(guān)的資料書(shū)刊或者找同學(xué)討論,如果實(shí)在解釋不了,再去找輔導(dǎo)老師,在這個(gè)遇到問(wèn)題解決問(wèn)題的過(guò)程中,不斷加強(qiáng)自我的動(dòng)腦能力,進(jìn)而去指導(dǎo)動(dòng)手能力,也只有這樣,在思路清晰,條理順暢的時(shí)候,再去進(jìn)行軟件編寫(xiě)和硬件操作工作,才有可能起到事半功倍的效果。 五、附錄 系統(tǒng)硬件原理電路圖 數(shù)字溫度計(jì)設(shè)計(jì)器材表 單片機(jī)STC89C52 DS18B20 晶振12M 三極管8850 電容30PF 電解電容10UF/25V 小蜂鳴器 LED ?5紅 電阻10k,3k,2k,1k,510,330 各5 4位一體共陰數(shù)碼管 AC/DC(5V/1A)電源 IC插座40 9X15cm萬(wàn)用板 六、參考文獻(xiàn) 1、李群芳編.《單片微型計(jì)算機(jī)及接口技術(shù)》[M].電子工業(yè)出版社.2、樓然苗編.《51系列單片機(jī)設(shè)計(jì)實(shí)例》[M].北京航空航天大學(xué)出版社.3、黃勤編.《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)實(shí)驗(yàn)教程》[M].重慶大學(xué)出版社. 基于51單片機(jī)的電子時(shí)鐘設(shè)計(jì) 摘要 本電子時(shí)鐘以STC89C52單片機(jī)作為主控芯片,采用DS12C887時(shí)鐘芯片,使用1602液晶作為顯示輸出。該時(shí)鐘走時(shí)精確,具有鬧鐘設(shè)置,以及可同時(shí)顯示時(shí)間、日期等多種功能。本文將詳細(xì)介紹該電子時(shí)鐘涉及到的一些基本原理,從硬件和軟件兩方面進(jìn)行分析。 【關(guān)鍵詞】 STC89C52單片機(jī) DS12C887時(shí)鐘芯片 1602液晶 蜂鳴器 目錄 一、緒論…………………………………………………………4 1.1 電子時(shí)鐘功能…………………………………………1.2設(shè)計(jì)方案………………………………………………4 二、硬件設(shè)計(jì)……………………………………………………4 2.151 2.2 單片機(jī)部分設(shè)計(jì)………………………………4 USB供電電路設(shè)計(jì)………………………………5 2.3 串行通信電路設(shè)計(jì)………………………………6 2.4DS12C887時(shí)鐘芯片電路的設(shè)計(jì)…………………6 2.51602LCD液晶屏顯示電路設(shè)計(jì)………………7 2.6 蜂鳴器電路設(shè)計(jì)………………………………8 2.7 按鍵調(diào)整電路設(shè)計(jì)…………………………8 三、軟件設(shè)計(jì)…………………………………………9 3.1 系統(tǒng)程序流程圖設(shè)計(jì)…………………………9 3.2程序設(shè)計(jì)……………………………………11 四、心得體會(huì)………………………………………………22 參考文獻(xiàn)……………………………………………………23 一、緒 論 1.1電子時(shí)鐘功能 (1)在1602液晶上顯示年、月、日、星期、時(shí)、分、秒,并且按秒實(shí)時(shí)更新顯示。(2)具有鬧鈴設(shè)定即到時(shí)報(bào)警功能,報(bào)警響起時(shí)按任意鍵可取消報(bào)警。 (3)能夠使用實(shí)驗(yàn)板上的按鍵隨時(shí)調(diào)節(jié)各個(gè)參數(shù),四個(gè)有效鍵分別為功能選擇鍵、數(shù)值增大鍵、數(shù)值減小鍵和鬧鐘查看鍵。 (4)每次有鍵按下時(shí),蜂鳴器都以短“滴”聲報(bào)警。 (5)利用DS12C887自身掉電可繼續(xù)走時(shí)的特性,該時(shí)鐘可實(shí)現(xiàn)斷電時(shí)間不停、再次上電時(shí)時(shí)間仍準(zhǔn)確顯示在液晶上的功能。 1.2設(shè)計(jì)方案 DS12C887時(shí)鐘芯片+1602LCD液晶屏 DS12C887時(shí)鐘芯片功能豐富、價(jià)格適中,能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等時(shí)間信息,其內(nèi)部含有世紀(jì)寄存器,從而利用硬件電路解決“千年”問(wèn)題。DS12C887中自帶鋰電池,外部掉電時(shí),其內(nèi)部時(shí)間信息還能保持10年之久。1602LCD液晶屏可以輸出2行,每行顯示16個(gè)字符。1602LCD液晶屏顯示清晰且不會(huì)閃爍,由于液晶屏是數(shù)字式的,因此和單片機(jī)系統(tǒng)的接口簡(jiǎn)單,操作方便。 以STC89C52為主控芯片,DS12C887為時(shí)鐘芯片,1602LCD液晶屏作為顯示器。程序控制DS12C887時(shí)鐘芯片實(shí)現(xiàn)小時(shí)、分、秒和年、月、日的計(jì)時(shí),并在1602LCD液晶屏上顯示出來(lái)。當(dāng)時(shí)間走到程序所設(shè)定的時(shí)間時(shí),蜂鳴器響起,起到鬧鐘功能。 二、硬 件 設(shè) 計(jì) 2.1 51單片機(jī)部分設(shè)計(jì) 單片機(jī)部分如圖2—1所示: 以STC89C52單片機(jī)為核心,選用12MHZ的晶振,由于晶振的頻率越高,單片機(jī)的運(yùn)行速度就越快,考慮到單片機(jī)的運(yùn)行速度快會(huì)導(dǎo)致對(duì)存儲(chǔ)器的要求就會(huì)變高,因此12MHZ為最佳選擇。外接電容的值雖然沒(méi)有嚴(yán)格的要求,但是外接電容的大小會(huì)影響振蕩器的頻率高低、振蕩器的穩(wěn)定性和起振的快速性,因此選用30pF的電容作為起振電容。復(fù)位電路為按鍵高電平復(fù)位,當(dāng)按鍵按下,RES端為高電平,當(dāng)高電平持續(xù)4us的時(shí)間單片機(jī)即復(fù)位。 2.2 USB供電電路設(shè)計(jì) USB供電電路如下圖2—2所示: 該電子時(shí)鐘采用USB端口的方式為單片機(jī)供電,LPOW1為電源顯示燈,當(dāng)按鍵S5按下,電源顯示燈LPOW1亮,表示給單片機(jī)供+5V電。 2.3 串行通信電路設(shè)計(jì) 串行通信電路如下圖2—3所示: 圖中通過(guò)MAX232進(jìn)行RS—232電平與單片機(jī)TTL電平之間的轉(zhuǎn)換,從而為單片機(jī)和上位機(jī)之間通信提供通道。通信電路的目的就是讓通信雙方的電平匹配,單片機(jī)用的是TTL電平,上位機(jī)的串口用的是RS—232電平。TTL電平邏輯1的電壓范圍是+3.3V到+5V,邏輯0的電壓范圍是0到+3.3V;RS—232電平的邏輯1的電壓范圍是—15V到—5V,邏輯0的電壓范圍是+5V到+15V。MAX232可以把輸入的+5V電源電壓變換成為RS—232輸出電平所需的+10V電壓。所以采用此芯片接口的串行通信系統(tǒng)只需單一的+5V電源就可以了。對(duì)于沒(méi)有+12V電源的場(chǎng)合,其適應(yīng)性更強(qiáng),2.4 DS12C887時(shí)鐘芯片電路的設(shè)計(jì) 時(shí)鐘芯片電路如下圖2—4所示: DS12C887時(shí)鐘芯片共需要13條信號(hào)線,分別是并行數(shù)據(jù)地址復(fù)用線AD0~AD7,CS,AS,R/W,DS和IRQ。 MOT—總線操作時(shí)序選擇端。它有兩種工作模式,當(dāng)MOT接 VCC時(shí),選用Motorola模式;當(dāng)MOT接GND或懸空時(shí),選用Intel模式。NC—空引腳。 AD0~AD7—復(fù)用地址數(shù)據(jù)總線。在總線周期的前半部分,出現(xiàn)在AD0~AD7上的是地址信息,可用以選通DS12C887內(nèi)的RAM,總線周期的后半部分出現(xiàn)在AD0~AD7上的是數(shù)據(jù)信息。GND,VCC—系統(tǒng)電源接入端。當(dāng) VCC輸入為+5V時(shí),用戶可以訪問(wèn)DS12C887內(nèi)RAM的輸入小于+4.25V時(shí),禁止用戶對(duì)內(nèi)部RAM中的數(shù)據(jù),并可對(duì)其進(jìn)行讀/寫(xiě)操作;當(dāng) VCC進(jìn)行讀/寫(xiě)操作,此時(shí)用戶不能正確芯片內(nèi)的時(shí)間信息;當(dāng) VCC的輸入小于+3V時(shí),DS12C887會(huì)自動(dòng)的將電源切換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能正常工作。 CS—芯片片選端。 AS—地址選通輸入端。在進(jìn)行讀/寫(xiě)操作時(shí),AS的上升沿將AD0~AD7上出現(xiàn)的地址信息鎖存到DS12C887上,而下一個(gè)下降沿清除AD0~AD7上的地址信息,不論CS是否有效,DS12C887都將執(zhí)行該操作。 R/W—讀/寫(xiě)輸入端。該引接腳有兩種工作模式,當(dāng)MOT接 VCC時(shí),R/W工作在Motorola模式。此時(shí)該引腳的作用是區(qū)分讀操作還是寫(xiě)操作,R/W高電平時(shí)為讀操作,R/W為低電平時(shí)為寫(xiě)操作;當(dāng)MOT接GND時(shí),該引腳工作在Intel模式,此時(shí)該引腳為寫(xiě)允許輸入,此信號(hào)的上升沿鎖存數(shù)據(jù)。 DS—數(shù)據(jù)選擇或讀輸入腳。該引腳有兩種工作模式,當(dāng)MOT接 VCC時(shí),選用Motorola模式,此時(shí),每個(gè)總線周期后一部分的DS為高電平,稱為數(shù)據(jù)選通。在讀操作中,DS的上升沿使DS12C887將內(nèi)部數(shù)據(jù)送往總線AD0~AD7上,以供外部讀取。在寫(xiě)操作中,DS的下降沿將使總線AD0~AD7上的數(shù)據(jù)鎖存在DS12C887中。當(dāng)MOT接GND時(shí),選用Intel模式,此時(shí)該引腳是讀允許輸入引腳。 RESET—芯片復(fù)位引腳。 IRQ—中斷請(qǐng)求輸出。用作處理器的中斷申請(qǐng)輸入。只要引起中斷的狀態(tài)位置位,并且相應(yīng)中斷使能位也置位,IRQ將一直保持低電平,處理器程序通常讀取C存儲(chǔ)器來(lái)清除IRQ引腳輸出,RESET引腳也會(huì)清除未處理的中斷。沒(méi)有中斷發(fā)生時(shí),IRQ為高阻狀態(tài),可將多個(gè)中斷器件接到一條IRQ總線上,只要它們均為漏極開(kāi)路輸出即可。IRQ引腳為漏極開(kāi)路輸出,需要使用一個(gè)外接上拉電阻與SQW—方波輸出引腳。當(dāng)供電電壓 VCC相連。 VCC大于4.25V時(shí),SQW引腳可輸出方波。 2.5 1602LCD液晶屏顯示電路設(shè)計(jì) 1602LCD液晶屏顯示電路如下圖2—5所示: 1602液晶為5V電壓驅(qū)動(dòng),帶背光,可顯示2行,每行16個(gè)字符,不能顯示漢字,內(nèi)置含128個(gè)字符的ASCII字符集字庫(kù),只有并行接口,無(wú)串行接口。接口說(shuō)明如下:(1)液晶1,2端為電源;15,16為背光電源;為防止直接加5V電壓燒壞背光燈,在15腳串接一個(gè)1K?電阻用于限流。 (2)液晶3端為液晶對(duì)比度調(diào)節(jié)端,通過(guò)一個(gè)10K?電位器接地來(lái)調(diào)節(jié)液晶顯示對(duì)比度。首次使用時(shí),在液晶上電狀態(tài)下,調(diào)節(jié)至液晶上面一行顯示出黑色小格為止。 (3)液晶4端為向液晶控制器寫(xiě)數(shù)據(jù)/寫(xiě)命令選擇端,接單片機(jī)的P3.5口。 (4)液晶5端為讀/寫(xiě)選擇端,因?yàn)槲覀儾粡囊壕ёx取任何數(shù)據(jù),只向其寫(xiě)入命令和顯示數(shù)據(jù),因此此端始終選擇為寫(xiě)狀態(tài),即低電平接地。 (5)液晶6端為使能信號(hào),是操作時(shí)必須的信號(hào),接單片機(jī)的P3.4口。 2.6 蜂鳴器電路設(shè)計(jì) 蜂鳴器電路如下圖2—6所示: 蜂鳴器電路接在單片機(jī)的P2.3引腳上,當(dāng)該引腳一個(gè)低電平,三極管導(dǎo)通,蜂鳴器發(fā)出聲音作為鬧鈴。 2.7 按鍵調(diào)整電路設(shè)計(jì) 按鍵調(diào)整電路如下圖2—7所示: 四個(gè)獨(dú)立鍵盤(pán)均采用查詢方式,將按鍵的一端接地,另一端各接一根輸入線直接與STC89C52的I/O口相連。當(dāng)按鍵閉合時(shí),相當(dāng)于該I/O口通過(guò)按鍵與地相連,變成低電平,單片機(jī)通過(guò)檢測(cè)I/O口的電平狀態(tài),即可識(shí)別出按下的鍵。通過(guò)四個(gè)鍵實(shí)現(xiàn)參數(shù)的調(diào)節(jié),S1為功能選擇鍵,S2為數(shù)值增大鍵,S3為數(shù)值減小鍵,S4為鬧鐘查看鍵。 三、軟 件 設(shè) 計(jì) 3.1 系統(tǒng)程序流程圖設(shè)計(jì) 流程圖1:實(shí)驗(yàn)主程序流程圖 流程圖2:定時(shí)中斷程序流程圖 流程圖3:調(diào)時(shí)功能流程圖 3.2 程序設(shè)計(jì) #include //延時(shí)函數(shù) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);} void di() //蜂鳴器報(bào)警聲音 { beep=0; delay(100); beep=1;} void write_com(uchar com) //寫(xiě)液晶命令函數(shù) { rs=0; lcden=0; P0=com; delay(3); lcden=1; delay(3); lcden=0;} void write_data(uchar data) //寫(xiě)液晶數(shù)據(jù)函數(shù) { rs=1; lcden=0; P0=data; delay(3); lcden=1; delay(3); lcden=0;} void init() //初始化函數(shù) { uchar num; EA=1; //打開(kāi)總中斷 EX1=1; //開(kāi)外部中斷1 IT1=1; //設(shè)置負(fù)跳變沿觸發(fā)中斷 flag1=0; //變量初始化 t0_num=0; s1num=0; week=1; dula=0; //關(guān)閉數(shù)碼管顯示 wela=0; lcden=0; rd=0;/*以下幾行在首次設(shè)置DS12C887時(shí)使用,以后不必再寫(xiě)入 write_ds(0x0A,0x20); //打開(kāi)振蕩器 write_ds(0x0B,0x26); //設(shè)置24小時(shí)模式,數(shù)據(jù)二進(jìn)制格式,開(kāi)啟鬧鈴中斷 set_time(); //設(shè)置上電默認(rèn)時(shí)間 ---------------*/ write_com(0x38); //1602液晶初始化 write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<15;num++) //寫(xiě)入液晶固定部分顯示 { write_data(table[num]); delay(1);} write_com(0x80+0x40); for(num=0;num<11;num++) { write_data(table1[num]); delay(1); } } void write_sfm(uchar add,char data) { //1602液晶刷新時(shí)分秒函數(shù),4為時(shí),7為分,10為秒 char shi,ge; shi=data/10; ge=data%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge);} void write_nyr(uchar add,char data) { //1602液晶刷新年月日函數(shù),3為年,6為月,9為日 char shi,ge; shi=data/10; ge=data%10; write_com(0x80+add); write_data(0x30+shi); write_data(0x30+ge);void write_week(char we) //寫(xiě)液晶星期顯示函數(shù) { write_com(0x80+12); switch(we) { case 1: write_data('M');delay(5); write_data('O');delay(5); write_data('N'); break; case 2: write_data('T');delay(5); write_data('U');delay(5); write_data('E'); break; case 3: write_data('W');delay(5); write_data('E');delay(5); write_data('D'); break; case 4: write_data('T');delay(5); write_data('H');delay(5); write_data('U'); break; case 5: write_data('F');delay(5); write_data('R');delay(5); write_data('I'); break; case 6: write_data('S');delay(5); write_data('A');delay(5); write_data('T'); break; case 7: write_data('S');delay(5); write_data('U');delay(5); write_data('N'); break; } } void keyscan(){ if(flag_ri==1){ //這里用來(lái)取消鬧鐘報(bào)警,按任意鍵取消報(bào)警 if((s1==0)||(s2==0)||(s3==0)||(s4==0)) { delay(5); if((s1==0)||(s2==0)||(s3==0)||(s4==0)) { while(!(s1&&s2&&s3&s&s4));di(); flag_ri=0; //清除報(bào)警標(biāo)志 } } } if(s1==0) //檢測(cè)s1 { delay(5); if(s1==0) { s1num++; //記錄按下次數(shù) if(flag1==1) if(s1num==4) s1num=1; flag=1; while(!s1);di(); switch(s1num) { //光標(biāo)閃爍點(diǎn)定位 case 1: write_com(0x80+0x40+10); write_com(0x0f); break; case 2: write_com(0x80+0x40+7); break; case 3: write_com(0x80+0x40+4); break; case 4: write_com(0x80+12); break; case 5: write_com(0x80+9); break; case 6: write_com(0x80+6); break; case 7: write_com(0x80+3); break; case 8: s1num=0; write_com(0x0c); flag=0; write_ds(0,miao); write_de(2,fen); write_ds(4,shi); write_ds(6,week); write_ds(7,day); write_ds(8,month); write_ds(9,year); break; } } } if(s1num!=0) //只有當(dāng)s1按下后,才檢測(cè)s2和s3 { if(s2==0) { delay(1); if(s2==0) while(!s2);di(); switch(s1num) { //根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值 case 1: miao++; if(miao==60) miao=0; write_sfm(10,miao); write_com(0x80+0x40+10); break; case 2: fen++; if(fen==60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); break; case 3: shi++; case 4: case 5: case 6: case 7: } } } if(s3==0) { delay(1); if(shi==24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); break;week++; if(week==8) week=1; write_week(week); write_com(0x80+12); break;day++; if(day==32) day=1; write_nyr(9,day); write_com(0x80+9); break;month++; if(month==13) month=1; write_nyr(6,month); write_com(0x80+6); break;year++; if(year==100) year=0; write_nyr(3,year); write_com(0x80+3); break; if(s3==0) { while(!s3);di(); switch(s1num) { //根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值 case 1: miao--; if(miao==-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); break; case 2: fen--; if(fen==-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); break; case 3: shi--; if(shi==-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); break; case 4: week--; if(week==0) week=7; write_week(week); write_com(0x80+12); break; case 5: day--; if(day==0) day=31; write_nyr(9,day); write_com(0x80+9); break; case 6: month--; if(month==0) month=12; write_nyr(6,month); write_com(0x80+6); break; case 7: year--; if(year==-1) year=99; write_nyr(3,year); write_com(0x80+3); break; } } } } if(s4==0) //檢測(cè)s4 { delay(5); if(s4==0) { flag1=~flag1; while(!s4);di(); if(flag1==0) { //退出鬧鐘設(shè)置時(shí)保存數(shù)值 flag=0; write_com(0x80+0x40); write_data(' '); write_data(' '); write_com(0x0c); write_ds(1,miao); write_ds(3,fen); write_ds(5,shi); } else { //進(jìn)入鬧鐘設(shè)置 read_alarm(); //讀取原始數(shù)據(jù) miao=amiao; //重新賦值用以按鍵調(diào)節(jié) fen=afen; shi=ashi; write_com(0x80+0x40); write_data('R'); //顯示標(biāo)志 write_data('i'); write_com(0x80+0x40+3); write_sfm(4,ashi); //送液晶顯示鬧鐘時(shí)間 write_sfm(7,afen); write_sfm(10,amiao); } } } } void write_ds(uchar add,uchar data){ //寫(xiě)12C887函數(shù) dscs=0; dsas=1; dsds=1; dsrw=1; P0=add; //先寫(xiě)地址 dsas=0; dsrw=0; P0=data; //再寫(xiě)數(shù)據(jù) dsrw=1; dsas=1; dscs=1;} uchar read_ds(uchar add){ //讀12C887函數(shù) uchar ds_data; dsas=1; dsds=1; dsrw=1; dscs=0; P0=add; //先寫(xiě)地址 dsas=0; dsds=0; P0=0xff; ds_data=P0; //再讀數(shù)據(jù) dsds=1; dsas=1; dscs=1; return ds_data;} /*---首次操作12C887時(shí)給予寄存器初始化-----void set_time(){ //首次上電初始化時(shí)間函數(shù) write_ds(0,0); write_ds(1,0); write_ds(2,0); write_ds(3,0); write_ds(4,0); write_ds(5,0); write_ds(6,0); write_ds(7,0); write_ds(8,0); write_ds(9,0);}----------------------*/ void read-alarm(){ //讀取12C887鬧鐘值 amiao=read_ds(1); afen=read_ds(3); ashi=read_ds(5);} void main() //主函數(shù) { init(); //調(diào)用初始化函數(shù) while(1) { keyscan(); //按鍵掃描 if(flag_ri==1) //當(dāng)鬧鐘中斷時(shí)進(jìn)入這里 { di(); delay(100); di(); delay(500); } if(flag==0&&flag1==0) //正常工作時(shí)進(jìn)入這里 { keyscan(); //按鍵掃描 year=read_ds(9); //讀取12C887數(shù)據(jù) month=read_ds(8); day=read_ds(7); week=read_ds(6); shi=read_ds(4); fen=read_ds(2); miao=read_ds(0); write_sfm(10,miao); //送液晶顯示 write_sfm(7,fen); write_sfm(4,shi); write_week(week); write_nyr(3,year); write_nyr(6,month); write_nyr(9,day); } } } void exter()interrupt 2 //外部中斷1服務(wù)程序 { uchar c; //進(jìn)入中斷表示鬧鐘時(shí)間到 flag_ri=1; //設(shè)置標(biāo)志位,用于大程序中報(bào)警提示 c=read_ds(0x0c); //讀取12C887的C寄存器表示響應(yīng)了中斷 } _______________________________________________________________________________ 以下為define.h源代碼: _______________________________________________________________________________ #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0; //功能鍵 sbit s2=P3^1; //增大鍵 sbit s3=P3^2; //減小鍵 sbit s4=P3^6; //鬧鐘查看鍵 sbit rd=P3^7;sbit beep=P2^3; //蜂鳴器 sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3;bit flag1,flag_ri; //定義兩個(gè)位變量 uchar count,s1num,flag,t0_num; //其他變量定義 char miao,shi,fen,year,month,day,week,amiao,afen,ashi;uchar code table[]=“201- ”; //液晶固定顯示內(nèi)容 uchar code table1[]=“ : : ”; void write_ds(uchar,uchar); //函數(shù)申明 void set_alarm(uchar,uchar,uchar);void read_alarm();uchar read_ds(uchar);void set_time(); 四、心 得 體 會(huì) 在本次電子時(shí)鐘設(shè)計(jì)中對(duì)單片機(jī)的內(nèi)部結(jié)構(gòu)有了一定的了解,熟悉了各個(gè)引腳的功能,同時(shí)熟知了1602LCD液晶、DS12C887時(shí)鐘芯片的使用,以及各種電路的功能。 通過(guò)此次課程設(shè)計(jì),無(wú)論是從軟件方面還是硬件方面,都進(jìn)一步學(xué)習(xí)和鞏固了程序的總體設(shè)計(jì)和單片機(jī)的應(yīng)用。在軟件方面,進(jìn)一步熟悉了各條指令的功能及用法,定時(shí)、中斷的用法,更深一步學(xué)習(xí)了用C語(yǔ)言編寫(xiě)實(shí)現(xiàn)電子時(shí)鐘的功能。在硬件方面,進(jìn)一步熟悉并使用了keil軟件,在keil中編程,調(diào)試,運(yùn)行;對(duì)電路的一些基本結(jié)構(gòu)和設(shè)計(jì)有了更深一步的了解。在整個(gè)設(shè)計(jì)過(guò)程中,雖然出現(xiàn)了很多問(wèn)題,有時(shí)確實(shí)叫人很心煩,但在發(fā)現(xiàn)問(wèn)題后努力去解決,并獲得成功,這時(shí)會(huì)感到無(wú)比的快樂(lè)和具有成就感。只有自己動(dòng)手去做,去應(yīng)用,才能將學(xué)到的知識(shí)變成自己的。 程序不要光看不寫(xiě),一定要自己寫(xiě)一次。最開(kāi)始的時(shí)候,可能自己啥都不懂,這時(shí)可以抄人家的程序過(guò)來(lái)。但在抄的時(shí)候一定要看看每一句是干什么用的,來(lái)達(dá)到什么目的,運(yùn)行后有什么后果,看明白了之后,就要自己寫(xiě)一次。此時(shí)會(huì)發(fā)現(xiàn),原來(lái)看明白別人的程序很容易,但到自己寫(xiě)的時(shí)候卻一句也寫(xiě)不出來(lái),這就是差距。 單片機(jī)提高重在實(shí)踐,想要學(xué)好單片機(jī),軟件編程必不可少。但是熟悉硬件對(duì)于學(xué)好單片機(jī)也是非常重要的。如何學(xué)習(xí)好硬件,動(dòng)手實(shí)踐是必不可少的。我們可以通過(guò)自己動(dòng)手做一個(gè)自己的電子制作,通過(guò)完成它,以提高對(duì)一些芯片的了解和熟練運(yùn)用。這樣我們就可以多了解一些芯片的結(jié)構(gòu)。 我學(xué)習(xí)的目標(biāo)是希望在若干年以后能夠獨(dú)立設(shè)計(jì)一個(gè)復(fù)雜的系統(tǒng),包括硬件電路和軟件部分。總之,通過(guò)這次電子技術(shù)設(shè)計(jì)我學(xué)到了許多,似乎離自己的目標(biāo)又近了一步。 參 考 文 獻(xiàn) [1]郭天祥.51單片機(jī)C語(yǔ)言教程.電子工業(yè)出版社.2009 [2]譚浩強(qiáng).C程序設(shè)計(jì).清華大學(xué)出版社.1991 [3]孫育才 王榮興 孫華芳.ATMEL新型AT89S52系列單片機(jī)及其應(yīng)用.清華大學(xué)出版社.2006 [4]謝維成.單片機(jī)原理及應(yīng)用與51程序設(shè)計(jì).清華大學(xué)出版社.2006 [5]鮑宏亞.MCS—51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)及實(shí)用技術(shù).中國(guó)宇航出版社.2005 [6]趙文博 劉文濤.單片機(jī)語(yǔ)言C51程序設(shè)計(jì).人民郵電出版社.2006 [7]求是科技.8051系列單片機(jī)C程序設(shè)計(jì).人民郵電出版社.2006 畢業(yè)設(shè)計(jì)(論文) (2015屆) 題 目:基于51單片機(jī)的電子秤設(shè)計(jì) 專業(yè)名稱:應(yīng)用電子技術(shù) 姓 名:謝玉夏 學(xué) 號(hào):1210401038 班 級(jí):2012級(jí)應(yīng)用電子技術(shù) 指導(dǎo)教師:劉志芳 2014年 12 月 30 日 摘要 稱重技術(shù)是人類生活中不可缺少的部分,自古以來(lái)就被人們所重視。作為一種計(jì)量手段,被廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)、貿(mào)易等各個(gè)領(lǐng)域。隨著現(xiàn)代文明和科學(xué)技術(shù)的不斷進(jìn)步,人們對(duì)稱重技術(shù)的準(zhǔn)確度要求也越來(lái)越高,電子秤產(chǎn)品技術(shù)水平的高低,直接影響各行各業(yè)的現(xiàn)代化水平和社會(huì)經(jīng)濟(jì)效益的提高。近年來(lái),電子稱重技術(shù)取得了突飛猛進(jìn)的發(fā)展,電子秤在稱重計(jì)量領(lǐng)域中也占有越來(lái)越重要的地位,其應(yīng)用領(lǐng)域也在不斷地?cái)U(kuò)大。尤其是商用電子秤,由于其具有準(zhǔn)確度高、反應(yīng)靈敏、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn),被廣泛應(yīng)用于工商貿(mào)易、輕工食品、醫(yī)藥衛(wèi)生等領(lǐng)域。目前,機(jī)械秤正在逐步被電子秤取代,這就促使電子秤的研究需要進(jìn)一步的深入。 本設(shè)計(jì)是以AT89S51為核心的一種高精度電子秤,系統(tǒng)采用模塊化設(shè)計(jì)法,其硬件結(jié)構(gòu)主要包括:數(shù)據(jù)采集模塊、最小系統(tǒng)模塊、電源模塊、鍵盤(pán)和顯示模塊。其中,數(shù)據(jù)采集模塊包括稱重傳感器和A/D轉(zhuǎn)換電路;最小系統(tǒng)部分主要包括AT89S51和擴(kuò)展的外部數(shù)據(jù)存儲(chǔ)器;鍵盤(pán)由4×4位矩陣鍵盤(pán)組成;顯示部分LM4229液晶顯示。軟件部分由C語(yǔ)言編程,實(shí)現(xiàn)對(duì)各部分的控制。該電子秤可以能夠顯示商品的名稱、價(jià)格、總量、總價(jià)等;能夠自動(dòng)完成商品的價(jià)格計(jì)算;能夠儲(chǔ)存幾種簡(jiǎn)單商品的價(jià)格;能夠具有超重提醒功能。其稱重范圍為0~5Kg,分度值為0.001g。整個(gè)系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,使用方便。 關(guān)鍵詞:電子秤;AT89S51單片機(jī);稱重傳感器;A/D轉(zhuǎn)換電路;液晶顯示II 目錄 緒論...........................................................1 1.1 選題的背景與意義.........................................1 1.1.1 選題的背景..........................................1 1.1.2 選題的意義..........................................2 1.2 電子秤的研究現(xiàn)狀及發(fā)展趨勢(shì)...............................2 1.2.1 電子秤的研究現(xiàn)狀....................................2 1.2.2 電子秤的發(fā)展趨勢(shì)....................................3 1.3 本文的結(jié)構(gòu)...............................................4 2 系統(tǒng)總體方案設(shè)計(jì)...............................................5 2.1 電子秤的基本知識(shí)介紹.....................................5 2.1.1 電子秤的基本結(jié)構(gòu)....................................5 2.1.2 電子秤的工作原理....................................5 2.1.3 電子秤的計(jì)量參數(shù)....................................6 2.2 總體方案設(shè)計(jì).............................................7 2.3 系統(tǒng)各部分設(shè)計(jì)方案論證...................................8 2.3.1 電子秤分度數(shù)的設(shè)定..................................8 2.3.2 稱重傳感器的選定....................................8 2.3.3 A/D轉(zhuǎn)換器的選定....................................14 2.3.4 單片機(jī)型號(hào)的選定...................................16 硬件設(shè)計(jì)......................................................18 3.1 系統(tǒng)硬件結(jié)構(gòu)圖..........................................18 3.2 單片機(jī)主控單元的設(shè)計(jì)....................................18 3.2.1 單片機(jī)引腳說(shuō)明.....................................18 3.2.2 AT89S51最小系統(tǒng)設(shè)計(jì)................................20 3.3 數(shù)據(jù)采集模塊設(shè)計(jì)........................................22 III 3.3.1 傳感器單元設(shè)計(jì).....................................22 3.3.2 A/D轉(zhuǎn)換單元設(shè)計(jì)....................................22 3.4 鍵盤(pán)和顯示電路單元設(shè)計(jì)..................................24 3.4.1 鍵盤(pán)電路設(shè)計(jì).......................................24 3.4.2 顯示電路設(shè)計(jì).......................................25 3.5 系統(tǒng)總體原理圖..........................................25 3.6 硬件抗干擾設(shè)計(jì)..........................................26 4 系統(tǒng)軟件設(shè)計(jì)..................................................29 4.1 主程序設(shè)計(jì)..............................................29 4.2 LM4229液晶顯示驅(qū)動(dòng)程序..................................30 4.3 ADC0832采樣程序.........................................31 4.4 鍵盤(pán)程序................................................31 5 系統(tǒng)仿真......................................................33 5.1 歡迎界面的仿真..........................................33 5.2 無(wú)重物情況仿真..........................................34 5.3 稱量物體仿真............................................35 5.4 最大量程仿真............................................36 5.5 仿真總結(jié)與問(wèn)題補(bǔ)充......................................37 5.5.1 仿真總結(jié)...........................................37 5.5.2 問(wèn)題補(bǔ)充...........................................37 總結(jié)與展望....................................................39 附錄程序.........................................................40 參考文獻(xiàn).........................................................49 IV 緒論 1.1 選題的背景與意義 1.1.1 選題的背景 (1)電子技術(shù)滲入衡器制造業(yè) 隨著第二次世界大戰(zhàn)后的經(jīng)濟(jì)繁榮,為了把稱重技術(shù)引入生產(chǎn)工藝過(guò)程中去,對(duì)稱重技術(shù)提出了新的要求,希望稱重過(guò)程自動(dòng)化,為此電子技術(shù)不斷滲入衡器制造業(yè)。在1954年使用了帶新式打印機(jī)的傾斜杠桿式秤,其輸出信號(hào)能控制商用結(jié)算器,并且用電磁鐵機(jī)構(gòu)與代替人工操作的按鍵與辦公機(jī)器聯(lián)用。在1960年開(kāi)發(fā)出了與衡器相聯(lián)的專門稱重值打印機(jī)。當(dāng)時(shí)的帶電子裝置的衡器其稱量工作是機(jī)械式的,但與稱量有關(guān)的顯示、記錄、遠(yuǎn)傳式控制器等功能是電子方式的。(2)電子秤步入社會(huì) 電子秤的發(fā)展過(guò)程與其它事物一樣,也經(jīng)歷了由簡(jiǎn)單到復(fù)雜、由粗糙到精密、由機(jī)械到機(jī)電結(jié)合再到全電子化、由單一功能到多功能的過(guò)程。特別是近30年以來(lái),工藝流程中的現(xiàn)場(chǎng)稱重、配料定量稱重、以及產(chǎn)品質(zhì)量的監(jiān)測(cè)等工作,都離不開(kāi)能輸出電信號(hào)的電子衡器。這是由于電子衡器不僅能給出質(zhì)量或重量信號(hào),而且也能作為總系統(tǒng)中的一個(gè)單元承擔(dān)著控制和檢驗(yàn)功能,從而推進(jìn)工業(yè)生產(chǎn)和貿(mào)易交往的自動(dòng)化和合理化。 近年來(lái),電子秤已愈來(lái)愈多地參與到數(shù)據(jù)處理和過(guò)程控制中?,F(xiàn)代稱重技術(shù)和數(shù)據(jù)系統(tǒng)已經(jīng)成為工藝技術(shù)、儲(chǔ)運(yùn)技術(shù)、預(yù)包裝技術(shù)、收貨業(yè)務(wù)及商業(yè)銷售領(lǐng)域中不可缺少的組成部分。隨著稱重傳感器各項(xiàng)性能的不斷突破,為電子秤的發(fā)展奠定了基礎(chǔ),國(guó)外如美國(guó)、西歐等一些國(guó)家在20世紀(jì)60年代就出現(xiàn)了0.1%稱量準(zhǔn)確度的電子秤,并在70年代中期約對(duì)75 %的機(jī)械秤進(jìn)行了機(jī)電結(jié)合式的電子化改造。 我國(guó)的衡器在20世紀(jì)40年代以前還全是機(jī)械式的,40年代開(kāi)始發(fā)展了機(jī)電結(jié)合式的衡器。50年代開(kāi)始出現(xiàn)了以稱重傳感器為主的電子衡器。80年代以來(lái),我國(guó)通過(guò)自行研制、引進(jìn)消化吸收和技術(shù)改造,已由傳統(tǒng)的機(jī)械式衡器步入集傳感器、微電子技術(shù)、計(jì)算機(jī)技術(shù)于一體的電子衡器發(fā)展階段。目前,由于電子衡器具有稱量快、讀數(shù)方便、能在惡劣環(huán)境下工作、便于與計(jì)算機(jī)技術(shù)相結(jié)合而實(shí)現(xiàn)稱重技術(shù)和過(guò)程控制的自動(dòng)化等 特點(diǎn),已被廣泛應(yīng)用于工礦企業(yè)、能源交通、商業(yè)貿(mào)易和科學(xué)技術(shù)等各個(gè)部門。隨著稱重傳感器技術(shù)以及超大規(guī)模集成電路和微處理器的進(jìn)一步發(fā)展,電子稱重技術(shù)及其應(yīng)用范圍將更進(jìn)一步的發(fā)展,并被人們?cè)絹?lái)越重視。 1.1.2 選題的意義 電子秤是日常生活中常用的電子衡器,廣泛應(yīng)用于超市、大中型商場(chǎng)、物流配送中心。電子秤在結(jié)構(gòu)和原理上取代了以杠桿平衡為原理的傳統(tǒng)機(jī)械式稱量工具。相比傳統(tǒng)的機(jī)械式稱量工具,電子秤具有稱量精度高、裝機(jī)體積小、應(yīng)用范圍廣、易于操作使用等優(yōu)點(diǎn),在外形布局、工作原理、結(jié)構(gòu)和材料上都是全新的計(jì)量衡器。目前市場(chǎng)上使用的稱量工具,或者是結(jié)構(gòu)復(fù)雜,或者運(yùn)行不可靠,且成本高,精度穩(wěn)定性不好,調(diào)整時(shí)間長(zhǎng),易損壞,維修困難,裝機(jī)容量大,能源消耗大,生產(chǎn)成本高。而且目前市場(chǎng)上電子秤產(chǎn)品的整體水平不高,部分小型企業(yè)產(chǎn)品質(zhì)量差且技術(shù)力量薄弱,設(shè)備不全,缺乏產(chǎn)品的開(kāi)發(fā)能力,產(chǎn)品質(zhì)量在低水平徘徊。因此,有針對(duì)性地開(kāi)發(fā)出一套有實(shí)用價(jià)值的電子秤系統(tǒng),從技術(shù)上克服上述諸多缺點(diǎn),改善電子秤系統(tǒng)在應(yīng)用中的不足之處,具有現(xiàn)實(shí)意義。 1.2 電子秤的研究現(xiàn)狀及發(fā)展趨勢(shì) 1.2.1 電子秤的研究現(xiàn)狀 近幾年,我國(guó)的電子稱重系統(tǒng)從最初的機(jī)電結(jié)合型發(fā)展到現(xiàn)在的全電子型和數(shù)字智能型。電子稱重技術(shù)逐漸從靜態(tài)稱重向動(dòng)態(tài)稱重發(fā)展,從模擬測(cè)量向數(shù)字測(cè)量發(fā)展,從單參數(shù)測(cè)量向多參數(shù)測(cè)量發(fā)展。電子稱重系統(tǒng)制造技術(shù)及其應(yīng)用得到了新發(fā)展。國(guó)內(nèi)電子稱重技術(shù)基本達(dá)到國(guó)際上20世紀(jì)90年代中期的水平,少數(shù)產(chǎn)品的技術(shù)已處于國(guó)際領(lǐng)先水平。 在研究方法上,電子稱重系統(tǒng)的工作原理一般是將作用在承載器上的質(zhì)量或力的大小,通過(guò)壓力傳感器轉(zhuǎn)換為電信號(hào),并通過(guò)控制電路來(lái)處理該電信號(hào)。其中壓力傳感器大多數(shù)采用電阻應(yīng)變片壓力傳感器,由于應(yīng)變片的體積較小,市場(chǎng)上有多種規(guī)格可供選擇,而且可以針對(duì)彈性敏感元件的形式可以靈活設(shè)計(jì)來(lái)適應(yīng)各種應(yīng)用場(chǎng)合的要求,所以 應(yīng)變片式壓力傳感器得到廣泛的應(yīng)用。但是電阻應(yīng)變片壓力傳感器的一個(gè)嚴(yán)重缺陷是應(yīng)變靈敏度、應(yīng)變片本身的電阻都隨溫度變化,而且靈敏度隨溫度變化較大。在不同的環(huán)境中,應(yīng)變片的阻值發(fā)生變化,輸出零點(diǎn)漂移明顯。并且應(yīng)變片的輸出信號(hào)很小、線性范圍窄,而且動(dòng)態(tài)響應(yīng)較差,有待進(jìn)一步開(kāi)發(fā)。 在國(guó)際上,一些發(fā)達(dá)國(guó)家在電子稱重方面,從技術(shù)水平、品種和規(guī)模等方面都達(dá)到了較高的水平。特別是在準(zhǔn)確度和可靠性等方面有了很大的提高。其中梅特勒.托利多公司生產(chǎn)的BBK4系列高精度電子秤精度達(dá)到了lmg,速度大約為1次/秒。目前,電子秤在稱量速度方面需要進(jìn)一步的研究。 在稱重傳感器方面,國(guó)外產(chǎn)品的品種和結(jié)構(gòu)又有創(chuàng)新,技術(shù)功能和應(yīng)用范圍不斷擴(kuò)大。 1.2.2 電子秤的發(fā)展趨勢(shì) 電子秤的稱重功能是基于微處理器這一核心技術(shù)來(lái)實(shí)現(xiàn)的。由于目前在設(shè)計(jì)電子稱重系統(tǒng)時(shí)大量地采用集成芯片,因此電子稱重系統(tǒng)已經(jīng)擺脫了以往的電子模式,正向小型化、模塊化、智能化、集成化發(fā)展;其技術(shù)性能趨向于高速率、高準(zhǔn)確度、高穩(wěn)定性、高可靠性;其應(yīng)用性趨向于綜合性、組合性。 小型化:體積小、高度低、重量輕,即小薄輕。為使電子衡器的承載器達(dá)到小、薄、輕,開(kāi)始采用重量輕且剛度大的空心波紋銅板和方形閉合截面的薄壁型材。 模塊化:電子衡器的承載器采用模塊式一體組合或分體組合,產(chǎn)生新的品種和規(guī)格。這種模塊化組合不但提高了產(chǎn)品的通用性和可靠性,而且也大大提高了生產(chǎn)效率,降低了成本。 智能化:與電子計(jì)算機(jī)組合或開(kāi)發(fā)稱重用計(jì)算機(jī),利用計(jì)算機(jī)的智能來(lái)增加稱重顯示控制的功能,使其在原有功能的基礎(chǔ)上增加推理、判斷、自診斷、自適應(yīng)、自組織等功能。 集成化:對(duì)于某些品種和結(jié)構(gòu)的電子衡器,可以實(shí)現(xiàn)承載器與稱重傳感器一體化或承載器、稱重傳感器與稱重顯示控制器一體化。 綜合性:電子稱重技術(shù)和電子衡器產(chǎn)品的應(yīng)用范圍不斷擴(kuò)大,它已滲透到一些學(xué)科和工業(yè)自動(dòng)控制領(lǐng)域。對(duì)某些商用電子計(jì)價(jià)秤而言,只具備稱重、計(jì)價(jià)、顯示、打印功能還遠(yuǎn)遠(yuǎn)不夠,現(xiàn)代商業(yè)系統(tǒng)還要求它能提供各種銷售信息,把稱重與管理自動(dòng)化緊密 結(jié)合,使稱重、計(jì)價(jià)、進(jìn)庫(kù)、銷售管理一體化,實(shí)現(xiàn)管理自動(dòng)化。這就要求電子計(jì)價(jià)秤能與電子計(jì)算機(jī)聯(lián)網(wǎng),把稱重系統(tǒng)與計(jì)算機(jī)系統(tǒng)組成一個(gè)完整的綜合控制系統(tǒng)。 組合性:在工業(yè)生產(chǎn)過(guò)程或工藝流程中,不少稱重系統(tǒng)還應(yīng)具有可組合性,即:測(cè)量范圍可以任意設(shè)定;硬件能夠依據(jù)不定的程序進(jìn)行修改和擴(kuò)展;輸入輸出數(shù)據(jù)與指令可使用不同的語(yǔ)言,并能與外部的控制和數(shù)據(jù)處理設(shè)備進(jìn)行通信。 今后, 隨著電子高科技的飛速發(fā)展, 電子秤技術(shù)的發(fā)展定將日新月異。同時(shí), 功能更加齊全的高精度的先進(jìn)電子秤將會(huì)不斷問(wèn)世, 其應(yīng)用范圍也會(huì)更加拓寬。 1.3 本文的結(jié)構(gòu) 本設(shè)計(jì)是以AT89S51為核心的一種高精度電子秤,系統(tǒng)采用模塊化設(shè)計(jì)法,其硬件結(jié)構(gòu)主要包括:數(shù)據(jù)采集模塊、最小系統(tǒng)模塊、電源模塊、鍵盤(pán)和顯示模塊。軟件部分由C語(yǔ)言編程,實(shí)現(xiàn)對(duì)各部分的控制。可以實(shí)現(xiàn)稱重、去皮、置零、計(jì)價(jià)和顯示等功能。其稱重范圍為0~5Kg,分度值為0.001g。整個(gè)系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,使用方便。全文共分為五章,各章主要內(nèi)容如下: 第一章為緒論部分,簡(jiǎn)要介紹了選題的背景及意義、電子秤的研究現(xiàn)狀及發(fā)展趨勢(shì)以及本文的主要內(nèi)容及結(jié)構(gòu); 第二章為總體設(shè)計(jì)部分,簡(jiǎn)要介紹了電子秤的結(jié)構(gòu)及工作原理,論證了系統(tǒng)總體方案的設(shè)計(jì),以及對(duì)各種方案的選擇做出了比較; 第三章為系統(tǒng)硬件設(shè)計(jì)部分,主要是通過(guò)對(duì)各種模塊的介紹以及對(duì)電路功能的分析,對(duì)系統(tǒng)硬件進(jìn)行了選型和設(shè)計(jì),得出系統(tǒng)硬件結(jié)構(gòu)圖; 第四章為系統(tǒng)軟件設(shè)計(jì)部分,主要介紹了系統(tǒng)各部分軟件的設(shè)計(jì)流程,給出了簡(jiǎn)單的程序; 第五章為系統(tǒng)軟件仿真; 第六章為總結(jié)與展望,主要是對(duì)本課題的總結(jié),以及對(duì)存在的問(wèn)題進(jìn)行歸納和進(jìn)一步研究的方向。系統(tǒng)總體方案設(shè)計(jì) 2.1 電子秤的基本知識(shí)介紹 2.1.1 電子秤的基本結(jié)構(gòu) 電子秤是利用物體的重力作用來(lái)確定物體質(zhì)量(重量)的測(cè)量?jī)x器,也可用來(lái)確定與質(zhì)量相關(guān)的其它量大小、參數(shù)、或特性。不管根據(jù)什么原理制成的電子秤均由以下三部分組成: (1)承重、傳力復(fù)位系統(tǒng) 它是被稱物體與轉(zhuǎn)換元件之間的機(jī)械、傳力復(fù)位系統(tǒng),又稱電子秤的秤體,一般包括接受被稱物體載荷的承載器、秤橋結(jié)構(gòu)、吊掛連接部件和限位減振機(jī)構(gòu)等。(2)稱重傳感器 即由非電量(質(zhì)量或重量)轉(zhuǎn)換成電量的轉(zhuǎn)換元件,它是把支承力變換成電的或其它形式的適合于計(jì)量求值的信號(hào)所用的一種輔助手段。 按照稱重傳感器的結(jié)構(gòu)型式不同,可以分直接位移傳感器(電容式、電感式、電位計(jì)式、振弦式、空腔諧振器式等)和應(yīng)變傳感器(電阻應(yīng)變式、聲表面諧振式)或是利用磁彈性、壓電和壓阻等物理效應(yīng)的傳感器。 對(duì)稱重傳感器的基本要求是:輸出電量與輸入重量保持單值對(duì)應(yīng),并有良好的線性關(guān)系;有較高的靈敏度;對(duì)被稱物體的狀態(tài)的影響要小;能在較差的工作條件下工作;有較好的頻響特性;穩(wěn)定可靠。 (3)測(cè)量顯示和數(shù)據(jù)輸出的載荷測(cè)量裝置 即處理稱重傳感器信號(hào)的電子線路(包括放大器、模數(shù)轉(zhuǎn)換、電流源或電壓源、調(diào)節(jié)器、補(bǔ)償元件、保護(hù)線路等)和指示部件(如顯示、打印、數(shù)據(jù)傳輸和存貯器件等)。這部分習(xí)慣上稱載荷測(cè)量裝置或二次儀表。在數(shù)字式的測(cè)量電路中,通常包括前置放大、濾濾、運(yùn)算、變換、計(jì)數(shù)、寄存、控制和驅(qū)動(dòng)顯示等環(huán)節(jié)。 2.1.2 電子秤的工作原理 當(dāng)被稱物體放置在秤體的秤臺(tái)上時(shí),其重量便通過(guò)秤體傳遞到稱重傳感器,傳感器 隨之產(chǎn)生力-電效應(yīng),將物體的重量轉(zhuǎn)換成與被稱物體重量成一定函數(shù)關(guān)系(一般成正比關(guān)系)的電信號(hào)(電壓或電流等)。通常此電壓信號(hào)很小,需要通過(guò)前端信號(hào)處理電路進(jìn)行準(zhǔn)確的線性放大,放大后的模擬電壓信號(hào)經(jīng)過(guò)濾波電路和A/D轉(zhuǎn)換電路轉(zhuǎn)換成數(shù)字信 1號(hào)被送入到主控電路的單片機(jī)中○,單片機(jī)不斷掃描鍵盤(pán)和各種功能開(kāi)關(guān),根據(jù)鍵盤(pán)輸入內(nèi)容和各種功能開(kāi)關(guān)的狀態(tài)進(jìn)行必要的判斷、分析、由儀表的軟件來(lái)控制各種運(yùn)算。運(yùn)算結(jié)果送到內(nèi)存貯器,需要顯示時(shí),單片機(jī)發(fā)出指令,從內(nèi)存貯器中讀出送到顯示器顯示。 2.1.3 電子秤的計(jì)量參數(shù) 電子秤的計(jì)量性能涉及的主要技術(shù)指標(biāo)有:量程、安全載荷、額定載荷、允許誤差、分度值、分度數(shù)、準(zhǔn)確度等級(jí)等。 (1)量程:一臺(tái)電子秤不計(jì)皮重,所能稱量的最大的載荷Max,即電子秤在正常工作情況下,所能稱量的最大值。 (2)安全載荷:為電子秤正常稱量案范圍的120%。(3)額定載荷:電子秤的正常稱量范圍。(4)允許誤差:等級(jí)檢定時(shí)允許的最大偏差。 (5)分度值:電子秤的測(cè)量范圍被分成若干等份,每份值即為分度值。用e或d來(lái)表示。 (6)分度數(shù):衡器的測(cè)量范圍被分成若干等份,總份數(shù)即為分度數(shù)用n表示。電子衡器的最大稱量Max可以用總分度數(shù)n與分度值d的乘積來(lái)表示,即Max=n*d。 (7)準(zhǔn)確度等級(jí):國(guó)際法制計(jì)量組織把電子秤按照不同的分度數(shù)分成Ⅰ、Ⅱ、Ⅲ、Ⅳ四類等級(jí),分別對(duì)應(yīng)不同準(zhǔn)確度的電子秤和分度數(shù)n的范圍,如表 1因?yàn)楸驹O(shè)計(jì)采用軟件仿真而不能進(jìn)行實(shí)際的稱量,故信號(hào)的放大濾波電路部分舍去,直接輸入模擬電壓信號(hào),○放大濾波部分內(nèi)容會(huì)在第五章仿真總結(jié)與問(wèn)題補(bǔ)充中進(jìn)行后續(xù)介紹。 2-1所示。 表2-1 電子秤等級(jí)分類 標(biāo)志及等級(jí) 特種準(zhǔn)確度 電子秤種類 基準(zhǔn)衡器 分度數(shù)范圍 n>100,000 高準(zhǔn)確度 中準(zhǔn)確度 普通準(zhǔn)確度 精密衡器 商業(yè)衡器 粗衡器 10,000 按照設(shè)計(jì)的基本要求,可以確定系統(tǒng)共分為五大模塊,數(shù)據(jù)采集模塊、最小系統(tǒng)模塊、超重報(bào)警模塊、鍵盤(pán)和顯示模塊。其中,數(shù)據(jù)采集模塊包括稱重傳感器和A/D轉(zhuǎn)換電路;最小系統(tǒng)模塊由AT89S51單片機(jī)及其外圍電路組成;鍵盤(pán)由4×4位矩陣鍵盤(pán)組成,可以控制顯示商品種類和價(jià)錢等信息;顯示部分采用LM4229液晶顯示,顯示當(dāng)前商品的名稱、單價(jià)、重量及總價(jià)等信息。軟件部分由C語(yǔ)言編程,實(shí)現(xiàn)對(duì)各部分的控制。該電子秤可以實(shí)現(xiàn)顯示商品的名稱、單價(jià)、重量、總價(jià)等功能。其稱重范圍為0~5Kg,分度值為0.001g。在擴(kuò)展功能上,本設(shè)計(jì)增加了一個(gè)超重報(bào)警提示。其總體設(shè)計(jì)的框圖如圖2-1所示: 數(shù)據(jù)采集模塊單片機(jī)最小系統(tǒng)超重報(bào)警模塊鍵盤(pán)模塊顯示模塊 圖2-1 總體設(shè)計(jì)方框圖 系統(tǒng)工作原理:把所稱物體放到秤臺(tái)上,物體的重力通過(guò)秤體傳給稱重傳感器,傳感器受到壓力使電阻發(fā)生變化引起電壓變化,再將電壓值送到A/D轉(zhuǎn)換電路,將模擬量轉(zhuǎn)換成數(shù)字量,轉(zhuǎn)換后的數(shù)字量送至單片機(jī)進(jìn)行處理,并顯示結(jié)果。單片機(jī)最小系統(tǒng)由AT89S51和外圍的時(shí)鐘電路及復(fù)位電路組成。顯示電路設(shè)計(jì)采用LM4229液晶顯示,對(duì)各部分的控制由采用C語(yǔ)言編程的軟件來(lái)實(shí)現(xiàn)。 2.3 系統(tǒng)各部分設(shè)計(jì)方案論證 2.3.1 電子秤分度數(shù)的設(shè)定 當(dāng)前,一些單位為了提高Ⅲ級(jí)商貿(mào)秤的準(zhǔn)確度,嘗試改小電子秤的分度值,擴(kuò)大電子秤的分度數(shù),以便達(dá)到高精度稱量的目的。這樣做非但不能進(jìn)行高精度稱量,還會(huì)破壞電子秤原有的計(jì)量性能,降低電子秤的準(zhǔn)確度,有損電子秤的可靠性,使電子秤出現(xiàn)更多的計(jì)量誤差。 現(xiàn)在我國(guó)已經(jīng)完全與OIML規(guī)定接軌,衡器計(jì)量檢定規(guī)程完全按OIML規(guī)定而來(lái)。表2-2為Ⅲ級(jí)商業(yè)秤誤差要求。 表2-2 Ⅲ級(jí)數(shù)字顯示商用衡器允差表 m <500e 500e< m≤2000e 2000e< m≤Max 允差e(檢定分度值) 檢定要求 ±0.5e ±1.0e ±1.5e 使用中要求 ±1.0e ±2.0e ±3.0e 由表2-2可知,它的整個(gè)稱量范圍允差規(guī)定是變化的,誤差是從大到小再變大,最高準(zhǔn)確度在中間。從0~500分度數(shù)為低精度稱量段,到高于3000個(gè)分度數(shù)之后的實(shí)際稱量精度逐漸變低,實(shí)際誤差不斷加大。分度數(shù)再高其允差也是不變的。從國(guó)外電子秤的準(zhǔn)確度和分度數(shù)設(shè)置、國(guó)內(nèi)原先衡器的檢定標(biāo)準(zhǔn)和現(xiàn)在我們統(tǒng)計(jì)的電子秤分度數(shù)的準(zhǔn)確度以及OIML對(duì)Ⅲ級(jí)秤的允差規(guī)定看,說(shuō)明現(xiàn)有Ⅲ級(jí)商業(yè)秤的分度數(shù)設(shè)置為2000~3000是比較理想的,屬于最佳分度數(shù)。這樣設(shè)置決定了電子秤的準(zhǔn)確度首檢為±0.05%,使用中為±0.1%的正確性、合理性與必要性。 2.3.2 稱重傳感器的選定 稱重傳感器在電子秤中占有十分重要的位置,被喻為電子秤的心臟部件,它的性能好壞很大程度上決定了電子秤的精確度和穩(wěn)定性。考慮到不同使用地點(diǎn)的重力加速度和空氣浮力對(duì)轉(zhuǎn)換的影響,稱重傳感器的性能指標(biāo)主要有線性誤差、滯后誤差、重復(fù)性誤差、蠕變、零點(diǎn)溫度特性和靈敏度溫度特性等。在各種衡器和質(zhì)量計(jì)量系統(tǒng)中,通常用 綜合誤差帶來(lái)綜合衡量傳感器準(zhǔn)確度,并將綜合誤差帶與衡器誤差帶聯(lián)系起來(lái),以便選用對(duì)應(yīng)于某一準(zhǔn)確度衡器的稱重傳感器。國(guó)際法制計(jì)量組織(OIML)規(guī)定,傳感器的誤差帶δ占衡器誤差帶Δ的70%,稱重傳感器的線性誤差、滯后誤差以及在規(guī)定溫度范圍內(nèi)由于溫度對(duì)靈敏度的影響所引起的誤差等的總和不能超過(guò)誤差帶δ。若在環(huán)境惡劣的條件下(如高低溫、濕熱),傳感器所占的誤差比例就更大,因此,在人們?cè)O(shè)計(jì)電子秤時(shí),正確地選用稱重傳感器非常重要。1.常用各種稱重傳感器 稱重傳感器按轉(zhuǎn)換方法分為光電式、液壓式、電磁力式、電容式、磁極變形式、振動(dòng)式、陀螺儀式、電阻應(yīng)變式等8類,以電阻應(yīng)變式使用最廣。 光電式傳感器包括光柵式和碼盤(pán)式兩種。光柵式傳感器利用光柵形成的莫爾條紋把角位移轉(zhuǎn)換成光電信號(hào)。光柵有兩塊,一為固定光柵,另一為裝在表盤(pán)軸上的移動(dòng)光柵。加在承重臺(tái)上的被測(cè)物通過(guò)傳力杠桿系統(tǒng)使表盤(pán)軸旋轉(zhuǎn),帶動(dòng)移動(dòng)光柵轉(zhuǎn)動(dòng),使莫爾條紋也隨之移動(dòng)。利用光電管、轉(zhuǎn)換電路和顯示儀表,即可計(jì)算出移過(guò)的莫爾條紋數(shù)量,測(cè)出光柵轉(zhuǎn)動(dòng)角的大小,從而確定和讀出被測(cè)物質(zhì)量。碼盤(pán)式傳感器的碼盤(pán)是一塊裝在表盤(pán)軸上的透明玻璃,上面帶有按一定編碼方法編定的黑白相間的代碼。加在承重臺(tái)上的被測(cè)物通過(guò)傳力杠桿使表盤(pán)軸旋轉(zhuǎn)時(shí),碼盤(pán)也隨之轉(zhuǎn)過(guò)一定角度。光電池將透過(guò)碼盤(pán)接受光信號(hào)并轉(zhuǎn)換成電信號(hào),然后由電路進(jìn)行數(shù)字處理,最后在顯示器上顯示出代表被測(cè)質(zhì)量的數(shù)字。光電式傳感器曾主要用在機(jī)電結(jié)合秤上。 液壓式傳感器:在受被測(cè)物重力P作用時(shí),液壓油的壓力增大,增大的程度與P成正比。測(cè)出壓力的增大值,即可確定被測(cè)物的質(zhì)量。液壓式傳感器結(jié)構(gòu)簡(jiǎn)單而牢固,測(cè)量范圍大,但準(zhǔn)確度一般不超過(guò)1/100。 電磁力式傳感器:它利用承重臺(tái)上的負(fù)荷與電磁力相平衡的原理工作。當(dāng)承重臺(tái)上放有被測(cè)物時(shí),杠桿的一端向上傾斜;光電件檢測(cè)出傾斜度信號(hào),經(jīng)放大后流入線圈,產(chǎn)生電磁力,使杠桿恢復(fù)至平衡狀態(tài)。對(duì)產(chǎn)生電磁平衡力的電流進(jìn)行數(shù)字轉(zhuǎn)換,即可確定被測(cè)物質(zhì)量。電磁力式傳感器準(zhǔn)確度高,可達(dá)1/2000~1/60000,但稱量范圍僅在幾十毫克至10千克之間。 電容式傳感器:工作原理是利用電容器振蕩電路的振蕩頻率f與極板間距d成正比的關(guān)系。極板有兩塊,一塊是固定不動(dòng)的,另一塊是可移動(dòng)的。在秤體加載重物時(shí),兩 極板間的距離發(fā)生變化,隨之,電路的振蕩頻率也改變。只要測(cè)出頻率的變化便可求出被測(cè)物的質(zhì)量。電容式傳感器耗電量少,造價(jià)低,準(zhǔn)確度為1/200~1/500。 磁極變形式傳感器:原理為鐵磁元件在被測(cè)物體重力下發(fā)生形變,產(chǎn)生應(yīng)力引起導(dǎo)磁率的變化,隨之,繞在鐵磁元件兩側(cè)的次級(jí)線圈的感應(yīng)電壓也變化。這樣測(cè)出電壓的變化量便可求出加到磁極上的力,從而確定物體的質(zhì)量。磁極變形式傳感器的準(zhǔn)確度不高,一般為1/100,稱量范圍為幾十至幾萬(wàn)千克。 振動(dòng)式傳感器彈性元件受力后,其固有振動(dòng)頻率與作用力的平方根成正比。測(cè)出固有頻率的變化,即可求出被測(cè)物作用在彈性元件上的力,進(jìn)而求出其質(zhì)量。振動(dòng)式傳感器有振弦式和音叉式兩種。 振弦式傳感器的彈性元件是弦絲。當(dāng)承重臺(tái)上加有被測(cè)物時(shí),V形弦絲的交點(diǎn)被拉向下,且左弦的拉力增大,右弦的拉力減小。兩根弦的固有頻率發(fā)生不同的變化。求出兩根弦的頻率之差,即可求出被測(cè)物的質(zhì)量。振弦式傳感器的準(zhǔn)確度較高,可達(dá)1/1000~1/10000,稱量范圍為100克至幾百千克,但結(jié)構(gòu)復(fù)雜,加工難度大,造價(jià)高。 音叉式傳感器的彈性元件是音叉。音叉端部固定有壓電元件,它以音叉的固有頻率振蕩,并可測(cè)出振蕩頻率。當(dāng)承重臺(tái)上加有被測(cè)物時(shí),音叉拉伸方向受力而固有頻率增加,增加的程度與施加力的平方根成正比。測(cè)出固有頻率的變化,即可求出重物施加于音叉上的力,進(jìn)而求出重物質(zhì)量。音叉式傳感器耗電量小,計(jì)量準(zhǔn)確度高達(dá)1/10000~1/200000,稱量范圍為500g~10kg。 陀螺儀式傳感器,轉(zhuǎn)子裝在內(nèi)框架中,以角速度ω繞X軸穩(wěn)定旋轉(zhuǎn)。內(nèi)框架經(jīng)軸承與外框架聯(lián)接,并可繞水平軸Y傾斜轉(zhuǎn)動(dòng)。外框架經(jīng)萬(wàn)向聯(lián)軸節(jié)與機(jī)座聯(lián)接,并可繞垂直軸Z旋轉(zhuǎn)。轉(zhuǎn)子軸(X軸)在未受外力作用時(shí)保持水平狀態(tài)。轉(zhuǎn)子軸的一端在受到外力(P/2)作用時(shí),產(chǎn)生傾斜而繞垂直軸Z 轉(zhuǎn)動(dòng)(進(jìn)動(dòng))。進(jìn)動(dòng)角速度ω與外力P/2成正比,通過(guò)檢測(cè)頻率的方法測(cè)出ω,即可求出外力大小,進(jìn)而求出產(chǎn)生此外力的被測(cè)物的質(zhì)量。陀螺儀式傳感器響應(yīng)時(shí)間快(5秒),無(wú)滯后現(xiàn)象,溫度特性好(3ppm),振動(dòng)影響小,頻率測(cè)量準(zhǔn)確精度高,故可得到高的分辨率(1/100000)和高的計(jì)量準(zhǔn)確度(1/30000~1/60000)。 電阻應(yīng)變式傳感器利用電阻應(yīng)變片變形時(shí)其電阻也隨之改變的原理工作。主要由彈性元件、電阻應(yīng)變片、測(cè)量電路和傳輸電纜4部分組成。電阻應(yīng)變片貼在彈性元件上,彈性元件受力變形時(shí),其上的應(yīng)變片隨之變形,并導(dǎo)致電阻改變。測(cè)量電路測(cè)出應(yīng)變片電阻的變化并變換為與外力大小成比例的電信號(hào)輸出。電信號(hào)經(jīng)處理后以數(shù)字形式顯示出被測(cè)物的質(zhì)量。電阻應(yīng)變式傳感器的稱量范圍為300g至數(shù)千Kg,計(jì)量準(zhǔn)確度達(dá)1/1000~1/10000,結(jié)構(gòu)較簡(jiǎn)單,可靠性較好,大部分電子衡器均使用此傳感器。2.稱重傳感器的選擇 傳感器種類繁多,分類方式也千差萬(wàn)別,它們都有各自的特點(diǎn),但在設(shè)計(jì)電子秤時(shí),選擇一種合適的傳感器非常重要,傳感器的性能在很大程度上決定了電子秤的精確度和穩(wěn)定性。稱重傳感器的選擇主要從以下幾個(gè)方面考慮。(1)對(duì)傳感器數(shù)量和量程的選擇 傳感器數(shù)量的選擇是根據(jù)電子秤的用途、秤體需要支撐的點(diǎn)數(shù)(支撐點(diǎn)數(shù)應(yīng)根據(jù)使秤體幾何重心和實(shí)際重心重合的原則而確定)而定。一般來(lái)說(shuō),秤體有幾個(gè)支撐點(diǎn)就選用幾只傳感器,但是對(duì)于一些特殊的秤體,如電子吊秤,就只能采用一個(gè)傳感器,一些機(jī)電結(jié)合秤就應(yīng)根據(jù)實(shí)際情況來(lái)確定選用傳感器的個(gè)數(shù)。傳感器的量程選擇可依據(jù)秤的最大稱量值、選用傳感器的個(gè)數(shù)、秤體自重、可產(chǎn)生的最大偏載及動(dòng)載因素綜合評(píng)價(jià)來(lái)決定。一般來(lái)講,傳感器的量程越接近分配到每個(gè)傳感器的載荷,其稱量的準(zhǔn)確度就越高。但是在實(shí)際的使用當(dāng)中,由于加在傳感器上的載荷除被稱物體外,還存在秤體自重、皮重、偏載及振動(dòng)沖擊等載荷,因此選用傳感器時(shí),要考慮諸多方面的因素,保證傳感器的安全和壽命。公式2-1給出了傳感器量程選擇的計(jì)算公式。 K0?K1?K2?K3?Wmax?W?C? N(2-1) 式中C—單個(gè)傳感器的額定量程;W—秤體自重;Wmax一被稱物體凈重的最大值;N—秤體所采用支撐點(diǎn)的數(shù)量;K0—保險(xiǎn)系數(shù),一般取1.2~1.3之間;K1—沖擊系數(shù);K2—秤體的重心偏移系數(shù);K3—風(fēng)壓系數(shù)(2)傳感器準(zhǔn)確度等級(jí)的選擇 傳感器的準(zhǔn)確度等級(jí)概括了傳感器的非線性、蠕變、蠕變恢復(fù)、滯后、重復(fù)性、靈敏度等技術(shù)指標(biāo)。稱重傳感器已按準(zhǔn)確度等級(jí)劃分,且已考慮了0.7倍誤差因子,非自動(dòng)衡器稱重傳感器的準(zhǔn)確度等級(jí)要選擇與電子秤相對(duì)應(yīng)的準(zhǔn)確度等級(jí)。稱重傳感器按綜合性能分為A、B、C、D四個(gè)準(zhǔn)確度等級(jí),分別對(duì)應(yīng)于衡器Ⅰ、Ⅱ、Ⅲ、Ⅳ四個(gè)準(zhǔn)確度等級(jí)。 (3)各種類型傳感器的使用范圍 稱重傳感器形式的選擇主要取決于稱重的類型和安裝空間,保證安裝合適,稱重安全可靠;另一方面要考慮廠家的建議。對(duì)于傳感器制造廠家來(lái)講,它一般規(guī)定了傳感器的受力情況、性能指標(biāo)、安裝形式、結(jié)構(gòu)形式、彈性體的材質(zhì)等。譬如鋁合金懸臂梁傳感器適合于電子計(jì)價(jià)秤、平臺(tái)秤、案秤等;鋼式懸臂梁傳感器適用于電子皮帶秤、分選秤等;鋼質(zhì)橋式傳感器適用于軌道衡、汽車衡等;柱式傳感器適用于汽車衡、動(dòng)態(tài)軌道衡、大噸位料斗秤等。(4)使用環(huán)境 稱重傳感器實(shí)際上是一種將質(zhì)量信號(hào)轉(zhuǎn)換成可測(cè)量的電信號(hào)輸出裝置。用傳感器首先要考慮傳感器所處的實(shí)際工作環(huán)境,這點(diǎn)對(duì)于正確選用傳感器至關(guān)重要,它關(guān)系到傳感器能否正常工作以及它的安全和使用壽命,乃至整個(gè)衡器的可靠性和安全性。一般情況下,高溫環(huán)境對(duì)傳感器造成涂覆材料融化、焊點(diǎn)開(kāi)化、彈性體內(nèi)應(yīng)力發(fā)生結(jié)構(gòu)變化等問(wèn)題;粉塵、潮濕對(duì)傳感器造成短路的影響;在腐蝕性較高的環(huán)境下會(huì)造成傳感器彈性體受損或產(chǎn)生短路現(xiàn)象;電磁場(chǎng)對(duì)傳感器輸出會(huì)產(chǎn)生干擾。相應(yīng)的環(huán)境因素下我們必須選擇對(duì)應(yīng)的稱重傳感器才能滿足必要的稱重要求。3.電阻應(yīng)變式稱重傳感器 按照稱重傳感器選擇的指標(biāo)要求,以及對(duì)各種傳感器的比較,本設(shè)計(jì)選定電阻應(yīng)變片式傳感器,下面對(duì)此類傳感器做詳細(xì)介紹。 電阻應(yīng)變式稱重傳感器是把電阻應(yīng)變計(jì)粘貼在彈性敏感元件上,彈性體(彈性元件,敏感梁)在外力作用下產(chǎn)生彈性變形,使粘貼在他表面的電阻應(yīng)變片(轉(zhuǎn)換元件)也隨同產(chǎn)生變形,電阻應(yīng)變片變形后,它的阻值將發(fā)生變化(增大或減小),再經(jīng)相應(yīng)的測(cè)量電路把這一電阻變化轉(zhuǎn)換為電信號(hào)(電壓或電流),從而完成了將外力變換為電信號(hào)的過(guò)程。 電阻應(yīng)變式稱重傳感器包括兩個(gè)主要部分,一個(gè)是彈性敏感元件:利用它將被測(cè)的重量轉(zhuǎn)換為彈性體的應(yīng)變值;另一個(gè)是電阻應(yīng)變計(jì):它作為傳感元件將彈性體的應(yīng)變,同步地轉(zhuǎn)換為電阻值的變化。電阻應(yīng)變片所感受的機(jī)械應(yīng)變量一般為10-6~10-2,隨之而產(chǎn)生的電阻變化率也大約在10-6~10-2數(shù)量級(jí)之間。這樣小的電阻變化用一般測(cè)量電阻的儀表很難測(cè)出,必須采用一定形式的測(cè)量電路將微小的電阻變化率轉(zhuǎn)變成電壓或電流的變化,才能用二次儀表顯示出來(lái)。在電阻應(yīng)變式稱重傳感器中通過(guò)橋式電路將電阻的變化轉(zhuǎn)換為電壓變化。當(dāng)傳感器不受載荷時(shí),彈性敏感元件不產(chǎn)生應(yīng)變,粘貼在其上的應(yīng)變片不發(fā)生變形,阻值不變,電橋平衡,輸出電壓為零;當(dāng)傳感器受力時(shí),即彈性敏感元件受載荷P時(shí),應(yīng)變片就會(huì)發(fā)生變形,阻值發(fā)生變化,電橋失去平衡,有輸出電壓。圖2-2為電阻應(yīng)變式稱重傳感器橋式測(cè)量電路。 圖2-2 電阻應(yīng)變式稱重傳感器橋式測(cè)量電路 R1、R2、R3、R4為4個(gè)應(yīng)變片電阻,組成了橋式測(cè)量電路,Rm為溫度補(bǔ)償電阻,e為激勵(lì)電壓,V為輸出電壓。若不考慮Rm,在應(yīng)變片電阻變化以前,電橋的輸出電壓為: R4??R1V????e ?R1?R2R3?R4?(2-2) 由于橋臂的起始電阻全等,即R1=R2=R3=R4=R,所以V=0。當(dāng)應(yīng)變片的電阻R1、R2、R3、R4變成R+△R1、R+△R2、R+△R3、R+△R4時(shí),電橋的輸出電壓變?yōu)椋? R??R1R??R4??V????e ?R??R1?R??R2R??R3?R??R4?(2-3) 通過(guò)化簡(jiǎn),上式則變?yōu)椋? V?e??R1?R2?R3?R4?????? 4?RRRR?(2-4) 也就是說(shuō),電橋輸出電壓的變化與各橋臂電阻變化率的代數(shù)和成正比。如果四個(gè)橋臂應(yīng)?R變片的靈敏系數(shù)相同,且=Kε,則上式又可寫(xiě)成: R V?eK??1??2??3??4? 4(2-5) 式中K為應(yīng)變片靈敏系數(shù),ε為應(yīng)變量。式2-5表明,電橋的輸出電壓和四個(gè)轎臂的應(yīng)變片所感受的應(yīng)變量的代數(shù)和成正比。在電阻應(yīng)變式稱重傳感器中,4個(gè)應(yīng)變片分別貼在彈性梁的4個(gè)敏感部位,傳感器受力作用后發(fā)生變形。在力的作用下,R1、R3被拉伸,阻值增大,△R1、△R3正值,R2、R4被壓縮,阻值減小,△R2、△R4為負(fù)值。再加之應(yīng)變片阻值變化的絕對(duì)值相同,即 因此 V?eK?4??eK? 4?R1??R3???R或?1??3??? ?R2??R4?-?R或?2??4??? (2-6)(2-7) (2-8) 若考慮Rm,則電橋的輸出電壓變成: 令Su? V,則 eSu?RK? R?2RmRR?R??RR??R???V???e?K?e ???2R??R?2Rm?R?2Rm?2R(2-9) (2-10) Su稱為傳感器系數(shù)或傳感器輸出靈敏度。 對(duì)于一個(gè)高精度的應(yīng)變傳感器來(lái)說(shuō),僅僅靠4個(gè)應(yīng)變片組成橋式測(cè)量電路還是遠(yuǎn)遠(yuǎn)不夠的。由于彈性梁材料金相組織的不均勻性及熱處理工藝、應(yīng)變片性能及粘貼工藝、溫度變化等因素的影響,傳感器勢(shì)必產(chǎn)生一定的誤差。為了減少傳感器隨溫度變化產(chǎn)生的誤差,提高其精度和穩(wěn)定性,需要在橋路兩端和橋臂中串入一些補(bǔ)償元件。如:初始不平衡值的補(bǔ)償、零載輸出溫度補(bǔ)償、輸出靈敏度溫度補(bǔ)償?shù)取?/p> 2.3.3 A/D轉(zhuǎn)換器的選定 在實(shí)際的測(cè)量和控制系統(tǒng)中檢測(cè)到的常是時(shí)間、數(shù)值都連續(xù)變化的模擬量,模擬量要輸入到單片機(jī)中進(jìn)行處理,首先要經(jīng)過(guò)模擬量到數(shù)字量的轉(zhuǎn)換,單片機(jī)才能接收、處理。目前有多種類型的A/D轉(zhuǎn)換器,其類型有積分型、逐次逼近型、并行比較型、Σ- Δ調(diào)制型、壓頻變換型等。多種類型的ADC各有其優(yōu)缺點(diǎn),并能滿足不同的具體要求。1.A/D轉(zhuǎn)換器的分類:(1)積分型 積分型ADC工作原理是將輸入電壓轉(zhuǎn)換成時(shí)間(脈沖寬度信號(hào))或頻率(脈沖頻率),然后由定時(shí)器/計(jì)數(shù)器獲得數(shù)字值。其優(yōu)點(diǎn)是用簡(jiǎn)單電路就能獲得高分辨率,但缺點(diǎn)是由于轉(zhuǎn)換精度依賴于積分時(shí)間,因此轉(zhuǎn)換速率極低。初期的單片AD轉(zhuǎn)換器大多采用積分型,現(xiàn)在逐次比較型已逐步成為主流。(2)逐次逼近型 逐次逼近型ADC由一個(gè)比較器和D/A轉(zhuǎn)換器通過(guò)逐次比較邏輯構(gòu)成,從MSB開(kāi)始,順序地對(duì)每一位將輸入電壓與內(nèi)置D/A轉(zhuǎn)換器輸出進(jìn)行比較,經(jīng)n次比較而輸出數(shù)字值。其電路規(guī)模屬于中等。其優(yōu)點(diǎn)是速度較高、功耗低,在低分辯率(<12位)時(shí)價(jià)格便宜,但高精度(>12位)時(shí)價(jià)格很高。(3)并行比較型/串并行比較型 并行比較型ADC采用多個(gè)比較器,僅作一次比較而實(shí)行轉(zhuǎn)換,又稱Flash(快速)型。由于轉(zhuǎn)換速率極高,n位的轉(zhuǎn)換需要2n-1個(gè)比較器,因此電路規(guī)模也極大,價(jià)格也高,只適用于視頻AD轉(zhuǎn)換器等速度特別高的領(lǐng)域。串并行比較型AD結(jié)構(gòu)上介于并行型和逐次比較型之間,最典型的是由2個(gè)n/2位的并行型AD轉(zhuǎn)換器配合DA轉(zhuǎn)換器組成,用兩次比較實(shí)行轉(zhuǎn)換,所以稱為 Half flash(半快速)型。還有分成三步或多步實(shí)現(xiàn)AD轉(zhuǎn)換的叫做分級(jí)型ADC,而從轉(zhuǎn)換時(shí)序角度又可稱為流水線型ADC,現(xiàn)代的分級(jí)型AD中還加入了對(duì)多次轉(zhuǎn)換結(jié)果作數(shù)字運(yùn)算而修正特性等功能。這類AD速度比逐次比較型高,電路規(guī)模比并行型小。(4)Σ-Δ調(diào)制型 Σ-Δ型AD由積分器、比較器、1位DA轉(zhuǎn)換器和數(shù)字濾波器等組成。原理上近似于積分型,將輸入電壓轉(zhuǎn)換成時(shí)間(脈沖寬度)信號(hào),用數(shù)字濾波器處理后得到數(shù)字值。電路的數(shù)字部分基本上容易單片化,因此容易做到高分辨率。主要用于音頻和測(cè)量。(5)壓頻變換型 壓頻變換型是通過(guò)間接轉(zhuǎn)換方式實(shí)現(xiàn)模數(shù)轉(zhuǎn)換的。其原理是首先將輸入的模擬信號(hào)轉(zhuǎn)換成頻率,然后用計(jì)數(shù)器將頻率轉(zhuǎn)換成數(shù)字量。從理論上講這種AD的分辨率幾乎可 以無(wú)限增加,只要采樣的時(shí)間能夠滿足輸出頻率分辨率要求的累積脈沖個(gè)數(shù)的寬度。其優(yōu)點(diǎn)是分辯率高、功耗低、價(jià)格低,但是需要外部計(jì)數(shù)電路共同完成AD轉(zhuǎn)換。2.A/D轉(zhuǎn)換器選用的原則: (1)A/D轉(zhuǎn)換器的位數(shù)。A/D轉(zhuǎn)換器決定分辨率的高低,在系統(tǒng)中,A/D轉(zhuǎn)換器的分辨率應(yīng)比系統(tǒng)允許引用誤差高一倍以上。 (2)A/D轉(zhuǎn)換器的轉(zhuǎn)換速率。不同類型的A/D轉(zhuǎn)換器的轉(zhuǎn)換速率大不相同。積分型的轉(zhuǎn)換速率低,轉(zhuǎn)換時(shí)間從幾豪秒到幾十毫秒,只能構(gòu)成低速A/D轉(zhuǎn)換器,一般用于壓力、溫度及流量等緩慢變化的參數(shù)測(cè)試。逐次逼近型屬于中速A/D轉(zhuǎn)換器,轉(zhuǎn)換時(shí)間為納秒級(jí),用于個(gè)通道過(guò)程控制和聲頻數(shù)字轉(zhuǎn)換系統(tǒng)。 (3)是否加采樣/保持器。 (4)A/D轉(zhuǎn)換器的有關(guān)量程引腳。有的A/D轉(zhuǎn)換器提供兩個(gè)輸入引腳,不同量程范圍內(nèi)的模擬量可從不同引腳輸入。 (5)A/D轉(zhuǎn)換器的啟動(dòng)轉(zhuǎn)換和轉(zhuǎn)換結(jié)束。一般A/D轉(zhuǎn)換器可由外部控制信號(hào)啟動(dòng)轉(zhuǎn)換,這一啟動(dòng)信號(hào)可由CPU提供。轉(zhuǎn)換結(jié)束后A/D轉(zhuǎn)換器內(nèi)部轉(zhuǎn)換結(jié)束信號(hào)觸發(fā)器置位,并輸出轉(zhuǎn)換結(jié)束標(biāo)志電平,通知微處理器讀取轉(zhuǎn)換結(jié)果。 (6)A/D轉(zhuǎn)換器的晶閘管現(xiàn)象。其現(xiàn)象是在正常使用時(shí),A/D轉(zhuǎn)換器芯片電流驟增,時(shí)間一長(zhǎng)就會(huì)燒壞芯片。 2.3.4 單片機(jī)型號(hào)的選定 1.單片機(jī)選定準(zhǔn)則 市場(chǎng)上的單片機(jī)型號(hào)很多,功能也有差異,在選擇單片機(jī)型號(hào)的時(shí)候主要應(yīng)該注意以下幾個(gè)方面:(1)市場(chǎng)貨源 系統(tǒng)設(shè)計(jì)者只能在市場(chǎng)上能夠提供的單片機(jī)中選擇,特別是作為產(chǎn)品大批量生產(chǎn)的應(yīng)用系統(tǒng),所選的單片機(jī)型號(hào)必須有穩(wěn)定、充足的貨源。(2)單片機(jī)性能 應(yīng)根據(jù)系統(tǒng)的功能要求和各種單片機(jī)的性能,選擇最容易實(shí)現(xiàn)系統(tǒng)技術(shù)指標(biāo)的型號(hào),而且能達(dá)到較高的性能價(jià)格比。單片機(jī)性能包括片內(nèi)硬件資源、運(yùn)行速度、可靠性、指令系統(tǒng)功能、體積和封裝形式等方面。影響性能價(jià)格比的因素除單片機(jī)的性能價(jià)格外,還包括硬件和軟件設(shè)計(jì)的容易程度、相應(yīng)的工作量大小,以及開(kāi)發(fā)工具的性能價(jià)格比。(3)研制周期 在研制任務(wù)重、時(shí)間緊的情況下,還要考慮所選的單片機(jī)型號(hào)是否熟悉,是否能馬上著手進(jìn)行系統(tǒng)的設(shè)計(jì)。與研制周期有關(guān)的另一個(gè)重要因素是開(kāi)發(fā)工具,性能優(yōu)良的開(kāi)發(fā)工具能加快系統(tǒng)地研制進(jìn)程。2.AT89S51單片機(jī)介紹 根據(jù)以上對(duì)單片機(jī)選型知識(shí)的介紹,本設(shè)計(jì)選用AT89S51單片機(jī),下面對(duì)此型號(hào)單片機(jī)進(jìn)行簡(jiǎn)介。 AT89S51是美國(guó)ATMEL公司生產(chǎn)的低電壓、高性能CMOS 8位單片機(jī)。AT89S51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的單片機(jī),其指令集和傳統(tǒng)的51單片機(jī)指令集是一樣的。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89S51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。 AT89S51具有如下特點(diǎn):40個(gè)引腳,4k Bytes Flash片內(nèi)程序存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。 此外,AT89S51設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式??臻e模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。硬件設(shè)計(jì) 3.1 系統(tǒng)硬件結(jié)構(gòu)圖 圖3-1為系統(tǒng)總體硬件結(jié)構(gòu)方框圖,系統(tǒng)共分為三大部分:數(shù)據(jù)采集模塊、單片機(jī)控制模塊以及鍵盤(pán)和顯示模塊。各模塊所采用的主要芯片型號(hào)已于圖中有所標(biāo)示。 AD轉(zhuǎn)換ADC0832AT89S51單片機(jī)最小系統(tǒng)超重報(bào)警模塊4*4矩陣鍵盤(pán)LM4229液晶顯示 圖3-1 系統(tǒng)總體硬件設(shè)計(jì)方框圖 3.2 單片機(jī)主控單元的設(shè)計(jì) 3.2.1 單片機(jī)引腳說(shuō)明 AT89S51單片機(jī)芯片為40個(gè)引腳,圖3-2為單片機(jī)AT89S51引腳圖。下面簡(jiǎn)單敘述各引腳的功能。 VCC/GND:電源/接地引腳; P0口:P0是一個(gè)8位漏極開(kāi)路型雙向I/O端口,端口置1(對(duì)端口寫(xiě)1)時(shí)作高阻抗輸入端;P0還可以用作總線方式下的地址數(shù)據(jù)復(fù)用管腳,用來(lái)操作外部存儲(chǔ)器。在這種工作模式下,P0口具有內(nèi)部上拉作用。對(duì)內(nèi)部Flash程序存儲(chǔ)器編程時(shí),接收指令字節(jié)、校驗(yàn)程序、輸出指令字節(jié)時(shí),要求外接上拉電阻; P1口:P1是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/0端口,輸出時(shí)可驅(qū)動(dòng)4個(gè)TTL。端口置1時(shí),內(nèi)部上拉電阻將端口拉到高電平,作輸入用; 另外,P1.0、P1.1可以分別被用作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和觸發(fā)輸入(P1.1/T2EX);對(duì)內(nèi)部Flash程序存儲(chǔ)器編程時(shí),接收低8位地址信息; P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/0端口;輸出時(shí)可驅(qū)動(dòng)4個(gè)TTL。端口置1時(shí),內(nèi)部上拉電阻將端口拉到高電平,作輸入用; P2口在存取外部存儲(chǔ)器時(shí),可作為高位地址輸出;內(nèi)部Flash程序存儲(chǔ)器編程時(shí),接收高8位地址和控制信息; P3口:P3是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/0端口,輸出時(shí)可驅(qū)動(dòng)4個(gè)TTL。端口置1時(shí),內(nèi)部上拉電阻將端口拉到高電平,作輸入用。P3引腳功能復(fù)用見(jiàn)表3-1所示: 表3-1 P3口引腳功能復(fù)用 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 串行通訊輸入(RXD)串行通訊輸出(TXD)外部中斷0(INT0)外部中斷1(INT1)定時(shí)器0輸入(T0)定時(shí)器1輸入(T1)外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通WR 外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通RD RST:在振蕩器運(yùn)行時(shí),有兩個(gè)機(jī)器周期(24個(gè)振蕩周期)以上的高電平出現(xiàn)在此管腳時(shí),將使單片機(jī)復(fù)位。只要這個(gè)管腳保持高電平,51芯片便循環(huán)復(fù)位。復(fù)位后P0—P3口均置1,管腳表現(xiàn)為高電平,程序計(jì)數(shù)器和特殊功能寄存器SFR全部清零。當(dāng)復(fù)位腳由高電平變?yōu)榈碗娖綍r(shí),芯片為ROM的00H處開(kāi)始運(yùn)行程序; XTAL1、XTAL2:XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz至24MHz內(nèi)選擇,電容取30PF左右。 ALE/PROG:訪問(wèn)外部存儲(chǔ)器時(shí),ALE(地址鎖存允許)的輸出用于鎖存地址的低位字節(jié),即使不訪問(wèn)外部存儲(chǔ)器,ALE端仍以不變的頻率輸出脈沖信號(hào)(此頻率是振蕩器頻率的1/6),在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),出現(xiàn)一個(gè)ALE脈沖; PSEN:外部程序存儲(chǔ)器的選通信號(hào)輸出端。當(dāng)AT89S51由外部程序存儲(chǔ)器取指令或常數(shù)時(shí),每個(gè)機(jī)器周期輸出2個(gè)脈沖,即兩次有效。但訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),將不 會(huì)有脈沖輸出; EA/Vpp:外部訪問(wèn)允許端。當(dāng)該引腳訪問(wèn)外部程序存儲(chǔ)器時(shí),應(yīng)輸入低電平。要使AT89S51只訪問(wèn)外部程序存儲(chǔ)器(地址為0000H-FFFFH),這時(shí)該引腳必須保持低電平。 圖3-2單片機(jī)AT89S51引腳圖 3.2.2 AT89S51最小系統(tǒng)設(shè)計(jì) 單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng)。對(duì)51系列單片機(jī)來(lái)說(shuō),最小系統(tǒng)包括:單片機(jī)、晶振電路、復(fù)位電路。其中復(fù)位電路采用上電復(fù)位。其最小系統(tǒng)電路圖見(jiàn)圖3-3所示: 圖3-3 單片機(jī)最小系統(tǒng)圖 對(duì)于AT89S51單片機(jī),其最小系統(tǒng)只需要電源、復(fù)位電路、時(shí)鐘電路就能工作。由于我們的程序存儲(chǔ)器(ROM)采用內(nèi)部Flash存儲(chǔ)單元,所以單片機(jī)上的EA接高。 微處理器系統(tǒng)在開(kāi)始工作時(shí)必須對(duì)微處理器內(nèi)部的寄存器等進(jìn)行復(fù)位,使各個(gè)寄存器的值設(shè)為預(yù)定狀態(tài)才能順利開(kāi)始工作。復(fù)位電路的好壞決定著單片機(jī)能否正常工作。復(fù)位電路基本功能是在系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號(hào)。復(fù)位電路可以使用專用復(fù)位芯片,也可以用電阻電容搭建。本文從可靠性和成本考慮最終選用電阻電容來(lái)搭建復(fù)位電路。對(duì)于51內(nèi)核的單片機(jī),RST是復(fù)位信號(hào)輸入端,高電平有效。當(dāng)此輸入端保持兩個(gè)機(jī)器周期(24個(gè)時(shí)鐘振蕩周期)的高電平時(shí),可以完成復(fù)位操作。 3.3 數(shù)據(jù)采集模塊設(shè)計(jì) 3.3.1 傳感器單元設(shè)計(jì) 根據(jù)第二章對(duì)各種類型傳感器特性的介紹,本設(shè)計(jì)決定采用L-psⅢ型稱重傳感器,該傳感器為雙孔平衡梁形式,是制作電子計(jì)價(jià)秤的專用產(chǎn)品,也可用于制造由單只傳感器構(gòu)成的電子案秤、臺(tái)秤及專用衡器等。其主要技術(shù)指如表3-2所示: 表3-2 L-psⅢ型稱重傳感器技術(shù)指標(biāo) 額定載荷 靈敏度 準(zhǔn)確度等級(jí) 最大分度數(shù) 最小檢定分度值 綜合誤差 重復(fù)性 蠕變 最小靜載荷 最大安全載荷 極限過(guò)載荷 輸入電阻 輸出電阻 溫度補(bǔ)償范圍 使用溫度范圍 接線方式 Kg mV/V %F.S.%F.S.%F.S./30min %Fmax %Fmax %Fmax 3,6,10,20,30,50 1.8±0.08 C3 3000 Fmax/10000 0.02 0.01 ±0.017 1 150 200 415~445 349~355-10~+50-20~+60 ? ? ℃ ℃ 輸入(+):紅,輸入(-):白,輸出(+):綠 輸出(-):藍(lán),屏蔽:黃 3.3.2 A/D轉(zhuǎn)換單元設(shè)計(jì) 根據(jù)對(duì)各種A/D轉(zhuǎn)換器的介紹與分析,本設(shè)計(jì)選定ADC0832作為本設(shè)計(jì)的A/D轉(zhuǎn) 換模塊。下面對(duì)該芯片的情況進(jìn)行簡(jiǎn)要的介紹。 ADC0832是美國(guó)國(guó)家半導(dǎo)體公司生產(chǎn)的一種8位分辨率、雙通道A/D轉(zhuǎn)換芯片。具有體積小,兼容性強(qiáng),性價(jià)比高的特點(diǎn),具體參數(shù)如下: ? 8位分辨率; ? 雙通道A/D轉(zhuǎn)換; ? 輸入輸出電平與TTL/CMOS相兼容; ? 5V電源供電時(shí)輸入電壓在0~5V之間; ? 工作頻率為250KHZ,轉(zhuǎn)換時(shí)間為32uS; ? 一般功耗僅為15mW; ? 8P、14P-DIP(雙列直插)、PICC多種封裝; ? 商用級(jí)芯片溫寬為0℃~70℃,工業(yè)級(jí)芯片溫寬為-40℃~85℃; 1、下面對(duì)ADC0832的引腳進(jìn)行說(shuō)明,圖3-4為該芯片的引腳圖: 圖3-4 ADC0832引腳圖 ? CS—:片選端,低電平芯片使能; ? CH0:模擬輸入通道0,或作為IN+/-使用; ? CH1:模擬輸入通道1,或作為IN+/-使用; ? GND:芯片參考零點(diǎn)位(地); ? DI:數(shù)據(jù)信號(hào)輸入,選擇通道控制; ? DO:數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出; ? CLK:芯片時(shí)鐘輸入; ? Vcc/REF:電源輸入及參考電壓輸入(復(fù)用)。 2、ADC0832的接口電路 正常情況下,ADC0832與單片機(jī)的接口應(yīng)為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI,但由于DO端與DI端在通信時(shí)并未同時(shí)有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計(jì)時(shí)可以將DO與DI并聯(lián)在一根數(shù)據(jù)線上使用。單片機(jī)與ADC0832的接口電路如圖3-5所示。 圖3-5 單片機(jī)與ADC0832連接圖 當(dāng)ADC0832未工作時(shí)其CS輸入端應(yīng)為高電平,此時(shí)芯片禁用,CLK和DO/DI的電平可以任意,當(dāng)要進(jìn)行A/D轉(zhuǎn)換時(shí),須先將CS使能端置于低電平并保持低電平直到轉(zhuǎn)換完全結(jié)束。此時(shí)芯片開(kāi)始轉(zhuǎn)換工作,同時(shí)由處理器向芯片時(shí)鐘輸入端CLK輸入時(shí)鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號(hào)。 3.4 鍵盤(pán)和顯示電路單元設(shè)計(jì) 3.4.1 鍵盤(pán)電路設(shè)計(jì) 在本設(shè)計(jì)中,采用的是4×4的矩陣式鍵盤(pán),將單片機(jī)的P1.0-P1.3作為鍵盤(pán)的行線接口,P1.4-P1.7作為列線接口,列線通過(guò)電阻接+5V。商品的單價(jià)已由程序設(shè)定好,并 號(hào)連接。3.4.2 顯示電路設(shè)計(jì) 3.5 系統(tǒng)總體原理圖 可由鍵盤(pán)選擇各種商品的價(jià)格。 圖3-6所示,為完善其功能,電路中添加了上拉電阻。 圖3-6 液晶顯示模塊LM4229與單片機(jī)接線圖 在系統(tǒng)各部分的設(shè)計(jì)完成后,把各模塊根據(jù)其功能和信號(hào)處理的流程連接起來(lái),便得到系統(tǒng)總體設(shè)計(jì)的原理圖,如圖3-7所示,為簡(jiǎn)潔起見(jiàn),其中的接線部分采用網(wǎng)絡(luò)標(biāo)本設(shè)計(jì)中顯示部分采用了當(dāng)今常用的LM4229液晶顯示模塊。其與單片機(jī)的接線如 措施。3.6 硬件抗干擾設(shè)計(jì) 圖3-7 系統(tǒng)總體原理圖 方面,但更重要的方面是外界干擾和接地引起的異常。 度。就單片機(jī)測(cè)控系統(tǒng)來(lái)講,其主要干擾是來(lái)自電源和信號(hào)傳輸通道的干擾。用到稱重傳感器,所采用的應(yīng)變式傳感器是高阻抗器件,其絕緣性能、機(jī)械結(jié)構(gòu)的穩(wěn)定性等,直接影響工作特性的穩(wěn)定。因此,應(yīng)變片傳感器的絕緣材料必須有很高的絕緣性統(tǒng)的可靠性更倍受人們的關(guān)注,這是因?yàn)橄到y(tǒng)的可靠性決定了系統(tǒng)能否達(dá)到所需要的精能、足夠的機(jī)械強(qiáng)度、高形狀穩(wěn)定性及良好的抗?jié)裥阅堋O旅嬷攸c(diǎn)介紹單片機(jī)的抗干擾隨著科學(xué)技術(shù)的迅速發(fā)展,人們對(duì)單片機(jī)測(cè)控系統(tǒng)的各種性能要求越來(lái)越高。而系本電子稱重器的核心部件是單片機(jī),所以我們的抗干擾措施主要是針對(duì)單片機(jī)。還電子秤在使用中,常常會(huì)出現(xiàn)各種各樣的異常現(xiàn)象,電子秤本身的質(zhì)量問(wèn)題是一個(gè) 1、電源的抗干擾措施 普通用電中含有多種高次諧波,它們很容易經(jīng)電源進(jìn)入單片機(jī)系統(tǒng),還有一些射頻發(fā)射、電磁波等也會(huì)由電源線感應(yīng)反饋進(jìn)入單片機(jī)系統(tǒng)造成干擾。因此,在電源電路中必需采取有效地濾波措施,來(lái)抑制這些高頻干擾的侵入。電源濾波的一般方法是在電源變壓器初、次級(jí)分別設(shè)置低通濾波器和線間電容濾波器,使50Hz市電基波通過(guò),而抑制掉高頻信號(hào)。此外在變壓器的初、次級(jí)之間均采用屏蔽層隔離,其中初級(jí)屏蔽層接大地,次級(jí)屏蔽層接系統(tǒng)邏輯地,以減少其分布電容,提高抗共模干擾的能力。 2、信號(hào)傳輸通道的抗干擾措施 信號(hào)傳輸通道包括系統(tǒng)的前向通道和后向通道,其主要干擾有:雜散電磁場(chǎng)通過(guò)感應(yīng)和輻射方式進(jìn)入通道的干擾;由于地阻抗耦合、漏電流等因素產(chǎn)生的加性干擾;以及因傳輸線衰減、阻抗失配等因素引起的乘性干擾。對(duì)于這三類干擾,可以采用以下幾種措施加以排除。(1)光電隔離技術(shù) 光電耦合器對(duì)干擾信號(hào)具有良好的隔離性能,一是它的輸入阻抗很小,約為100fl-lldl,而干擾源內(nèi)阻則很大,通常為105Q~108Q,因此能分壓到光電耦合器輸入端的噪聲很?。欢枪怆婑詈掀鬏斎氩糠值陌l(fā)光二極管是在電流狀態(tài)下工作的,即使干擾噪聲有較高的電壓幅度,但由于能量小,不能提供足夠的電流使發(fā)光二極管發(fā)光而被抑制掉;三是光電耦合器的輸入回路與輸出回路之間分布電容極小,絕緣電阻很大,回路一邊的干擾很難通過(guò)光電耦合器饋送到另一邊去。因此,采用光電耦合器可將單片機(jī)與前向通道、后向通道及其他部分從電氣上隔離開(kāi)來(lái),能有效地防止干擾信號(hào)的侵入。(2)接地技術(shù) 本系統(tǒng)既有模擬電路又有數(shù)字電路,因此數(shù)字地與模擬地要分開(kāi),最后只在一點(diǎn)相連,如果兩者不分,則會(huì)互相干擾。(3)輸入輸出信號(hào)線采用屏蔽雙絞線 屏蔽雙絞線對(duì)于靜電干擾和電磁干擾有很好的抑制作用,有條件的話應(yīng)盡量采用。但使用中應(yīng)注意: ? 線纜敷設(shè)時(shí)不要過(guò)分用力或使電纜打結(jié)、避免彎曲超過(guò)900、避免過(guò)緊地纏繞電纜,以保護(hù)雙絞47線的扭絞狀態(tài); ? 做線時(shí),避免損壞線纜的外皮、不要切壞線纜內(nèi)的導(dǎo)線; ? 接線時(shí),雙絞線的開(kāi)絞長(zhǎng)度盡量小,不要超過(guò)20mm; ? 雙絞線的屏蔽層采用設(shè)備端單端接地方式。系統(tǒng)軟件設(shè)計(jì) 本系統(tǒng)程序使用模塊化的程序設(shè)計(jì)思想,主程序通過(guò)調(diào)用子程序以實(shí)現(xiàn)各部分功能。先進(jìn)行軟件的總體設(shè)計(jì),然后進(jìn)行各功能模塊設(shè)計(jì)。 4.1 主程序設(shè)計(jì) 電子秤需要有數(shù)據(jù)采集、處理、存結(jié)果、送顯示的運(yùn)行過(guò)程。根據(jù)這一要求,電子秤的信息采集與處理分三個(gè)階段:在微處理器的控制下,經(jīng)傳感器轉(zhuǎn)換的電壓信號(hào)通過(guò)輸入電路送入A/D轉(zhuǎn)換器處理,存入到數(shù)據(jù)存儲(chǔ)器中;微處理器對(duì)采集的測(cè)量數(shù)據(jù)進(jìn)行必要的數(shù)據(jù)處理,把數(shù)據(jù)信號(hào)處理為顯示所要求的信號(hào)格式,通過(guò)輸出接口電路輸出并顯示。主流程圖見(jiàn)圖4-1所示: 開(kāi)始單片機(jī)初始化、LM4229進(jìn)入歡迎界面、ADC0832初始化載物臺(tái)是否有重物Y單片機(jī)存儲(chǔ)ADC0832采樣值N是否輸入商品代碼按鍵Y單片機(jī)執(zhí)行計(jì)算并將結(jié)果送LM4229顯示N測(cè)量結(jié)束鍵是否按下Y結(jié)束N 圖4-1 主程序流程圖 4.2 LM4229液晶顯示驅(qū)動(dòng)程序 開(kāi)始寫(xiě)入控制字寫(xiě)入初始行Y是否換行?N全部數(shù)據(jù)已寫(xiě)完?Y結(jié)束N 圖4-2 LM4229液晶顯示驅(qū)動(dòng)程序流程圖 LM4229液晶能夠顯示比較復(fù)雜的漢字和圖形,首先必須對(duì)其寫(xiě)入控制操作字,包括圖形的顯示方式,字體的模式。然后寫(xiě)入初始行地址,指針自動(dòng)左移,直到寫(xiě)完全部數(shù)據(jù)為止。 write_data(place&0xff);//寫(xiě)入地址高位 write_data(place/256);//寫(xiě)入地址低位 write_com(0x24);//地址設(shè)置 write_com(0xb0);//設(shè)置數(shù)據(jù)自動(dòng)寫(xiě) write_data(ASC_MSK[(c1-0x20)*16+k]);/*---例如:0的ASCII碼為0x30, 在ASC_MSK中的位置為0x10*16---16字節(jié)字碼依次寫(xiě)入LCD---*/ write_com(0xb2);//自動(dòng)復(fù)位 place=place+30; 4.3 ADC0832采樣程序 開(kāi)始拉低CS、拉高CLKDATA右移八位?Y拉高CS、拉低CLK,返回?cái)?shù)據(jù)N結(jié)束 圖4-3 ADC0823采樣程序流程圖 單片機(jī)通過(guò)拉低CS、拉高CLK來(lái)啟動(dòng)ADC0832進(jìn)行外部壓力傳感轉(zhuǎn)換后的電壓信號(hào)進(jìn)行采樣,每產(chǎn)生8個(gè)CLK脈沖,DATA獲得一位完整的8bit數(shù)據(jù),此時(shí)MCU發(fā)送中斷請(qǐng)求,拉高CS,拉低CLK,并將數(shù)據(jù)DAT返回。 4.4 鍵盤(pán)程序 本設(shè)計(jì)中采用了4×4矩陣式鍵盤(pán),單片機(jī)定時(shí)進(jìn)行查詢。首先單片機(jī)發(fā)送行掃描代碼,然后進(jìn)行列掃描,當(dāng)發(fā)現(xiàn)某一列出現(xiàn)了低電平時(shí),即返回相應(yīng)的鍵盤(pán)值。若沒(méi)有發(fā)現(xiàn)則說(shuō)明當(dāng)前行沒(méi)有鍵按下,行掃描右移一位,繼續(xù)執(zhí)行列掃描。 開(kāi)始發(fā)送行掃描碼發(fā)送列掃描碼右移一位右移一位列掃描完畢?NYN行掃描完畢?Y返回鍵值結(jié)束圖4-4 鍵盤(pán)程序流程圖 系統(tǒng)仿真 在系統(tǒng)硬件與軟件全部設(shè)計(jì)完成的情況下,將系統(tǒng)在protues7.5環(huán)境下進(jìn)行了軟件仿真,以確保本設(shè)計(jì)方案的可行性與準(zhǔn)確性。因?yàn)樵诜抡鏁r(shí)不能實(shí)際的把物體放到稱重臺(tái)上,所以在仿真時(shí)采用直接輸入模擬電壓信號(hào)的方法,來(lái)代替信號(hào)的采集。 5.1 歡迎界面的仿真 開(kāi)始仿真時(shí),先將用C語(yǔ)言編寫(xiě)的程序用Keil軟件進(jìn)行編譯,生成可執(zhí)行程序,然后裝入單片機(jī)中進(jìn)行仿真,按開(kāi)始按鈕,單片機(jī)及其他各部分電路開(kāi)始工作,單片機(jī)調(diào)用內(nèi)部存儲(chǔ)數(shù)據(jù)對(duì)各部分接口電路初始化。200ms后LM4229進(jìn)入歡迎界面,如圖5-1所示。 圖5-1 電子秤歡迎界面仿真 5.2 無(wú)重物情況仿真 歡迎界面過(guò)后,電子秤進(jìn)入稱重界面。此時(shí),ADC0832不斷對(duì)外部數(shù)據(jù)進(jìn)行采樣交給單片機(jī)進(jìn)行處理,一旦有物品放入載物臺(tái),ADC0832立即發(fā)送中斷請(qǐng)求,并將本次采集數(shù)據(jù)交給單片機(jī)進(jìn)行處理。調(diào)節(jié)壓力傳感模擬電路電壓,將電壓設(shè)為0.00表示此時(shí)載物臺(tái)上沒(méi)有物體。此時(shí)LM4229顯示指示“實(shí)用電子秤,名稱······單價(jià):0.000元/千克,總重量:0.000千克,總價(jià):00.000元”。如圖5-2所示。 圖5-2 無(wú)重物稱重界面仿真 5.3 稱量物體仿真 上調(diào)壓力傳感電壓,表示已有商品放在載物臺(tái)上,ADC0832立即發(fā)送中斷請(qǐng)求,并將本次采集的數(shù)據(jù)交給單片機(jī)進(jìn)行處理,之后送入LM4229顯示相應(yīng)數(shù)據(jù)量。在此過(guò)程中,鍵盤(pán)不斷進(jìn)行掃描,一旦有鍵按下,單片機(jī)便對(duì)其數(shù)據(jù)進(jìn)行相應(yīng)處理,然后將對(duì)LM4229進(jìn)行寫(xiě)操作。此時(shí),按下鍵盤(pán),選擇相應(yīng)的商品。如按下3號(hào)鍵,選擇草莓,此時(shí)LM4229上顯示“名稱:草莓,單價(jià):3.6元/千克,總重量:2.499千克,總價(jià):“8.999元”(實(shí)際3.6×2.499=8.999元)。達(dá)到基本要求。如圖5-3所示。當(dāng)要稱量下一種不同商品的時(shí)候,只需按下0鍵,選擇商品代碼,再按下相應(yīng)商品鍵。 圖5-3 稱重情況仿真 5.4 最大量程仿真 將稱重傳感器調(diào)節(jié)到最大,顯示最大稱量,其結(jié)果如圖5-4所示。由于元件及系統(tǒng)的誤差,使得最大量程不能達(dá)到預(yù)定的5Kg,而是4.980Kg,這是在誤差允許范圍內(nèi)的,符合要求。因?yàn)楸驹O(shè)計(jì)添加了超重報(bào)警模塊,所以在稱量的過(guò)程中,一旦物體自身的重量超出電子秤的稱量范圍,蜂鳴器立即會(huì)發(fā)出“滴滴····”,警報(bào)聲告訴工作人員,所稱量物品超重。 圖5-4 最大量程仿真 5.5 仿真總結(jié)與問(wèn)題補(bǔ)充 5.5.1 仿真總結(jié) 以上,我們進(jìn)行了幾種基本情況的仿真,總結(jié)仿真的過(guò)程,我們可以得出以下結(jié)論: 1、該電子秤設(shè)計(jì)簡(jiǎn)單,操作方便,可以很容易的進(jìn)行稱量; 2、由于元件設(shè)置的原因,使電子秤的量程未達(dá)到預(yù)設(shè)的范圍; 3、各商品的價(jià)格已在程序中設(shè)定好,既給稱量帶來(lái)了方便,也帶來(lái)了麻煩,使得稱量其他物品時(shí)需要修改程序。 5.5.2 問(wèn)題補(bǔ)充 因?yàn)楸驹O(shè)計(jì)采用軟件仿真的方法,而不能進(jìn)行實(shí)際的稱量,所以采用了直接輸入電壓信號(hào)的方式代替了傳感器采集的信號(hào)。但是經(jīng)傳感器采集的信號(hào)通常很小,需要通過(guò)前端信號(hào)處理電路進(jìn)行準(zhǔn)確的線性放大。放大后的模擬電壓信號(hào)經(jīng)過(guò)濾波電路和A/D轉(zhuǎn)換電路轉(zhuǎn)換成數(shù)字信號(hào)才被送入到主控電路的單片機(jī)中進(jìn)行處理。在實(shí)際稱量中,可以加入放大濾波電路如圖5-5所示。 圖5-5 放大濾波電路 圖5-5為放大濾波電路的設(shè)計(jì)。放大器采用放大芯片AD620電容C1、C3用來(lái)濾除 采樣信號(hào)電壓中的低頻噪聲,選用22uF的普通獨(dú)石電容;電容C2、C4用來(lái)濾除采樣信號(hào)電壓中的高頻噪聲,選用0.1uF的普通獨(dú)石電容。因?yàn)椴蓸有盘?hào)電壓值只有毫伏級(jí),所以電阻R1、R2選用較小的阻值,否則導(dǎo)致放大器由于輸入電流太小而放大效果不明顯。微弱信號(hào)Vi1和Vi2被分別放大后從AD620的第6腳輸出。 總結(jié)與展望 電子稱重器是貿(mào)易市場(chǎng)中的常見(jiàn)的稱重計(jì)量?jī)x器。本文先說(shuō)明了稱重器的設(shè)計(jì)思路,并介紹了幾種設(shè)計(jì)方案,選擇了其中一種簡(jiǎn)單可行的方案。然后從電子秤的核心部件稱重傳感器的介紹開(kāi)始,逐個(gè)進(jìn)行各個(gè)模塊器件的論證與選擇。后面詳細(xì)介紹了電子秤的硬件以及軟件設(shè)計(jì)。 本設(shè)計(jì)為小量程(0~5Kg)稱量器件,可以廣泛應(yīng)用于商店、菜市場(chǎng)等場(chǎng)合。在硬件部分設(shè)計(jì)過(guò)程中選用了A/D轉(zhuǎn)換芯片ADC0832和LM4229液晶顯示,大大簡(jiǎn)化了硬件電路及軟件編程,并提高了系統(tǒng)的準(zhǔn)確性和穩(wěn)定性。人機(jī)界面部分由液晶顯示與4×4位矩陣鍵盤(pán)組成,可以由鍵盤(pán)控制顯示商品名稱、重量和價(jià)格等信息,操作簡(jiǎn)單方便。軟件設(shè)計(jì)中使用了C語(yǔ)言編程,便于修改和應(yīng)用。 本次設(shè)計(jì)的電子稱重器還存在一些缺點(diǎn)與不足,主要以下這兩點(diǎn):一是量程僅是5Kg,從而限制了該電子秤的使用范圍??刹捎么罅砍痰姆Q重傳感器,但同時(shí)需要提高A/D轉(zhuǎn)換芯片的位數(shù),以保持精度。二是商品的種類與價(jià)格已編入程序,給稱量其它的商品帶來(lái)不便。三是本次設(shè)計(jì)沒(méi)有完成實(shí)物的制作,從而不能預(yù)見(jiàn)商業(yè)產(chǎn)品開(kāi)發(fā)中的所有問(wèn)題,需要進(jìn)一步研究。 通過(guò)這次電子秤的設(shè)計(jì),我對(duì)所學(xué)的專業(yè)課知識(shí)有了更深的理解,尤其是單片機(jī)方面。在設(shè)計(jì)過(guò)程中,查閱了大量的中外文資料,解決了不少難題。另外本次設(shè)計(jì)提升了我分析問(wèn)題解決問(wèn)題的能力,增強(qiáng)了對(duì)學(xué)習(xí)的信心,相信這對(duì)我以后的工作和學(xué)習(xí)有重要的幫助。 附錄程序 #include unsigned int sbit ADCS =P3^5;sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6; uint x1,y1,z1=0,w1;uchar ad_data,k,n,m,e,num,s; //采樣值存儲(chǔ) uint temp1;sbit beep =P3^0; char press_data; //標(biāo)度變換存儲(chǔ)單元 float press;unsigned char ad_alarm,temp; //報(bào)警值存儲(chǔ)單元unsigned char abc[5]={48,46,48,48,48};unsigned char price_all[6]={48,48,46,48,48,48};float price_unit[10]={5.5,2.8,3.6,4.5,2.4,4.2,3.8,6.0,1.5,0}; //商品初始單價(jià) uchar price_danjia[5]={48,46,48,48,48};float price;uint price_temp1,price_temp2; //商品總價(jià) uchar Adc0832(unsigned char channel); void alarm(void);void data_pro(void);void delay(uint k);void keyscan(); void disp_init();void price_jisuan();/************ 主函數(shù) ************/ void main(void){ delay(500); //系統(tǒng)延時(shí)500ms啟動(dòng) //ad_data=0; //采樣值存儲(chǔ)單元初始化為0 lcd_init(); //顯示初始化 disp_init(); //開(kāi)始進(jìn)入歡迎界面 delay(1000); //延時(shí)進(jìn)入稱量畫(huà)面 clear_lcd(0,4,40); clear_lcd(16,0,100); clear_lcd(28,0,40); clear_lcd(44,0,100); clear_lcd(56,0,40); clear_lcd(72,0,100); clear_lcd(84,0,40); clear_lcd(100,0,100); clear_lcd(112,0,40); write_lcd(0,8,“實(shí)用電子秤”); while(1) { ad_data =Adc0832(0); //采樣值存儲(chǔ)單元初始化為0 alarm(); data_pro();//讀取重量 keyscan();//查詢商品種類 write_lcd(40,0,“------------------------------”); write_lcd(56,0,“單 價(jià):”); write_lcd(56,11,price_danjia); write_lcd(56,20,“元/千克”); write_lcd(72,0,“總重量:”); write_lcd(72,11,abc); write_lcd(72,20,“千克”); write_lcd(88,0,“總 價(jià):”); price_jisuan(); //計(jì)算出價(jià)格 write_lcd(88,10,price_all); write_lcd(88,20,“元”); write_lcd(112,0,“設(shè)計(jì)學(xué)生:1210401038 謝玉夏”);} } /************ 讀ADC0832函數(shù) ************/ //采集并返回 uchar Adc0832(unsigned char channel) //AD轉(zhuǎn)換,返回結(jié)果 { uchar i=0; uchar j; uint dat=0; uchar ndat=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低CS端 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令結(jié)束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) { dat|=ADDO;//收數(shù)據(jù) ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次時(shí)鐘脈沖 _nop_(); _nop_(); dat<<=1; if(i==7)dat|=ADDO; } for(i=0;i<8;i++) { j=0; j=j|ADDO;//收數(shù)據(jù) ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次時(shí)鐘脈沖 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; } ADCS=1;//拉搞CS端 ADCLK=0;//拉低CLK端 ADDO=1;//拉高數(shù)據(jù)端,回到初始狀態(tài) dat<<=8; dat|=ndat; return(dat); //return ad k } void data_pro(void){ unsigned int; if(0 { int vary=ad_data; press=(0.019531*vary); temp1=(int)(press*1000); //放大1000倍,便于后面的計(jì)算 abc[0]=temp1/1000+48; //取壓力值百位 abc[1]=46; abc[2]=(temp1%1000)/100+48; //取壓力值十位 abc[3]=((temp1%1000)%100)/10+48; //取壓力值個(gè)位 abc[4]=((temp1%1000)%100)%10+48;//取壓力值十分位 } } /*****************報(bào)警子函數(shù)*******************/ void alarm(void){ if(ad_data>=256) beep=0; //則啟動(dòng)報(bào)警 else beep=1; } void delay(uint k){ uint i,j; for(i=0;i for(j=0;j<100;j++);} //開(kāi)機(jī)歡迎界面 void disp_init(){ write_lcd(0,8,“歡迎使用電子秤”); write_lcd(16,0,“------------------------------”); write_lcd(28,0,“設(shè)計(jì)學(xué)生:謝玉夏”); write_lcd(44,0,“------------------------------”); write_lcd(56,0,“班級(jí)學(xué)號(hào):1210401038”); write_lcd(72,0,“------------------------------”); write_lcd(84,0,“指導(dǎo)老師:劉志芳”); write_lcd(100,0,“------------------------------”); write_lcd(112,0,“設(shè)計(jì)日期:2014年12月”); } //鍵盤(pán)服務(wù)程序 void keyscan(){ P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xee:num=1,price=price_unit[0], write_lcd(24,0,“名 break;case 0xde:num=2,price=price_unit[1],write_lcd(24,0,”名 break;case 0xbe:num=3,price=price_unit[2],write_lcd(24,0,“名 break;case 0x7e:num=4,price=price_unit[3],write_lcd(24,0,”名 break; } while(temp!=0xf0) { 稱: 杏稱: 李 稱: 草 稱: 葡 仁“);子”);莓“);萄”); temp=P1; temp=temp&0xf0; } } } P1=0xfd; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xed:num=5,price=price_unit[4],write_lcd(24,0,“名 break;case 0xdd:num=6,price=price_unit[5],write_lcd(24,0,”名 break;case 0xbd:num=7,price=price_unit[6],write_lcd(24,0,“名 break;case 0x7d:num=8,price=price_unit[7],write_lcd(24,0,”名 break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfb; temp=P1; temp=temp&0xf0; 稱: 西稱: 蘋(píng)稱: 雪稱: 核 瓜“);果”);梨“);桃”); 成都大學(xué)電子信息工程學(xué)院 07級(jí)單片機(jī)課程設(shè)計(jì) 題目:簡(jiǎn)單51單片機(jī)數(shù)字時(shí)鐘設(shè)計(jì) 院 系: 電子信息工程 專 業(yè):電信專業(yè) 班 級(jí):08級(jí)電信本科三班 姓 名: 劉 濤 學(xué) 號(hào):200810312340 老 師:楊加國(guó) 2010-6 成都大學(xué)電子信息工程學(xué)院 摘要 ? 班級(jí)學(xué)號(hào) ···········1 ? 設(shè)計(jì)內(nèi)容 ···········3 ? 進(jìn)度安排 ···········3 ? MCS-51單片機(jī)系統(tǒng)簡(jiǎn)介·····3 ? 課程設(shè)計(jì)背景 ·········4 ? 課程設(shè)計(jì)目的 ·········4 ? MCS-51單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器中 斷系統(tǒng)簡(jiǎn)介 ···········4 ? 課程設(shè)計(jì)原理 ·········5 ? 課程設(shè)計(jì)代碼 ·········6 ? 設(shè)計(jì)相關(guān)說(shuō)明·········10 345 成都大學(xué)電子信息工程學(xué)院 MOV 20H,#0;秒個(gè)位寄存器清零 MOV 21H,#0;秒十位寄存器清零 MOV 22H,#0;分個(gè)位寄存器清零 MOV 23H,#0;分十位寄存器清零 MOV 24H,#0;時(shí)個(gè)位寄存器清零 MOV 25H,#0;時(shí)十位寄存器清零 LJMP DISPLAY TIMER_0: CLR EA INC R6 INC R5 MOV TH0,#03CH MOV TL0,#0B0H;重新賦初值,定時(shí)50ms SETB EA RETI ADD_TIME: CJNE R6,#20,EXIT;定時(shí)器中斷20次,1秒到 MOV R6,#0 INC 20H MOV A,20H CJNE A,#10,EXIT;如果秒個(gè)位等于10,清零 MOV 20H,#00H INC 21H MOV A,21H CJNE A,#6,EXIT;如果秒十位等于6,清零 MOV 21H,#00H INC 22H MIN: MOV A,22H CJNE A,#10,EXIT;如果分個(gè)位等于10,清零 MOV 22H,#00H INC 23H MOV A,23H CJNE A,#6,EXIT;如果分十位等于6,清零 MOV 23H,#00H INC 24H HOUR: MOV A,25H CJNE A,#2,LOOP;如果時(shí)十位等于2,檢查時(shí)個(gè)位 MOV A,24H CJNE A,#4,EXIT;如果時(shí)個(gè)位等于4,清零 MOV 24H,#00H;清零時(shí)個(gè)位 MOV 25H,#00H;清零時(shí)十位 成都大學(xué)電子信息工程學(xué)院 CLR P2.2 LCALL DELAY SETB P2.2;顯示“-” MOV A,24H MOVC A,@A+DPTR MOV P0,A CLR P2.1 LCALL DELAY SETB P2.1;顯示時(shí)個(gè)位 MOV DPTR,#TABLE1;該位使用TABLE1以消除前置0 MOV A,25H MOVC A,@A+DPTR MOV P0,A CLR P2.0 LCALL DELAY SETB P2.0;顯示時(shí)十位 CJNE R5,#4,EXIT0;當(dāng)R5到4時(shí),掃描按鍵 MOV R5,#0 KEY_SCAN: JNB K1,ADD_HOUR JNB K2,ADD_MIN LJMP ADD_TIME;無(wú)鍵按下,跳至走時(shí) ADD_HOUR: INC 24H;小時(shí)加1 LJMP HOUR;更新 ADD_MIN: INC 22H;分鐘加1 LJMP MIN;更新 EXIT0: LJMP ADD_TIME DELAY: MOV R7,#150;掃描延時(shí) DJNZ R7,$ RET TABLE:;數(shù)碼管字形顯示編碼表 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;字形顯示編碼 TABLE1: DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;小時(shí)位的十位數(shù)編碼,該位如果為0則不顯示 END;程序結(jié)束第三篇:基于51單片機(jī)電子時(shí)鐘設(shè)計(jì)
第四篇:基于51單片機(jī)的電子秤設(shè)計(jì)
第五篇:簡(jiǎn)單的51單片機(jī)數(shù)字鐘設(shè)計(jì)