基于51單片機數字電壓表仿真設計_LCD顯示(仿真+程序+原理圖+PCB+設計報告+講解)
原理圖:Altium Designer
仿真版本:proteus 7.8
程序編譯器:keil 4/keil 5
編程語言:C語言
設計編號:S0006
講解視頻
基于51單片機數字電壓表仿真設計
1 功能要求:
芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機芯片。
1、利用51單片機作為主控芯片,模擬量輸入范圍直流0v-5v。模擬量經A/D(ADC0809)模數轉換芯片,把模擬量轉換為數字量輸入到單片機的P0口,再由單片機控制LCD1602液晶顯示模擬量輸入的電壓值。
2、此次設計的是數字電壓表,要求的電壓范圍是0~5v。
3、系統設計主要包括四個部分:
分別是電源模塊、AD模數轉換部分、51單片機最小系統部分、數碼管顯示部分。
首先由單片機初始化ADC0809模數轉換芯片和共陰數碼管顯示,當外接被測電壓后,ADC0809將模擬電壓信號轉換為數字信號輸入到單片機的I/O口,通過單片機處理后將電壓的大小顯示在LCD1602液晶上面。
仿真51單片機芯片是通用的,AT89C51,AT89C52都是51單片機的具體型號,內核是兼容的。原理圖不變的情況下,主控芯片可以替換成STC89C52/STC89C51/AT89C52/ AT89C51/8051等51單片機芯片。
2 仿真圖:
打開仿真工程,雙擊proteus中的單片機,選擇hex文件路徑,然后開始仿真。開始仿真后LCD1602顯示當前的電壓值,通過調整滑動變阻器的阻值大小改變測量的電壓值。
3 原理圖:
AD繪制的。
元器件清單
Comment | Description | Designator | Footprint | Quantity |
---|---|---|---|---|
10uF | 電容 | C1 | EC-100 | 1 |
30pF | 電容 | C2, C3 | CAP-100 | 2 |
5V | 2P排針 | J1 | SIP2 | 1 |
20R | 電阻 | R1 | RES-200 | 1 |
22K | 電阻 | R2, R3, R4, R5, R6, R7, R8, R9 | RES-200 | 8 |
1K | 排阻 | RP1 | SIP3 | 1 |
AT89C51 | 單片機 | U1 | DIP40 | 1 |
ADC0809 | 數模轉換 | U2 | DIP28 | 1 |
LCD1602 | 液晶 | U3 | SIP16 | 1 |
12M | 晶振 | Y1 | XTAL-200 | 1 |
4 PCB:
Proteus仿真和實物作品的區(qū)別:
1.運行環(huán)境:Proteus仿真是在計算機上運行的,而實物則是在硬件電路板上運行。
2.調試方式:在Proteus仿真中,可以方便地進行單步調試和觀察變量值的變化,而在實物中則需要通過調試器或者串口輸出等方式進行調試。
電路連接方式:在Proteus仿真中,可以通過軟件設置進行電路連接的修改,而在實物中則需要通過硬件電路板和連接線進行修改。
3.運行速度:Proteus仿真通常比實物運行速度快,因為仿真是基于計算機運行的,而實物則需要考慮電路板上的物理限制和器件的響應時間等因素。
4.功能實現:在Proteus仿真中,可以通過軟件設置實現不同的功能,而在實物中則需要根據電路設計和器件的性能進行實現。
5 程序設計:
可使用Keil4/5打開工程文件,程序有關鍵注釋結合視頻理解。
//<程序名>:數字電壓表 **
//<功能>:使用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;
}
else
uc_Clock--;
TH0=TIME0H; //恢復定時器0。
TL0=TIME0L;
}
6 設計報告:
該系統由延時子函數、LCD1602液晶忙檢測子函數、LCD1602液晶寫命令/寫數據子函數、漢字顯示子函數、LCD1602液晶顯示字符串子函數、LCD1602液晶初始化子函數、ADC0809轉換子函數、主函數和數據定義這幾部分組成。
7 資料清單 和下載鏈接:
0.常見使用問題及解決方法–必讀!?。?!
1、源程序
2、仿真
3、原理圖
4、PCB圖
5、開題報告
6、設計報告
7、元器件清單
9、硬件框圖
10、講解視頻
Altium Designer 安裝破解
filename.bat
KEIL+proteus 單片機仿真設計教程
KEIL安裝破解
Proteus元器件查找
Proteus安裝
Proteus簡易使用教程
單片機學習資料
目錄清單.txt
相關數據手冊
答辯技巧
設計報告常用描述
鼠標雙擊打開查找更多51 STM32單片機課程畢業(yè)設計.url
資料下載鏈接(可點擊):