加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

基于51單片機(jī)簡易數(shù)字萬用表(電阻電流電壓測量)仿真設(shè)計(jì)

09/10 10:06
1125
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 1.主要功能:
    • 2.仿真
    • 3. 程序代碼
    • 4. 設(shè)計(jì)資料內(nèi)容清單&下載地址
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

仿真圖proteus7.8及以上

程序編譯器:keil 4/keil 5

編程語言:C語言

設(shè)計(jì)編號(hào):S0041

1.主要功能:

運(yùn)用所學(xué)知識(shí),制作一個(gè)51單片機(jī)簡易數(shù)字萬用表設(shè)計(jì)

具體功能:萬用表能夠切換測量電壓值、電流值以及電阻值,并且以四位數(shù)碼顯示,短路時(shí)會(huì)報(bào)警

1、電壓測量范圍0-20V,測量誤差0.5V左右

2、電流測量范圍0-200mA,測量誤差5mA左右

3、電阻測量范圍0-1000歐,誤差10歐左右

4、短路報(bào)警: 將待測兩點(diǎn)用導(dǎo)線相接,蜂鳴器發(fā)出聲音。

5、通過數(shù)碼管顯示測量數(shù)值,通過開關(guān)選擇測量類型。

以下為本設(shè)計(jì)資料展示圖:

2.仿真

開始仿真

開始仿真后可以通過撥動(dòng)開關(guān)選擇測量類型,數(shù)碼管第一位顯示A表示測量電壓,B表示測量電阻,C表示測量電流。后三位顯示測量的值。如果同時(shí)選擇了兩種測量內(nèi)容,蜂鳴器報(bào)警。

電壓檔測試:
在仿真時(shí)當(dāng)將電壓檔開關(guān)打開,仿真結(jié)果如圖3.1所示。改變滑動(dòng)變阻器相當(dāng)于改變紅黑表筆接的不同回路進(jìn)行電壓測量(可以在重新測量之前按下復(fù)位鍵進(jìn)行復(fù)位后在進(jìn)行測量)。通過R2,R3進(jìn)行分壓,設(shè)測得的電壓U,則實(shí)際電壓U1=(U/R3)*R2;注:所測電壓大于20V講燒壞AD轉(zhuǎn)換器
img

電阻檔測試:
在進(jìn)行電阻檔位仿真時(shí)首先進(jìn)行復(fù)位鍵進(jìn)行復(fù)位,待顯示清零以后再進(jìn)行測量仿真,在仿真過程中改變滑動(dòng)變阻器的位置相當(dāng)于改變了紅黑表筆所接的不同阻值的電阻。如圖4.5所示,設(shè)測的電壓為U,則電路中電流I=(5-U)/100所測電阻R=U/I=U/((5-U)/100),注:電阻過大,則會(huì)造成測量不準(zhǔn)確。
img

電流檔測試:
在進(jìn)行電流測量時(shí)首先進(jìn)行電流檔復(fù)位待顯示清零后在進(jìn)行電流檔仿真,改變滑動(dòng)變阻器相當(dāng)于改變紅黑表筆接的不同回路進(jìn)行電流測量。如圖4.4所示,在測量中若設(shè)測得的電壓為U:則電路中的電流為I=(U/5)*1000(MA);注:電流過大則會(huì)燒壞電阻R4;
img

3. 程序代碼

使用keil4或者keil5編譯,代碼有注釋,可以結(jié)合報(bào)告理解代碼含義。

img
主函數(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;					//清除按下標(biāo)記
			if((Key_R==0)||(Key_I==0))//電阻電流按鍵也有按下
			{
				Key_I=1;
				Key_R=1;
				Key_V=1;
				Mode=4;					//標(biāo)記為錯(cuò)誤模式
			}
			else							//電阻電流鍵都沒有按下
			Mode=1;						//標(biāo)記為電壓模式
		}
		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;			//標(biāo)記為空閑模式
		}
		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];							//顯示電壓標(biāo)志
								dis_smg[1]=DisplayNum[VIN/100%10];			//電壓十位
								dis_smg[2]=DisplayNum[VIN/10%10]&0x7f;	//電壓個(gè)位
								dis_smg[3]=DisplayNum[VIN%10];					//電壓十分位
								
								if(VIN > 160)	  //電壓檔大于16V報(bào)警
									Speak = 1;
								else
									Speak = 0;
			break;
			case 2:
						//電阻模式		
								RIN=Read_AD*100/(255-Read_AD);				//換算出電阻值
								dis_smg[0]=DisplayNum[0xb];       		//顯示電阻標(biāo)志
								dis_smg[1]=DisplayNum[RIN/100%10];    //電阻百位
								dis_smg[2]=DisplayNum[RIN/10%10];     //電阻十位
								dis_smg[3]=DisplayNum[RIN%10];        //電阻個(gè)位
								if(RIN>=1000)													//超過或等于1000;
								{
									dis_smg[1]=DisplayOther[2];					//顯示"-"
									dis_smg[2]=DisplayOther[2];					//顯示"-"
									dis_smg[3]=DisplayOther[2];					//顯示"-"
								}
								
								if(RIN > 800)		 //電阻檔大于800報(bào)警
									Speak = 1;
								else
									Speak = 0;
			break;
			case 3:
						//電流模式		
								IIN=4*Read_AD;//單位mA								//換算出電流值
								dis_smg[0]=DisplayNum[0xc];           //顯示電流標(biāo)志
								if(IIN<=200)													//沒有超過范圍
								{
									dis_smg[1]=DisplayNum[IIN/100%10];	//電流百位
									dis_smg[2]=DisplayNum[IIN/10%10]; 	//電流十位
									dis_smg[3]=DisplayNum[IIN%10];    	//電流個(gè)位
								}
								else
								{
									dis_smg[1]=DisplayOther[2];					//顯示"-"
									dis_smg[2]=DisplayOther[2];					//顯示"-"
									dis_smg[3]=DisplayOther[2];					//顯示"-"
								}
								
								if(IIN > 80)	 //電流檔大于80報(bào)警
									Speak = 1;
								else
									Speak = 0;
			break;
			case 4:
							Speak = 1;
						//錯(cuò)誤模式		
							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ù)碼管動(dòng)態(tài)掃描
	}
}

概要:
定義了一些變量:

Mode 是一個(gè)8位無符號(hào)整數(shù),用于存儲(chǔ)當(dāng)前的模式(0-4)。
Read_AD 是一個(gè)8位無符號(hào)整數(shù),用于存儲(chǔ)ADC(模擬到數(shù)字轉(zhuǎn)換器)的讀取值。
VIN 是一個(gè)16位無符號(hào)整數(shù),用于存儲(chǔ)電壓值。
RIN 是一個(gè)16位無符號(hào)整數(shù),用于存儲(chǔ)電阻值。
IIN 是一個(gè)16位無符號(hào)整數(shù),用于存儲(chǔ)電流值。
i 是一個(gè)16位無符號(hào)整數(shù),用于計(jì)數(shù)。
主循環(huán)(while(1))會(huì)一直運(yùn)行,除非有中斷或異常使其停止。

在循環(huán)內(nèi)部,根據(jù)按鍵的狀態(tài)設(shè)置 Mode。這里用到了三個(gè)條件判斷語句:

如果 Key_V 等于0(表示電壓按鍵被按下),檢查其他兩個(gè)按鍵是否也被按下。如果是,設(shè)置 Mode 為4(錯(cuò)誤模式),否則設(shè)置 Mode 為1(電壓模式)。
如果 Key_R 等于0(表示電阻按鍵被按下),同樣的檢查流程,如果其他兩個(gè)按鍵沒有被按下,設(shè)置 Mode 為4,否則設(shè)置 Mode 為2(電阻模式)。
如果 Key_I 等于0(表示電流按鍵被按下),同樣的檢查流程,如果其他兩個(gè)按鍵沒有被按下,設(shè)置 Mode 為4,否則設(shè)置 Mode 為3(電流模式)。
如果所有按鍵都沒有被按下,設(shè)置 Mode 為0(空閑模式)。
在讀取ADC值時(shí)使用了函數(shù) Adc0832(0),這可能是一個(gè)硬件相關(guān)的函數(shù),用于從ADC設(shè)備讀取數(shù)據(jù)。

每300次讀取操作后重置計(jì)數(shù)器,以便重新開始計(jì)數(shù)。

根據(jù)不同的 Mode 執(zhí)行不同的操作:

在空閑模式下,關(guān)閉數(shù)碼管的顯示,并停止聲音輸出。
在電壓模式下,根據(jù)從ADC讀取的值計(jì)算電壓,并將其顯示在數(shù)碼管上。如果電壓大于160V,發(fā)出報(bào)警聲音。
在電阻模式下,根據(jù)從ADC讀取的值計(jì)算電阻,并將其顯示在數(shù)碼管上。如果電阻大于1000,在百位、十位和個(gè)位上都顯示"-"。

4. 設(shè)計(jì)資料內(nèi)容清單&下載地址

資料設(shè)計(jì)資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計(jì)報(bào)告、軟硬件設(shè)計(jì)框圖。

0、常見使用問題及解決方法–必讀?。。?!
1、仿真
2、代碼
3、講解視頻
4、功能要求
5、設(shè)計(jì)報(bào)告
6、軟硬件框圖
Altium Designer 軟件資料
KEIL 軟件資料
Proteus 軟件資料
雙擊打開更多 51 STM32單片機(jī)設(shè)計(jì).url

img

資料下載鏈接(可點(diǎn)擊):

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
NX3225SA-114.285MHZ-EXS00A-CS06528 1 Nihon Dempa Kogyo Co Ltd Parallel - 3Rd Overtone Quartz Crystal, 114.285MHz Nom,
$33.41 查看
DP83848IVVX/NOPB 1 Texas Instruments Industrial temperature, 10/100-Mbps Ethernet PHY transceiver with SNI &amp; JTAG support 48-LQFP -40 to 85

ECAD模型

下載ECAD模型
$5.13 查看
HFBR-2412TZ 1 Foxconn Receiver, ST Connector, Through Hole Mount, ROHS COMPLIANT, PLASTIC, 8 PIN
$41.26 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜