基于單片機(jī)的數(shù)字電壓表設(shè)計(jì)課程設(shè)計(jì)_第1頁(yè)
基于單片機(jī)的數(shù)字電壓表設(shè)計(jì)課程設(shè)計(jì)_第2頁(yè)
基于單片機(jī)的數(shù)字電壓表設(shè)計(jì)課程設(shè)計(jì)_第3頁(yè)
基于單片機(jī)的數(shù)字電壓表設(shè)計(jì)課程設(shè)計(jì)_第4頁(yè)
基于單片機(jī)的數(shù)字電壓表設(shè)計(jì)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章PAGEPAGE3本科學(xué)生單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(jī)的數(shù)字電壓表設(shè)計(jì)學(xué)號(hào)院(系)指導(dǎo)教師

目錄1設(shè)計(jì)要求……………… 2硬件電路設(shè)計(jì)………2.12.1.13程序設(shè)計(jì)………………4總結(jié)……………………參考文獻(xiàn)……………………附件一:電路原理圖……………附件二:程序清單……………一題目設(shè)計(jì)要求:1、用LED數(shù)碼管或LCD顯示電壓值;2、電壓測(cè)量范圍:0--200V,按2V、20V、200V量程自動(dòng)換擋;3、電壓測(cè)量精度:3位半(0000--1999),相對(duì)誤差≤5%;方案確定:在拿到這個(gè)題目的時(shí)候,我首先想到的是,AD轉(zhuǎn)換器直接用單片機(jī)內(nèi)部自帶的AD轉(zhuǎn)換器,因?yàn)橐箅妷簻y(cè)量精度≤5%,用個(gè)8位的AD就能達(dá)到要求了。所以我最終選用了STC12C5A60S2單片機(jī),內(nèi)部自帶10位AD,足夠滿(mǎn)足要求。20V與200V高電壓可以采用電阻分壓將其分壓至5V,然后就可以單片機(jī)AD直接采,自動(dòng)換檔可以就跟據(jù)輸入電壓自動(dòng)切換合適的電阻分壓系數(shù),然后在程序里處理好顯示就行。因?yàn)檩斎腚妷罕容^高,不能使用普通的開(kāi)關(guān),可以用電磁繼電器作為開(kāi)關(guān),然后用單片機(jī)IO口控制繼電器的通斷達(dá)到切換電阻分壓系數(shù)的目的。綜合上述考慮,設(shè)計(jì)了以下電路:其中,其中K1,K2,K3是繼電器開(kāi)關(guān),通斷由IO口控制,一次只閉合一個(gè)開(kāi)關(guān)。分壓電阻設(shè)計(jì)為當(dāng)K1按下時(shí)AD采樣電壓值等于輸入電壓值,當(dāng)K2按下時(shí)AD采樣電壓值等于輸入電壓值/4,當(dāng)K3按下時(shí)AD采樣電壓值等于輸入電壓值/40,這樣AD采樣值最大為5V,就能直接用單片機(jī)采了。為防止單片機(jī)上電因?yàn)锳D腳測(cè)量的是高電壓而導(dǎo)致燒壞單片機(jī),所以在程序中默認(rèn)上電閉合K3開(kāi)關(guān),然后AD采樣,并根據(jù)外部電壓的大小進(jìn)行升量程和降量程處理,直到自動(dòng)換檔到合適的量程,然后再顯示。2硬件電路設(shè)計(jì):2.1單片機(jī)最小系統(tǒng):我選用的是STC12C5A60S2單片機(jī),根據(jù)數(shù)據(jù)手冊(cè),采用24M晶振情況下,最小系統(tǒng)如下圖所示:2.2電阻分壓網(wǎng)絡(luò)設(shè)計(jì):因?yàn)楫?dāng)K1按下時(shí)AD采樣電壓值等于輸入電壓值,而當(dāng)K2按下時(shí)AD采樣電壓值等于輸入電壓值/4,所以(R2+R3)/(R1+R2+R3)=1/4,當(dāng)K3按下時(shí)AD采樣電壓值等于輸入電壓值/40,即R3/(R1+R2+R3)=1/40。所以我只要給出R1+R2+R3的電阻值,就可以一步步算出R1、R2、R3的電阻值分別為多少,而且R1+R2+R3就是輸入阻抗,本次設(shè)計(jì)中,我選R1+R2+R3的值為1MΩ,相應(yīng)的算出來(lái)R1+R2+R3=1MΩ(R2+R3)/(R1+R2+R3)=1/4R3/(R1+R2+R3)=1/40所以算出來(lái)R3=25KR2=225KR1=750K但由于沒(méi)有標(biāo)稱(chēng)阻值為25K、225K、750K的電阻,最終采用電阻串聯(lián)的方式。25K=21.7K+3.3K、225K=198K+22K+5K、750K=460K+269K+10K+1K。為了保證精度,每個(gè)電阻均用實(shí)驗(yàn)室里的6位萬(wàn)用表測(cè)量。2.3開(kāi)關(guān)電路設(shè)計(jì):如右圖所示,當(dāng)IO口置0時(shí),三極管飽和,輸出高電平,繼電器1、4腳閉合,1、5腳斷開(kāi);當(dāng)IO口置1時(shí),三極管截止,三極管集電極和發(fā)射極等效斷開(kāi),所以繼電器1、4腳斷開(kāi),1、5腳閉合。2.4顯示電路:本設(shè)計(jì)采用LCD12864作顯示部分,LCD12864是并口數(shù)據(jù)傳輸,具有速度快的優(yōu)點(diǎn),三軟件部分3.1程序框圖:附件一:電路原理圖及其實(shí)物圖:PCB圖:實(shí)物圖:附件二:程序清單主函數(shù)c文件:#include"STC12C5A60S2.h"#include"STC12AD.h"#include"BASIC.h"#include"12864.h"uint8_tSwitch_Flog=3;voidmain(){Switch3=0;Switch2=1;Switch1=1;Switch_Flog=3;delayms(100); Isr_Init();Time0_Init();Init_12864();AD_Init();while(1);}STC12C5A60S2.h:#ifndefSTC12C560S_H#defineSTC12C560S_H////新一代1T8051系列單片機(jī)內(nèi)核特殊功能寄存器C51CoreSFRs//76543210ResetValuesfrACC=0xE0;//Accumulator0000,0000sfrB=0xF0;//BRegister0000,0000sfrPSW=0xD0;//ProgramStatusWordCYACF0RS1RS0OVF1P0000,0000//sbitCY=PSW^7;sbitAC=PSW^6;sbitF0=PSW^5;sbitRS1=PSW^4;sbitRS0=PSW^3;sbitOV=PSW^2;sbitP=PSW^0;//sfrSP=0x81;//StackPointer0000,0111sfrDPL=0x82;//DataPointerLowByte0000,0000sfrDPH=0x83;//DataPointerHighByte0000,0000////新一代1T8051系列單片機(jī)系統(tǒng)管理特殊功能寄存器//不可位尋址76543210ResetValuesfrPCON=0x87;//PowerControlSMODSMOD0LVDFPOFGF1GF0PDIDL0001,0000//76543210ResetValuesfrAUXR=0x8E;//AuxiliaryRegisterT0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRS0000,0000//sfrAUXR1=0xA2;//AuxiliaryRegister1-PCA_P4SPI_P4S2_P4GF2ADRJ-DPS0000,0000/*PCA_P4:0,缺省PCA在P1口1,PCA/PWM從P1口切換到P4口:ECI從P1.2切換到P4.1口,PCA0/PWM0從P1.3切換到P4.2口PCA1/PWM1從P1.4切換到P4.3口SPI_P4:0,缺省SPI在P1口1,SPI從P1口切換到P4口:SPICLK從P1.7切換到P4.3口MISO從P1.6切換到P4.2口MOSI從P1.5切換到P4.1口SS從P1.4切換到P4.0口S2_P4:0,缺省UART2在P1口1,UART2從P1口切換到P4口:TxD2從P1.3切換到P4.3口RxD2從P1.2切換到P4.2口GF2:通用標(biāo)志位ADRJ:0,10位A/D轉(zhuǎn)換結(jié)果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器1,10位A/D轉(zhuǎn)換結(jié)果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器DPS:0,使用缺省數(shù)據(jù)指針DPTR01,使用另一個(gè)數(shù)據(jù)指針DPTR1*///sfrWAKE_CLKO=0x8F;//附加的SFRWAK1_CLKO/*76543210ResetValuePCAWAKEUPRXD_PIN_IET1_PIN_IET0_PIN_IELVD_WAKE_T1CLKOT0CLKO0000,0000Bb7-PCAWAKEUP:PCA中斷可喚醒powerdown。b6-RXD_PIN_IE:當(dāng)P3.0(RXD)下降沿置位RI時(shí)可喚醒powerdown(必須打開(kāi)相應(yīng)中斷)。b5-T1_PIN_IE:當(dāng)T1腳下降沿置位T1中斷標(biāo)志時(shí)可喚醒powerdown(必須打開(kāi)相應(yīng)中斷)。b4-T0_PIN_IE:當(dāng)T0腳下降沿置位T0中斷標(biāo)志時(shí)可喚醒powerdown(必須打開(kāi)相應(yīng)中斷)。b3-LVD_WAKE:當(dāng)CMPIN腳低電平置位LVD中斷標(biāo)志時(shí)可喚醒powerdown(必須打開(kāi)相應(yīng)中斷)。b2-b1-T1CLKO:允許T1CKO(P3.5)腳輸出T1溢出脈沖,F(xiàn)ck1=1/2T1溢出率b0-T0CLKO:允許T0CKO(P3.4)腳輸出T0溢出脈沖,F(xiàn)ck0=1/2T1溢出率*///sfrCLK_DIV=0x97;//ClockDivder-----CLKS2CLKS1CLKS0xxxx,x000//sfrBUS_SPEED=0xA1;//Stretchregister--ALES1ALES0-RWS2RWS1RWS0xx10,x011/*ALES1andALES0:00:TheP0addresssetuptimeandholdtimetoALEnegativeedgeisoneclockcycle01:TheP0addresssetuptimeandholdtimetoALEnegativeedgeistwoclockcycles.10:TheP0addresssetuptimeandholdtimetoALEnegativeedgeisthreeclockcycles.(default)11:TheP0addresssetuptimeandholdtimetoALEnegativeedgeisfourclockcycles.RWS2,RWS1,RWS0:000:TheMOVXread/writepulseis1clockcycle.001:TheMOVXread/writepulseis2clockcycles.010:TheMOVXread/writepulseis3clockcycles.011:TheMOVXread/writepulseis4clockcycles.(default)100:TheMOVXread/writepulseis5clockcycles.101:TheMOVXread/writepulseis6clockcycles.110:TheMOVXread/writepulseis7clockcycles.111:TheMOVXread/writepulseis8clockcycles.*/////新一代1T8051系列單片機(jī)中斷特殊功能寄存器//有的中斷控制、中斷標(biāo)志位散布在其它特殊功能寄存器中,這些位在位地址中定義//其中有的位無(wú)位尋址能力,請(qǐng)參閱新一代1T8051系列單片機(jī)中文指南//76543210ResetValuesfrIE=0xA8;//中斷控制寄存器EAELVDEADCESET1EX1ET0EX00x00,0000//sbitEA=IE^7;sbitELVD=IE^6;//低壓監(jiān)測(cè)中斷允許位sbitEADC=IE^5;//ADC中斷允許位sbitES=IE^4;sbitET1=IE^3;sbitEX1=IE^2;sbitET0=IE^1;sbitEX0=IE^0;//sfrIE2=0xAF;//AuxiliaryInterrupt------ESPIES20000,0000B////76543210ResetValuesfrIP=0xB8;//中斷優(yōu)先級(jí)低位PPCAPLVDPADCPSPT1PX1PT0PX00000,0000//sbitPPCA=IP^7;//PCA模塊中斷優(yōu)先級(jí)sbitPLVD=IP^6;//低壓監(jiān)測(cè)中斷優(yōu)先級(jí)sbitPADC=IP^5;//ADC中斷優(yōu)先級(jí)sbitPS=IP^4;sbitPT1=IP^3;sbitPX1=IP^2;sbitPT0=IP^1;sbitPX0=IP^0;////76543210ResetValuesfrIPH=0xB7;//中斷優(yōu)先級(jí)高位PPCAHPLVDHPADCHPSHPT1HPX1HPT0HPX0H0000,0000sfrIP2=0xB5;//------PSPIPS2xxxx,xx00sfrIPH2=0xB6;//------PSPIHPS2Hxxxx,xx00////新一代1T8051系列單片機(jī)I/O口特殊功能寄存器//76543210ResetValuesfrP0=0x80;//8bitPort0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.01111,1111sfrP0M0=0x94;//0000,0000sfrP0M1=0x93;//0000,0000sfrP1=0x90;//8bitPort1P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.01111,1111sfrP1M0=0x92;//0000,0000sfrP1M1=0x91;//0000,0000sfrP1ASF=0x9D;//P1analogspecialfunctionsfrP2=0xA0;//8bitPort2P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.01111,1111sfrP2M0=0x96;//0000,0000sfrP2M1=0x95;//0000,0000sfrP3=0xB0;//8bitPort3P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.01111,1111sfrP3M0=0xB2;//0000,0000sfrP3M1=0xB1;//0000,0000sfrP4=0xC0;//8bitPort4P4.7P4.6P4.5P4.4P4.3P4.2P4.1P4.01111,1111sfrP4M0=0xB4;//0000,0000sfrP4M1=0xB3;//0000,0000//76543210ResetValuesfrP4SW=0xBB;//Port-4switch -LVD_P4.6ALE_P4.5NA_P4.4---- x000,xxxxsfrP5=0xC8;//8bitPort5----P5.3P5.2P5.1P5.0xxxx,1111sfrP5M0=0xCA;//0000,0000sfrP5M1=0xC9;//0000,0000////新一代1T8051系列單片機(jī)定時(shí)器特殊功能寄存器//76543210ResetValuesfrTCON=0x88;//T0/T1ControlTF1TR1TF0TR0IE1IT1IE0IT00000,0000//sbitTF1=TCON^7;sbitTR1=TCON^6;sbitTF0=TCON^5;sbitTR0=TCON^4;sbitIE1=TCON^3;sbitIT1=TCON^2;sbitIE0=TCON^1;sbitIT0=TCON^0;//sfrTMOD=0x89;//T0/T1ModesGATE1C/T1M1_1M1_0GATE0C/T0M0_1M0_00000,0000sfrTL0=0x8A;//T0LowByte0000,0000sfrTH0=0x8C;//T0HighByte0000,0000sfrTL1=0x8B;//T1LowByte0000,0000sfrTH1=0x8D;//T1HighByte0000,0000////新一代1T8051系列單片機(jī)串行口特殊功能寄存器//76543210ResetValuesfrSCON=0x98;//SerialControlSM0/FESM1SM2RENTB8RB8TIRI0000,0000//sbitSM0=SCON^7;//SM0/FEsbitSM1=SCON^6;sbitSM2=SCON^5;sbitREN=SCON^4;sbitTB8=SCON^3;sbitRB8=SCON^2;sbitTI=SCON^1;sbitRI=SCON^0;//sfrSBUF=0x99;//SerialDataBufferxxxx,xxxxsfrSADEN=0xB9;//SlaveAddressMask0000,0000sfrSADDR=0xA9;//SlaveAddress0000,0000////76543210ResetValuesfrS2CON=0x9A;//S2ControlS2SM0S2SM1S2SM2S2RENS2TB8S2RB8S2TIS2RI00000000BsfrS2BUF=0x9B;//S2SerialBufferxxxx,xxxxsfrBRT=0x9C;//S2Baud-RateTimer0000,0000////新一代1T8051系列單片機(jī)看門(mén)狗定時(shí)器特殊功能寄存器sfrWDT_CONTR=0xC1;//Watch-Dog-TimerControlregister//76543210ResetValue//WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS0xx00,0000//////新一代1T8051系列單片機(jī)PCA/PWM特殊功能寄存器//76543210ResetValuesfrCCON=0xD8;//PCA控制寄存器。CFCR----CCF1CCF000xx,xx00//sbitCF=CCON^7;//PCA計(jì)數(shù)器溢出標(biāo)志,由硬件或軟件置位,必須由軟件清0。sbitCR=CCON^6;//1:允許PCA計(jì)數(shù)器計(jì)數(shù),必須由軟件清0。//-//-sbitCCF1=CCON^1;//PCA模塊1中斷標(biāo)志,由硬件置位,必須由軟件清0。sbitCCF0=CCON^0;//PCA模塊0中斷標(biāo)志,由硬件置位,必須由軟件清0。//sfrCMOD=0xD9;//PCA工作模式寄存器。CIDL---CPS2CPS1CPS0ECF0xxx,x000/*CIDL:idle狀態(tài)時(shí)PCA計(jì)數(shù)器是否繼續(xù)計(jì)數(shù),0:繼續(xù)計(jì)數(shù),1:停止計(jì)數(shù)。CPS2:PCA計(jì)數(shù)器脈沖源選擇位2。CPS1:PCA計(jì)數(shù)器脈沖源選擇位1。CPS0:PCA計(jì)數(shù)器脈沖源選擇位0。CPS2CPS1CPS0000系統(tǒng)時(shí)鐘頻率fosc/12。001系統(tǒng)時(shí)鐘頻率fosc/2。010Timer0溢出。011由ECI/P3.4腳輸入的外部時(shí)鐘,最大fosc/2。100系統(tǒng)時(shí)鐘頻率,F(xiàn)osc/1101系統(tǒng)時(shí)鐘頻率/4,F(xiàn)osc/4110系統(tǒng)時(shí)鐘頻率/6,F(xiàn)osc/6111系統(tǒng)時(shí)鐘頻率/8,F(xiàn)osc/8ECF:PCA計(jì)數(shù)器溢出中斷允許位,1--允許CF(CCON.7)產(chǎn)生中斷。*///sfrCL=0xE9;//PCA計(jì)數(shù)器低位0000,0000sfrCH=0xF9;//PCA計(jì)數(shù)器高位0000,0000////76543210ResetValuesfrCCAPM0=0xDA;//PCA模塊0PWM寄存器-ECOM0CAPP0CAPN0MAT0TOG0PWM0ECCF0x000,0000sfrCCAPM1=0xDB;//PCA模塊1PWM寄存器-ECOM1CAPP1CAPN1MAT1TOG1PWM1ECCF1x000,0000//ECOMn=1:允許比較功能。//CAPPn=1:允許上升沿觸發(fā)捕捉功能。//CAPNn=1:允許下降沿觸發(fā)捕捉功能。//MATn=1:當(dāng)匹配情況發(fā)生時(shí),允許CCON中的CCFn置位。//TOGn=1:當(dāng)匹配情況發(fā)生時(shí),CEXn將翻轉(zhuǎn)。//PWMn=1:將CEXn設(shè)置為PWM輸出。//ECCFn=1:允許CCON中的CCFn觸發(fā)中斷。//ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn//00000000x00未啟用任何功能。//x10000x0x2116位CEXn上升沿觸發(fā)捕捉功能。//x01000x0x1116位CEXn下降沿觸發(fā)捕捉功能。//x11000x0x3116位CEXn邊沿(上、下沿)觸發(fā)捕捉功能。//100100x0x4916位軟件定時(shí)器。//100110x0x4d16位高速脈沖輸出。//10000100x428位PWM。//ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn//00000000x00無(wú)此操作//10000100x42普通8位PWM,無(wú)中斷//11000110x63PWM輸出由低變高可產(chǎn)生中斷(有捕捉,所以要置ECCFn=1,以在邊沿中斷中進(jìn)行相應(yīng)的操作)//10100110x53PWM輸出由高變低可產(chǎn)生中斷//11100110x73PWM輸出由低變高或由高變低都可產(chǎn)生中斷//sfrCCAP0L=0xEA;//PCA模塊0的捕捉/比較寄存器低8位。0000,0000sfrCCAP0H=0xFA;//PCA模塊0的捕捉/比較寄存器高8位。0000,0000sfrCCAP1L=0xEB;//PCA模塊1的捕捉/比較寄存器低8位。0000,0000sfrCCAP1H=0xFB;//PCA模塊1的捕捉/比較寄存器高8位。0000,0000////76543210ResetValuesfrPCA_PWM0=0xF2;//PCA模塊0PWM寄存器。------EPC0HEPC0Lxxxx,xx00sfrPCA_PWM1=0xF3;//PCA模塊1PWM寄存器。------EPC1HEPC1Lxxxx,xx00//PCA_PWMn:76543210//------EPCnHEPCnL//B7-B2:保留//B1(EPCnH):在PWM模式下,與CCAPnH組成9位數(shù)。//B0(EPCnL):在PWM模式下,與CCAPnL組成9位數(shù)。////新一代1T8051系列單片機(jī)ADC特殊功能寄存器//76543210ResetValuesfrADC_CONTR=0xBC;//A/D轉(zhuǎn)換控制寄存器ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS00000,0000sfrADC_RES=0xBD;//A/D轉(zhuǎn)換結(jié)果高8位ADCV.9ADCV.8ADCV.7ADCV.6ADCV.5ADCV.4ADCV.3ADCV.2 0000,0000sfrADC_RESL=0xBE;//A/D轉(zhuǎn)換結(jié)果低2位ADCV.1ADCV.0 0000,0000////新一代1T8051系列單片機(jī)SPI特殊功能寄存器//76543210ResetValuesfrSPCTL=0xCE;//SPIControlRegisterSSIGSPENDORDMSTRCPOLCPHASPR1SPR00000,0100sfrSPSTAT=0xCD;//SPIStatusRegisterSPIFWCOL------00xx,xxxxsfrSPDAT=0xCF;//SPIDataRegister0000,0000////新一代1T8051系列單片機(jī)IAP/ISP特殊功能寄存器sfrIAP_DATA=0xC2;sfrIAP_ADDRH=0xC3;sfrIAP_ADDRL=0xC4;//76543210ResetValuesfrIAP_CMD=0xC5;//IAPModeTable0-----MS1MS00xxx,xx00sfrIAP_TRIG=0xC6;sfrIAP_CONTR=0xC7;//IAPControlRegisterIAPENSWBSSWRSTCFAIL-WT2WT1WT00000,x000//#endifSTC12AD.h:#ifndefSTC12AD_H#defineSTC12AD_H#include"BASIC.h"http://#include"1602.h"#include"12864.h"#defineADC_POWER0x80 //ADC模塊上電#defineSPEED_LL0x00 //540clocks#defineSPEED_LH0x20 //360clocks#defineSPEED_HL0x40 //180clocks#defineSPEED_HH0x60 //90 clocks#defineADC_FLAG0x10//ADC轉(zhuǎn)換完成標(biāo)志,必須贏軟件清0#defineADC_START0x08#defineCh_Votage0x07#defineADC_STOP0x00//#definech1 0x05 //選擇AD輸入口(P1^5)//#definech2 0x06 //選擇AD輸入口(P1^6)sbitControl_signal=P1^2;sbitSwitch1=P1^5;sbitSwitch2=P1^4;sbitSwitch3=P1^3;/*ADC電源電壓*/floatADC_Voltage_Resolution_Multiply_1000=5.078125; //4.8->0.00468755V-> 0.00468755.2V->0.005078125/*AD采樣前一時(shí)刻,后一時(shí)刻,當(dāng)前時(shí)刻,L飽和時(shí)刻的電壓值,保留三位小數(shù)*/unsignedlongintAD_REsult_Display=0;unsignedintAD_REsult=0;/*AD采樣通道設(shè)定,*/uint8_tj=0,j1=0;/*AD采樣值存儲(chǔ)數(shù)組,為精準(zhǔn)采樣軟件平均*/unsignedintxdataAD_Result_Divide[200];uint16_tTime1s_Display=0; externuint8_tSwitch_Flog;voidTime0_Init(){TMOD=0x01;//定時(shí)器1工作方式1(16位定時(shí)計(jì)算器)TH0=(65536-50000)/256;TL0=(65536-50000)%256;; //調(diào)頻(250K/s(溢出率))TR0=1;}VoidAD_Init(){/***********************************************************P1ASF:P1端口是否用來(lái)做ADC輸入端口1:是(ADC輸入端口)0:否(普通I/O口)***********************************************************/P1ASF=0x80; //確定P1口的AD復(fù)用P1M1=0x80; //設(shè)定AD采樣端口為高阻輸入(1::0->高阻輸入)P1M0=0x00;ADC_RES=0; //轉(zhuǎn)換結(jié)果寄存器初始化ADC_RESL=0;ADC_CONTR=ADC_POWER|SPEED_HH|ADC_START|Ch_Votage;//ADC控制寄存器設(shè)置//delayms(10); //等待ADC電源穩(wěn)定delay8uS(); //因?yàn)锳DC的時(shí)鐘源不是系統(tǒng)時(shí)鐘,延時(shí)確保上面的控制字寫(xiě)入ADC_CONTR寄存器中}voidADC_isr()interrupt5using1{ADC_CONTR&=!ADC_FLAG; //清除ADC轉(zhuǎn)換完畢標(biāo)志AD_REsult=(ADC_RES)*4+ADC_RESL;AD_REsult=AD_REsult*ADC_Voltage_Resolution_Multiply_1000; //電壓采樣 //AD_Result_Divide[j]=AD_REsult;//j++; switch(Switch_Flog) { case3: if(AD_REsult>=4990) //超過(guò)電壓表最大量程,發(fā)出警告 { j=0; } elseif(AD_REsult>=500) //次量程,降量程,切換Switch2 { AD_Result_Divide[j]=AD_REsult; j++; } else { Switch3=1; delayms(100); // Switch1=1; Switch2=0; delayms(100); Switch_Flog=2; j=0; } break; case2: if(AD_REsult>=4990) //過(guò)量程,so升量程,切換到Switch3 { Switch2=1; delayms(100); //繼電器動(dòng)作延時(shí) Switch3=0; delayms(100); //繼電器動(dòng)作延時(shí)// Switch1=1; Switch_Flog=3; j=0; } elseif(AD_REsult>=500) { AD_Result_Divide[j]=AD_REsult; j++; } else //次量程,降量程,切換到Switch1 { Switch2=1; delayms(100); //繼電器動(dòng)作延時(shí)// Switch3=1; Switch1=0; delayms(100); Switch_Flog=1; j=0; } break; case1: if(AD_REsult>=2000) //過(guò)量程,so升量程,切換到Switch2 { Switch1=1; delayms(100); //繼電器動(dòng)作延時(shí)// Switch3=1; Switch2=0; delayms(100); //繼電器動(dòng)作延時(shí) Switch_Flog=2; j=0; } else { AD_Result_Divide[j]=AD_REsult; j++; } break; } if(j==200) //一次值采樣完畢,執(zhí)行計(jì)算 {// j1=j; AD_REsult=0; AD_REsult_Display=0; for(j=0;j<200;j++) { AD_REsult_Display=AD_REsult_Display+AD_Result_Divide[j]; } AD_REsult_Display=AD_REsult_Display/200; //求平均值(寄存器值)// AD_REsult_Display=AD_REsult*ADC_Voltage_Resolution_Multiply_1000; //模擬計(jì)算(量化電壓為VCC/1024,保留三位小數(shù)) j=0; } ADC_CONTR=ADC_POWER|SPEED_LL|ADC_START|Ch_Votage; //再次采樣 } voidTime1_isr()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256; //調(diào)頻(250K/s(溢出率))Time1s_Display++; if(Time1s_Display==40) { Time1s_Display=0; Address_Set_Zifu_12864(3,4); //設(shè)定12864顯示地址 switch(Switch_Flog) { case3: AD_REsult_Display=AD_REsult_Display*40;//根據(jù)寄存器值電壓還原 Variable_Display_12864(AD_REsult_Display/100000); Variable_Display_12864(AD_REsult_Display%100000/10000); Variable_Display_12864(AD_REsult_Display%10000/1000); DecimalPoint_display_12864(); Variable_Display_12864(AD_REsult_Display%1000/100); break; case2:// AD_REsult_Display=AD_REsult_Display-78; AD_REsult_Display=AD_REsult_Display*4; //根據(jù)寄存器值電壓還原 AD_REsult_Display=AD_REsult_Display/10; //還原值// AD_REsult_Display=AD_REsult_Display*4; Variable_Display_12864(AD_REsult_Display/1000); Variable_Display_12864(AD_REsult_Display%1000/100); DecimalPoint_display_12864(); Variable_Display_12864(AD_REsult_Display%100/10); Variable_Display_12864(AD_REsult_Display%10); break; case1:// AD_REsult_Display=AD_REsult_Display; //根據(jù)寄存器值電壓還原 Variable_Display_12864(AD_REsult_Display/1000); DecimalPoint_display_12864(); Variable_Display_12864(AD_REsult_Display%1000/100); Variable_Display_12864(AD_REsult_Display%100/10); Variable_Display_12864(AD_REsult_Display%10); break; } }} #endiBASIC.h:#include<intrins.h>#include"STC12C5A60S2.h"#ifndefBASIC_H#defineBASIC_H#defineSTC510#defineSTC121bitMCU=STC12; //選擇單片機(jī)型號(hào)#defineuint8_tunsignedchar#defineuint16_tunsignedint//float:可以保留6-7位小數(shù)//double:可以保留15-16位小數(shù)//typedefunsignedcharBYTE;voiddelay8uS(){uint8_tz=0; if(MCU==STC51) { _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); } if(MCU==STC12) { for(z=0;z<8;z++) { _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); } }} voiddelayms(uint16_tz){ uint16_tx,y,i; if(MCU==STC51) { for(x=0;x<z;x++) for(y=0;y<110;y++); } if(MCU==STC12) { for(i=0;i<8;i++) for(x=0;x<z;x++) for(y=0;y<110;y++); }}voidIsr_Init(){EA=1;//ELVD=1; //低壓監(jiān)測(cè)中斷允許位EADC=1; //ADC中斷允許位//ES=1;//ET1=1;EX1=1;ET0=1;//EX0=1;} //76543210ResetValue//IPH:中斷優(yōu)先級(jí)低位PPCAHPLVDHPADCHPSHPT1HPX1HPT0HPX0H0000,0000(不可位尋址)//76543210ResetValue//IP:中斷優(yōu)先級(jí)低位PPCAPLVDPADCPSPT1PX1PT0PX00000,0000(可位尋址)#endif12864.h:#ifndefLCD_12864_H#define LCD_12864_H#include"intrins.h"#defineIOP0sbitRS=P1^0;sbitRW=P1^1;sbitEN=P1^2;/*sbit

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論