プロジェクトの実際の戦闘:51シングルチップホール自転車走行距離スピードメーターデザインペーパー概略図プログラムPPT生産の詳細な説明が利用可能です

51マイクロコントローラを共有する友人のためCSDNフォーラム情報が論文を持っている非常に完全なプログラミングで、ホール自転車の走行距離のスピードメーターを行います。
説明
すべて同じピン機能の1、マイクロコントローラは、普遍的であり、51か52かどうか、またはSTCそれはすべて同じです。
手順は同じです。
2.スケマティックダイアグラムの.ddb、.Bkp、およびその他の形式をprotelseで開く必要があります。ソフトウェアがなくてもかまいません。
ワード形式とpdf形式に変換しました。
3.プログラム内の.cファイルは、プログラムであるメモ帳(テキストドキュメント)で開くことができます。もう1つは、プログラムの作成が自動的に生成され、役に立たないことです。
4.正面のレイアウトをたどることができます。本物の背面に従って溶接するのではなく、概略図に従って溶接します。

デジタルチューブピンレイアウトの手順:
正面を向いて、2番目が下、左下が1フィート、反時計回りが配置され、左上が最後の足です!溶接前に溶接前の足のレイアウトを明確にしてください!成功をお祈りします!
さらに苦労せずに、実際の写真に直接進んでください:
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ホール自転車速度測定回路の回路図:
ここに画像の説明を挿入
ここに画像の説明を挿入
パーツリストホール自転車走行速度計の
ここに画像の説明を挿入
デザインペーパー
ここに画像の説明を挿入
:シングルチップホール自転車走行速度計の参照ソースプログラム:

//目的:プログラミングの学習
//説明1:P00—P07:a ----- dp P27—P24:com1 ----- com4 P34ディスプレイの切り替えP32—INT0磁石
//説明2:このプログラムは、ホイールの円周は207cm、他のモデルの円周で、パラメーターを変更できます
//説明3:デジタルチューブは左から右に高くなっています------ low
#include <reg51.h>
#include "juxun001.h"
//主な機能=====================
void main()
{
time0_int0_init(); //タイマー0の初期化と外部割り込み0
while(!TR0)//電源オンカットされていない場合、0.0.0.0が表示されます
{
init_display();
}
while(1)
{
if(!Change)//スイッチボタンを押して、走行距離を表示します
{
delay1m(5);
if(!Change)
{
flag = 〜flag ;
}
while(!change);
}

    }

}

// ==タイマー0割り込み機能
void time0_interrupt()interrupt 1
{
TL0 =(65536-5000 )%256; // 12Mクリスタル、5msタイミング
TH0 =(65536-5000 )/ 256;
display_function();
time_counter ++;
time_counter8 ++;
if(time_counter8> = 1600)/ / 8秒以上カットされなかった場合、車は停止していると見なされ、速度は0ですが、走行距離も記録されます
{
time_counter8 = 0;
speed = 0; //速度は0
point1 = 0;
buf1 [3] = speed%10; buf1 [2] =速度/ 10%10;
buf1 [1] =速度/ 100%10; buf1 [0] =速度/ 1000%10;
}
}
// ==========外部割り込み0割り込み機能=
void int0_interrupt()interrupt 0
{

external_counter ++;
if(external_counter == 1)TR0 =〜TR0; //最初のカットはタイマー0を開きます
if(external_counter == 65535)external_counter = 0;
time_counter8 = 0; // 8秒以内にカットがある限り、車が引き継ぎます実行中

if(external_counter%2 == 0)// 2つの更新を切断する速度
{// * 5は、割り込みが5MSであるため
です(flag10){speed =((ulong)(36000)* zhouchang)/(time_counter * 5); flag1 = 1;}
else if(flag1
1){speed =((ulong)(36000)2 zhouchang)/(time_counter * 5);} //速度:単位はm / h、* 1000の目的は浮動小数点を表示しないこと

if((speed> = 100)&&(speed <1000))// 100 ---- 1000 3位整数
{
point1 = 1; buf1 [3] = speed%10; buf1 [2] = speed / 10%10 ;
buf1 [1] = speed / 100%10; buf1 [0] = 0;}
else if((speed> = 1000)&&(speed <10000))// 1000 ---- 10000 4位整数
{
point1 = 1 ; speed =(uint)speed;
buf1 [3] = speed%10; buf1 [2] = speed / 10%10;
buf1 [1] = speed / 100%10; buf1 [0] = speed / 1000%10;}
else if((speed> = 10000)&&(speed <100000))// 10000 ----- 100000 5位整数
{
point1 = 2;
buf1 [3] =速度/ 10%10; buf1 [2] =速度/ 100%10;
buf1 [1] = speed / 1000%10; buf1 [0] = speed / 10000%10;}
else if((speed> = 100000)&&(speed <1000000))// 100000 ------ 1000000 6位整数
{
point1 = 3;
buf1 [3] =速度/ 100%10; buf1 [2] =速度/ 1000%10;
buf1 [1] =速度/ 10000%10; buf1 [0] =速度/ 100000%10;}
time_counter = 0;
}
if(external_counter%8 == 0)//走行距離は8回の切断ごとに更新されます
{
s =(ulong)external_counter * zhouchang; //走行距離:単位はcm
if((s> = 1000)&&(s <10000))
{
point2 = 1; // 0.012 001212
buf2 [3] = s / 100%10; buf2 [2] = s / 1000%10;
buf2 [1] = 0; buf2 [0] = 0;} // 4桁整数
else if((s> = 10000)&&(s <100000))
{ point2
= 1;
buf2 [3] = s / 100%10; buf2 [2] = s / 1000%10;
buf2 [1] = s / 10000%10; buf2 [0] = 0;} // 5桁の整数0.123 012345
else if((s> = 100000)&&(s <1000000))
{
point2 = 1;
buf2 [3] = s / 100%10; buf2 [2] = s / 1000%10;
buf2 [1] = s / 10000%10; buf2 [0] = s / 100000%10;} // 6位整数1.234 1234 56
else if((s> = 1000000)&&(s <10000000))
{
point2 = 2;
buf2 [3] = s / 1000%10; buf2 [2] = s / 10000%10;
buf2 [1] = s / 100000%10; buf2 [0] = s / 1000000%10;} // 7位整数1234 567
else if((s> = 10000000)&&(s <100000000))
{
point2 = 3 ;
buf2 [3] = s / 10000%10; buf2 [2] = s / 100000%10;
buf2 [1] = s / 1000000%10; buf2 [0] = s / 10000000%10;} // 8位整数1234 5678
}
}
// ==========電源投入時の表示データ、初期表示速度
void init_display()
{
uchar i;
for(i = 0; i <4; i ++)
{
wei = bitcode [num-1];
led = display1 [buf1 [num–]];
delay1m(4);
if(num == 0)num = 4;
}
}
// ==表示機能=
void display_function()
{
if(flag == 0)//表示速度
{
スイッチ(point1)
{
ケース0:wei =ビットコード[num-1]; led = display1 [buf1 [num-1]]; num–; break; //速度表示0
ケース1:if(num == 1){wei = bitcode [num-1]; led = 0x7f&display1 [buf1 [num-1]];
num– ;} else {wei = bitcode [num -1]; led = display1 [buf1 [num-1]]; num –;} break; //最上位の小数点が点灯します

ケース2:if(num == 2){wei =ビットコード[num-1]; led = 0x7f&display1 [buf1 [num-1]];
num– ;} else {wei =ビットコード[num-1]; led = display1 [buf1 [num-1]]; num –;} break; // 2番目に高い小数点が点灯します

ケース3:if(num == 3){wei =ビットコード[num-1]; led = 0x7f&display1 [buf1 [num-1]];
num– ;} else {wei =ビットコード[num-1]; led = display1 [buf1 [num-1]]; num –;} break; // 3番目に高い小数点が
デフォルトで点灯します:break;

}
if(num == 0)num = 4;
}
else if(flag == 1)//走行距離を表示する
{
スイッチ(point2
{
ケース0:wei =ビットコード[num-1]; led = display1 [buf2 [num -1]]; num–; break; //マイル表示0

ケース1:if(num == 1){wei =ビットコード[num-1]; led = 0x7f&display1 [buf2 [num-1]];
num– ;} else {wei =ビットコード[num-1]; led = display1 [buf2 [num-1]]; num –;} break; //最上位の小数点が点灯します

ケース2:if(num == 2){wei =ビットコード[num-1]; led = 0x7f&display1 [buf2 [num-1]];
num– ;} else {wei =ビットコード[num-1]; led = display1 [buf2 [num-1]]; num –;} break; // 2番目に高い小数点が点灯します

ケース3:if(num == 3){wei =ビットコード[num-1]; led = 0x7f&display1 [buf2 [num-1]];
num– ;} else {wei =ビットコード[num-1]; led = display1 [buf2 [num-1]]; num –;} break; //
デフォルトで3番目に高い小数点が点灯します:break;

}
if(num == 0)num = 4;
}
}
// =================タイマー0と外部割り込み0の初期化機能=
void time0_int0_init()
{
TMOD | = 0x01;
TMOD&= 0xfd; //タイマー0はモード1で動作します
TL0 =(65536-5000 )%256; // 12Mクリスタル、5msタイミング
TH0 =(65536-5000)/ 256;
IT0 = 1; //外部割り込み0、負の遷移トリガーモード
TR0 = 0;
ET0 = 1;
EX0 = 1;
EA = 1;
}
// ==========msレベル遅延機能=
void delay1m(uchar x)
{
uchar i、j;
for(i = 0; i <x; i ++)//連続x回、約x ms
for(j = 0; j <120; j ++); // 120回、約1ミリ秒
}

最後に、コメントや提案があれば、私にメッセージを残してください。一緒に学び、一緒に進めましょう。
完全なコードまたはデザインファイルが必要な場合は、メッセージまたはプライベートメッセージを下に残してください。表示され次第、返信します。

ありがとう!

97件の元の記事を公開 200件の賞賛 80,000回以上の閲覧

おすすめ

転載: blog.csdn.net/weixin_44212493/article/details/104335363