プロジェクトの戦闘:タクシーメーターのプロジェクト設計には、ダウンロードして全員と共有する物理的な地図の概略図プログラムがあります

タクシーメーター用のソフトウェアとハ​​ードウェアシステムのセットを設計するプロジェクトを最近受け取りました
。51個のシングルチップマイクロコンピューターでソリューションを設計しました。効果は悪くありません。メッセージを投稿して、学び、話し合ってください。

面倒なことなく、物理的な地図の
ここに画像の説明を挿入
AD設計図に移動します。

ここに画像の説明を挿入
ここに画像の説明を挿入
設計データ
ここに画像の説明を挿入
タクシーメーターコンポーネントリスト
コンポーネント名単位(のみ)モデルパラメーター備考
MCU 2 AT89S52
整流ダイオード20 IN4007
コンデンサ10 30P
コンデンサ10 104
電解コンデンサ8 100UF / 50V
電解コンデンサ2 220UF / 50V
電解コンデンサ10 10UF / 25
マイクロスイッチ(ボタン)12
74ls164 8自動
ロックスイッチ2(白、6ピン)
ピンヘッダー2列
水晶発振器2 11.0592M
微調整抵抗5 103 3296W 10K
ケーブル1メートル20p
電圧レギュレータ2 LM7805
電圧レギュレータ2 LM7812
はんだワイヤー多数の
ヒートシンク3 YB-20
三極管20 2TYP(PNP)
ユニバーサルプレート3
電源オフ保護2 24c02
L298N 2
7セグメントデジタルチューブ8 LG5011BSR
オプトカプラー2 TP521-4
端子ブロック8 2P
チューブソケット5 40P
チューブソケット5 16P
熱収縮チューブ1メートル直径1.5mm
銅柱8長さ20mm
DCモーター1
電源コード1
変圧器1
深度センサー3 MOCH26A
ドライブ1 L297およびL292

C言語コードソースプログラム

#include <reg52.h>
#include <stdio.h>
#include <absacc.h>

#define uchar unsigned char
sbit P3_4 = P3 ^ 4;
sbit jia = P2 ^ 0; //価格と
sbit jian = P2 ^ 1; //価格から
sbit gl = P2 ^ 2; // km
sbit hp = P2 ^ 3 ; //画面の変更
sbit j = P2 ^ 4; //カウント

unsigned char keycnt = 0;
unsigned char cnt = 0;
ビット書き込み= 0; //写24C08的标志;
//コードuchar tab [10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10、};
//コードuchar tab [10] = {0x3f、0x06,0x5b、0x4f、0x66,0x6d、0x7d、0x07,0x7f、0x6f、};
コードuchar tab [10] = {0xbf、0x06,0xdb、0xcf、0x66,0xed、0xfd、0x87,0xff、0xef、};
uchar sz [6];
int yw、ww、qw、bw、sw、gw、a、b、c、d、e、f、g、u、v、w、z;

d = 46; //単価
e = 00; // km
f = 05;

u = 12; //時間
v = 00; //分
w = 00; //秒
// jiage = d * e; //量
////////// 24C08読み取り/ 書き込みドライバー//// /////////////////
sbit scl = P3 ^ 4; // 24c08 SCL
sbit sda = P3 ^ 5; // 24c08 SDA
void delay1(unsigned char x)
{unsigned int i;
for(i = 0; i <x; i ++);;
}
void flash()
{;;}
void x24c08_init()// 24c08初期化サブルーチン
{scl = 1; flash(); sda = 1; flash(); }
void start()// Start(I side C)bus
{sda = 1; flash(); scl = 1; flash(); sda = 0; flash(); scl = 0; flash();}
void stop ()//(IサイドC)バスを停止
{sda = 0; flash(); scl = 1; flash(); sda = 1; flash();}
void writex(unsigned char j)//バイトを書き込む
{unsigned char i、temp;
temp = j;
for(i = 0; i <8; i ++)
{temp = temp << 1; scl = 0; 閃光(); sda = CY; 閃光(); scl = 1; flash();}
scl = 0; 閃光(); sda = 1; 閃光();
}
unsigned char readx()//读一个字节
{
unsigned char i、j、k = 0;
scl = 0; 閃光(); sda = 1;
for(i = 0; i <8; i ++)
{
flash(); scl = 1; 閃光();
if(sda1)j = 1;
その他j = 0;
k =(k << 1)| j;
scl = 0;}
flash(); return(k);
}
void clock()//(I方C)线时钟
{
unsigned char i = 0;
scl = 1; flash();
while((sda
1)&&(i <255))i ++;
scl = 0; flash();
}
/////////
24c02 のアドレスから1バイトのデータを読み取る////// unsigned char x24c08_read(unsigned charアドレス)
{
unsigned char i;
start(); writex(0xa0);
clock(); writex(address);
clock(); start();
writex(0xa1); clock();
i = readx(); stop ();
delay1(10);
return(i);
}
////// 1バイトのデータを24c02 infoのアドレスに書き込みます/////
void x24c08_write(unsigned char address、unsigned char info)
{
EA = 0;
開始(); writex(0xa0);
クロック(); writex(アドレス);
クロック(); writex(情報);
クロック();停止();
EA = 1;
遅延1 (50);
}
///////////// 24C08ドライバの読み取りと書き込みの終了///////////////////////
void Delay(unsigned int tc)// Delay時間プログラム
{
while(tc!= 0)
{unsigned int i;
for(i = 0; i <100; i ++);
tc–;}
}

////////////////////////////////////////////////// ///////////////////////////
void jishuqi()
{

if(j0)
{
cnt ++;
switch(cnt)
{
ケース30:
e ++;
cnt = 0;
ブレーク;
while(hp
0);
}
}
}
void disp(void)
{
for(c = 5; c> = 0; c–)
{
SBUF = tab [sz [c]];
while(!TI);
TI = 0;
}
}

/ * void KEY()//キースキャンプログラム
{
unsigned char i、j;
if(jian == 0)
{
for(i = 20; i> 0; i--)//干渉するまでの遅延
(j = 248 ; j> 0; j–);

if(hp == 0)
{
keycnt ++;
switch(keycnt)//プレス数を判断する
{
ケース1://最初に押す
d = 46;
break;

ケース2:// 2回目に
d = 12を押す;

ブレーク;

ケース3:// 3回目に
d = 78を押す;
keycnt = 0; //キー値の
ブレークを判断するために再起動;
}
while(hp == 0);
}
}
} * /

void shizhong(void)
{
z = TH0 * 256 + TL0;

if(z> 1)
{
w ++; z = 0;
}
if(w> 59)
{
v ++; w = 0;
}

if(v> 59)
{
u ++; v = 0;
}

if(u> 23)
{
u = 0;
}
}
void led(void)//時間を表示する
{
if(jian0)
{
u ++;
}
if(gl
0)
{
v ++;
}
if(hp == 0)
{
w ++;
}

Q = S [0] = U / 10%10。
%でB = S [1] = 10。
S = S [2] = V / 10〜10%。
S = G [3]、V = 10%。
Y = S [4] / 10〜10%W =。
引用さ= S [5]%で= 10。
}

void led1(void)//価格マイレージの金額を表示します
{

//キー();
if(jian0)
{
d = 46;
}
if(gl
0)
{
d = 78;
}
if(hp == 0)
{
e = 00;
f = 05;
}
qw = sz [0] = d / 10%10;
bw = sz [1] = d%10;
sw = sz [2] = e / 10%10;
gw = sz [3] = e%10;
yw = sz [4] = f / 10%10;
ww = sz [5] = f%10;
jishuqi();

x24c08_write(2、e);

}
void scjs(void)interrupt 3
{
TH1 = 0X3C;
TL1 = 0xB0;

a = a + 1;
もし12)
{
a = 0;
P3_4 =!P3_4;
if(P3_4
0)
{
// b = TH0 256 + TL0;
// f = 5;
/

if(jia == 0)
{d ++;}

if(jian == 0)
{d–;}

if(gl == 0)
{e ++;}
* /
if(e> 3)
{
g =(e-3)* d / 10 + 5;
f = g;
}

シジョン();

if(jia == 0)

スペースの制限により、コードの一部しか記述できません。

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

ありがとう!

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

おすすめ

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