仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):【T01】
1.? 簡(jiǎn)介
? 本文提出了一種基于51單片機(jī)的共陰極數(shù)碼管數(shù)字電壓表設(shè)計(jì)。該系統(tǒng)采用AT89C51單片機(jī)為控制核心,模擬量輸入范圍直流0v-5v。模擬量經(jīng)ADC0809模數(shù)轉(zhuǎn)換芯片,把模擬量轉(zhuǎn)換為數(shù)字量輸入到單片機(jī)的P0口,再由單片機(jī)控制4位數(shù)碼管顯示模擬量輸入的電壓值。
2.? 主要功能
a.通過(guò)4位共陰極數(shù)碼管顯示電壓值。量程:0-5V
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過(guò).c和.h文件新建工程即可。
#include<reg51.h> /*包含頭文件reg51.h */
#define uchar unsigned char /*宏定義后方便書寫*/
#define uint unsigned int /*宏定義后方便書寫*/
uchar code DigitSTARTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED碼表
uchar DisplayBuffer[4]; //顯示碼數(shù)據(jù)緩沖區(qū)
uchar AD_Data; //AD0809原始數(shù)據(jù)
uint Temp; //處理后的數(shù)據(jù)
sbit START=P3^0; //定義P3.0引腳位名稱為START
sbit OE=P3^1; //定義P3.1引腳位名稱為OE
sbit EOC=P3^2; //定義P3.2引腳位名稱為EOC
sbit CLK=P3^3; //定義P3.3引腳位名稱為CLK
sbit ADDA=P3^4; //定義P3.4引腳位名稱為ADDA
sbit ADDB=P3^5; //定義P3.5引腳位名稱為ADDB
sbit ADDC=P3^6; //定義P3.6引腳位名稱為ADDC
sbit LED0=P2^0; //定義P2.0引腳位名稱為L(zhǎng)ED0,選擇LED的0位
sbit LED1=P2^1; //定義P2.1引腳位名稱為L(zhǎng)ED1,選擇LED的1位
sbit LED2=P2^2; //定義P2.2引腳位名稱為L(zhǎng)ED2,選擇LED的2位
sbit LED3=P2^3; //定義P2.3引腳位名稱為L(zhǎng)ED3,選擇LED的3位
sbit LED_DP=P1^7; //定義P1.7引腳位名稱為L(zhǎng)ED_DP,選擇LED的DP位
//*********************************************************************************
//函數(shù)名:Delay
//函數(shù)功能:軟件延時(shí)函數(shù)
//形式參數(shù):uint i
//*********************************************************************************
void Delay(uint i)
{ uint j;
for(;i>0;i--)
{ for(j=0;j<50;j++)
;
}
}
//*********************************************************************************
//函數(shù)名:TimeInitial
//函數(shù)功能:定時(shí)器初始化函數(shù) T0方式2,自動(dòng)重裝初值:10,定時(shí):10us,
//信號(hào)周期T:20us 信號(hào)頻率f:f=1/T=1000000/20=50 000HZ=50KHZ
//*********************************************************************************
void TimeInitial() //定時(shí)器初始化
{ TMOD=0x02; //定時(shí)器工作模式
TH0=246; //定時(shí)器初值高8位
TL0=246; //定時(shí)器初值低8位
EA=1; //開總中斷
ET0=1; //開定時(shí)器中斷
TR0=1; //啟動(dòng)定時(shí)器
}
//*********************************************************************************
//函數(shù)名:Time0
//函數(shù)功能:定時(shí)器0中斷服務(wù)子程序函數(shù)
//*********************************************************************************
void Time0(void) interrupt 1 using 0 //定時(shí)器中斷服務(wù)子程序
{
CLK=~CLK; //產(chǎn)生AD0809工作脈沖:50KHZ
}
//*********************************************************************************
//函數(shù)名:Display
//函數(shù)功能:LED數(shù)碼管顯示函數(shù)
//*********************************************************************************
void Display()
{
P1=DigitSTARTable[DisplayBuffer[3]]; //取數(shù)據(jù)送P1端口顯示(十位)
LED0=0; // LED0管子開
Delay(5); // 延時(shí)顯示
LED0=1; // LED0管子關(guān)
P1=DigitSTARTable[DisplayBuffer[2]];//取數(shù)據(jù)送P1端口顯示(個(gè)位)
LED_DP=1; // 小數(shù)點(diǎn)顯示
LED1=0; // LED1管子開
Delay(5); // 延時(shí)顯示
LED1=1; // LED1管子關(guān)
P1=DigitSTARTable[DisplayBuffer[1]];//取數(shù)據(jù)送P1端口顯示 (小數(shù)1位)
LED2=0; // LED2管子開
Delay(5); // 延時(shí)顯示
LED2=1; // LED2管子關(guān)
P1=DigitSTARTable[DisplayBuffer[0]];//取數(shù)據(jù)送P1端口顯示(小數(shù)2位)
LED3=0; // LED3管子開
Delay(5); // 延時(shí)顯示
LED3=1; // LED3管子關(guān)
}
4.? 仿真proteus8.6
? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
運(yùn)行:
5.? 設(shè)計(jì)報(bào)告
設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【T01】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集