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