Combate real del proyecto: 51 un solo chip Hall bicicleta kilometraje velocímetro diseño papel diagrama esquemático programa PPT producción explicaciones detalladas están disponibles

CSDN foro para los amigos para compartir un microcontrolador 51 hace a Hall velocímetro kilometraje bicicleta, la información es muy completos los documentos de programación tienen.
Descripción
1, el microcontrolador es universal, ya sea 51 o 52, o STC en absoluto las mismas funciones de los terminales Es todo lo mismo.
El procedimiento es el mismo.
2. Los formatos .ddb, .Bkp y otros en el diagrama esquemático se abrirán con protelse. No importa si no hay software.
Los he convertido a formato Word y PDF.
3. El archivo .c en el programa se puede abrir con el Bloc de notas (documento de texto), que es el programa. La otra es que escribir programas se genera automáticamente y es inútil.
4. Puede seguir el diseño frontal, no suelde de acuerdo con la parte posterior de la cosa real, pero suelde de acuerdo con el diagrama esquemático.

Instrucciones de diseño del pasador del tubo digital:
frente a usted, el segundo está hacia abajo, la parte inferior izquierda mide 1 pie, la izquierda está dispuesta y la parte superior izquierda es el último pie. ¡Aclare la disposición del pie antes de soldar antes de soldar! ¡Te deseo éxito!
Sin más preámbulos, vaya directamente a la imagen física:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Diagrama esquemático del circuito de medición de la velocidad de la bicicleta Hall:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
lista de piezas
Inserte la descripción de la imagen aquí
Documento de diseño del
Inserte la descripción de la imagen aquí
velocímetro de kilometraje de la bicicleta Hall: programa fuente de referencia del velocímetro de kilometraje de la bicicleta Hall de un solo chip:

// Propósito: Programación de aprendizaje
// Descripción 1: P00 — P07: a ----- dp P27 — P24: com1 ----- com4 Pantalla de conmutación P34 P32 — INT0 un imán
// Descripción 2: Este programa está dirigido a La circunferencia de la rueda es de 207 cm, la circunferencia de otros modelos, puede cambiar los parámetros
// Descripción 3: El tubo digital está alto de izquierda a derecha ------ bajo
#include <reg51.h>
#include "juxun001.h"
//Función principal=====================
void main ()
{
time0_int0_init (); // Inicialización del temporizador 0 e interrupción externa 0
mientras (! TR0) // Encendido 0.0.0.0 se muestra cuando no se ha cortado
{
init_display ();
}
while (1)
{
if (! Change) // Presione el botón del interruptor para mostrar el kilometraje
{
delay1m (5);
if (! Change)
{
flag = ~ flag;
}
while (! change);
}

    }

}

// ==Función de interrupción del temporizador 0
nulo time0_interrupt () interrupt 1
{
TL0 = ( 65536-5000 )% 256; // 12M crystal, 5ms timing
TH0 = ( 65536-5000 ) / 256;
display_function ();
time_counter ++;
time_counter8 ++;
if (time_counter8> = 1600) / / Si no se corta durante más de 8 segundos, el automóvil se considera detenido, la velocidad es: 0, pero también se registra el kilometraje
{
time_counter8 = 0;
speed = 0; // La velocidad es 0
punto1 = 0;
buf1 [3] = velocidad% 10; buf1 [2] = velocidad / 10% 10;
buf1 [1] = velocidad / 100% 10; buf1 [0] = velocidad / 1000% 10;
}
}
// ==========Interrupción externa 0 función de interrupción=
nulo int0_interrupt () interrupción 0
{

external_counter ++;
if (external_counter == 1) TR0 = ~ TR0; // El primer corte abre el temporizador 0
if (external_counter == 65535) external_counter = 0;
time_counter8 = 0; // Siempre que haya un corte en 8 segundos, el automóvil tomará el control Corriendo

if (external_counter% 2 == 0) // La velocidad de cortar 2 actualizaciones
{// * 5 se debe a que la interrupción es de 5MS
if (flag10) {velocidad = ((ulong) (36000) * zhouchang) / (time_counter * 5); flag1 = 1;}
else if (flag1
1) {velocidad = ((ulong) (36000) 2 zhouchang) / (time_counter * 5);} // Velocidad: la unidad es m / h, * 1000 el propósito es no aparecer en coma flotante

if ((velocidad> = 100) && (velocidad <1000)) // 100 ---- 1000 3 位 整数
{
punto1 = 1; buf1 [3] = velocidad% 10; buf1 [2] = velocidad / 10% 10 ;
buf1 [1] = velocidad / 100% 10; buf1 [0] = 0;}
más si ((velocidad> = 1000) && (velocidad <10000)) // 1000 ---- 10000 4 位 整数
{
punto1 = 1 ; velocidad = (uint) velocidad;
buf1 [3] = velocidad% 10; buf1 [2] = velocidad / 10% 10;
buf1 [1] = velocidad / 100% 10; buf1 [0] = velocidad / 1000% 10;}
más si ((velocidad> = 10000) && (velocidad <100000)) // 10000 ----- 100000 5 位整数
{
punto1 = 2;
buf1 [3] = velocidad / 10% 10; buf1 [2] = velocidad / 100% 10;
buf1 [1] = velocidad / 1000% 10; buf1 [0] = velocidad / 10000% 10;}
más si ((velocidad> = 100000) && (velocidad <1000000)) // 100000 ------ 1000000 6位 整数
{
punto1 = 3;
buf1 [3] = velocidad / 100% 10; buf1 [2] = velocidad / 1000% 10;
buf1 [1] = velocidad / 10000% 10; buf1 [0] = velocidad / 100000% 10;}
time_counter = 0;
}
if (external_counter% 8 == 0) // El kilometraje se actualiza cada 8 veces de corte
{
s = (ulong) external_counter * zhouchang; // El kilometraje: la unidad es cm
if ((s> = 1000) && (s <10000))
{
punto2 = 1; // 0.012 001212
buf2 [3] = s / 100% 10; buf2 [2] = s / 1000% 10;
buf2 [1] = 0; buf2 [0] = 0;} // 4 dígitos Entero
más si ((s> = 10000) && (s <100000))
{
punto2 = 1;
buf2 [3] = s / 100% 10; buf2 [2] = s / 1000% 10;
buf2 [1] = s / 10000% 10; buf2 [0] = 0;} // entero de 5 dígitos 0.123 012345
más si ((s> = 100000) && (s <1000000))
{
punto2 = 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
más si ((s> = 1000000) && (s <10000000))
{
punto2 = 2;
buf2 [3] = s / 1000% 10; buf2 [2] = s / 10000% 10;
buf2 [1] = s / 100000% 10; buf2 [0] = s / 1000000% 10;} // 7 位 整数 1234 567
más si ((s> = 10000000) && (s <100000000))
{
punto2 = 3 ;
buf2 [3] = s / 10000% 10; buf2 [2] = s / 100000% 10;
buf2 [1] = s / 1000000% 10; buf2 [0] = s / 10000000% 10;} // 8 位 整数 1234 5678
}
}
// ==========Los datos que se muestran cuando se enciende la alimentación, la velocidad de visualización inicial
void init_display ()
{
uchar i;
para (i = 0; i <4; i ++)
{
wei = código de bits [num - 1];
led = display1 [buf1 [num–]];
retraso1m (4);
si (num == 0) num = 4;
}
}
// ==Función de visualización=
void display_function ()
{
if (flag == 0) // Display speed
{
switch (point1)
{
case 0: wei = bitcode [num-1]; led = display1 [buf1 [num-1]]; num–; break; // Speed ​​display 0
case 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; // Se ilumina el punto decimal más significativo

caso 2: if (num == 2) {wei = código de bits [num-1]; led = 0x7f & display1 [buf1 [num-1]]; num–;}
else {wei = código de bits [num-1]; led = display1 [buf1 [num-1]]; num -;} break; // El segundo punto decimal más alto se ilumina

caso 3: if (num == 3) {wei = código de bits [num-1]; led = 0x7f & display1 [buf1 [num-1]]; num–;}
else {wei = código de bits [num-1]; led = display1 [buf1 [num-1]]; num -;} break; // El tercer punto decimal más alto se ilumina por
defecto: break;

}
if (num == 0) num = 4;
}
else if (flag == 1) // mostrar kilometraje
{
switch (point2)
{
case 0: wei = bitcode [num-1]; led = display1 [buf2 [num -1]]; num–; break; // Millas muestran 0

caso 1: if (num == 1) {wei = código de bits [num-1]; led = 0x7f & display1 [buf2 [num-1]]; num–;}
else {wei = código de bits [num-1]; led = display1 [buf2 [num-1]]; num -;} break; // El punto decimal más significativo se ilumina

caso 2: if (num == 2) {wei = código de bits [num-1]; led = 0x7f & display1 [buf2 [num-1]]; num–;}
else {wei = código de bits [num-1]; led = display1 [buf2 [num-1]]; num -;} break; // El segundo punto decimal más alto se ilumina

caso 3: if (num == 3) {wei = código de bits [num-1]; led = 0x7f & display1 [buf2 [num-1]]; num–;}
else {wei = código de bits [num-1]; led = display1 [buf2 [num-1]]; num -;} break; // El tercer punto decimal más alto se ilumina por
defecto: break;

}
if (num == 0) num = 4;
}
}
// =================Función de inicialización del temporizador 0 e interrupción externa 0= tiempo
vacío0_int0_init ()
{
TMOD | = 0x01;
TMOD & = 0xfd; // El temporizador 0 funciona en modo 1
TL0 = ( 65536-5000 )% 256; // 12M cristal, 5ms temporización
TH0 = (65536-5000) / 256;
IT0 = 1; // Interrupción externa 0, modo de activación de transición negativa
TR0 = 0;
ET0 = 1;
EX0 = 1;
EA = 1;
}
// ==========función de retraso de nivel de ms=
retraso nulo1m (uchar x)
{
uchar i, j;
for (i = 0; i <x; i ++) // Continuo x veces, aproximadamente x ms
para (j = 0; j <120; j ++); // 120 veces, aproximadamente 1 ms
}

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/104335363
Recomendado
Clasificación