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
esquema de diseño de AD del mapa físico
Datos de diseño
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 ((sda1) && (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 (hp0);
}
}
}
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 (gl0)
{
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 (gl0)
{
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_40)
{
// 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