模擬電子秤仿真實驗報告_第1頁
模擬電子秤仿真實驗報告_第2頁
模擬電子秤仿真實驗報告_第3頁
模擬電子秤仿真實驗報告_第4頁
模擬電子秤仿真實驗報告_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.阿壩師范高等??茖W校電子信息工程系課程設計模擬電子秤仿真設計學生姓名樊益明專業(yè)名稱計算機控制技術班 級計控班學 號20113079阿壩師范高等專科學校電子信息工程系二一三年四月模擬電子秤設計報告1、 設計原理及要求設計原理:電子秤系統(tǒng)設計框圖大致如圖1所示:四個定值電阻加一個電位器,模擬應變式傳感器,采集微小的電壓信號利用差分放大電路,對采集到的微小電壓放大到05VADC0832:8位2進制模數(shù)轉換器;將放大的電壓信號轉化為數(shù)值信號,方便單片機的處理MM74C922:鍵盤解碼器,方便了對4x4鍵盤的掃描。鍵盤的作用主要在單價的輸入上。51單片機:處理和控制單元,整個模擬仿真的靈魂原件。1、將

2、ADC0832轉化來的數(shù)據(jù)處理后存放在重量(Wight)并用LCD顯示;2、將鍵盤輸入的數(shù)據(jù)賦給單價(Price);3、將總價(Total_price)計算出來,并顯示圖1 系統(tǒng)整體設計框圖設計要求:1、 要求單價由鍵盤輸入;2、 重量的精度能夠達到十分之一千克;3、 按鍵有提示音;4、 有去皮的功能;2、 主要硬件及仿真軟件硬件:(1) 、ADC0832ADC0832 是一種8 位分辨率、雙通道A/D轉換芯片。由于它體積小,兼容性,性價比高而深受單片機愛好者及企業(yè)歡迎。圖2.1為ADC0832在Proteus中的邏輯符號圖2.1 ADC0832邏輯符號芯片接口說明:CS片選使能,低電平芯片使

3、能;CH0 模擬輸入通道0,或作為IN+/-使用。CH1 模擬輸入通道1,或作為IN+/-使用。GND 芯片參考0 電位(地)。DI 數(shù)據(jù)信號輸入,選擇通道控制。DO 數(shù)據(jù)信號輸出,轉換數(shù)據(jù)輸出。CLK 芯片時鐘輸入。Vcc/REF 電源輸入及參考電壓輸入(復用)。單片機對 ADC0832 的控制原理: 正常情況下 ADC0832 與單片機的接口應為 4 條數(shù)據(jù)線,分別是 CS、CLK、DO、DI但由于 DO 端與 DI 端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將 DO 和 DI 并聯(lián)在一根數(shù)據(jù)線上使用。(見圖 3.6)當 ADC0832 未工作時其 CS 輸入端應為

4、高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行 A/D 轉換時,須先將 CS 使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端 CLK 輸入時鐘脈沖,DO/DI 端則使用 DI 端輸入通道功能選擇的數(shù)據(jù)信號。在第 1 個時鐘脈沖的下沉之前 DI 端必須是高電平,表示啟始信號。在第 2、3 個脈沖下沉之前 DI 端應輸入 2 位數(shù)據(jù)用于選擇通道功能,其功能項見表 1。表 1如表 1 所示,當此 2 位數(shù)據(jù)為“1”、“0”時,只對 CH0 進行單通道轉換。當 2 位數(shù)據(jù)為“1”、“1”時,只對 CH1 進行單通道轉換。當 2 位

5、數(shù)據(jù)為“0”、“0”時,將 CH0 作為正輸入端 IN+,CH1 作為負輸入端 IN-進行輸入。當 2 位數(shù)據(jù)為“0”、“1”時,將 CH0 作為負輸入端 IN-,CH1 作為正輸入端 IN+進行輸入。所以我們利用前12個脈沖來設置ADC0832的通道選擇,到第 3 個脈沖的下沉之后 DI 端的輸入電平就失去輸入作用,此后 DO/DI端則開始利用數(shù)據(jù)輸出 DO 進行轉換數(shù)據(jù)的讀取。從第 4 個脈沖下沉開始由 DO端輸出轉換數(shù)據(jù)最高位 DATA7,隨后每一個脈沖下沉 DO 端輸出下一位數(shù)據(jù)。直到第 11 個脈沖時發(fā)出最低位數(shù)據(jù) DATA0,一個字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個相反字

6、節(jié)的數(shù)據(jù),即從第 11 個字節(jié)的下沉輸出 DATD0。隨后輸出 8 位數(shù)據(jù),到第 19 個脈沖時數(shù)據(jù)輸出完成,也標志著一次 A/D 轉換的結束。最后將 CS 置高電平禁用芯片,直接將轉換后的數(shù)據(jù)進行處理就可以了。更詳細的時序說明請見圖 2.2(圖2.2為ADC0832的時序圖)。圖2.2 ADC0832時序圖(2) 、LCD12232圖2.3 LCD12232邏輯符號管腳說明:VDD:邏輯電源正GND(VSS): 邏輯電源地VO(VEE):LCD驅動電源RESET:復位端。E1:讀寫使能。E2:同E1引腳。/RD:讀允許,低電平有效。/WR:寫允許,低電平有效。R/W:讀寫選擇A0:數(shù)據(jù)/指令

7、選擇 高電平:數(shù)據(jù)D0-D7將送入顯示RAM;低電平:數(shù)據(jù)D0-D7將送入指令執(zhí)行器執(zhí)行。D0-D7:數(shù)據(jù)輸入輸出引腳。圖2.4為LCD的時序圖圖2.4 LCD12232時序圖圖2.5為顯示存儲器(DDRAM)與地址的對應關系(顯示設定為1/32DUTY,顯示起始行為10th)圖2.5(3) 、AT89C51在Protues中AT89C51的邏輯符號如圖2.6所示:圖2.6 AT89C51邏輯符號AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗

8、稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。AT89C51 提供以下標準功能:4k字節(jié)Flash閃速存儲器,128字節(jié)內部RAM,32 個I/O 口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結構,一個全雙

9、工串行通信口,片內振蕩器及時鐘電路。同時,AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。仿真軟件:(1) 、Proteus它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具,在這里完全能夠滿足我們對電子秤的仿真需要。(2) 、Keil C51Keil C51是51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可

10、維護性上有明顯的優(yōu)勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發(fā)方案,因為我們在此次模擬仿真中使用C語言編程,所以Keil幾乎就是我們的不二之選。3、 設計步驟(1) 、軟件設計1、 延時函數(shù)delay()的編寫(Delay.c):在這個C文件中,只有一個函數(shù)void delay(uint x),該函數(shù)的作用 是,延時100*x(微秒)。2、 ADC0832的驅動代碼編寫(ADC0832.c):在這個C文件中,只有一個函數(shù)uchar ReadADC(),它的返回值為8位2進制數(shù),表示的放大后的電壓值。圖3.1為uchar Read

11、ADC()的程序設計流程圖開始各種賦值語句,作讀取數(shù)據(jù)時的初始化dat1=(dat11)|ADC_DIO;讀取第411,共8個正向數(shù)據(jù)dat2=dat2|(uchar)ADC_DIO0; i-);LCD12232.c/LCD12232的使用函數(shù)sfr DATAport=0x80;/定義LCD12232數(shù)據(jù)口(0x80表示P0口)sbit lcda0=P20;/寫(數(shù)據(jù)/指令)(1/0)選擇sbit lcde1=P21;/LCD左邊使能sbit lcde2=P22;/LCD右邊使能sbit lcdrw=P23;/(讀/寫)(1/0)狀態(tài)選擇sbit lcdbusy=P07;/忙狀態(tài)檢測位(即數(shù)據(jù)

12、口最高位)void LCDcmd(uchar temp)delay(2);lcde1=0;/禁止控制器lcde2=0;lcda0=0;/寫指令模式lcdrw=0;/寫使能lcde1=1;/控制器使能lcde2=1;DATAport=temp;/寫指令lcde1=0;/寫完后,禁止控制器lcde2=0;/*寫數(shù)據(jù)*/void LCDdata(bit lcde,uchar temp)delay(2);lcde1=0;/禁止控制器lcde2=0;lcda0=1;/寫數(shù)據(jù)模式lcdrw=0;/寫使能lcde1=lcde;/(lcde=0/1)(左/右)控制器使能lcde2=lcde;DATAport=

13、temp; /寫數(shù)據(jù)lcde1=0;/寫完后,禁止主控制器lcde2=0;/*LCD清屏*/void LCDclr(uint Page)unsigned char i;LCDcmd(0xB8|Page);/設置主控制器頁地址LCDcmd(0x00);/設置主控制器列地址for(i=0;i61;i+)LCDdata(0,0x00);for(i=0;i61;i+)LCDdata(1,0x00);/*LCD初始化*/void LCDrst()LCDcmd(0xE2);/復位LCDcmd(0xAE);/關顯示LCDcmd(0xA4);/正常驅動模式LCDcmd(0xA9);/占空比為1/32(即32行

14、液晶顯示驅動)LCDcmd(0xA1);/設定列驅動與液晶列數(shù)據(jù)口連接方式LCDcmd(0xEE);/正常讀寫模式(讀/寫數(shù)據(jù)后列地址+1)LCDclr(0);/擦除0頁LCDclr(1);/擦除1頁LCDclr(2);/擦除2頁LCDclr(3);/擦除3頁LCDcmd(0xAF);/開顯示/*寫LCD字符串*/*寫指令*/ void LCDshow010(uint *a,uint b)uint i,j;for(j=0;j2;j+)LCDcmd(0xB8|j);/第j頁顯示LCDcmd(0x00);/設置列開始地址for(i=0; i16;i+)/寫前半部分,顯示“P:”LCDdata(0,

15、tem0i*2+j%2);if(a1=0)for(i=0; i8;i+)/寫前半部分,如果十位為0,空格占位LCDdata(0,number10i*2+j%2);elsefor(i=0; i8;i+)/寫前半部分 ,顯示單價的十位LCDdata(0,numbera1i*2+j%2);for(i=0; i8;i+)/寫前半部分,顯示單價的個位LCDdata(0,numbera0i*2+j%2);for(i=0; i8;i+)/寫前半部分,空格占位LCDdata(0,number10i*2+j%2);for(i=0; i8;i+)/寫前半部分,空格占位LCDdata(0,number10i*2+j

16、%2);for(i=0; i8;i+)/寫前半部分,空格占位LCDdata(0,number10i*2+j%2);for(i=0; i5;i+)/寫后半部分,顯示“W:”LCDdata(0,tem2i*2+j%2);for(i=5; i16;i+)/寫后半部分 ,越界處理LCDdata(1,tem2i*2+j%2);if(b/100=0)for(i=0; i8;i+)/寫后半部分,如果十位為0,空格占位LCDdata(1,number10i*2+j%2);elsefor(i=0; i8;i+)/寫后半部分 ,顯示重量的十位LCDdata(1,numberb/100i*2+j%2);for(i=

17、0; i8;i+)/寫后半部分 ,顯示重量的個位LCDdata(1,number(b/10)%10i*2+j%2);for(i=0; i8;i+)/寫后半部分,顯示小數(shù)點LCDdata(1,number13i*2+j%2);for(i=0; i8;i+)/寫后半部分,顯示重量的小數(shù)位LCDdata(1,numberb%10i*2+j%2);for(i=0; i16;i+)/寫后半部分 顯示“kg”符號LCDdata(1,number11i*2+j%2);void LCDshow230(uint c)uint i,j;for(j=2;j4;j+)LCDcmd(0xB8|j);/第j頁顯示LCDc

18、md(0x00);/設置列開始地址for(i=0; i40;i+)/寫前半部分,顯示“總價:”LCDdata(0,tem4i*2+j%2);if(c/10000=0)for(i=0; i8;i+)/寫前半部分,如果千位為0,千位空格占位LCDdata(0,number10i*2+j%2);elsefor(i=0; i8;i+)/寫前半部分 ,顯示總價的千位LCDdata(0,numberc/10000i*2+j%2);if(c/1000=0)for(i=0; i8;i+)/寫前半部分,在千,百位都為0的情況下,百位空格占位LCDdata(0,number10i*2+j%2);elsefor(i

19、=0; i8;i+)/寫前半部分 ,顯示總價的百位LCDdata(0,number(c/1000)%10i*2+j%2);if(c/100=0)for(i=0; i5;i+)/寫前半部分,在千、百、十位都為0 的情況下,十位空格占位LCDdata(0,number10i*2+j%2);for(i=5; i8;i+)/寫后半部分,顯示空格占位,因為存在越界LCDdata(1,number10i*2+j%2);elsefor(i=0; i5;i+)/寫前半部分,顯示總價的十位LCDdata(0,number(c/100)%10i*2+j%2);for(i=5; i8;i+)/寫后半部分,顯示總價的

20、十位,因為存在越界LCDdata(1,number(c/100)%10i*2+j%2);for(i=0; i8;i+)/寫后半部分,顯示總價的個位LCDdata(1,number(c/10)%10i*2+j%2);for(i=0; i8;i+)/寫后半部分,顯示小數(shù)點LCDdata(1,number13i*2+j%2);for(i=0; i8;i+)/寫后半部分,顯示總價的小數(shù)位LCDdata(1,numberc%10i*2+j%2);for(i=0; i16;i+)/寫后半部分,顯示“元”符號LCDdata(1,number14i*2+j%2);ADC0832.c/ADC0832的使用函數(shù)s

21、bit ADC_CS =P10;sbit ADC_CLK=P11;sbit ADC_DIO =P12;uchar ReadADC() /把模擬電壓值轉換成8位二進制數(shù)并返回 uchar i,dat1=1,dat2=0;ADC_CS=0;ADC_CLK=0;ADC_DIO=1;_nop_();_nop_(); ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;ADC_DIO=1;_nop_();_nop_();ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;ADC_DIO=0;_nop_();_nop_();ADC_CLK=1;_nop_();_no

22、p_();ADC_CLK=0;ADC_DIO=1;_nop_();_nop_();for(i=0;i8;i+)ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;_nop_();_nop_();dat1=(dat11)|ADC_DIO;for(i=0;i8;i+)dat2=dat2|(uchar)ADC_DIOi);ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;_nop_();_nop_(); ADC_CS=1;return (dat1=dat2)?dat1:0x00;MM74C922.c /MM74C922的使用函數(shù)sbit DA=P16;sbi

23、t BEEP=P17;uchar Get_key()uint a=16;if(DA)a=P2/16;return a;void Beep()uchar i;for(i=0;i0;i-)ci=ci-1;ci=1;while(DA);Beep();break;case 1:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=2;while(DA);Beep();break;case 2:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=3;while(DA);Beep();break;case 3:Beep();break;case 4:i

24、f(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=4;while(DA);Beep();break;case 5:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=5;while(DA);Beep();break;case 6:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=6;while(DA);Beep();break;case 7:break;case 8:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=7;while(DA);Beep();break;case 9:

25、if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=8;while(DA);Beep();break;case 10:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=9;while(DA);Beep();break;case 11:(*h)=e;while(DA);Beep();break;case 12:c0=0;c1=0;(*g)=0;(*h)=0;while(DA);Beep();break;case 13:if(c1!=0)break;for(i=1;i0;i-)ci=ci-1;ci=0;while(DA);Beep();bre

溫馨提示

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

評論

0/150

提交評論