基于單片機(jī)的電子秤設(shè)計(jì),基于,單片機(jī),電子秤,設(shè)計(jì)
黑龍江八一農(nóng)墾大學(xué)
題目 智能電子秤設(shè)計(jì)
姓 名 李 宏
專 業(yè) 電子信息工程
班 級 10級電子一班
學(xué) 號 20104075004
時(shí) 間 2013年4月10日
第一章 功能說明
本設(shè)計(jì)系統(tǒng)以單片機(jī)AT89S52為控制核心,實(shí)現(xiàn)電子秤的基本控制功能。在設(shè)計(jì)系統(tǒng)時(shí),為了更好地采用模塊化設(shè)計(jì)法,分步設(shè)計(jì)了各個(gè)單元功能模塊。
系統(tǒng)的硬件部分包括最小系統(tǒng)部分、數(shù)據(jù)采集部分、人機(jī)交互界面和系統(tǒng)電源四大部分。最小系統(tǒng)部分主要包括AT89S52和擴(kuò)展的外部數(shù)據(jù)存儲器;數(shù)據(jù)采集部分由稱重傳感器,信號的前期處理和A/D轉(zhuǎn)換部分組成,包括運(yùn)算放大器AD620和A/D轉(zhuǎn)換器ICL7135;人機(jī)界面部分為鍵盤輸入,四位LED數(shù)碼顯示器,可以直觀的顯示重量的具體數(shù)字以及方便的輸入數(shù)據(jù),使用方便;系統(tǒng)電源以LM317和LM337為核心設(shè)計(jì)電路以提供系統(tǒng)正常工作電源。
系統(tǒng)的軟件部分應(yīng)用單片機(jī)C語言進(jìn)行編程,實(shí)現(xiàn)了該設(shè)計(jì)的全部控制功能。該電子秤可以實(shí)現(xiàn)基本的稱重功能(稱重范圍為0~9.999Kg,重量誤差不大于±0.005Kg),并發(fā)揮部分的顯示購物清單的功能,可以設(shè)置日期和設(shè)定十種商品的單價(jià), 還具有超量程和欠量程的報(bào)警功能。
本系統(tǒng)設(shè)計(jì)結(jié)構(gòu)簡單,使用方便,功能齊全,精度高,具有一定的開發(fā)價(jià)值。
稱重傳感器原理
即由非電量(質(zhì)量或重量)轉(zhuǎn)換成電量的轉(zhuǎn)換元件,它是把支承力變換成電的或其它形式的適合于計(jì)量求值的信號所用的一種輔助手段。
按照稱重傳感器的結(jié)構(gòu)型式不同,可以分直接位移傳感器(電容式、電感式、電位計(jì)式、振弦式、空腔諧振器式等)和應(yīng)變傳感器(電阻應(yīng)變式、聲表面諧振式)或是利用磁彈性、壓電和壓阻等物理效應(yīng)的傳感器。
對稱重傳感器的基本要求是:輸出電量與輸入重量保持單值對應(yīng),并有良好的線性關(guān)系;有較高的靈敏度;對被稱物體的狀態(tài)的影響要??;能在較差的工作條件下工作;有較好的頻響特性;穩(wěn)定可靠。
傳感器下的定義是:“能感受規(guī)定的被測量并按照一定的規(guī)律轉(zhuǎn)換成可用信號的器件或裝置,通常由敏感元件和轉(zhuǎn)換元件組成”。其中敏感元件指傳感器中能直接感受被測量的部分,轉(zhuǎn)換元件指傳感器中能將敏感元件輸出量轉(zhuǎn)換為適于傳輸和測量的電信號部分。此外傳感器是一種檢測裝置,能感受到被測量的信息,并能將檢測感受到的信息,按一定規(guī)律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。它是實(shí)現(xiàn)自動檢測和自動控制的首要環(huán)節(jié)。
稱重傳感器在電子秤中占有十分重要的位置,被喻為電子秤的心臟部件,它的性能好壞很大程度上決定了電子秤的精確度和穩(wěn)定性。通常稱重傳感器產(chǎn)生的誤差約占電子秤整機(jī)誤差的50%~70%。若在環(huán)境惡劣的條件下(如高低溫、濕熱),傳感器所占的誤差比例就更大,因此,在人們設(shè)計(jì)電子秤時(shí),正確地選用稱重傳感器非常重要。
稱重傳感器的種類很多,根據(jù)工作原理來分常用的有以下幾種: 電阻應(yīng)變式、電容式、壓磁式、壓電式、諧振式等。(本設(shè)計(jì)采用的是電阻應(yīng)變式)
電阻應(yīng)變式稱重傳感器包括兩個(gè)主要部分,一個(gè)是彈性敏感元件:利用它將被測的重量轉(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ù)量級之間。這樣小的電阻變化用一般測量電阻的儀表很難測出,必須采用一定形式的測量電路將微小的電阻變化率轉(zhuǎn)變成電壓或電流的變化,才能用二次儀表顯示出來。在電阻應(yīng)變式稱重傳感器中通過橋式電路將電阻的變化轉(zhuǎn)換為電壓變化。電阻應(yīng)變式稱重傳感器工作原理框圖如圖2-1所示:
載荷P 應(yīng)變 電阻變化R 輸出電壓
敏感元件
應(yīng)變片
測量電橋
如圖2-2電阻應(yīng)變式稱重傳感器工作原理框圖
當(dāng)傳感器不受載荷時(shí),彈性敏感元件不產(chǎn)生應(yīng)變,粘貼在其上的應(yīng)變片不發(fā)生變形,阻值不變,電橋平衡,輸出電壓為零;當(dāng)傳感器受力時(shí),即彈性敏感元件受載荷P時(shí),應(yīng)變片就會發(fā)生變形,阻值發(fā)生變化,電橋失去平衡,有輸出電壓。
如圖2-3 橋式測量電路
R1、R2、R3、R4為4個(gè)應(yīng)變片電阻,組成了橋式測量電路,Rm為溫度補(bǔ)償電阻,e為激勵電壓,V為輸出電壓。
若不考慮Rm,在應(yīng)變片電阻變化以前,電橋的輸出電壓為:
V=
由于橋臂的起始電阻全等,即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)椋?
V=
通過化簡,上式則變?yōu)椋?
V=
也就是說,電橋輸出電壓的變化與各臂電阻變化率的代數(shù)和成正比。
如果四個(gè)橋臂應(yīng)變片的靈敏系數(shù)相同,且 = Kε,則上式又可寫成:
V=ε1 - ε2 + ε3 - ε4 )
式中K為應(yīng)變片靈敏系數(shù),ε為應(yīng)變量。
上式表明,電橋的輸出電壓和四個(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)變片阻值變化的絕對值相同,即
△R1 = △R3 = + △R或ε1 = ε3 = +ε
△R2 = △R4= - △R或ε2 = ε4 = - ε
因此,V=×4ε = e Kε。若考慮 Rm,則電橋的輸出電壓變成:
V=
= = K εe
令SU = ,則SU = K ε
SU稱為傳感器系數(shù)或傳感器輸出靈敏度。
對于一個(gè)高精度的應(yīng)變傳感器來說,僅僅靠4個(gè)應(yīng)變片組成橋式測量電路還是遠(yuǎn)遠(yuǎn)不夠的。由于彈性梁材料金相組織的不均勻性及熱處理工藝、應(yīng)變片性能及粘貼工藝、溫度變化等因素的影響,傳感器勢必產(chǎn)生一定的誤差。為了減少傳感器隨溫度變化產(chǎn)生的誤差,提高其精度和穩(wěn)定性,需要在橋路兩端和橋臂中串入一些補(bǔ)償元件。如:初始不平衡值的補(bǔ)償、零載輸出溫度補(bǔ)償、輸出靈敏度溫度補(bǔ)償?shù)取?
第二章 系統(tǒng)總體設(shè)計(jì)
2.1 電子秤設(shè)計(jì)的要求
1) 稱重范圍:不超過9.999Kg
2) 測量精度:≤ 0.005Kg
3) 顯示方式:LCD顯示所稱量的物品重量,同時(shí)還可顯示物品的名稱,數(shù)量,單價(jià),金額和所有物品的總金額。
4) 使用操作:鍵盤輸入數(shù)據(jù),操作簡單方便。
5) 特殊功能:具有去皮功能以及能將金額累加計(jì)算;當(dāng)物品重量超過電子秤量程,即過載情況或者是物品重量小于A/D轉(zhuǎn)換器所能轉(zhuǎn)換的最小精度,即欠量程的時(shí)候,具有超重報(bào)警功能。
2.2電子秤設(shè)計(jì)的基本思路
將電子秤大致能劃分為三大部分,數(shù)據(jù)采集模塊、控制器模塊和人機(jī)交互界面模塊。其中數(shù)據(jù)采集模塊由壓力傳感器、信號的前級處理和A/D轉(zhuǎn)換部分組成。轉(zhuǎn)換后的數(shù)字信號送給控制器處理,由控制器完成對該數(shù)字量的處理,驅(qū)動顯示模塊完成人機(jī)間的信息交換。此外添加了一個(gè)過載、欠量報(bào)警提示的特殊功能。
如圖2-1(上圖為本系統(tǒng)的設(shè)計(jì)圖)
2.3單片機(jī)的選型
AT89S52單片機(jī)是AT89S系列中的增強(qiáng)型高檔機(jī)產(chǎn)品,它片內(nèi)存儲器容量是AT89S51的一倍,即片內(nèi)8KB的Flash程序存儲器和256B的RAM。另外,它還增加了一個(gè)功能極強(qiáng)的、具有獨(dú)特應(yīng)用的16位定時(shí)/計(jì)數(shù)器2等多種功能。在工程應(yīng)用中AT89S52有一顯著的優(yōu)勢:不需要燒寫器,只借助PC 機(jī)的并口輸出和極為簡單的下載電路,便可將程序通過串行方式寫入單片機(jī)。并且下載電路可設(shè)計(jì)在系統(tǒng)中,可以隨時(shí)修改單片機(jī)的軟件而不對硬件做任何改動。
由此,通過對目前主流型號的比較,我們最終選擇了AT89S52通用的普通單片機(jī)來實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)。AT89S52是一種兼容MCS51微控制器,工作電壓4.0V到5.5V,全靜態(tài)時(shí)鐘0 Hz 到33 MHz,三級程序加密,32個(gè)可編程I/O口,2/3個(gè)16位定時(shí)/計(jì)數(shù)器,6/8個(gè)中斷源,全雙工串行通訊口,低功耗支持Idle和Power-down模式,Power down模式支持中斷喚醒, 看門狗定時(shí)器,雙數(shù)據(jù)指針,上電復(fù)位標(biāo)志。另外在外擴(kuò)展了32K數(shù)據(jù)存儲器,以滿足系統(tǒng)要求。
2.4 A/D轉(zhuǎn)換器介紹
A/D轉(zhuǎn)換器是一種能把輸入模擬電壓或電流-成與它成正比的數(shù)字量,也就是說能把被控對象的各種模擬信息變成計(jì)算機(jī)可以識別的數(shù)字信息。A/D轉(zhuǎn)換器種類較多,從原理上可分為四種:雙積分式A/D轉(zhuǎn)換器,逐次逼近式A/D轉(zhuǎn)換器、并行A/D轉(zhuǎn)換器、計(jì)數(shù)器式A/D轉(zhuǎn)換器及△-∑型A/D轉(zhuǎn)換器。在電子秤的設(shè)計(jì)中用的比較多的是雙積分式A/D轉(zhuǎn)換器和△-∑型A/D轉(zhuǎn)換器。
雙積分ADC的基本原理是對輸入模擬電壓和參考電壓分別進(jìn)行兩次積分,將輸入電壓平均值變成與之成正比的時(shí)間間隔,然后利用時(shí)鐘脈沖和計(jì)數(shù)器測出此時(shí)間間隔,進(jìn)而得到相應(yīng)的數(shù)字量輸出。如圖2-6所示是電子秤中常用的雙積分式A/D轉(zhuǎn)換電路,它由積分器、比較器、模擬電子開關(guān),積分電阻、積分電容、自動回零電阻、電容組成。其中VG是模擬地,VFR是基準(zhǔn)電壓(相對于VG為負(fù)值),VX是檢測電壓。
如圖2-6 雙積分A/D轉(zhuǎn)換電路
其次雙積分型A/D轉(zhuǎn)換器具有很強(qiáng)的抗干擾能力。對正負(fù)對稱的工頻干擾信號積分為零,所以對50HZ的工頻干擾抑制能力特強(qiáng),對高于工頻干擾(例如噪聲電壓)也具有良好的濾波作用。只要干擾電壓的平均值為零,對輸出就不產(chǎn)生影響。尤其對本系統(tǒng),緩慢變化的壓力信號,很容易受到工頻信號的影響。故而采用雙積分型A/D轉(zhuǎn)換器可大大降低對濾波電路的要求。
作為電子秤,系統(tǒng)對AD的轉(zhuǎn)換速度要求并不高,精度上14位的AD足以滿足要求。另外雙積分型A/D轉(zhuǎn)換器較強(qiáng)的抗干擾能力,和精確的差分輸入,低廉的價(jià)格。最終選擇了精度為10Kg/ 20000= 0.5g的ICL7135。
2.5鍵盤輸入
鍵盤輸入是人機(jī)交互界面中重要的組成部分,它是系統(tǒng)接受用戶指令的直接途徑。鍵盤是由若干個(gè)按鍵開關(guān)組成,鍵的多少根據(jù)單片機(jī)應(yīng)用系統(tǒng)的用途而定。鍵盤由許多鍵組成,每一個(gè)鍵相當(dāng)于一個(gè)機(jī)械開關(guān)觸點(diǎn),當(dāng)鍵按下時(shí),觸點(diǎn)閉合,當(dāng)鍵松開時(shí),觸點(diǎn)斷開。單片機(jī)接收到按鍵的觸點(diǎn)信號后作相應(yīng)的功能處理。因此,相對于單片機(jī)系統(tǒng)來說鍵盤接口信號是輸入信號。
ZLG7289是周立功單片機(jī)公司設(shè)計(jì)的串行輸入輸出可編程鍵盤顯示芯片,有強(qiáng)大的鍵盤顯示功能,支持64鍵控制,可以比較方便地?cái)U(kuò)展系統(tǒng)。另外ZLG7289內(nèi)部有譯碼電路,大大簡化了程序。最終選擇ZLG7289作為鍵盤掃描顯示芯片。
2.6輸出顯示
采用可以設(shè)置顯示單價(jià),金額,中文,購物日期等的LCD,它具有低功耗、可視面大、畫面友好及抗干擾能力強(qiáng)等功能,其顯示技術(shù)已得到廣泛應(yīng)用。
LCD 顯示器的工作原理:液晶顯示器的主要材料是液態(tài)晶體。它在特定的溫度范圍內(nèi),既具有液體的流動性,又具有晶體的某些光學(xué)特性,其透明度和顏色隨電場、磁場、光照度等外界條件變化而變化。因此,用液晶做成顯示器件,就可以把上訴外界條件的變化反映出來從而形成現(xiàn)實(shí)的效果。
雖然ZLG7289具有控制數(shù)碼管顯示的功能,但考慮到本題目要求中文顯示,數(shù)碼管無法滿足,只能考慮用帶有中文字庫的液晶顯示器。由于可以分頁顯示,無需太大屏幕,最終選擇點(diǎn)陣式128×64型LCD—OCM4x8C。
: 第三章 硬件設(shè)計(jì)與制作
3.1 AT89S52芯片
AT89S52單片機(jī)是ATMEL公司新近推出的高檔型AT89S系列單片機(jī)中的增強(qiáng)型產(chǎn)品。ATMEL公司是美國20世紀(jì)80年代中期成立并發(fā)展起來的半導(dǎo)體公司。該公司的技術(shù)優(yōu)勢在于推出Flash存儲器技術(shù)和高質(zhì)量、高可靠性的生產(chǎn)技術(shù),它率先將獨(dú)特的Flash存儲技術(shù)注入于單片機(jī)產(chǎn)品中。其推出的AT89系列單片機(jī),在世界電子技術(shù)行業(yè)中引起了極大的反響,在國內(nèi)也受到廣大用戶歡迎。
AT89S52是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含8k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器。器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu)。芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S52可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。
??? AT89S52具有如下特點(diǎn):40個(gè)引腳,8k Bytes Flash片內(nèi)程序存儲器,256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級2層中斷嵌套中斷,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。
此外,AT89S52設(shè)計(jì)和配置了振蕩頻率可為0Hz,并可通過軟件設(shè)置省電模式??臻e模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器、串行口、外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
主要功能特性見下表:
· 兼容MCS-51指令系統(tǒng)
· 8k可反復(fù)擦寫(>1000次)ISP Flash ROM
· 32個(gè)雙向I/O口
· 4.5-5.5V工作電壓
· 3個(gè)16位可編程定時(shí)/計(jì)數(shù)器
· 時(shí)鐘頻率0-33MHz
· 全雙工UART串行中斷口線
· 256x8bit內(nèi)部RAM
· 2個(gè)外部中斷源
· 低功耗空閑和省電模式
· 中斷喚醒省電模式
· 3級加密位
· 看門狗(WDT)電路
· 軟件設(shè)置空閑和省電功能
· 靈活的ISP字節(jié)和分頁編程
· 雙數(shù)據(jù)寄存器指針
如表3-1 AT89S52功能
引腳封裝如下圖所示:
如圖3-1 AT89S52的引腳圖
3.2主控電路的設(shè)計(jì)
P1口和P2.0~P2.6口作為地址總線,其中P1口作為低地址線和數(shù)據(jù)總線復(fù)用,P2.0~P2.6口做高地址線。P2.7作為62256的片選控制總線,ALE接鎖存器74LS373的使能端。P3.6和P3.7作為外部數(shù)據(jù)存儲器寫/讀選通信號輸出端分別接62256的/WE和/OE端。
主控電路圖如下:
如圖3-2 主控電路設(shè)計(jì)圖
3.3信號處理電路
以下為濾波放大電路圖:
如圖3-3 信號濾波放大圖
上圖中電容C5、C6用來濾除采樣信號電壓中的高頻噪聲,選用0.1uF的普通獨(dú)石電容;電容C7、C84用來濾除采樣信號電壓中的低頻噪聲,選用22uF的普通獨(dú)石電容。電阻R3、R4選用較小的阻值,因?yàn)椴蓸有盘栯妷褐抵挥泻练?,所以其阻值不宜太大,否則導(dǎo)致放大器由于輸入電流太小而放大效果不明顯。
微弱信號Vi1和Vi2被分別放大后從AD620的第6腳輸出。A/D轉(zhuǎn)換器ICL7135的輸入電壓變化范圍是-2V~+2V,傳感器的輸出電壓信號在0~20mv左右,因此放大器的放大倍數(shù)在200~300左右,可將R9接成1K的滑動變阻器。由于ICL7135對高頻干擾不敏感,所以濾波電路主要針對工頻及其低次諧波引入的干擾。因?yàn)閴毫π盘栕兓志徛詾V波電路可以把頻率做得很低。
圖中的LM741的輸出端與AD620的地端相連,LM741的2腳與6腳相連構(gòu)成電壓跟隨器,R15與正負(fù)電源相接,通過改變R15的阻值可使VO與 RET之間的壓差變化,從而實(shí)現(xiàn)調(diào)零、去皮的功能。
ICL7135與單片機(jī)的接口
在讀取A/D轉(zhuǎn)換后的結(jié)果時(shí),選用數(shù)據(jù)選擇器作為數(shù)據(jù)讀取的控制器,這樣簡化了ICL7135與單片機(jī)的接口電路,便于硬件設(shè)計(jì)與軟件編程的實(shí)現(xiàn)。
在ICL7135進(jìn)行A/D轉(zhuǎn)換結(jié)束后輸出的/STRB負(fù)脈沖引起AT89S52中斷。同時(shí)在第一個(gè)/STB負(fù)脈沖時(shí)由軟件將P1.7口置0,因而使S=0,使74LS157的Y
(1Y,2Y,3Y,4Y)=A(4A,3A,2A,1A)。AT89S52讀P1.0~P1.3口便讀得BCD碼,此時(shí)D5=1。此后, D4,D3,D2,D1輪流為“1”,即可讀得千位、百位、十位和個(gè)位的BCD碼。
前端信號處理電路設(shè)計(jì)如下圖:
如圖3-4 信號數(shù)模轉(zhuǎn)換圖
ICL7135的輸出時(shí)序圖:
如圖3-5 輸出時(shí)序圖
在A/D轉(zhuǎn)換結(jié)束后立即更新輸出鎖存器并不斷地掃描輸出BCD碼。在A/D轉(zhuǎn)換期間BUSY為低電平,轉(zhuǎn)換完畢后BUSY變?yōu)楦唠娖?。A/D轉(zhuǎn)換結(jié)束后立刻順序并連續(xù)不斷地輸出位驅(qū)動信號D5、D4、D3、D2、D1(均為正脈沖)。當(dāng)D5為高電平時(shí),B8、B4、B2、B1是萬位BCD碼。同樣當(dāng)D4為高電平時(shí),B8、B4、B2、B1是千位BCD碼。同理D3、D2、D1 為正脈沖時(shí)各對應(yīng)百、十、個(gè)位的BCD碼。在A/D轉(zhuǎn)換完畢后,還連續(xù)輸出5個(gè)/STB負(fù)脈沖,它們分別位于D5、D4、D3、D2、D1正脈沖的中間,脈沖寬度為T/2。
在設(shè)計(jì)時(shí),還考慮過使用另一種接口電路,它巧妙地運(yùn)用了ICL7135 地“Busy”端功能,只要一個(gè)I/O口和單片機(jī)內(nèi)部的一個(gè)定時(shí)器就可把ICL7135的數(shù)據(jù)送人單片機(jī),可以節(jié)省大量的單片機(jī)資源,減小系統(tǒng)的體積。原理如下:
“Busy”輸出端(ICL7135的21腳)高電平的寬度等于積分和反積分時(shí)間之和。ICL7135內(nèi)部規(guī)定積分時(shí)間固定為10001個(gè)時(shí)鐘脈沖時(shí)間,反積分時(shí)間長度與被測電壓的大小成比例。如果利用單片機(jī)內(nèi)部的計(jì)數(shù)器對ICL7135的時(shí)鐘脈沖計(jì)數(shù),利用"Busy"作為計(jì)數(shù)器門控信號,控制計(jì)數(shù)器只要在Busy為高電平時(shí)計(jì)數(shù),將這段Busy高電平時(shí)間內(nèi)計(jì)數(shù)器計(jì)的內(nèi)容減去10001,其余數(shù)等于被測電壓的數(shù)值。
3.3人機(jī)交互界面模塊設(shè)計(jì)
3.3.1鍵盤輸入控制電路
如表3-2 ZLG7289引腳說明
引 腳 號
名 稱
說 明
1,2
VDD
正電源
3,5
NC
懸空
4
VSS
接地
6
/CS
片選輸入端此引腳為低電平時(shí)可向芯片發(fā)送指令及讀取鍵盤數(shù)據(jù)
7
CLK
同步時(shí)鐘輸入端向芯片發(fā)送數(shù)據(jù)及讀取鍵盤數(shù)據(jù)時(shí)此引腳電平上升沿表示數(shù)據(jù)有效
8
DATA
串行數(shù)據(jù)輸入/輸出端當(dāng)芯片接收指令時(shí)此引腳為輸入端當(dāng)讀取鍵盤數(shù)據(jù)時(shí)此引腳在讀指令最后一個(gè)時(shí)鐘的下降沿變?yōu)檩敵龆?
9
/KEY
按鍵有效輸出端平時(shí)為高電平當(dāng)檢測到有效按鍵時(shí)此引腳變?yōu)榈碗娖?
10~16
SG~SA
段g~段a 驅(qū)動輸出
17
DP
小數(shù)點(diǎn)驅(qū)動輸出
18~25
DIG0~DIG7
數(shù)字0 數(shù)字7 驅(qū)動輸出
26
OSC2
振蕩器輸出端
27
OSC1
振蕩器輸入端
28
/RESET
復(fù)位端低電平有效
SPI串行接口工作方式介紹:
ZLG7289 采用串行方式與微處理器通訊,串行數(shù)據(jù)從DATA 引腳送入芯片,并由CLK 端同步。當(dāng)片選信號變?yōu)榈碗娖胶?,DATA 引腳上的數(shù)據(jù)在CLK 引腳的上升沿被寫入ZLG7289 的緩沖寄存器。
ZLG7289 的指令結(jié)構(gòu)有三種類型:
1、不帶數(shù)據(jù)的純指令,指令的寬度為8 個(gè)BIT 即微處理器需發(fā)送8個(gè)CLK 脈沖;
如圖3-6 純指令時(shí)序圖
2、帶有數(shù)據(jù)的指令寬度為16 個(gè)BIT 即微處理器需發(fā)送16 個(gè)CLK 脈沖;
如圖3-7 帶數(shù)據(jù)指令時(shí)序圖
3、讀取鍵盤數(shù)據(jù)指令寬度為16個(gè)BIT,前8個(gè)為微處理器發(fā)送到ZLG7289的指令,后8 個(gè)BIT為ZLG7289返回的鍵盤代碼,執(zhí)行此指令時(shí)ZLG7289的DATA端在第9個(gè)CLK 脈沖的上升沿變?yōu)檩敵鰻顟B(tài)并與第16個(gè)脈沖的下降沿恢復(fù)為輸入狀態(tài),等待接收下一個(gè)指令。
圖3-8 讀鍵盤指令時(shí)序圖
下圖為電路圖:
圖3-9 鍵盤接口圖
圖中P1.5口接/CS;P1.6口接CLK;P1.0口接DIO;P3.2口接/KEY,利用中斷0通知AT89S52讀數(shù)。
鍵盤控制芯片ZLG7289 控制鍵盤的掃描,當(dāng)監(jiān)測到有鍵按下后ZLG7289 的9腳便產(chǎn)生一個(gè)低電平通知單片機(jī),單片機(jī)可以采用查詢或者中斷方式將數(shù)據(jù)通過P3.0口以串行方式讀入。因?yàn)椴樵兎绞綍速M(fèi)大量的時(shí)間,所以本系統(tǒng)采用的是中斷方式。
2、 參數(shù)選擇參考如下
8只下拉電阻和8 只鍵盤連接位選線DIG0~DIG7 的8 只位選電阻應(yīng)遵從一定的比例關(guān)系,下拉電阻應(yīng)大于位選電阻的5 倍而小于其50 倍,典型值為10 倍,下拉電阻的取值范圍是10K~100K, 位選電阻的取值范圍是1K~10K。所以取上拉電阻為10K,下拉電阻為100K。
ZLG7289需要一外接晶體振蕩電路供系統(tǒng)工作,其典型值分別為F=16MHz C=15pF。實(shí)際使用時(shí)取F=12MHz,C=15pF。
3.3.2 LCD顯示電路
OCM4x8C是具有串/并接口,其內(nèi)部含有中文字庫的圖形點(diǎn)陣液晶顯示模塊。該模塊的控制/驅(qū)動器采用臺灣矽創(chuàng)電子公司的ST7920,因而具有較強(qiáng)的控制顯示功能。OCM4x8C的液晶顯示屏為128×64點(diǎn)陣,可顯示4行、每行8個(gè)漢字。為了便于簡單、方便地顯示漢字,該模塊具2Mb的中文字型CGROM,該字型ROM中含有8192個(gè)16×16點(diǎn)陣中文字庫;同時(shí),為了便于英文和其它常用字符的顯示,具有16Kb的16×8點(diǎn)陣的ASCII字符庫;為便于構(gòu)造用戶圖形,提供了一個(gè)64×256點(diǎn)陣的GDRAM繪圖區(qū)域,且為了便于構(gòu)造用戶所需字型,提供了4組16×16點(diǎn)陣的造字空間。利用上述功能,OCM4x8C可實(shí)現(xiàn)漢字、ASCII碼、點(diǎn)陣圖形、自造字體的同屏顯示。為便于和多種微處理器、單片機(jī)接口,模塊提供了4位并行、8位并行、2線串行、3線串行多種接口方式。
該模塊具有2.7V~5.5V的寬工作電壓范圍,且具有睡眠、正常及低功耗工作模式,可滿足系統(tǒng)各種工作電壓及便攜式儀器低功耗的要求。液晶模塊顯示負(fù)電壓,也由模塊提供,從而簡化了系統(tǒng)電源設(shè)計(jì)。模塊同時(shí)還提供LED背光顯示功能。除此之外,模塊還提供了畫面清除、游標(biāo)顯示/隱藏、游標(biāo)歸位、顯示打開/關(guān)閉、顯示字符閃爍、游標(biāo)移位、顯示移位、垂直畫面旋轉(zhuǎn)、反白顯示、液晶睡眠/喚醒、關(guān)閉顯示等操作指令。
如表3-3引腳功能說明
引 腳 號
名 稱
說 明
1
VSS
GND(0V)
2
VDD
邏輯電源(+5V)
3
V0
LCD電源(懸空)
4
RS(CS)
H:數(shù)據(jù),L:指令
5
R/W(SID)
H:讀,L:寫
6
E(SCLK)
使能
7
DB0
數(shù)據(jù)0
8
DB1
數(shù)據(jù)1
9
DB2
數(shù)據(jù)2
10
DB3
數(shù)據(jù)3
11
DB4
數(shù)據(jù)4
12
DB5
數(shù)據(jù)5
13
DB6
數(shù)據(jù)6
14
DB7
數(shù)據(jù)7
15
PSB
H:并行,L:串行
16
NC
空腳
17
RST
復(fù)位(低電平有效)
18
NC
空腳
19
LEDA
背光源正極(LED+5V)
20
LEDK
背光源負(fù)極(LED-0V)
電路圖中PSB接低電平,進(jìn)入串行接口模式;串行數(shù)據(jù)線SID接P3.1口;串行時(shí)鐘線SCLK接P1.6;RS固定接高電平。此為典型二線串行模式。
字符顯示RAM地址與字符顯示位置關(guān)系:
如表3-4 RAM地址與字符顯示位置關(guān)系
80H
81H
82H
83H
84H
85H
86H
87H
90H
91H
92H
93H
94H
95H
96H
97H
88H
89H
8AH
8BH
8CH
8DH
8EH
8FH
98H
99H
9AH
9BH
9CH
9DH
9EH
9FH
2/3線串行接口方式:
當(dāng)模塊的PSB腳接低電平時(shí),模塊即進(jìn)入串行接口模式。串行模式使用串行數(shù)據(jù)線SID與串行時(shí)鐘線SCLK來傳送數(shù)據(jù),即構(gòu)成2線串行模式。
OCM4x8C還允許同時(shí)接入多個(gè)液晶顯示模塊以完成多路信息顯示功能。此時(shí),要利用片選端“CS”構(gòu)成3線串行接口方式,當(dāng)“CS”接高電位時(shí),模塊可正常接收并顯示數(shù)據(jù),否則模塊顯示將被禁止。通常情況下,當(dāng)系統(tǒng)僅使用一個(gè)液晶顯示模塊時(shí),“CS”可連接固定的高電平。
模塊2線串行工作操作時(shí)序如下圖所示:
如圖3-10 2線串行時(shí)序圖
由圖3.12可以看出,單片機(jī)與液晶模塊之間傳送1字節(jié)的數(shù)據(jù)共需24個(gè)時(shí)鐘脈沖。首先,單片機(jī)要給出數(shù)據(jù)傳輸起始位,這里是以5個(gè)連續(xù)的“1”作數(shù)據(jù)起始位,如模塊接收到連續(xù)的5個(gè)“1”,則內(nèi)部傳輸被重置并且串行傳輸將被同步。緊接著,“RW”位用于選擇數(shù)據(jù)的傳輸方向(讀或?qū)懀癛S”位用于選擇內(nèi)部數(shù)據(jù)寄存器或指令寄存器,最后的第8位固定為“0”。在接收到起始位及“RW”和“RW”的第1個(gè)字節(jié)后,下一個(gè)字節(jié)的數(shù)據(jù)或指令將被分為2個(gè)字節(jié)來串行傳送或接收。數(shù)據(jù)或指令的高4位,被放在第2個(gè)字節(jié)串行數(shù)據(jù)的高4位,其低4位則置為“0”;數(shù)據(jù)或指令的低4位被放在第3個(gè)字節(jié)的高4位,其低4位也置為“0”,如此完成一個(gè)字節(jié)指令或數(shù)據(jù)的傳送。需要注意的是,當(dāng)有多個(gè)數(shù)據(jù)或指令要傳送時(shí),必須要等到一個(gè)指令完成執(zhí)行完畢后再傳送下一個(gè)指令或數(shù)據(jù),否則,會造成指令或數(shù)據(jù)的丟失。這是因?yàn)橐壕K內(nèi)部沒有發(fā)送/接收緩沖區(qū)。
3.4報(bào)警電路的設(shè)計(jì)
下圖為系統(tǒng)報(bào)警電路原理圖,用于超載和欠量程提示。系統(tǒng)設(shè)計(jì)了兩個(gè)發(fā)光二極管作為超載和欠量程指示燈,使系統(tǒng)更加完善。當(dāng)系統(tǒng)判斷為超載或欠量程時(shí),ICL7135給輸出一個(gè)高電平信號OR(超載)或UR(欠量程),經(jīng)非門后形成低電平從而驅(qū)動發(fā)光二極管發(fā)光提示。
如圖3-11? 報(bào)警電路原理圖
第四章 軟件設(shè)計(jì)
軟件流程圖及程序設(shè)計(jì)
為了方便程序調(diào)試和提高可靠性,程序設(shè)計(jì)采用自上而下、模塊化、結(jié)構(gòu)化的程序設(shè)計(jì)方法,把總的編程過程逐步細(xì)分,分解成一個(gè)個(gè)功能模塊,每個(gè)功能模塊相互獨(dú)立,每個(gè)模塊都能完成一個(gè)明確的任務(wù),實(shí)現(xiàn)某個(gè)具體的功能。本設(shè)計(jì)按任務(wù)模塊劃分的程序主要有初始化程序、主程序, A/D轉(zhuǎn)換子程序、顯示子程序、鍵盤處理子程序。
4.1初始化程序設(shè)計(jì)流程圖
單片機(jī)系統(tǒng)上電后,進(jìn)入初始化程序,完成單片機(jī)片內(nèi)各模塊的設(shè)置和A/D轉(zhuǎn)換器的功能設(shè)置初始化,然后進(jìn)入主程序。
如圖 4-1 初始化程序設(shè)計(jì)流程圖
4.2主程序設(shè)計(jì)流程圖
單片機(jī)完成初始化程序后進(jìn)入主程序,主程序主要完成對存儲參數(shù)的讀取,對檢測到的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,鍵處理,顯示處理等。
如圖4-2 主程序設(shè)計(jì)流程圖
4.2 主程序設(shè)計(jì)及其相關(guān)程序設(shè)計(jì)
4.2.1程序清單
uint max_weight;//最大稱量
uchar dsel;//分度值
uchar dp;//小數(shù)點(diǎn)
float beilv;//倍率
ulong zero_save;//傳感器零位值
}bdf;
uint code num_ten[4]={1,10,100,1000};
uchar code adcount2[4]={2,4,5};//數(shù)據(jù)處理進(jìn)平均次數(shù)
uchar code tab_dsel[4]={1,2,5,10};//分度值表
//0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
uchar code tab[]={0xB7,0x03,0xD6,0xC7,0x63,0xE5,0xF5,0x83,0xF7,0xE7,
//A , b , C , d , E , F , 暗, - , t , P
0xF3,0x75,0xB4,0x57,0xF4,0xF0,0x00,0x40,0x74,0xF2,
//H , L , o , J , r , n , U, =, - i
0x73,0x34,0x55,0x07,0x50,0x51,0x37,0x44,0x04,0x01};
//顯示位碼表
//0, 1, 2, 3, 4, 5, 6
uchar code digit[]={0xfe,0xdf,0xef,0xfd,0xfb,0xbf,0xF7};//顯示位碼表
sbit P_OE =P2^1;//顯示控制
sbit P_LE =P2^0;
sbit buz0 =P3^6;//蜂鳴器
sbit buz1 =P3^7;
/******************************************************/
bit b_follow;//啟動零位跟蹤標(biāo)記
bit b_serial;//串口發(fā)送完標(biāo)記
bit b_followdelay;//第一次不進(jìn)行零位跟蹤
bit b_steady;//穩(wěn)定標(biāo)記
/******************************************************/
void (* data task)(void);//函數(shù)指針變量,接受下一步要做的任務(wù)
uint idata fendushu;//分度數(shù)
uchar weight_led[6] ;//重量窗顯示緩存
uchar idata temp_var;
uchar weight_dp;//小數(shù)點(diǎn)位數(shù)
uchar fu_number;//負(fù)號顯示位置
uchar wdcount;//穩(wěn)定計(jì)數(shù)
uchar adup_count;//異常值計(jì)數(shù)
uchar addcount3;//累加次數(shù)
/******************************************************/
extern void key_scan(void);//按鍵掃描
extern void weight_disp(void);//重量計(jì)算,超載報(bào)警
extern void start_set(void);//單片機(jī)初始化設(shè)置
extern void adc (void);//讀取AD值
extern void ad_processor(void);//AD數(shù)據(jù)濾波處理
extern void fun_weight(void);//正常稱重狀態(tài)
extern void bd_start(void);//重量或電壓標(biāo)定選擇
extern void dy_disp(void);//電壓顯示
extern void led_disp(ulong temp,uchar num);
extern uchar get_jiaoyan(uchar *address,uchar num);//計(jì)算校驗(yàn)字
extern void neima(void);
void delay60ms(uchar time);//40ms延時(shí)
void fendu_val(void);//分度數(shù)運(yùn)算
void check_canshu(void);//讀參數(shù),并校驗(yàn)是否正確
void ver_disp(void);//顯示版本號
void seg_check(void);//筆畫檢測
/******************************************/
void main (void)
{
start_set(); //單片機(jī)初始化
beep_time=3; //開機(jī)鳴叫
flash_num=6; //沒有閃爍位
spi_sys(); //ad芯片初始化
check_canshu(); //讀參數(shù),并校驗(yàn)是否正確
if(bdf.shuduval>2) //若是異常值,用默認(rèn)值
bdf.shuduval=1;
addcount3=4;
bdf_dp_temp=bdf.dp; //保存小數(shù)點(diǎn)(標(biāo)定修改參數(shù)時(shí)用)
bdf_dsel_temp=bdf.dsel;//保存分度值(標(biāo)定修改參數(shù)時(shí)用)
key_scan(); //標(biāo)定按鍵掃描
switch(key_temp) //功能鍵處理函數(shù)
{
case 0xc0:b_biaoding=1;task=bd_start ; break;//
default:
bdf.dp=0;
ver_disp();//顯示版本號
seg_check();//筆畫檢測
fendu_val();//分度數(shù)運(yùn)算
zero_current=ad_steady;//保存當(dāng)前零位值
task=fun_weight;
break;
}
do
{ //主循環(huán)程序
adc(); //A/D采樣
ad_processor();//數(shù)據(jù)處理
zero_follow(); //零位跟蹤程序
neima(); //內(nèi)碼計(jì)算
weight_disp(); //重量顯示
key_scan(); //按鍵掃描
(* task)(); //任務(wù)切換函數(shù)
}
while(1);
}
/*****************************************************************/
void fendu_val(void)//分度數(shù)運(yùn)算
{ uchar i;
ulong temp;
temp=(ulong)bdf.max_weight*num_ten[bdf_dp_temp];
fendushu=temp/bdf.dsel;
i=fendushu/3000;
if (i==0)
i=1;
half_sel_bound=5/bdf.beilv;//半個(gè)分度的原始碼
follow_bound=i*half_sel_bound;//計(jì)算零位跟蹤時(shí)的原始碼,按3000分度
time_weight=200;
}
/*****************************************************************/
void ver_disp(void)//顯示版本號及最大量程
{
weight_led[0]=7;// 7
weight_led[1]=1;// 1
weight_led[2]=2;// 2
weight_led[3]=17;// -
weight_led[4]=0;// 0
weight_led[5]=5;// 5
fun_led=0xff;
delay60ms(15);//40ms延時(shí)
beep_time=3;
led_disp(bdf.max_weight,5);//顯示最大量程
weight_led[0]=15;// F
delay60ms(20);//40ms延時(shí)
4.2信號采樣與A/D轉(zhuǎn)換子程序的設(shè)計(jì)
如圖 4-3 信號采樣與A/D轉(zhuǎn)換子程序的設(shè)計(jì)
extern uchar code adcount2[3];
extern bit bAd;//已產(chǎn)生AD值
extern bit b_warnled;
extern bit b_steady;
extern bit b_up_last;
extern uchar adup_count;
extern ulong idata ad_steady;//AD數(shù)據(jù)處理后的穩(wěn)定值
extern uchar add_count;//AD累加計(jì)數(shù)器
extern ulong idata add_val;//AD累加值
extern uchar wdcount;
extern uchar adup_count;//AD異常值計(jì)數(shù)
extern uchar addcount3;
extern ulong idata up_val;
extern ulong idata adval;//AD芯片采樣值
extern ulong idata lvbo[6];
extern uchar idata follow_time;//零位跟蹤時(shí)間
extern uchar idata time_weight;//重量為0時(shí),消隱時(shí)間
void time(void);
ulong buf_left(ulong temp);
/*******************************************/
//
void ad_processor(void)
{ ulong temp1;
ulong temp2;
uchar i;
bit b_up;
if(bAd)
{
bAd=0;
time();//時(shí)間計(jì)數(shù)器自減
//--------------------------------------------------------
adval=adval>>4;
add_val=add_val+adval;//傳感器累加濾波
add_count++;
if(add_count
>16)+1;
4.3 鍵盤/顯示子程序設(shè)計(jì)
如圖 4-4 鍵盤/顯示子程序設(shè)計(jì)
如圖 4-5 按鍵掃描流程圖
程序清單
extern bit b_keyok;//有按鍵產(chǎn)生標(biāo)記
extern bit b_longdown;//長按下標(biāo)記
extern uchar key_num;//鍵值
extern uchar key_temp;//臨時(shí)鍵值
extern uchar key_count;//鍵長按計(jì)數(shù)
extern uchar key_dly;//鍵去抖動延時(shí)
extern uchar beep_time;//蜂鳴時(shí)間
void key_scan1();////按鍵松開或沒有按下處理
/****************************************************/
oid disp_t1(void) interrupt 3 using 1//顯示中斷程序
{
uchar temp;
TR1 =0;
P_OE=1;//高阻態(tài),禁止輸出
if((disp_number==(5-bdf.dp))&(bdf.dp!=0))//這一位是否有小數(shù)點(diǎn)
temp=0x08;//小數(shù)點(diǎn)段碼
else
temp=0;
if(disp_number==6)//指示燈顯示不用查表
P0=fun_led;//
else
{
if((disp_number==fu_number)&&b_fuhao)
temp=temp|0x40;
if((disp_number==flash_num)&b_flash)//是否有閃爍位
P0=0x0;
else
P0=tab[weight_led[disp_number]]|temp;//查表取段碼
}
P_LE=1;
P_LE=0;//573鎖存段碼
P0=digit[disp_number];//送位碼
P_OE=0;//573輸出有效
disp_number++;
if(disp_number==7)//是否顯示最后一位
{
disp_number=0;
if(beep_time)//是否要鳴叫
{
if(!TR0)
{buz0=~buz1;TR0 =1;}
beep_time--;
}
else
{TR0=0;buz0=1;buz1=1;}//不鳴叫時(shí)置高,減小電流
if(key_dly)//按鍵去抖動延時(shí)
key_dly--;
if(flash_num<6)
{
if(flash_time)//閃爍計(jì)時(shí)
flash_time--;
else
{ b_flash=!b_flash;flash_time=20;}//時(shí)間到,置閃爍標(biāo)記
}
}
TH1 =0xf8;
TL1 =0x18;
TR1 =1 ;
}
參 考 文 獻(xiàn)
1、 馬心凱.基于FPGA的實(shí)用電子秤[J],低壓電器,2006
2、 康華光.電子技術(shù)基礎(chǔ)[M].模擬部分.高等教育出版社,1998
3、 于敬芬.基于AT89S52和TLC0834的數(shù)據(jù)采集系統(tǒng)[J].中國水運(yùn)(學(xué)術(shù)版),2006
4、 王幸之.AT89系列單片機(jī)原理及接口技術(shù)[M].北京航天航空出版社,2006
5、 康華光.電子技術(shù)基礎(chǔ)[M].?dāng)?shù)字部分.高等教育出版社,1998
6、 王素珍,鄭淑芬,周梅.稱重配料系統(tǒng)傳感器電源及放大電路[J].傳感器技術(shù),2006
7、 周立功.單片機(jī)ZLG7289B串行接口LED數(shù)碼管及鍵盤管理器件數(shù)據(jù)手冊
8、 胡漢才.單片機(jī)原理及系統(tǒng)設(shè)計(jì)[M].清華大學(xué)出版社,2002
9、 王福瑞.集成電路器件大全[M].北京航天航空出版社,1999
10、夏路易.電路原理圖與電路板設(shè)計(jì)教程Protel99se[M].北京希望電子出版社,2002
11、Theodore Wildi.Electrical machine,and power system[M],2002
附錄A:原理圖
27