仿真圖proteus7.8及以上
程序編譯器:keil 4/keil 5
編程語言:C語言
設(shè)計編號:S0041
1.主要功能:
運用所學(xué)知識,制作一個51單片機簡易數(shù)字萬用表設(shè)計
具體功能:萬用表能夠切換測量電壓值、電流值以及電阻值,并且以四位數(shù)碼顯示,短路時會報警
1、電壓測量范圍0-20V,測量誤差0.5V左右
2、電流測量范圍0-200mA,測量誤差5mA左右
3、電阻測量范圍0-1000歐,誤差10歐左右
4、短路報警: 將待測兩點用導(dǎo)線相接,蜂鳴器發(fā)出聲音。
5、通過數(shù)碼管顯示測量數(shù)值,通過開關(guān)選擇測量類型。
以下為本設(shè)計資料展示圖:
2.仿真
開始仿真
開始仿真后可以通過撥動開關(guān)選擇測量類型,數(shù)碼管第一位顯示A表示測量電壓,B表示測量電阻,C表示測量電流。后三位顯示測量的值。如果同時選擇了兩種測量內(nèi)容,蜂鳴器報警。
電壓檔測試:
在仿真時當將電壓檔開關(guān)打開,仿真結(jié)果如圖3.1所示。改變滑動變阻器相當于改變紅黑表筆接的不同回路進行電壓測量(可以在重新測量之前按下復(fù)位鍵進行復(fù)位后在進行測量)。通過R2,R3進行分壓,設(shè)測得的電壓U,則實際電壓U1=(U/R3)*R2;注:所測電壓大于20V講燒壞AD轉(zhuǎn)換器。
電阻檔測試:
在進行電阻檔位仿真時首先進行復(fù)位鍵進行復(fù)位,待顯示清零以后再進行測量仿真,在仿真過程中改變滑動變阻器的位置相當于改變了紅黑表筆所接的不同阻值的電阻。如圖4.5所示,設(shè)測的電壓為U,則電路中電流I=(5-U)/100所測電阻R=U/I=U/((5-U)/100),注:電阻過大,則會造成測量不準確。
電流檔測試:
在進行電流測量時首先進行電流檔復(fù)位待顯示清零后在進行電流檔仿真,改變滑動變阻器相當于改變紅黑表筆接的不同回路進行電流測量。如圖4.4所示,在測量中若設(shè)測得的電壓為U:則電路中的電流為I=(U/5)*1000(MA);注:電流過大則會燒壞電阻R4;
3. 程序代碼
使用keil4或者keil5編譯,代碼有注釋,可以結(jié)合報告理解代碼含義。
主函數(shù)代碼
void main (void)
{
u8 Mode;
uchar Read_AD; //用于讀取ADC數(shù)據(jù)
uchar VIN; //電壓值變量
u16 RIN; //電阻值變量
u16 IIN; //電流值變量
u16 i=0;;
while (1) //主循環(huán)
{
if(Key_V==0) //電壓按鍵按下
{
Key_V=1; //清除按下標記
if((Key_R==0)||(Key_I==0))//電阻電流按鍵也有按下
{
Key_I=1;
Key_R=1;
Key_V=1;
Mode=4; //標記為錯誤模式
}
else //電阻電流鍵都沒有按下
Mode=1; //標記為電壓模式
}
if(Key_R==0) //同電壓鍵
{
Key_R=1;
if((Key_V==0)||(Key_I==0))
{
Key_I=1;
Key_R=1;
Key_V=1;
Mode=4;
}
else
Mode=2;
}
if(Key_I==0) //同電壓鍵
{
Key_I=1;
if((Key_V==0)||(Key_R==0))
{
Key_I=1;
Key_R=1;
Key_V=1;
Mode=4;
}
else
Mode=3;
}
if((Key_V==1)&&(Key_R==1)&&(Key_I==1))//都沒有按下
{
Mode=0; //標記為空閑模式
}
if(i==0)
{
Read_AD=Adc0832(0); //讀取AD值
}
i++;
if(i>300)
i=0;
switch(Mode)
{
case 0:
//空閑模式
dis_smg[0]=DisplayOther[2];//關(guān)閉數(shù)碼管顯示
dis_smg[1]=DisplayOther[2];
dis_smg[2]=DisplayOther[2];
dis_smg[3]=DisplayOther[2];
Speak = 0;
break;
case 1:
//電壓模式
VIN=Read_AD*200/255; //換算出電壓值
dis_smg[0]=DisplayNum[0xa]; //顯示電壓標志
dis_smg[1]=DisplayNum[VIN/100%10]; //電壓十位
dis_smg[2]=DisplayNum[VIN/10%10]&0x7f; //電壓個位
dis_smg[3]=DisplayNum[VIN%10]; //電壓十分位
if(VIN > 160) //電壓檔大于16V報警
Speak = 1;
else
Speak = 0;
break;
case 2:
//電阻模式
RIN=Read_AD*100/(255-Read_AD); //換算出電阻值
dis_smg[0]=DisplayNum[0xb]; //顯示電阻標志
dis_smg[1]=DisplayNum[RIN/100%10]; //電阻百位
dis_smg[2]=DisplayNum[RIN/10%10]; //電阻十位
dis_smg[3]=DisplayNum[RIN%10]; //電阻個位
if(RIN>=1000) //超過或等于1000;
{
dis_smg[1]=DisplayOther[2]; //顯示"-"
dis_smg[2]=DisplayOther[2]; //顯示"-"
dis_smg[3]=DisplayOther[2]; //顯示"-"
}
if(RIN > 800) //電阻檔大于800報警
Speak = 1;
else
Speak = 0;
break;
case 3:
//電流模式
IIN=4*Read_AD;//單位mA //換算出電流值
dis_smg[0]=DisplayNum[0xc]; //顯示電流標志
if(IIN<=200) //沒有超過范圍
{
dis_smg[1]=DisplayNum[IIN/100%10]; //電流百位
dis_smg[2]=DisplayNum[IIN/10%10]; //電流十位
dis_smg[3]=DisplayNum[IIN%10]; //電流個位
}
else
{
dis_smg[1]=DisplayOther[2]; //顯示"-"
dis_smg[2]=DisplayOther[2]; //顯示"-"
dis_smg[3]=DisplayOther[2]; //顯示"-"
}
if(IIN > 80) //電流檔大于80報警
Speak = 1;
else
Speak = 0;
break;
case 4:
Speak = 1;
//錯誤模式
dis_smg[0]=DisplayNum[0xe]; //顯示"E"
dis_smg[1]=DisplayNum[0xe]; //顯示"E"
dis_smg[2]=DisplayNum[0xe]; //顯示"E"
dis_smg[3]=DisplayNum[0xe]; //顯示"E"
break;
default :
break;
}
DisplayScan(); //數(shù)碼管動態(tài)掃描
}
}
概要:
定義了一些變量:
Mode 是一個8位無符號整數(shù),用于存儲當前的模式(0-4)。
Read_AD 是一個8位無符號整數(shù),用于存儲ADC(模擬到數(shù)字轉(zhuǎn)換器)的讀取值。
VIN 是一個16位無符號整數(shù),用于存儲電壓值。
RIN 是一個16位無符號整數(shù),用于存儲電阻值。
IIN 是一個16位無符號整數(shù),用于存儲電流值。
i 是一個16位無符號整數(shù),用于計數(shù)。
主循環(huán)(while(1))會一直運行,除非有中斷或異常使其停止。
在循環(huán)內(nèi)部,根據(jù)按鍵的狀態(tài)設(shè)置 Mode。這里用到了三個條件判斷語句:
如果 Key_V 等于0(表示電壓按鍵被按下),檢查其他兩個按鍵是否也被按下。如果是,設(shè)置 Mode 為4(錯誤模式),否則設(shè)置 Mode 為1(電壓模式)。
如果 Key_R 等于0(表示電阻按鍵被按下),同樣的檢查流程,如果其他兩個按鍵沒有被按下,設(shè)置 Mode 為4,否則設(shè)置 Mode 為2(電阻模式)。
如果 Key_I 等于0(表示電流按鍵被按下),同樣的檢查流程,如果其他兩個按鍵沒有被按下,設(shè)置 Mode 為4,否則設(shè)置 Mode 為3(電流模式)。
如果所有按鍵都沒有被按下,設(shè)置 Mode 為0(空閑模式)。
在讀取ADC值時使用了函數(shù) Adc0832(0),這可能是一個硬件相關(guān)的函數(shù),用于從ADC設(shè)備讀取數(shù)據(jù)。
每300次讀取操作后重置計數(shù)器,以便重新開始計數(shù)。
根據(jù)不同的 Mode 執(zhí)行不同的操作:
在空閑模式下,關(guān)閉數(shù)碼管的顯示,并停止聲音輸出。
在電壓模式下,根據(jù)從ADC讀取的值計算電壓,并將其顯示在數(shù)碼管上。如果電壓大于160V,發(fā)出報警聲音。
在電阻模式下,根據(jù)從ADC讀取的值計算電阻,并將其顯示在數(shù)碼管上。如果電阻大于1000,在百位、十位和個位上都顯示"-"。
4. 設(shè)計資料內(nèi)容清單&下載地址
資料設(shè)計資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計報告、軟硬件設(shè)計框圖。
0、常見使用問題及解決方法–必讀?。。。?br />
1、仿真
2、代碼
3、講解視頻
4、功能要求
5、設(shè)計報告
6、軟硬件框圖
Altium Designer 軟件資料
KEIL 軟件資料
Proteus 軟件資料
雙擊打開更多 51 STM32單片機設(shè)計.url
資料下載鏈接(可點擊):