【正文】
life. The application of weighing apparatus has already spread to national economy in all areas , and have got singnificant economic benefits. In recent years, with the rapid development of electronic technology, the steelyard has bee more and more difficult to meet people daily life demand , so the application of electronic scales have bee more and more important. This paper mainly introduced some of the basic construction principle and function of the electronic scales . This design use AT89C51 singlechip microputer as the control chip . Attached with sensor circuit , regulate amplifier circuit, A/D conversion circuit, keyboard circuit and display circuit. Then use the programming language and 4x4 matrix keyboard for controlling. AT last ,we use LCD monitor to display the result. This system can realize the basic weighing displaying , unit price input, and total amount. When put things on the electronic scales (the sensor being stressed),if you put in the unit price, the system will automatically calculate the total value of the goods. Key words: Electronic scales ,Singlechip microputer,AT89C51,LCD 目 錄 第 1 章 緒論 論文題目:基于單片機(jī)的電子秤設(shè)計(jì) 基于單片機(jī)的電子秤設(shè)計(jì) 姓名:張延海 專業(yè):電氣工程及其自動(dòng)化 指導(dǎo)老師:馬惠蘭 摘 要 衡器是我們?nèi)粘I钪胁豢扇鄙俚闹匾獌x器,衡器的發(fā)展是關(guān)系國計(jì)民生關(guān)鍵之一。 10 顯示模塊 13 控制器 13 A/D 轉(zhuǎn)換 在電子技術(shù)飛速發(fā)展的帶動(dòng)下,電子秤應(yīng)運(yùn)而生,極大地方便了人們的需求。作為人們生活中不可缺少的一部分,電子秤的發(fā)展也2 十分重要。 ( 4)當(dāng)按下“清零”鍵時(shí),單價(jià)自動(dòng)清零,可以 重新輸入。數(shù) 據(jù)顯示部分 根據(jù)需要實(shí)現(xiàn)顯示功能,如單價(jià)和總金額等 。 調(diào)理放大模塊 經(jīng)由傳感器敏感元件轉(zhuǎn)換后輸出的信號(hào)一般電平較低,經(jīng)由電橋變換后的信號(hào)也難以直接用來顯示、記錄、控制或信號(hào)轉(zhuǎn)換。 模 /數(shù)轉(zhuǎn)換模塊 本設(shè)計(jì)采用 ADC0832模 /數(shù)轉(zhuǎn)換器,將放大后的信號(hào)轉(zhuǎn)化為數(shù)字量送給單片機(jī),然后由 LCD液晶顯示器顯示出來,即為所稱物體的重量。 工作頻率為 250KHZ,轉(zhuǎn)換時(shí)間為 32μS ; CS_ 片選使能,低電平芯片使能。 DI 數(shù)據(jù)信號(hào)輸入,選擇通道控制。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在 0~5V 之間。 采用矩陣式鍵盤作為輸入電路,其特點(diǎn):電路和軟件稍復(fù)雜,但相比之下,當(dāng)按鍵 數(shù)越多時(shí)越節(jié)約 I/O口,節(jié)約了資源。 圖 28 4 位數(shù)碼管靜態(tài)顯示 方案二:采用 LED 數(shù)碼管動(dòng)態(tài)顯示。 傳感器 本設(shè)計(jì)采用 MOTOROLA 公司的 MPX4250 系列傳感器, MPX4250 傳感器產(chǎn)生的信號(hào)可以直接送給 ADC0832A/D 轉(zhuǎn)換器進(jìn)行模 /數(shù)轉(zhuǎn)換, MPX4250將接收到的壓力信號(hào)和電壓信號(hào)送給 A/D轉(zhuǎn)換器的模擬量輸入通道 CH0,經(jīng)過處理的信號(hào)就 可以送給單片機(jī)了。 鍵盤包括數(shù)字鍵( 0~ 9)和清零鍵。 LM016L 與單片機(jī)的接口電路如圖 36 所示。 其程序流程圖如圖 37所示: 18 圖 37 單價(jià)顯示程序流程圖 重量顯示程序設(shè)計(jì) MPX4250產(chǎn)生的信號(hào)送給 ADC0832進(jìn)行模數(shù)轉(zhuǎn)換,然后通過單片機(jī)的串行輸出口和外部中斷接口,控制顯示在 LCD液晶顯示器上。 22 仿真 打開 Proteus仿真軟件,將搭建好的仿真模塊打開,然后鼠標(biāo)左鍵雙擊單片機(jī),在彈出的 對(duì)話框中加載調(diào)試程序時(shí)生成的“ .hex”文件,然后運(yùn)行,即可實(shí)現(xiàn)簡(jiǎn)易的電子秤。有同學(xué)建議我換一個(gè) A/D轉(zhuǎn)換器,于是我嘗試了ADC0804和 ADC0832,最終發(fā)現(xiàn) ADC0832能很好地滿足本次設(shè)計(jì)的目的。在設(shè)計(jì)過程中由于 所學(xué) 知識(shí)的欠缺而導(dǎo)致設(shè)計(jì)無法快速的完成 。出現(xiàn)問題后,我首先是努力去尋找問題的所在,然后用自己所掌握的知識(shí)去試著分析問題,盡可能地通過查閱資料來獨(dú)立解決問題。 //LCD 使能信號(hào) sbit lcdrs=P3^5。 uchar code tab0[]=p:。i) for(j=50。 _nop_()。 28 CLK = 1。DIO = 1。i8。 } /* for(i=0。 _nop_()。 //LCD 使能端置高電平 delay(5)。 //LCD 使能端拉低電平 } //**********LCD 初始化函數(shù)開始 ********* void lcd_init() { 29 lcden=0。 if(n4) n++。 30 if(n4) n++。 if(n4) n++。 write_(0x80)。 for(i=0。i4。)。 break。0xf0。 break。0xf0。 break。0xf0。 break。 } } } } //**********LCD 顯示函數(shù)開始 *********** void lcd_disp() { uchar a,i=0。 for(i=0。 write_data(weight%100/10+39。039。 write_data(money/100%10+39。)。)。039。039。 } if(money99amp。 write_data(money%10+39。 write_data(money/10%10+39。 write_(1)。 write_(0x89)。 for(i=0。$39。在設(shè)計(jì)過程中,遇到我難以解決的問題,馬老師總能給予我?guī)椭睦蠋熌抢镂覍W(xué)到的不僅是專業(yè)知識(shí)與實(shí)際問題科學(xué)解決的方法,更為重要的是勤奮和嚴(yán)謹(jǐn)治學(xué)的精神以及對(duì)學(xué)生的認(rèn)真負(fù)責(zé),老師的諄諄教誨使我受益匪淺,在此向馬慧蘭老師表示衷心的感謝并致以崇高的敬意!感謝在本次設(shè)計(jì)過程中任前山同學(xué)在程序方面所給予的幫助。 while(1) { key_scan()。i++) { write_data(tab2[i])。i2。 for(i=0。)。)。money1000) { write_data(money/100+39。 write_data(money/10%10+39。 } if(money999amp。039。amp。)。 write_data(money/10000%10+39。)。i++) { a=tab_key[i]。 if(n==2) money1=tab_key[0]*10+tab_key[1]。 break。 temp=P2。 break。 temp=P2。 break。 temp=P2。 break。 temp=P2。 } write_data(0+39。i++) { 31 write_data(tab1[i])。i2。 n=0。 if(n4) n++。 if(n4) n++。 //設(shè)置顯示模式 :16X2,5X7,8 位數(shù)據(jù)接口 write_(0x0c)。 //LCD 使能端拉低電平 } //**********寫數(shù)據(jù)函數(shù)開始 ************ void write_data(uchar dat) { lcdrs=1。 // return (dat1 == dat2)