單片機課設 基于C51單片機的電子秤設計_第1頁
單片機課設 基于C51單片機的電子秤設計_第2頁
單片機課設 基于C51單片機的電子秤設計_第3頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

單片機原理及系統課程設計評語:評語:考勤(10分)守紀(10分)過程(30)設計報告(30分)答辯(20分)總成績(100)專業:自動化班級:1101學名:號:##指導教師: 鄭蘭州交通大學自動化與電氣工程學院2014113日單片機原理及系統課程設計報告單片機原理及系統課程設計報告PAGEPAGE14基于單片機的智能電子秤設計設計任務設計目的綜合運用所學單片機的知識實現單片機系統的設計;學會將單片機運用于實際生活或生產中;培養科學良好的設計方法和作風;KeilC51編寫和調試程序;Proteus實現應用系統的仿真;學會單片機應用系統設計的各種步驟和技巧。設計要求給出具體可行的設計方案;設計合理的電路原理及可靠的系統硬件;KeilC51編寫和調試程序;Proteus軟件中的仿真結果;給出最后的設計結果集分析。設計方案和原理設計原理基于單片機的智能電子秤,即用單片機制作一個智能電子秤,其工作原理是通過應變式傳感器橋式電路采集到被測物體的重量并將其轉換成電壓信號,再通A/D轉換成數字量送入到主控電路的單片機中,處理成物體重量值;通過單片機不斷掃描鍵盤和各功能開關,根據鍵盤輸入的內容和各功能狀態進行必要的判CPU發出命令,從存儲器中讀數據并送到顯示器顯示。設計方案電子秤是將檢測與轉換技術、計算機技術、信息處理、數字技術等技術綜合一體的現代新型稱重儀器。很顯然用軟、硬件相結合,實現電子秤對物體的自動稱量、單價輸入、自動計算總價并顯示的功能,給人們生活帶來很大的方便。其C51LCD1602C51單片機起中控作用,用于控制各部件正常工作,存儲處理數據并輸出;應變式傳感器產生電壓信號,經過模數轉換器得到數據送入單片機;矩陣鍵盤輸入,經MM74C9221.1所示。壓力傳感器壓力傳感器ADC0832轉換器LCD1602顯示器矩陣鍵盤MM74C922矩陣鍵盤譯碼器C51蜂鳴器語音裝置圖1.1 電子秤系統硬件部件組成圖將應變式傳感器輸出連入模數轉換器,將模數轉換器與單片機連接,實現物蜂鳴器語音提示即可提醒用戶輸入,還可以對物體超重進行報警;再給單片機連LCD液晶顯示器,對其重量、單價、總價數據輸出顯示。電子秤的軟件部分是連接各硬件工作和實現單片機智能化的靈魂。軟件即主C51塊分工實現其功能,單片機進行數據的采集、處理存儲和輸出顯示。程序主要包括主函數、通用顯示函數、初始化LCDLCDLCDKeilC51對文件或.ASM文件進行編寫和調試程序,編譯無誤且調試完成后生成.HEX入單片機即可實現智能電子秤硬件的正常工作。系統硬件設計應變式傳感器電路及原理按一定規律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。此壓力傳感器即應變式傳感器,其工作原理為電阻應變片的應變效應,金屬電阻絲受外力作用時,其金屬絲電阻的相對變化與金屬絲的應變成正比關系,放了重物后應變片后彎曲變形,導致里面的金屬電阻絲、基片、覆蓋層和引出線。電阻應變式傳感器的測量一般要用專門的轉換電路將微小的電阻相對變化△R/R個受壓應變。如圖2.1所示,其輸出電壓為:U0

U R。E RR1+ROR1+ROR2-R0R3-R0R4+R0UoUe圖2.1電阻應變片的轉換電路ADC0832模數轉換器ADC08328A/DDODI分別是數據輸出和CH0模擬信號的兩個輸入通道,由GND2.2所示,加了三個上拉電阻控制單片機輸入輸出信號。R510k

R310k

R410kU26 DO5 DICLKVCCADC0832

GND 4CH1 3CH0 2CS 1圖2.2ADC0832模數轉換電路矩陣鍵盤和鍵盤譯碼器3×44×4MM74C9222.3C2C20.68uC1AD650.1uMCKOABCD11 1111DO ABCDU3MM74C922XXXXYYYY1087 1234113 1230XXXYYYYX1X2XY1345Y2678Y39.CY4圖2.3矩陣鍵盤及矩陣鍵盤譯碼器電路MM74C92216y1~y4水平線。A,B,C,D,DA為數據輸入、輸出口,OE選通端。蜂鳴器語音提示電路2.4

LS1R6510RLCD

SOUNDER圖2.4語音提示電路圖LCD160214個引腳,其中D0~D78命令選通端,RS2.5所示。LCD1LCD1LM016LSDESDEVVVSRREW01234567DDDDDDDD12345678911111SWERRBBBBBBBBDDDDDDDD軟件設計

圖2.5 LCD1602液晶顯示器硬件電路圖軟件程序是連接各硬件工作和實現單片機智能化的靈魂。主要作用是實現以單片機為控制中心,讓各個模塊分工實現其功能,單片機進行數據的采集、處理C語言的一大特點,對單片機的編程而言,用C語言模塊化編程也是必須,故可以用一個主函數和ADC0832160242個子程序。以下是各函數功能實現的流程圖。主程序功能3.1所示。開始開始初始化LCD讀入單價數據ADC工作實現模數轉換取ADC計算總價并存儲選通LCD否據是單片機存儲數據是LCD否忙否向MM74C922發讀信號輸出結果顯示到LCD否MM74C922有無數據是結束圖3.1程序主函數流程圖按鍵子程序流程圖如圖3.2所示,A/D轉換子程序流程圖如圖3.3所示。開始MM74C922開始MM74C922工作否檢測是否有鍵按下是對按鍵進行譯碼送入單片機結束開始選通 ADC0832A/D轉換A/D轉換是否完成否是讀數據到單片機返回主程序結束圖3.2按鍵程序流程圖 圖3.3 A/D轉換程序流程圖系統仿真與調試ProteusC51KeilC51.HEX件,裝入仿真系統單片機中,讓仿真系統工作。經過調試,能顯示正確的結果,14.1所示。總結通過此次課程設計,我對單片機相關知識有了系統的認識和理解。利用單片機進行控制系統的設計與開發有了初步了解和技巧,以及對控制系統的分析和問題的解決有了深刻的認識。控制系統的開發設計是一項復雜的系統工程,必須嚴格按照系統分析、系統設計、系統實施、系統運行與調試的過程來進行,才能得到正確實用且可靠的系統。在設計過程中,要邊學習,邊實踐,遇到新問題就要不斷探索和努力,親自理解和掌握知識和技巧,方可使問題得到解決。在設計中理論和實際必須緊密結合,要針對不同的系統根據理論給與不同的方案,綜合考慮各方面的因素和需要,選擇出最佳的方案與結論。要大量廣泛的收集資料,然后認真地研究其思路,和指導老師保持聯系,和同學共同研究遇到的問題,認真對待自己的不足和缺點,努力實現自我的超越。附錄C322pFC4X1C322pFC4X1CRYSTALR5 R3 R410k 10k 10kU222pFU119XTAL16DO5DICLKVCCGNDCH1CH0CS4321RV1R218XTAL2C20.68uRSTP0.0/AD039P0.1/AD138P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7+3.00220R C51kVolts922uR110kP2.0/A8P2.1/A9C1293031ADPSENALEEAABCDP2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A1565 1123765411110.1uMCAE ABCDDOKOU3MM74C9221234DA5678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51P3.0/RXDP3.1/TXDBSP3.2/INT012EP3.3/INT114P3.4/T01513LCD112341234P3.5/T116LM016LXXXXYYYYP3.6/WRP3.7/RD1710871112341231234XXX YYYYLS1012SDESDEVVVSW01234567RRE DDDDDDDD123X X X123 456 78901234R611111Y1SOUNDERSWERR01234567BBBBBBBBDDDDDDD345510RY2678Y39.CY43736ADC08323534333221DB022DB123DB224DB325DB426DB527DB628DB71011RSRW4.1在Proteus下的系統仿真圖附錄2電子秤軟件程序如下#include<reg51.h>#include<intrins.h>#include<absacc.h>#include<math.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#defineucharunsignedchar#defineuint unsignedint//按鍵引腳定義sbitDA=P1^4;#defineKey_Pressed(DA==1) //有鍵按#defineKey_no (P1&0x0f)//獲取鍵值codechar KEY_CHAR_TABLE[]="0123456789.C"; //鍵盤字符#definePLEN 7 //價格最大長度#defineWLEN 4 //重量最大長度#defineSUMLEN 10 //金額最大長chardisp_buffer_P[PLEN];uchardisp_buffer_Pz[PLEN];chardisp_buffer_W[WLEN];chardisp_buffer_SUM[SUMLEN];ucharNumberPtr=0;//蜂鳴器引腳定義sbitBeep=P1^5;//ADC0832引腳定義sbitADCS=P0^2;//片選線sbitADDI=P0^0;//數據線sbitADDO=P0^0;//sbitADCLK=P0^1;時鐘線volatileintAD_Result,Pre_Result=0,Pressure_Value=0;//數模轉換結果,上次轉換結果,壓力換算結果//LCD1602引腳、宏定義#defineLCD_DB_PORTP2 sbitRS=P3^0; //數據/命令線選擇sbitRW=P3^1; //讀寫控制sbitEN=P3^2; //使能端voidShowString(unsignedcharx,unsignedchary,unsignedchar*str);voidshow_sum();/*********us***********/voiddelay_us(ucharx){while(--x)_nop_();}/***********按鍵音函數************/voidSounder(){uchari;Beep=1;for(i=0;i<20;i++){delay_us(70);Beep=0;}Beep=1;}/***********按鍵處理函數*************/voidkeyB_dow(){ucharkeychar;static ucharhavdot=0; //1static uchardtnum=PLEN;//P1|=0X0F;if(Key_Pressed){Sounder();keychar=KEY_CHAR_TABLE[Key_no];//獲取鍵值if(isdigit(keychar)||(keychar=='.'&&!havdot)){if(strlen(disp_buffer_P)==3&&(keychar!='.'&&!havdot))return; //3時返回if(NumberPtr<dtnum){if(NumberPtr==0&&(keychar=='0'||keychar=='.')){}else{}

disp_buffer_P[NumberPtr++]='0';keychar='.';disp_buffer_P[NumberPtr++]='.';disp_buffer_P[NumberPtr++]=keychar;disp_buffer_P[NumberPtr]='\0';ShowString(2,0,disp_buffer_P);}if(keychar=='.'&&!havdot){dtnum=NumberPtr+2;havdot=1;}}elseif(keychar=='C'){NumberPtr=0;havdot=0;dtnum=PLEN-2;disp_buffer_P[0]='\0';disp_buffer_SUM[0]='\0';ShowString(2,0,(char*)" ");ShowString(5,1,(char*)" ");}if(Key_Pressed)show_sum();while(Key_Pressed);}}/*********計算總額函數***********/voidshow_sum(){floatp,w;if(strlen(disp_buffer_P)==0)//p0floatp=0;elsep=strtod(disp_buffer_P,'\0');w=strtod(disp_buffer_W,'\0');將重量字符串轉換成float型sprintf(disp_buffer_SUM,"%.2f",p*w);計算金額并轉化成字符ShowString(5,1,(char*)" "); //清除原金額ShowString(5,1,disp_buffer_SUM);//顯示當前金額}/*********us***********/voiddelay_ms(ucharx){uchart;while(--x)for(t=0;t<120;t++);}/***********ADC0832轉換函數*************/ucharAdc0832(unsignedcharchannel) //AD轉換,返回結果{ucharucharj;uintdat=0;ucharndat=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;//CLKADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//CLK端,ADDI=1;//控制命令結束_nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次時鐘脈沖_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}for(i=0;i<8;i++){j=0;j=j|ADDO;//收數據ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次時鐘脈沖_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//CS端ADCLK=0;//CLK端ADDO=1;//拉高數據端,dat<<=8;dat|=ndat;return(dat); //returnadk}/***********1602相關函數*************//***********忙檢查函數*************/unsignedcharBusy_Check(){unsignedcharLCD_Status;RS=0;RW=1;EN=1;delay_us(1000);LCD_Status=LCD_DB_PORT;EN=0;returnLCD_Status;}/***********LCD*************/voidWrite_LCD_Command(unsignedcharcmd){while((Busy_Check()&0x80)==0x80);RS=0;RW=0;EN=0;LCD_DB_PORT=EN=1;delay_us(1000);EN=0;}/***********LCD*************/voidWrite_LCD_Data(unsignedchardat){while((Busy_Check()&0x80)==0x80);RS=1;RW=0;EN=0;LCD_DB_PORT=EN=1;delay_us(1000);EN=0;}/***********初始化LCD函數*************/voidInitialize_LCD(){Write

溫馨提示

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

評論

0/150

提交評論