基于AT89C51的數(shù)字電子秤設(shè)計(jì)_第1頁
基于AT89C51的數(shù)字電子秤設(shè)計(jì)_第2頁
基于AT89C51的數(shù)字電子秤設(shè)計(jì)_第3頁
基于AT89C51的數(shù)字電子秤設(shè)計(jì)_第4頁
基于AT89C51的數(shù)字電子秤設(shè)計(jì)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 成 績 評 定 表學(xué)生姓名XXX班級學(xué)號xxxxxxxxx專 業(yè)測控課程設(shè)計(jì)題目基于AT89C51的數(shù)字電子秤設(shè)計(jì)評語組長簽字:成績?nèi)掌?2014年 7月7日課程設(shè)計(jì)任務(wù)書學(xué) 院信息科學(xué)與工程專 業(yè)測控技術(shù)與儀器學(xué)生姓名XXX班級學(xué)號xxxxxxxxx課程設(shè)計(jì)題目基于AT89C51的數(shù)字電子秤設(shè)計(jì)實(shí)踐教學(xué)要求與任務(wù):電子測量技術(shù)是測控技術(shù)與儀器專業(yè)的專業(yè)基礎(chǔ)課。本設(shè)計(jì)是對該課程綜合應(yīng)用能力的檢驗(yàn),在鼓勵(lì)學(xué)生熟悉基本原理的前提下,注重與實(shí)際應(yīng)用相聯(lián)系,提出自己的方案,完善設(shè)計(jì)。1、熟悉被測對象的測量技術(shù)工作原理; 2、提出可行設(shè)計(jì)方案;3、根據(jù)方案設(shè)計(jì)硬件電路,應(yīng)用Protel繪制電路原理圖;

2、4、軟件編程并調(diào)試;5、硬件焊接與調(diào)試;6、完成課程設(shè)計(jì)報(bào)告。工作計(jì)劃與進(jìn)度安排:第18周(6月23日-6月27日):布置設(shè)計(jì)任務(wù),查資料,完成總體設(shè)計(jì)框架。第19周(6月30日-7月4日):完善設(shè)計(jì)內(nèi)容,焊接調(diào)試,驗(yàn)收答辯。指導(dǎo)教師: 2014 年 6月20日專業(yè)負(fù)責(zé)人:2014 年6月21日學(xué)院教學(xué)副院長:2014 年6月23日目 錄1、設(shè)計(jì)的主要內(nèi)容和要求42、整體設(shè)計(jì)方案42.1設(shè)計(jì)方案42.2工作原理43設(shè)計(jì)原理及電路圖53.1硬件電路的設(shè)計(jì)53.2軟件設(shè)計(jì)63.2.1主程序設(shè)計(jì)63.2.2 1602型led液晶顯示屏驅(qū)動(dòng)程序83.2.3 ADC0808采樣程序93.2.4 4*4鍵

3、盤程序94元器件清單105元器件識別與檢測116硬件制作、軟件編程與調(diào)試116.1硬件制作與調(diào)試116.2軟件編程與調(diào)試117系統(tǒng)仿真128設(shè)計(jì)總結(jié)159參考文獻(xiàn)15附錄A17 -29-基于AT89C51的數(shù)字電子秤的設(shè)計(jì)1、設(shè)計(jì)的主要內(nèi)容和要求 本文主要完成一個(gè)簡單實(shí)用數(shù)字電子秤的硬件電路部分和軟件部分的設(shè)計(jì)。在設(shè)計(jì)的過程學(xué)會使用單片機(jī)對數(shù)字電子秤的各種功能進(jìn)行控制。本設(shè)計(jì)中的數(shù)字電子秤要求能夠顯示商品的名稱、價(jià)格、總量、總價(jià)等;能夠自動(dòng)完成商品的價(jià)格計(jì)算;能夠儲存幾種簡單商品的價(jià)格;能夠具有超重提醒功能,一旦重量超出了自身重量的測量的范圍,發(fā)出警報(bào);同時(shí)對數(shù)字電子秤的測量范圍要達(dá)到5KG,

4、測量精度要求達(dá)到0.001。 2、整體設(shè)計(jì)方案2.1設(shè)計(jì)方案整個(gè)數(shù)字電子秤電路由電源電路、單片機(jī)主控制電路、1602型led液晶顯示屏、蜂鳴器報(bào)警電路、4*4鍵盤電路和壓力傳感電路(ADC0832采樣)6個(gè)部分組成。如圖3.1所示。2.2工作原理打開電源開關(guān),數(shù)字電子秤開始工作。接通電源時(shí),數(shù)字電子秤進(jìn)入歡迎界面“歡迎使用電子秤 設(shè)計(jì)······”。此時(shí)數(shù)字電子秤上MCU開始工作,鍵盤不斷進(jìn)行掃描,同時(shí) 通過ADC0808也不斷進(jìn)行外部稱量數(shù)據(jù)采樣,LCD上顯示“實(shí)用電子秤 名稱 單價(jià)····&

5、#183;·”。當(dāng)載物臺上放有物體時(shí),ADC0808立即將數(shù)據(jù)收集送給單片機(jī)處理。此時(shí)工作人員只要輸入對應(yīng)商品的代碼編號,在240*128的LCD上可以看到相應(yīng)商品的名稱,單價(jià),總重,總價(jià)格等信息。在稱量的過程中,一旦物體自身的重量超出電子秤的稱量范圍,蜂鳴器立即會發(fā)出“滴滴····”警報(bào)聲告訴工作人員,所稱量物品超重。圖2.1 整體設(shè)計(jì)方框圖3設(shè)計(jì)原理及電路圖3.1硬件電路的設(shè)計(jì)數(shù)字電子秤采用AT89C51單片機(jī)作為微處理器,接口電路由晶振、1602型led液晶顯示屏、4*4按鍵電路、ADC0808電路、報(bào)警電路、存儲器等組成??刂破飨到y(tǒng)的硬

6、件電路原理圖如圖3.1所示。控制器系統(tǒng)硬件電路的工作過程是:打開電源時(shí),MCU及各個(gè)部分電路開始工作,MCU調(diào)用內(nèi)部存儲數(shù)據(jù)對各部分接口電路初始化。200ms后1602型led液晶顯示屏進(jìn)入歡迎界面,ADC0808不斷對外部數(shù)據(jù)進(jìn)行采樣交給MCU進(jìn)行處理,一旦有物品放入載物臺,ADC0808立即發(fā)送中斷請求,并將本次采集數(shù)據(jù)交給MCU處理,之后1602型led液晶顯示屏顯示相應(yīng)數(shù)據(jù)量。在此過程中,鍵盤也在不斷進(jìn)行掃描,一旦有鍵按下,單片機(jī)也會對其數(shù)據(jù)進(jìn)行相應(yīng)處理,然后將對1602型led液晶顯示屏進(jìn)行寫操作。圖3.1 數(shù)字電子秤硬件電路圖3.2軟件設(shè)計(jì)本設(shè)計(jì)中的程序由主控制程序、1602型le

7、d液晶顯示屏驅(qū)動(dòng)程序、ADC0808采樣程序和4*4鍵盤程序組成。3.2.1主程序設(shè)計(jì)整個(gè)設(shè)計(jì)中采用由下向上的設(shè)計(jì)思路。主程序中主要完成對1602型led液晶顯示屏、ADC0808、及鍵盤掃描程序的調(diào)用。在編寫程序的過程中,各變量統(tǒng)一采用全局變量方式命名,同時(shí)考慮到電子秤對精度的要求,本設(shè)計(jì)中的價(jià)格及總量相關(guān)的變量全部采用浮點(diǎn)數(shù)。主程序流程圖如圖3.2所示。開始MCU初始化,1602型顯示器進(jìn)入歡迎界面,adc0808初始化.載物臺有物體不 N Y NMCU儲存ADC0808采樣值是否輸入商品代碼按鍵 NMCU執(zhí)行計(jì)算,并將結(jié)果送入1602顯示 Y測量結(jié)束按鍵是否按下 Y結(jié)束圖3.2主程序流程

8、圖 3.2.2 1602型led液晶顯示屏驅(qū)動(dòng)程序 圖3.31602型led液晶顯示屏驅(qū)動(dòng)程序流程圖1602型led液晶顯示屏能夠顯示比較復(fù)雜的漢字和圖形,首先必須對其寫入控制操作字,包括圖形的顯示方式,字體的模式。然后寫入初始行地址,指針自動(dòng)左移,直到寫完全部數(shù)據(jù)為止。 write_data(place&0xff); /寫入地址高位 write_data(place/256); /寫入地址低位 write_com(0x24); /地址設(shè)置 write_com(0xb0); /設(shè)置數(shù)據(jù)自動(dòng)寫 write_data(ASC_MSK(c1-0x20)*16+k); /*-例如:0的ASCI

9、I碼為0x30, 在ASC_MSK中的位置為0x10*16 -16字節(jié)字碼依次寫入LCD-*/ write_com(0xb2); /自動(dòng)復(fù)位 place=place+30;3.2.3 ADC0808采樣程序 圖3.4ADC0808采樣程序程序流程圖MCU通過拉低CS、拉高CLK來啟動(dòng)ADC0808進(jìn)行外部壓力傳感轉(zhuǎn)換后的電壓信號進(jìn)行采樣,每產(chǎn)生8個(gè)CLK脈沖,DATA獲得一位完整的8bit數(shù)據(jù),此時(shí)MCU發(fā)送中斷請求,拉高CS,拉低CLK,并將數(shù)據(jù)DAT返回。3.2.4 4*4鍵盤程序圖3.5 4*4鍵盤程序本設(shè)計(jì)中采用了4*4矩陣式鍵盤,單片機(jī)定時(shí)進(jìn)行查詢。首先單片機(jī)發(fā)送行掃描代碼,然后進(jìn)行

10、列掃描,當(dāng)發(fā)現(xiàn)某一列出現(xiàn)了低電平時(shí),即返回相應(yīng)的鍵盤值。若沒有發(fā)現(xiàn)則說明當(dāng)前行沒有鍵按下,行掃描右移一位,繼續(xù)執(zhí)行列掃描。MCU根據(jù)相應(yīng)的鍵值,即可確定被按下的鍵。4元器件清單元件序號型號主要參數(shù)數(shù)量備注單片機(jī)AT89c51低電壓,高性能cmos8位單片機(jī)1液晶顯示器1602型顯示兩行,每行16個(gè)字符液晶模塊1模數(shù)轉(zhuǎn)換器ADC0808分辨率為8位的、逐次逼近原理1鍵盤4×4型-1按鍵開關(guān)-1排線8排-3導(dǎo)線-若干5元器件識別與檢測電阻(1K)識別由電阻上的色環(huán)判斷。檢測通過萬用表,將其調(diào)制歐姆檔,紅黑表筆分別連接電阻兩端檢測數(shù)值。單片機(jī)(AT89C51)識別由芯片上標(biāo)注的型號判斷。模

11、數(shù)轉(zhuǎn)換器(ADC0808)識別有芯片上標(biāo)注的型號判斷。6硬件制作、軟件編程與調(diào)試6.1硬件制作與調(diào)試在焊接過程中出現(xiàn)需要大范圍的連續(xù)使用導(dǎo)線進(jìn)行焊接電子元器件。解決方法:使用插如一排導(dǎo)體與芯片進(jìn)行連接,之后通過排線連接芯片與元器件。6.2軟件編程與調(diào)試1602型led液晶顯示屏能夠顯示比較復(fù)雜的漢字和圖形,首先必須對其寫入控制操作字,包括圖形的顯示方式,字體的模式。然后寫入初始行地址,指針自動(dòng)左移,直到寫完全部數(shù)據(jù)為止。 write_data(place&0xff); /寫入地址高位 write_data(place/256); /寫入地址低位 write_com(0x24); /地址

12、設(shè)置 write_com(0xb0); /設(shè)置數(shù)據(jù)自動(dòng)寫 write_data(ASC_MSK(c1-0x20)*16+k); /*-例如:0的ASCII碼為0x30, 在ASC_MSK中的位置為0x10*16 -16字節(jié)字碼依次寫入LCD-*/ write_com(0xb2); /自動(dòng)復(fù)位 place=place+30;7系統(tǒng)仿真在protues的ISIS 7.4sp2軟件環(huán)境下畫出電路原理圖,接下來就是將設(shè)計(jì)的程序在Keil C51 Vision3開發(fā)集成環(huán)境上編譯成機(jī)器語言,進(jìn)入Protues的ISIS,雙擊AT89C51,在"Program File中"添加&quo

13、t;main.hex"文件到AT89C51中,如圖7.1所示。 圖6.1 數(shù)字電子秤仿真設(shè)置圖該仿真驗(yàn)證的過程:首先按開始按,此時(shí)數(shù)字電子秤進(jìn)入歡迎界面。1602型led液晶顯示屏上顯示"歡迎使用電子秤 設(shè)計(jì)·····"。如圖7.2所示。圖7.2 數(shù)字電子秤歡迎界面圖接下來調(diào)節(jié)壓力傳感模擬電路電壓,將電壓設(shè)為0.00表示此時(shí)載物臺上沒有物體。此時(shí)1602型led液晶顯示屏切換到稱量畫面。顯示指示“實(shí)用電子秤 名稱······單價(jià):0.000元/千克 總重量

14、:0.000千克 總價(jià):00.000元”。如圖6.3所示。圖7.3 數(shù)字電子秤模擬空載圖最后,上調(diào)壓力傳感電壓表示已載有商品,同時(shí)按下“6”號鍵,表示選擇6號商品“蘋果”。此時(shí)LM4229上顯示“名稱:蘋果 單價(jià):6.800元/千克 總重量:3.496千克 總價(jià):“23.733元”(實(shí)際6.8*3.496=23.7758元)。達(dá)到基本要求。如圖7.4所示。最大稱量重量4.980KG,如圖7.5所示。圖7.4 數(shù)字電子秤模擬載物顯示仿真圖 圖7.4 數(shù)字電子秤模擬最大稱量范圍仿真圖8設(shè)計(jì)總結(jié)通過本次電子技能課程數(shù)字電子秤的設(shè)計(jì),讓我更加熟悉了單片機(jī)的整個(gè)設(shè)計(jì)流程。在設(shè)計(jì)過程中,我也意識到好的編程

15、書寫習(xí)慣對軟件設(shè)計(jì)的重要性。剛剛開始由于自己變量大部分采用的是局部變量,導(dǎo)致程序仿真出錯(cuò),給自己的修改創(chuàng)造不小的麻煩。經(jīng)過一天的努力,統(tǒng)一采用全局變量終于實(shí)現(xiàn)最終的仿真結(jié)果和設(shè)計(jì)的全部任務(wù)和要求。當(dāng)然本數(shù)字電子秤還有很多可以改進(jìn)的地方,例如可以改進(jìn)按鍵功能方便工作人員隨時(shí)對各數(shù)據(jù)進(jìn)行修改等等。由于設(shè)計(jì)時(shí)間有限,只能在以后的學(xué)習(xí)過程中做更進(jìn)一步的改進(jìn)。9參考文獻(xiàn)1 于永.51單片機(jī)C語言常用模塊于綜合系統(tǒng)設(shè)計(jì)實(shí)例精講M.北京:電子工業(yè)出版社,2008:88-94.2 李建忠.單片機(jī)原理及應(yīng)用M.西安:西安電子科技大學(xué)出版,2002:63-78.3 張俊謨.單片機(jī)中級教程M.北京:北京航空航天大學(xué)

16、出版,2000:36-45.附錄A#include<reg51.h>#include<intrins.h>#include <absacc.h>#include <math.h>#include<lm4229.h>#define uchar unsigned char#define uint unsigned intsbit ADCS =P35; sbit ADDI =P37; sbit ADDO =P37; sbit ADCLK =P36; uint x1,y1,z1=0,w1;uchar ad_data,k,n,m,e,num,s

17、; /采樣值存儲uint temp1;sbit beep =P30; char press_data; /標(biāo)度變換存儲單元float press;unsigned char ad_alarm,temp; /報(bào)警值存儲單元unsigned char abc5=48,46,48,48,48;unsigned char price_all6=48,48,46,48,48,48;float price_unit10=5.5,2.8,3.6,4.5,5.8,6.8,7.9,8.0,9.5,0; /商品初始單價(jià)uchar price_danjia5=48,46,48,48,48;float price;u

18、int 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; /采樣值存儲單元初始化為0 lcd_init(); /顯示初始化 disp_init(); /開始進(jìn)入歡迎界面 dela

19、y(1000); /延時(shí)進(jìn)入稱量畫面 clear_lcd(0,4,40); clear_lcd(16,0,80); clear_lcd(28,0,40); clear_lcd(44,0,80); clear_lcd(56,0,40); clear_lcd(72,0,80); clear_lcd(84,0,40); clear_lcd(100,0,80); clear_lcd(112,0,40); write_lcd(0,8,"實(shí)用電子秤"); while(1) ad_data =Adc0832(0); /采樣值存儲單元初始化為0 alarm(); data_pro(); /

20、讀取重量 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à)格

21、 write_lcd(88,10,price_all); write_lcd(88,20,"元"); write_lcd(112,0,");/*讀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_

22、(); 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_(); d

23、at=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;/拉搞

24、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<ad_data<256) int vary=ad_data;press=(0.019531*vary); temp1=(int)(press*1000); /放大1000倍,便于后面的計(jì)算 abc0=temp1/1000+48; /取壓力值百位abc1=46;abc2=(temp1%1000)/100+48; /取壓力值十

25、位abc3=(temp1%1000)%100)/10+48; /取壓力值個(gè)位abc4=(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<k;i+) for(j=0;j<100;j+); /開機(jī)歡迎界面void disp_init() -"); write_lcd(84, /鍵盤服務(wù)程序void keyscan()P1=0xfe;tem

26、p=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_unit0, write_lcd(24,0,"名 稱: 杏 仁");break;case 0xde:num=2,price=price_unit1,write_lcd(24,0,"名 稱: 李 子");break;case 0xbe:num=3,price=price_un

27、it2,write_lcd(24,0,"名 稱: 草 莓");break;case 0x7e:num=4,price=price_unit3,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 0x

28、ed:num=5,price=price_unit4,write_lcd(24,0,"名 稱: 西 瓜");break;case 0xdd:num=6,price=price_unit5,write_lcd(24,0,"名 稱: 蘋 果");break;case 0xbd:num=7,price=price_unit6,write_lcd(24,0,"名 稱: 雪 梨");break;case 0x7d:num=8,price=price_unit7,write_lcd(24,0,"名 稱: 核 桃");break

29、;while(temp!=0xf0)temp=P1;temp=temp&0xf0;P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xeb:num=9,price=price_unit8,write_lcd(24,0,"名 稱: 香 蕉");break;case 0xdb:num=10,price=price_unit9,write_lcd(24,0,"名 稱: 商品代碼")

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論