注:本畢設(shè)資源可在微信公眾號:“Kevin的學(xué)習(xí)站” 中獲取!
基于51單片機數(shù)字電壓表的設(shè)計
1、PCB原理圖
2、Proteus 仿真圖
3、設(shè)計目標(biāo)
3.1、基本功能
利用51單片機作為主控芯片,模擬量輸入范圍直流0v-5v。模擬量經(jīng)A/D(ADC0809)模數(shù)轉(zhuǎn)換芯片,把模擬量轉(zhuǎn)換為數(shù)字量輸入到單片機的P0口,再由單片機控制LCD1602液晶顯示模擬量輸入的電壓值。
3.2、主要技術(shù)參數(shù)
測量電壓范圍:0v至5v
A/D轉(zhuǎn)換器:ADC0809(8位模數(shù)轉(zhuǎn)換器)。
顯示方式: LCD1602液晶
4、總設(shè)計框圖
此次設(shè)計的是數(shù)字電壓表,要求的電壓范圍是0~5v。系統(tǒng)設(shè)計主要包括四個部分:分別是電源模塊、AD模數(shù)轉(zhuǎn)換部分、51單片機最小系統(tǒng)部分、數(shù)碼管顯示部分。首先由單片機初始化ADC0809模數(shù)轉(zhuǎn)換芯片和共陰數(shù)碼管顯示,當(dāng)外接被測電壓后,ADC0809將模擬電壓信號轉(zhuǎn)換為數(shù)字信號輸入到單片機的I/O口,通過單片機處理后將電壓的大小顯示在LCD1602液晶上面。
以AT89C51單片機為核心,起著控制作用。系統(tǒng)包括LCD1602液晶顯示電路、復(fù)位電路、時鐘電路、模數(shù)轉(zhuǎn)換電路電路。設(shè)計思路分為五個模塊:復(fù)位電路、晶振電路模塊、AT89C51、LCD1602液晶顯示電路、模數(shù)轉(zhuǎn)換器電路這五個模塊。
5、硬件設(shè)計分析
5.1、電源的設(shè)計
系統(tǒng)電源使用直流5伏。
由電腦USB接口提供電源。
USB是通用串行總線(Universal Serial Bus)接口的簡稱。它是目前使用比較廣泛的電腦接口之一,主要版本有1.0、1.1和最新的2.0三種版本。根據(jù)USB總線的工業(yè)標(biāo)準(zhǔn),它可以提供額定功率為5V/500mA的電源供USB設(shè)備使用。
5.2、單片機最小系統(tǒng)
51單片機是對目前所有兼容intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是intel的8031單片機,后來隨著技術(shù)的發(fā)展,成為目前廣泛應(yīng)用的8為單片機之一。單片機是在一塊芯片內(nèi)集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O口等計算機所需要的基本功能部件的大規(guī)模集成電路,又稱為MCU。51系列單片機內(nèi)包含以下幾個部件:
一個8位CPU;一個片內(nèi)振蕩器及時鐘電路;
4KB的ROM程序存儲器;
一個128B的RAM數(shù)據(jù)存儲器;
尋址64KB外部數(shù)據(jù)存儲器和64KB外部程序存儲空間的控制電路;
32條可編程的I/O口線;
兩個16位定時/計數(shù)器;
一個可編程全雙工串行口;
5個中斷源、兩個優(yōu)先級嵌套中斷結(jié)構(gòu)。
如圖2-2-1所示為AT89C51單片機基本構(gòu)造,其基本性能介紹如下:
AT89C51本身內(nèi)含40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中端口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,AT89C51可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。
AT89C51的主要特性如下表所示:
兼容MCS—51指令系統(tǒng) | 32個可編程I/O線 |
---|---|
4k字節(jié)可編程閃爍存儲器 | 可編程UARL通道 |
三個16位可編程定時/計數(shù)器中斷 | 時鐘頻率0-24MHz |
2個外部中斷源,共8個中斷源 | 256×8bit內(nèi)部RAM |
2個讀寫中斷口線 | 可直接驅(qū)動LED |
軟件設(shè)置睡眠和喚醒功能 | 低功耗空閑和掉電模式 |
單片機最小系統(tǒng)原理圖
單片機最小系統(tǒng)說明:
時鐘信號的產(chǎn)生:在MCS-51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個穩(wěn)定的自激振蕩器,這就是單片機的時鐘振蕩電路。
時鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機的時鐘脈沖信號。
一般地,電容C2和C3取30pF左右,晶體的振蕩頻率范圍是1.2-12MHz。如果晶體振蕩頻率高,則系統(tǒng)的時鐘頻率也高,單片機的運行速度也就快。
單片機復(fù)位使CPU和系統(tǒng)中的其他功能部件都處在一個確定的初始狀態(tài)下,并從這個狀態(tài)開始工作。單片機復(fù)位條件:必須使9腳加上持續(xù)兩個機器周期(即24個振蕩周期)的高電平。
5.3、模數(shù)轉(zhuǎn)換
ADC0809是美國國家半導(dǎo)體公司生產(chǎn)的CMOS工藝8通道,8位逐次逼近式AD轉(zhuǎn)換器。其內(nèi)部有一個8通道多路開關(guān),它可以根據(jù)地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進(jìn)行A/D轉(zhuǎn)換。
(1)主要特性:
1)8路輸入通道,2位A/D轉(zhuǎn)換器,即分辨率為8位。
2)具有轉(zhuǎn)換起??刂贫?。
3)轉(zhuǎn)換時間為100μs(時鐘為640kHz時),130μs(時鐘為500kHz時)
4)單個+5V電源供電
5)模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準(zhǔn)。
6)工作溫度范圍為-40~+85攝氏度
7)低功耗,約15mW。
(2)模數(shù)轉(zhuǎn)換電路
6、軟件設(shè)計的組成
該系統(tǒng)由延時子函數(shù)、LCD1602液晶忙檢測子函數(shù)、LCD1602液晶寫命令/寫數(shù)據(jù)子函數(shù)、漢字顯示子函數(shù)、LCD1602液晶顯示字符串子函數(shù)、LCD1602液晶初始化子函數(shù)、ADC0809轉(zhuǎn)換子函數(shù)、主函數(shù)和數(shù)據(jù)定義這幾部分組成。
7、元件清單
文章來源:http://www.zghlxwxcb.cn/news/detail-403447.html
8、程序源碼
//<程序名>:數(shù)字電壓表
//<功能>:使用LCD顯示被檢測電壓,精度為0.05V,范圍是0~5V。
#include"includes.h"
#define TIME0H 0x3C
#define TIME0L 0xB0
uchar uc_Clock=0; //定時器0中斷計數(shù)
bit b_DATransform=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把電壓顯示在LCD上>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vShowVoltage(uint uiNumber)
{
uchar ucaNumber[3],ucCount;
if(uiNumber>999)
uiNumber=999;
ucaNumber[0]=uiNumber/100; //把計算數(shù)字的每個位存入數(shù)組。
ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;
ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
for(ucCount=0;ucCount<3;ucCount++)
{
vShowOneChar(ucaNumber[ucCount]+48); //從首位到末位逐一輸出。
if(ucCount==0)
vShowOneChar('.');
}
}
//*************************************************************************************************
//* *
//* ********************************主函數(shù)****************************** *
//* *
//*************************************************************************************************
void main()
{
TMOD=0x01; //定時器0,模式1。
TH0=TIME0H;
TL0=TIME0L;
TR0=1; //啟動定時器。
ET0=1; //開定時器中斷。
EA=1; //開總中斷
vdInitialize();
vWriteCMD(0x84); //寫入顯示起始地址(第一行第4個位置)
vShowChar("voltage");
vWriteCMD(0xC9);
vShowChar("(V)");
while(1)
{
if(b_DATransform==1)
{
b_DATransform=0;
vWriteCMD(0xC4);
vShowVoltage(uiADTransform());
}
}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器0中斷函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void t0() interrupt 1
{
if(uc_Clock==0)
{
uc_Clock=5;
b_DATransform=1;
}
else
uc_Clock--;
TH0=TIME0H; //恢復(fù)定時器0。
TL0=TIME0L;
}
9、資源獲取
項目的仿真和PCB工程已經(jīng)放在下面公眾號里面,可以關(guān)注公眾號:Kevin的學(xué)習(xí)站,輸入關(guān)鍵字:“數(shù)字電壓表”,就可以免費獲取啦!創(chuàng)作不易,但您的點贊、關(guān)注、收藏就是對我最大的鼓勵!文章來源地址http://www.zghlxwxcb.cn/news/detail-403447.html
到了這里,關(guān)于畢設(shè)--基于51單片機數(shù)字電壓表的設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!