單片機(jī)電阻表的設(shè)計說明書_第1頁
單片機(jī)電阻表的設(shè)計說明書_第2頁
單片機(jī)電阻表的設(shè)計說明書_第3頁
單片機(jī)電阻表的設(shè)計說明書_第4頁
單片機(jī)電阻表的設(shè)計說明書_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機(jī)課程設(shè)計說明書PAGEPAGE5目錄設(shè)計內(nèi)容和要求2系統(tǒng)總體結(jié)構(gòu)32.1、系統(tǒng)總體設(shè)計32.2、主控部分的選擇4最小系統(tǒng)6硬件設(shè)計64.1總體設(shè)計框圖64.2電壓測量的設(shè)計74.3模數(shù)ADC轉(zhuǎn)換的設(shè)計74.4液晶顯示電路的設(shè)計8輸入、輸出部分9軟件設(shè)計106.1主控程序流程106.2軟件仿真11實物制作與仿真12總結(jié)13參考文獻(xiàn)14附錄1原件清單15附錄2原理圖16附錄3程序17附錄4實物圖31設(shè)計內(nèi)容和要求隨著現(xiàn)代科技的飛速發(fā)展,生產(chǎn)生活中人們對工具的要約越來越高。其中我日常所使用的電阻表的精度和性能也要求越來越高。并且電阻表完全可以通過現(xiàn)代科技來實現(xiàn)智能化,智能化即不需要人工來調(diào)節(jié)檔位,測量不同阻值的電阻時,可以自動更換檔位。并且同時顯示出阻值和量程。這次課程設(shè)計我的課題就是基于單片機(jī)芯片STC89C52設(shè)計一個三檔位的電阻表,第一檔位:1-100歐,第二檔:1-5k歐,第三檔:1-10k歐。電阻表能自動轉(zhuǎn)換量程,測量結(jié)果使用LCD顯示,誤差小于5%。設(shè)計內(nèi)容包括:1、單片機(jī)最小系統(tǒng)2、模數(shù)轉(zhuǎn)換3、電阻電壓轉(zhuǎn)換4、顯示測得的電阻阻值設(shè)計原理為通過伏安法測出電阻的阻值,經(jīng)過模數(shù)轉(zhuǎn)換,將測得的阻值顯示到LCD上。第三章最小系統(tǒng)由STC89C52,復(fù)位電路,時鐘產(chǎn)生電路組成。其原理圖如下:最小系統(tǒng)電路原理圖硬件設(shè)計本系統(tǒng)是一個簡單的單回路控制系統(tǒng)。為了實現(xiàn)對電阻的精確測量和測量檔位自動切換,本系統(tǒng)采用了AT89C52單片機(jī)作為系統(tǒng)的控制中心,在測試電阻阻值時,有信號測試端將所測信號送入A/D轉(zhuǎn)換器ADC0832,經(jīng)A/D轉(zhuǎn)換后將數(shù)據(jù)送入單片機(jī)進(jìn)行數(shù)據(jù)處理,實時將所測電阻阻值經(jīng)液晶顯示模塊顯示。在進(jìn)行檔位切換時。由單片機(jī)控制的繼電器構(gòu)成檔位開關(guān),對檔位進(jìn)行正確切換??傮w設(shè)計框圖如圖ATAT89C52(CPU)阻值信號采集數(shù)據(jù)顯示A/D轉(zhuǎn)換分頻電路電源電路檔位切換總體設(shè)計框圖4.2電壓測量的設(shè)計如圖2所示為被測電阻電壓測量。電壓經(jīng)過已知電阻R1和被測電阻Rx接到地。通過OUT輸出被測電阻Rx上的電壓。送到ADC0832的CH0口。圖3被測電阻電壓測量圖4.3模數(shù)ADC轉(zhuǎn)換的設(shè)計 由電壓測量得到的電壓經(jīng)過ADC模數(shù)轉(zhuǎn)換可得到8位的電壓值,經(jīng)過歐姆定律(即電壓之比等于電阻之比)可得到被測電阻的阻值的大小。公式如下QUOTE錯誤!未找到引用源。本設(shè)計用到的R1的阻值為200Ω、20kΩ和200kΩ。 由被測電阻得到的電壓值經(jīng)ADC0832的2腳CH0輸入,經(jīng)過內(nèi)部的AD轉(zhuǎn)換,在DO6輸出數(shù)字電壓量,經(jīng)過上述公式的轉(zhuǎn)變,在P1.1口上的顯示的數(shù)字量為被測電阻的阻值數(shù)字量。如圖3所示為被測電阻電壓量轉(zhuǎn)換為阻值量。P1.1P1.1P1.1OUTCH0ADC0832P1.1OUTCH0ADC0832DO被測電阻電壓量轉(zhuǎn)換為阻值量圖4.4液晶顯示電路的設(shè)計 經(jīng)過ADC0832模數(shù)轉(zhuǎn)換得到的電阻值數(shù)字量,在MCU的P1.1口輸入,MCU系統(tǒng)處理后在P0口由LCD1602顯示出來該被測電阻的阻值。如圖4所示為被測電阻阻值顯示。P0P0單片機(jī)P1.1D0~D7LCD1602OUT被測電阻阻值顯示圖第5章輸入、輸出部分電阻表主控制部分電源需要用5V直流電源供電,把頻率為50Hz、有效值為220V的單相交流電壓轉(zhuǎn)換為幅值穩(wěn)定的5V直流電壓。其主要原理是把單相電經(jīng)過電源變壓器、整流電路、濾波電路、穩(wěn)壓電路轉(zhuǎn)換成穩(wěn)定的直流電壓。由于輸入電壓為電網(wǎng)電壓,一般情況下所需直流電壓的數(shù)值和電網(wǎng)電壓的有效值相差較大,因而電源變壓器的作用顯現(xiàn)出來起到降壓作用。降壓后還是交流電壓,所以需要整流電路把交流電壓轉(zhuǎn)換成直流電壓。由于經(jīng)整流電路整流后的電壓含有較大的交流分量,會影響到負(fù)載電路的正常工作。需通過低通濾波電路濾波,使輸出電壓平滑。穩(wěn)壓電路的功能是使輸出直流電壓基本不受電網(wǎng)電壓波動和負(fù)載電阻變化的影響,從而獲得穩(wěn)定性足夠高的直流壓。本電路使用充電器解決電源穩(wěn)壓問題。我們使用的是經(jīng)過特殊加工過的電路板,在板的內(nèi)部已經(jīng)將整流、變壓的線路連好了。各原件所用的5V直流電源在電路板內(nèi)部連成了幾條線路,使用起來很方便。電阻輸入則是通過將不同阻值的電阻接在表的兩端,阻值范圍是1-10K歐姆。當(dāng)接入時電阻表的液晶顯示屏上會自動顯示出當(dāng)前所接入的電阻的阻值和量程(檔位)。當(dāng)所接電阻超出量程時,LCD顯示ERROR。時序參數(shù)表時序參數(shù)符號極限值單位測試條件最小值典型值最大值E信號周期tc400ns引腳EE脈沖寬度tpw,tF150nsE上升/下降沿時間tR25ns地址建立時間tsp130ns引腳E、RS、R/W地址保持時間tHD110ns數(shù)據(jù)建立時間(讀操作)tD100ns引腳DB0~DB7數(shù)據(jù)保持時間(讀操作)tHD220ns數(shù)據(jù)建立時間(寫操作)tsp240ns數(shù)據(jù)保持時間(寫操作)tHD210ns第六章軟件設(shè)計6.1主控程序流程程序機(jī)構(gòu)主要包括:主控程序模塊、LCD1602液晶顯示程序、阻值數(shù)據(jù)顯示處理子程序、標(biāo)志符號顯示子程序、延時子程序等幾個部分組成。主控程序流程圖:開始開始設(shè)定初始化獲取IntInt<1100Int>100100P16=0;P17=1;Data=200從新獲取IntP16=0;P17=1;Data=200從新獲取IntP16=0;P17=1;Data=200從新獲取Int顯示Int值6.2軟件仿真本設(shè)計通過利用Proteus仿真,將所編寫的程序用Keil軟件編譯,所仿真原理圖見第七章。在實驗調(diào)試過程中每個測量量程檔選用2個電阻進(jìn)行測量,下表就是我們測試的實際電阻值和測量電阻值數(shù)據(jù),以及測量誤差。量程檔實際電阻值仿真測量電阻值誤差1K7.3Ω7Ω-4.10%15.2Ω15Ω-1.31%52.7Ω53Ω 0.57%200Ω201Ω 0.5%500Ω508Ω1.6%750Ω762Ω1.6%900Ω908Ω0.89%950Ω953Ω1.4%5K1.5KΩ1518Ω 1.2%2KΩ2016Ω2.46%2.5KΩ2481Ω-3.1%3kΩ2940Ω-2%3.5KΩ3509Ω0.76%4KΩ4019Ω0.61%4.3kΩ4283Ω-3.36%4.5KΩ4518Ω1.23%10k5KΩ5012Ω0.81%5.5kΩ5561Ω0.92%6KΩ6022Ω0.28%6.5KΩ6478Ω-1.84%7KΩ6983Ω-1.62%8kΩ7903Ω-3.3%9.5kΩ9679Ω6%在調(diào)試時發(fā)現(xiàn)當(dāng)所測電阻阻值接近量程時測得的值不夠精確。第7章實物制作與仿真正面圖與反面圖未開啟時的電路測量電阻時的仿真圖總結(jié)我設(shè)計的自動測量電阻表能夠完成基本部分和部分發(fā)揮部分的要求,即能夠完成測量量程為1kΩ、5kΩ、10kΩ三檔,測量準(zhǔn)確度為±5%;能自動顯示單位,這三檔量程具有自動量程轉(zhuǎn)換功能。這個基于單片機(jī)設(shè)計的電阻表具有智能化的功能如果投入生產(chǎn)可以增加量程以便于使用。這種電阻表成本低且實用性、可操作性都很強(qiáng)。通過本次課設(shè),我知道了怎么去買器材,不僅僅要知道自己所需要的器材名稱還要知道型號。遇到問題我們要學(xué)會通過另一種途徑解決問題,比如本次課設(shè),我使用的是ADC0832芯片而在電子市場的時候拿到的卻是DAC0832,這與賣家的粗心有關(guān),但是根本問題還在我自身,沒有看清元器件的型號。下次做每一次失敗都是下次成功的基礎(chǔ)。感謝學(xué)校給我們這次機(jī)會,鍛煉了我們的動手能力及運用專業(yè)軟件的能力。通過這次課設(shè)讓我明白了理論和實際操作之間差距,而且也讓我很明確得意識到自己在數(shù)電上有很多的知識漏洞,以后應(yīng)該多鉆研一下。這次課程設(shè)計我主要負(fù)責(zé)文論撰寫,在寫論文過程中積極和同組同學(xué)探討電梯的基本原理,每個模塊的功能及如何實現(xiàn)。對Office套件的使用更熟悉,為以后畢業(yè)論文的撰寫奠定了一定基礎(chǔ)。最后再次感謝這次課程設(shè)計。參考文獻(xiàn)【1】陳舜青《C語言程序設(shè)計》南京大學(xué)出版社【2】張齊朱西寧《單片機(jī)應(yīng)用系統(tǒng)設(shè)計技術(shù)》第五版電子工業(yè)出版社【3】王敬棟《單片機(jī)C語言應(yīng)用100例》電子工業(yè)出版社【4】李群芳《單片機(jī)原理接口與應(yīng)用》北京:清華大學(xué)出版社附錄1元器件清單:STC89C52X12、LCD1602X13、電路板X14、排阻(10k)X15、12M晶振X1電位器X140腳管座X18腳管座X1自鎖開關(guān)X1復(fù)位開關(guān)X1整流橋X130pf瓷片電容X2排針若干排座若干轉(zhuǎn)換開關(guān)X3各個阻值電阻若干排線若干總計成本80元附錄2原理圖附錄3主程序:#include<reg52.h>#include<LCD1602.h>#include<ADC0832.h>voidget_liangcheng(void);voidhandle_code(void);voiddis_code(void);voiddis_dw_lc(void);unsignedcharcodemes1[]={"Resistors:"};unsignedcharcodedigit[]={"0123456789"};unsignedcharcodemes[]={"2001K5K10K"};unsignedcharres[5],temp_0=0,temp_1=0;unsignedchart=0,sign=7;unsignedintR=0;unsignedcharDIY_1602[]={/*--電阻符號--*/0x00,0x00,0x0E,0x11,0x11,0x0A,0x1B,0x00};/**************函數(shù)功能:延時若干毫秒*****************/voiddelaynms(unsignedcharn){unsignedchari,j,k;delaynms(100); for(i=0;i<n;i++) for(j=0;j<10;j++) for(k=0;k<33;k++);}/*************主函數(shù)*******************/voidmain(void){ unsignedcharj,T1=0,T2=0,k=1; delaynmsInit_LCD1602(); Write_DIY1602(DIY_1602);WriteAdd_1602(0x00); j=0; while(mes1[j]!='\0') WriteData_1602(mes1[j++]);while(1) { get_liangcheng(); handle_code();//處理AD讀取到的數(shù)據(jù) dis_code(); //顯示四位數(shù)字和一個小數(shù)點 dis_dw_lc(); //顯示電阻單位和量程。 delaynms(1000); }}voidget_liangcheng(void)//判斷用哪一個量程 { unsignedchari; for(i=0;i<5;i++) { P3=(P3&0xf0)+i; delaynms(50); temp_0=GetAD_code(0); sign=7; switch(i) { case0: if((0x05<temp_0)&&(temp_0<=0x4f)) //200 sign=0; break;//中斷switch; case1: if((0x20<temp_0)&&(temp_0<=0x99)) //500 sign=1; break; case2: if((0x30<temp_0)&&(temp_0<=0xa9)) //1k sign=2; break; case3: if((0x2b<temp_0)&&(temp_0<=0xb0))//5K sign=3; break; case4: if((0x2b<temp_0)&&(temp_0<0xb0))//10k sign=4; break; } if(sign!=7) //中斷for循環(huán) break;}}/*************處理AD讀出的數(shù)*******************/voidhandle_code(void) //處理AD讀出的數(shù){ unsignedchari; P3=(P3&0xf0)+sign; delaynms(50); temp_0=GetAD_code(0); //AD讀取電壓, temp_1=GetAD_code(1); R=((100*temp_0)/(255-temp_1))*10; //轉(zhuǎn)換成電阻,for(i=0;i<4;i++) //把處理后的前四位數(shù)放進(jìn)數(shù)組 { res[3-i]=R%10; R=R/10; }}/*************顯示讀數(shù)和小數(shù)點*******************/voiddis_code(void) //顯示讀數(shù)和小數(shù)點{ unsignedcharpoint=10,i; if(sign==0||sign==3)//判斷各量程的小數(shù)點放在第幾位 point=3; else if(sign==1||sign==4) point=1; else { if(sign==2) point=2; } WriteAdd_1602(0x40); //顯示四個數(shù)學(xué)和一個小數(shù)點 for(i=0;i<4;i++) { if(i==point) WriteData_1602('.'); WriteData_1602(digit[res[i]]); }}/*************顯示單位和量程*******************/voiddis_dw_lc(void){unsignedchari; WriteAdd_1602(0x46); //清除上次顯示的單位和量程。for(i=0;i<10;i++) WriteData_1602(0x20);switch(sign){ case0: //sign=0.200檔顯示(o) WriteAdd_1602(0x46); WriteData_1602(0x00); WriteData_1602('/'); WriteData_1602('('); WriteData_1602('2'); WriteData_1602('0'); WriteData_1602('0'); WriteData_1602(0x00); WriteData_1602(')');break; case1: case2: case3: //2K/20K/200/檔顯示單位(Ko) WriteAdd_1602(0x46); WriteData_1602('k'); WriteData_1602(0x00); if(sign==1) { WriteData_1602('/'); WriteData_1602('('); WriteData_1602('2'); WriteData_1602('k'); WriteData_1602(0x00); WriteData_1602(')'); } else { if(sign==2) { WriteData_1602('/'); WriteData_1602('('); WriteData_1602('2'); WriteData_1602('0'); WriteData_1602('k'); WriteData_1602(0x00); WriteData_1602(')'); } else { WriteData_1602('/'); WriteData_1602('('); WriteData_1602('2'); WriteData_1602('0'); WriteData_1602('0'); WriteData_1602('k'); WriteData_1602(0x00); WriteData_1602(')'); } } break; case4: //10k檔位,顯示單位(ko) WriteAdd_1602(0x46); WriteData_1602('k'); WriteData_1602(0x00); WriteData_1602('/'); WriteData_1602('10'); WriteData_1602('k'); WriteData_1602(0x00); break;}}ADC0832子程序:#include"ADC0832.h"unsignedcharGetAD_code(unsignedcharx)//x=0,選通通道0,反之選通1通道。{unsignedchari,dat;CS0832=1;//一個轉(zhuǎn)換周期開始CLK0832=0;//為第一個脈沖作準(zhǔn)備CS0832=0;//CS置0,片選有效DIO0832=1;//DIO置1,規(guī)定的起始信號CLK0832=1;//第一個脈沖CLK0832=0;//第一個脈沖的下降沿,此前DIO必須是高電平DIO0832=1;//DIO置1,通道選擇信號CLK0832=1;//第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0CLK0832=0;//第二個脈沖下降沿DIO0832=x;//DI置x,選擇通道xCLK0832=1;//第三個脈沖CLK0832=0;//第三個脈沖下降沿DIO0832=1;//第三個脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1CLK0832=1;//第四個脈沖for(i=0;i<8;i++)//高位在前{CLK0832=1;//第四個脈沖CLK0832=0;dat<<=1;//將下面儲存的低位數(shù)據(jù)向右移 dat|=(unsignedchar)DIO0832; //將輸出數(shù)據(jù)DIO通過或運算儲存在dat最低位} CS0832=1;//片選無效 returndat; //將讀書的數(shù)據(jù)返回}LCD1602子程序://*******************************************************//#defineLCD1602_GLOBALS#include"LCD1602.h"/*****************************************************函數(shù)功能:延時若干毫秒入口參數(shù):n***************************************************/voidLCD1602_delay(unsignedcharn){unsignedcharii,i,j; for(ii=0;ii<n;ii++) { for(i=0;i<10;i++) for(j=0;j<33;j++); }}/*****************************************************函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙***************************************************/unsignedcharBusyTest(void){bitresult; RS=0;//根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)RW=1;E=1;//E=1,才允許讀寫_nop_();//空操作_nop_();_nop_();_nop_();//空操作四個機(jī)器周期,給硬件反應(yīng)時間 result=BF;//將忙碌標(biāo)志電平賦給resultE=0;//將E恢復(fù)低電平returnresult;}/*****************************************************函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate***************************************************/voidWriteCmd_1602(unsignedchardictate){while(BusyTest()==1);//如果忙就等待 RS=0;//根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令 RW=0; E=0;//E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,//就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0" _nop_(); _nop_();//空操作兩個機(jī)器周期,給硬件反應(yīng)時間 LCD1602_Port=dictate;//將數(shù)據(jù)送入P0口,即寫入指令或地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四個機(jī)器周期,給硬件反應(yīng)時間 E=1;//E置高電平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四個機(jī)器周期,給硬件反應(yīng)時間 E=0;//當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令}/*****************************************************函數(shù)功能:指定字符顯示的實際地址入口參數(shù):x***************************************************/voidWriteAdd_1602(unsignedcharx){WriteCmd_1602(x|0x80);//顯示位置的確定方法規(guī)定為"80H+地址碼x"}/*****************************************************函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊入口參數(shù):y(為字符常量)***************************************************/voidWriteData_1602(unsignedchary){while(BusyTest()==1); RS=1;//RS為高電平,RW為低電平時,可以寫入數(shù)據(jù) RW=0; E=0;//E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,//就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0" LCD1602_Port=y;

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論