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

下載本文檔

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

文檔簡介

第3章PAGEPAGE3本科學生單片機課程設計報告基于單片機的數(shù)字電壓表設計學號院(系)指導教師

目錄1設計要求……………… 2硬件電路設計………2.12.1.13程序設計………………4總結……………………參考文獻……………………附件一:電路原理圖……………附件二:程序清單……………一題目設計要求:1、用LED數(shù)碼管或LCD顯示電壓值;2、電壓測量范圍:0--200V,按2V、20V、200V量程自動換擋;3、電壓測量精度:3位半(0000--1999),相對誤差≤5%;方案確定:在拿到這個題目的時候,我首先想到的是,AD轉換器直接用單片機內部自帶的AD轉換器,因為要求電壓測量精度≤5%,用個8位的AD就能達到要求了。所以我最終選用了STC12C5A60S2單片機,內部自帶10位AD,足夠滿足要求。20V與200V高電壓可以采用電阻分壓將其分壓至5V,然后就可以單片機AD直接采,自動換檔可以就跟據(jù)輸入電壓自動切換合適的電阻分壓系數(shù),然后在程序里處理好顯示就行。因為輸入電壓比較高,不能使用普通的開關,可以用電磁繼電器作為開關,然后用單片機IO口控制繼電器的通斷達到切換電阻分壓系數(shù)的目的。綜合上述考慮,設計了以下電路:其中,其中K1,K2,K3是繼電器開關,通斷由IO口控制,一次只閉合一個開關。分壓電阻設計為當K1按下時AD采樣電壓值等于輸入電壓值,當K2按下時AD采樣電壓值等于輸入電壓值/4,當K3按下時AD采樣電壓值等于輸入電壓值/40,這樣AD采樣值最大為5V,就能直接用單片機采了。為防止單片機上電因為AD腳測量的是高電壓而導致燒壞單片機,所以在程序中默認上電閉合K3開關,然后AD采樣,并根據(jù)外部電壓的大小進行升量程和降量程處理,直到自動換檔到合適的量程,然后再顯示。2硬件電路設計:2.1單片機最小系統(tǒng):我選用的是STC12C5A60S2單片機,根據(jù)數(shù)據(jù)手冊,采用24M晶振情況下,最小系統(tǒng)如下圖所示:2.2電阻分壓網絡設計:因為當K1按下時AD采樣電壓值等于輸入電壓值,而當K2按下時AD采樣電壓值等于輸入電壓值/4,所以(R2+R3)/(R1+R2+R3)=1/4,當K3按下時AD采樣電壓值等于輸入電壓值/40,即R3/(R1+R2+R3)=1/40。所以我只要給出R1+R2+R3的電阻值,就可以一步步算出R1、R2、R3的電阻值分別為多少,而且R1+R2+R3就是輸入阻抗,本次設計中,我選R1+R2+R3的值為1MΩ,相應的算出來R1+R2+R3=1MΩ(R2+R3)/(R1+R2+R3)=1/4R3/(R1+R2+R3)=1/40所以算出來R3=25KR2=225KR1=750K但由于沒有標稱阻值為25K、225K、750K的電阻,最終采用電阻串聯(lián)的方式。25K=21.7K+3.3K、225K=198K+22K+5K、750K=460K+269K+10K+1K。為了保證精度,每個電阻均用實驗室里的6位萬用表測量。2.3開關電路設計:如右圖所示,當IO口置0時,三極管飽和,輸出高電平,繼電器1、4腳閉合,1、5腳斷開;當IO口置1時,三極管截止,三極管集電極和發(fā)射極等效斷開,所以繼電器1、4腳斷開,1、5腳閉合。2.4顯示電路:本設計采用LCD12864作顯示部分,LCD12864是并口數(shù)據(jù)傳輸,具有速度快的優(yōu)點,三軟件部分3.1程序框圖:附件一:電路原理圖及其實物圖:PCB圖:實物圖:附件二:程序清單主函數(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系列單片機內核特殊功能寄存器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系列單片機系統(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:通用標志位ADRJ:0,10位A/D轉換結果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器1,10位A/D轉換結果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器DPS:0,使用缺省數(shù)據(jù)指針DPTR01,使用另一個數(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:當P3.0(RXD)下降沿置位RI時可喚醒powerdown(必須打開相應中斷)。b5-T1_PIN_IE:當T1腳下降沿置位T1中斷標志時可喚醒powerdown(必須打開相應中斷)。b4-T0_PIN_IE:當T0腳下降沿置位T0中斷標志時可喚醒powerdown(必須打開相應中斷)。b3-LVD_WAKE:當CMPIN腳低電平置位LVD中斷標志時可喚醒powerdown(必須打開相應中斷)。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系列單片機中斷特殊功能寄存器//有的中斷控制、中斷標志位散布在其它特殊功能寄存器中,這些位在位地址中定義//其中有的位無位尋址能力,請參閱新一代1T8051系列單片機中文指南//76543210ResetValuesfrIE=0xA8;//中斷控制寄存器EAELVDEADCESET1EX1ET0EX00x00,0000//sbitEA=IE^7;sbitELVD=IE^6;//低壓監(jiān)測中斷允許位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)先級低位PPCAPLVDPADCPSPT1PX1PT0PX00000,0000//sbitPPCA=IP^7;//PCA模塊中斷優(yōu)先級sbitPLVD=IP^6;//低壓監(jiān)測中斷優(yōu)先級sbitPADC=IP^5;//ADC中斷優(yōu)先級sbitPS=IP^4;sbitPT1=IP^3;sbitPX1=IP^2;sbitPT0=IP^1;sbitPX0=IP^0;////76543210ResetValuesfrIPH=0xB7;//中斷優(yōu)先級高位PPCAHPLVDHPADCHPSHPT1HPX1HPT0HPX0H0000,0000sfrIP2=0xB5;//------PSPIPS2xxxx,xx00sfrIPH2=0xB6;//------PSPIHPS2Hxxxx,xx00////新一代1T8051系列單片機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系列單片機定時器特殊功能寄存器//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系列單片機串行口特殊功能寄存器//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系列單片機看門狗定時器特殊功能寄存器sfrWDT_CONTR=0xC1;//Watch-Dog-TimerControlregister//76543210ResetValue//WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS0xx00,0000//////新一代1T8051系列單片機PCA/PWM特殊功能寄存器//76543210ResetValuesfrCCON=0xD8;//PCA控制寄存器。CFCR----CCF1CCF000xx,xx00//sbitCF=CCON^7;//PCA計數(shù)器溢出標志,由硬件或軟件置位,必須由軟件清0。sbitCR=CCON^6;//1:允許PCA計數(shù)器計數(shù),必須由軟件清0。//-//-sbitCCF1=CCON^1;//PCA模塊1中斷標志,由硬件置位,必須由軟件清0。sbitCCF0=CCON^0;//PCA模塊0中斷標志,由硬件置位,必須由軟件清0。//sfrCMOD=0xD9;//PCA工作模式寄存器。CIDL---CPS2CPS1CPS0ECF0xxx,x000/*CIDL:idle狀態(tài)時PCA計數(shù)器是否繼續(xù)計數(shù),0:繼續(xù)計數(shù),1:停止計數(shù)。CPS2:PCA計數(shù)器脈沖源選擇位2。CPS1:PCA計數(shù)器脈沖源選擇位1。CPS0:PCA計數(shù)器脈沖源選擇位0。CPS2CPS1CPS0000系統(tǒng)時鐘頻率fosc/12。001系統(tǒng)時鐘頻率fosc/2。010Timer0溢出。011由ECI/P3.4腳輸入的外部時鐘,最大fosc/2。100系統(tǒng)時鐘頻率,F(xiàn)osc/1101系統(tǒng)時鐘頻率/4,F(xiàn)osc/4110系統(tǒng)時鐘頻率/6,F(xiàn)osc/6111系統(tǒng)時鐘頻率/8,F(xiàn)osc/8ECF:PCA計數(shù)器溢出中斷允許位,1--允許CF(CCON.7)產生中斷。*///sfrCL=0xE9;//PCA計數(shù)器低位0000,0000sfrCH=0xF9;//PCA計數(shù)器高位0000,0000////76543210ResetValuesfrCCAPM0=0xDA;//PCA模塊0PWM寄存器-ECOM0CAPP0CAPN0MAT0TOG0PWM0ECCF0x000,0000sfrCCAPM1=0xDB;//PCA模塊1PWM寄存器-ECOM1CAPP1CAPN1MAT1TOG1PWM1ECCF1x000,0000//ECOMn=1:允許比較功能。//CAPPn=1:允許上升沿觸發(fā)捕捉功能。//CAPNn=1:允許下降沿觸發(fā)捕捉功能。//MATn=1:當匹配情況發(fā)生時,允許CCON中的CCFn置位。//TOGn=1:當匹配情況發(fā)生時,CEXn將翻轉。//PWMn=1:將CEXn設置為PWM輸出。//ECCFn=1:允許CCON中的CCFn觸發(fā)中斷。//ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn//00000000x00未啟用任何功能。//x10000x0x2116位CEXn上升沿觸發(fā)捕捉功能。//x01000x0x1116位CEXn下降沿觸發(fā)捕捉功能。//x11000x0x3116位CEXn邊沿(上、下沿)觸發(fā)捕捉功能。//100100x0x4916位軟件定時器。//100110x0x4d16位高速脈沖輸出。//10000100x428位PWM。//ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn//00000000x00無此操作//10000100x42普通8位PWM,無中斷//11000110x63PWM輸出由低變高可產生中斷(有捕捉,所以要置ECCFn=1,以在邊沿中斷中進行相應的操作)//10100110x53PWM輸出由高變低可產生中斷//11100110x73PWM輸出由低變高或由高變低都可產生中斷//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系列單片機ADC特殊功能寄存器//76543210ResetValuesfrADC_CONTR=0xBC;//A/D轉換控制寄存器ADC_POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS00000,0000sfrADC_RES=0xBD;//A/D轉換結果高8位ADCV.9ADCV.8ADCV.7ADCV.6ADCV.5ADCV.4ADCV.3ADCV.2 0000,0000sfrADC_RESL=0xBE;//A/D轉換結果低2位ADCV.1ADCV.0 0000,0000////新一代1T8051系列單片機SPI特殊功能寄存器//76543210ResetValuesfrSPCTL=0xCE;//SPIControlRegisterSSIGSPENDORDMSTRCPOLCPHASPR1SPR00000,0100sfrSPSTAT=0xCD;//SPIStatusRegisterSPIFWCOL------00xx,xxxxsfrSPDAT=0xCF;//SPIDataRegister0000,0000////新一代1T8051系列單片機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轉換完成標志,必須贏軟件清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采樣前一時刻,后一時刻,當前時刻,L飽和時刻的電壓值,保留三位小數(shù)*/unsignedlongintAD_REsult_Display=0;unsignedintAD_REsult=0;/*AD采樣通道設定,*/uint8_tj=0,j1=0;/*AD采樣值存儲數(shù)組,為精準采樣軟件平均*/unsignedintxdataAD_Result_Divide[200];uint16_tTime1s_Display=0; externuint8_tSwitch_Flog;voidTime0_Init(){TMOD=0x01;//定時器1工作方式1(16位定時計算器)TH0=(65536-50000)/256;TL0=(65536-50000)%256;; //調頻(250K/s(溢出率))TR0=1;}VoidAD_Init(){/***********************************************************P1ASF:P1端口是否用來做ADC輸入端口1:是(ADC輸入端口)0:否(普通I/O口)***********************************************************/P1ASF=0x80; //確定P1口的AD復用P1M1=0x80; //設定AD采樣端口為高阻輸入(1::0->高阻輸入)P1M0=0x00;ADC_RES=0; //轉換結果寄存器初始化ADC_RESL=0;ADC_CONTR=ADC_POWER|SPEED_HH|ADC_START|Ch_Votage;//ADC控制寄存器設置//delayms(10); //等待ADC電源穩(wěn)定delay8uS(); //因為ADC的時鐘源不是系統(tǒng)時鐘,延時確保上面的控制字寫入ADC_CONTR寄存器中}voidADC_isr()interrupt5using1{ADC_CONTR&=!ADC_FLAG; //清除ADC轉換完畢標志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) //超過電壓表最大量程,發(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) //過量程,so升量程,切換到Switch3 { Switch2=1; delayms(100); //繼電器動作延時 Switch3=0; delayms(100); //繼電器動作延時// Switch1=1; Switch_Flog=3; j=0; } elseif(AD_REsult>=500) { AD_Result_Divide[j]=AD_REsult; j++; } else //次量程,降量程,切換到Switch1 { Switch2=1; delayms(100); //繼電器動作延時// Switch3=1; Switch1=0; delayms(100); Switch_Flog=1; j=0; } break; case1: if(AD_REsult>=2000) //過量程,so升量程,切換到Switch2 { Switch1=1; delayms(100); //繼電器動作延時// Switch3=1; Switch2=0; delayms(100); //繼電器動作延時 Switch_Flog=2; j=0; } else { AD_Result_Divide[j]=AD_REsult; j++; } break; } if(j==200) //一次值采樣完畢,執(zhí)行計算 {// 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; //模擬計算(量化電壓為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; //調頻(250K/s(溢出率))Time1s_Display++; if(Time1s_Display==40) { Time1s_Display=0; Address_Set_Zifu_12864(3,4); //設定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; //選擇單片機型號#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)測中斷允許位EADC=1; //ADC中斷允許位//ES=1;//ET1=1;EX1=1;ET0=1;//EX0=1;} //76543210ResetValue//IPH:中斷優(yōu)先級低位PPCAHPLVDHPADCHPSHPT1HPX1HPT0HPX0H0000,0000(不可位尋址)//76543210ResetValue//IP:中斷優(yōu)先級低位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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論