目次
51シングルチップ簡易デジタルマルチメータ(抵抗電流電圧測定)シミュレーション設計(プロテウスシミュレーション+プログラム+レポート+解説ビデオ)
シミュレーション図 proteus7.8以降
プログラムコンパイラ:keil 4/keil 5
プログラミング言語:C言語
デザイン番号:S0041
1.主な機能:
学んだ知識を使用して、51 マイクロコントローラー用のシンプルなデジタル マルチメーター設計を作成します。
具体的な機能:マルチメータは電圧値、電流値、抵抗値の測定を切り替えて4桁で表示し、短絡があると警報を発します。
1. 電圧測定範囲 0-20V、測定誤差は約 0.5V
2.電流測定範囲0-200mA、測定誤差は約5mAです。
3. 抵抗測定範囲は 0 ~ 1000 オームで、誤差は約 10 オームです。
4. 短絡警報:測定する2点を電線で接続するとブザーが鳴ります。
5. デジタル管で測定値を表示し、スイッチで測定タイプを選択します。
この設計情報の表示図は次のとおりです。
2. シミュレーション
シミュレーションを開始する
シミュレーション開始後、スイッチを切り替えることで測定タイプを選択することができ、デジタル管の1桁目は電圧測定用のA、抵抗測定用のB、電流測定用のCと表示されます。最後の 3 桁は測定値を表示します。2つの測定内容を同時に選択するとブザーが鳴ります。
電圧ギア テスト:
シミュレーション中に電圧ギア スイッチをオンにすると、シミュレーション結果が図 3.1 に示されます。スライド式レオスタットを変更することは、電圧測定用の赤と黒のテスト リードによって接続されているさまざまな回路を変更することと同じです (再測定の前にリセット ボタンを押してリセットし、その後測定することができます)。R2 と R3 で電圧を分圧します。測定電圧 U を仮定すると、実際の電圧 U1=(U/R3)*R2; 注: 測定電圧は 20V を超えており、AD コンバータが焼損します。
抵抗ギアのテスト:
抵抗ギアのシミュレーションを実行するときは、最初にリセット ボタンを押してリセットし、表示が消えてから測定シミュレーションを実行します。シミュレーション プロセス中にスライディング レオスタットの位置を変更することは、さまざまな抵抗値を変更することと同等です。赤と黒のテストリードに接続されている抵抗。図 4.5 に示すように、測定された電圧を U とすると、回路内の電流 I=(5-U)/100 および測定された抵抗 R=U/I=U/((5-U)/100)、注: 抵抗が大きすぎると、測定が不正確になります。
電流プロファイルテスト:
電流測定を実行するときは、まず電流プロファイルをリセットし、表示がクリアされた後に電流プロファイルシミュレーションを実行します。スライディングレオスタットを変更することは、電流測定用の赤と黒のテストリードによって接続されているさまざまな回路を変更することと同じです。図 4.4 に示すように、測定中の測定電圧が U の場合、回路内の電流は I=(U/5)*1000(MA) となります; 注: 電流が大きすぎると、抵抗 R4 が焼損します。 ;
3. プログラムコード
keil4 または keil5 を使用してコンパイルすると、コードにはコメントが付いており、レポートと合わせてコードの意味を理解できます。
メイン機能コード
void main (void)
{
u8 Mode;
uchar Read_AD; //用于读取ADC数据
uchar VIN; //电压值变量
u16 RIN; //电阻值变量
u16 IIN; //电流值变量
u16 i=0;;
while (1) //主循环
{
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];//关闭数码管显示
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(); //数码管动态扫描
}
}
概要:
いくつかの変数が定義されています。
Mode は、現在のモード (0 ~ 4) を格納するために使用される 8 ビットの符号なし整数です。
Read_AD は、ADC (アナログ - デジタル コンバータ) の読み取り値を保存するために使用される 8 ビットの符号なし整数です。
VIN は、電圧値を保存するために使用される 16 ビットの符号なし整数です。
RIN は、抵抗値を格納するために使用される 16 ビットの符号なし整数です。
IIN は、現在の値を格納するために使用される 16 ビットの符号なし整数です。
i は、カウントに使用される 16 ビットの符号なし整数です。
メインループ (while(1)) は、中断または例外が発生して停止しない限り、実行を続けます。
ループ内で、キーの状態に基づいてモードが設定されます。ここでは 3 つの条件判断ステートメントが使用されます。
Key_V が 0 に等しい場合 (電圧ボタンが押されていることを示します)、他の 2 つのボタンも押されているかどうかを確認します。そうである場合は、モードを 4 (エラー モード) に設定し、そうでない場合は、モードを 1 (電圧モード) に設定します。
Key_R が 0 に等しい場合 (抵抗膜ボタンが押されていることを示します)、同じチェック プロセスが行われ、他の 2 つのボタンが押されていない場合はモードを 4 に設定し、そうでない場合はモードを 2 (抵抗膜モード) に設定します。
Key_I が 0 に等しい場合 (現在のボタンが押されていることを示します)、同じチェック プロセスが行われ、他の 2 つのボタンが押されていない場合はモードを 4 に設定し、そうでない場合はモードを 3 (現在のモード) に設定します。
キーが押されていない場合は、モードを 0 (アイドル モード) に設定します。
関数 Adc0832(0) は、ADC 値を読み取るときに使用されます。これは、ADC デバイスからデータを読み取るために使用されるハードウェア関連関数である可能性があります。
カウンタは 300 回の読み取り操作ごとにリセットされ、再びカウントが開始されます。
さまざまなモードに応じてさまざまな操作を実行します。
アイドルモードではデジタル管の表示を消し、音声出力を停止します。
電圧モードでは、ADC から読み取られた値に基づいて電圧が計算され、デジタル管に表示されます。電圧が160Vを超えると警報音が鳴ります。
抵抗モードでは、ADC から読み取られた値に基づいて抵抗が計算され、デジタル管に表示されます。抵抗値が 1000 を超える場合、百、十、単位の桁に「-」が表示されます。
4. 設計情報コンテンツ一覧とダウンロードアドレス
マテリアルデザイン資料には、シミュレーション、プログラムコード、解説ビデオ、機能要件、設計レポート、ソフトウェアおよびハードウェアの設計ブロック図が含まれます。
0. 使用上の一般的な問題と解決策 - 必読! !!!
1. シミュレーション
2. コード
3. 説明ビデオ 4.
機能要件
5. 設計レポート 6.
ソフトウェアおよびハードウェアのブロック図
Altium Designer ソフトウェア情報
KEIL ソフトウェア情報
Proteus ソフトウェア情報
ダブルクリックして詳細を開きます 51 STM32 マイクロコントローラー設計.url