Combate del proyecto: el diseño del proyecto del taxímetro tiene un programa esquemático de mapa físico para compartir con todos para descargar

Recientemente recibí un proyecto para diseñar un conjunto de sistemas de software y hardware para un taxímetro.
Diseñé una solución con 51 microcomputadoras de un solo chip. El efecto no es malo. Bienvenido a dejar un mensaje para aprender y discutir.

Sin más preámbulos, vaya al
Inserte la descripción de la imagen aquí
esquema de diseño de AD del mapa físico

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Datos de diseño
Inserte la descripción de la imagen aquí
Lista de componentes del taxímetro
Unidad de nombre del componente (solo) Observaciones del parámetro del modelo
MCU 2 AT89S52
diodo rectificador 20 IN4007
condensador 10
condensador 30P 10 104
condensador electrolítico 8 condensador electrolítico 100UF / 50V
2 condensador electrolítico 220UF / 50V
10 10UF / 25
micro Interruptor (botón) 12
74ls164 8
Interruptor de autobloqueo 2 (blanco, seis pines)
encabezado de pines 2 filas
Oscilador de cristal 2 Resistencia de
ajuste fino 11.0592M 5103 3296W
Cable 10K 1 metro
Regulador de voltaje 20p 2 Regulador de
voltaje LM7805 2 Cable de
soldadura LM7812 Varios
disipadores de calor 3
triodos YB-20 20
placas universales 2TYP (PNP) 3
protección de apagado 2 24c02
L298N 2
tubo digital de siete segmentos 8
optoacoplador LG5011BSR 2
bloque de terminales TP521-4 8
tomas de tubo 2P 5 tomas de
tubo 40P 5
tubo termocontraíble 16P 1 metro de diámetro 1,5
mm columna de cobre 8 longitud 20 mm
motor de CC 1
cable de alimentación 1
Transformador 1
Sensor de profundidad 3
Unidad MOCH26A 1 L297 y L292

Programa fuente de código de lenguaje C

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

#define uchar unsigned char
sbit P3_4 = P3 ^ 4;
sbit jia = P2 ^ 0; // precio más
sbit jian = P2 ^ 1; // precio menos
sbit gl = P2 ^ 2; // km
sbit hp = P2 ^ 3 ; // Cambiar pantalla
sbit j = P2 ^ 4; // Count

unsigned char keycnt = 0;
unsigned char cnt = 0;
bit de escritura = 0; // 写 24C08 的 标志 ;
// code uchar tab [10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};
// code uchar tab [10] = {0x3f, 0x06,0x5b, 0x4f, 0x66,0x6d, 0x7d, 0x07,0x7f, 0x6f,};
código 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; // Precio unitario
e = 00; // km
f = 05;

u = 12; // hora
v = 00; // minuto
w = 00; // segundo
// jiage = d * e; // cantidad
////////// 24C08 controlador de lectura / escritura //// ////////////////
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 subrutina de inicialización
{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 () // detener (I lado C) bus
{sda = 0; flash (); scl = 1; flash (); sda = 1; flash ();}
void writex (unsigned char j) // escribe un byte
{unsigned char i, temp;
temp = j;
for (i = 0; i <8; i ++)
{temp = temp << 1; scl = 0; destello(); sda = CY; destello(); scl = 1; flash ();}
scl = 0; destello(); sda = 1; destello();
}
unsigned char readx () // 读 一个 字节
{
unsigned char i, j, k = 0;
scl = 0; destello(); sda = 1;
para (i = 0; i <8; i ++)
{
flash (); scl = 1; destello();
si (sda1) j = 1;
de lo contrario j = 0;
k = (k << 1) | j;
scl = 0;}
flash (); retorno (k);
}
void clock () // (I 方 C) 线 时钟
{
unsigned char i = 0;
scl = 1; flash ();
while ((sda
1) && (i <255)) i ++;
scl = 0; flash ();
}
//////// Leer un byte de datos de la dirección de
24c02 ////// unsigned char x24c08_read (unsigned dirección de char)
{
unsigned char i;
start (); writex (0xa0);
clock (); writex (address);
clock (); start ();
writex (0xa1); clock ();
i = readx (); stop ();
delay1 (10);
return (i);
}
////// Escriba un byte de datos en la dirección de 24c02 info /////
void x24c08_write (dirección de caracteres sin firmar, información de caracteres sin firmar)
{
EA = 0;
start (); writex (0xa0);
clock (); writex (dirección);
clock (); writex (info);
clock (); stop ();
EA = 1;
delay1 (50);
}
///////////// 24C08 Fin del controlador de lectura y escritura ///////////////////////
void Delay (unsigned int tc) // Delay Programa de tiempo
{
while (tc! = 0)
{unsigned int i;
for (i = 0; i <100; i ++);
tc–;}
}

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

si (j0)
{
cnt ++;
switch (cnt)
{
caso 30:
e ++;
cnt = 0;
descanso;
mientras (hp
0);
}
}
}
void disp (void)
{
para (c = 5; c> = 0; c–)
{
SBUF = tab [sz [c]];
mientras que (! TI);
TI = 0;
}
}

/ * void KEY () // Programa de exploración de claves
{
unsigned char i, j;
if (jian == 0)
{
for (i = 20; i> 0; i--) // Demora para interferir
en (j = 248 ; j> 0; j–);

if (hp == 0)
{
keycnt ++;
switch (keycnt) // juzga el número de pulsaciones
{
caso 1: // primero presiona
d = 46;
break;

caso 2: // Presione
d = 12 por segunda vez ;

descanso;

caso 3: // Presione
d = 78 por tercera vez ;
keycnt = 0; // Reinicie para juzgar la
ruptura del valor clave ;
}
while (hp == 0);
}
}
} * /

vacío shizhong (vacío)
{
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) // tiempo de visualización
{
if (jian0)
{
u ++;
}
if (gl
0)
{
v ++;
}
if (hp == 0)
{
w ++;
}

q = s [0] = u / 10% 10;
b = s [1] = 10% en;
s = s [2] = v / 10% 10;
s = g [3], v = 10%;
Y = S [4] = w / 10% 10;
= Citados s [5] = 10 en%;
}

void led1 (void) // Muestra la cantidad de millaje de precio
{

//LLAVE();
si (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) interrupción 3
{
TH1 = 0X3C;
TL1 = 0xB0;

a = a + 1;
si (a12)
{
a = 0;
P3_4 =! P3_4;
si (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;
}

shizhong ();

si (jia == 0)

Debido a limitaciones de espacio, solo se puede escribir parte del código,

Finalmente, si tiene algún comentario o sugerencia, puede dejarme un mensaje, déjenos aprender juntos y progresar juntos.Si
necesita el código completo o el archivo de diseño, déjeme un mensaje o mensaje privado a continuación, y responderá tan pronto como lo vea.

Gracias

97 artículos originales publicados · 200 alabanzas · 80,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/weixin_44212493/article/details/104335215
Recomendado
Clasificación