Programación de semáforo MCU
Este es un circuito de control de semáforo que hice, que incluye diagrama de circuito, programa, notas detalladas del programa y diagrama de simulación.
3. /p> p>
Este diseño de circuito eléctrico utiliza el microcontrolador AT89C51, 74LS47 (controlador de tubo digital) y 74LS373 (pestillo de salida del controlador de tubo digital). 8 tubos digitales muestran sus valores de retardo y cuatro indicadores rojos, amarillos y verdes. luces. La clave del diseño del hardware es que al retrasar la visualización, es necesario tener en cuenta que cuando se muestran dígitos individuales, es necesario garantizar que la salida de la visualización de decenas de dígitos permanezca sin cambios. Por lo tanto, se puede agregar un pestillo de salida. Durante los últimos tres segundos del retraso, la luz amarilla debería parpadear y los números deberían mostrarse al mismo tiempo (este paso es fundamental en el diseño de software).
(1) Diagrama de conexión del circuito:
3. Programa de software (lenguaje C)
El siguiente es el programa de software para todo el diseño, que puede ser compilado directamente en *. Código hexadecimal. A través del circuito anterior, se puede descargar al microcontrolador y ejecutarlo directamente.
//*********************************//
/ /Nombre del programa: Control de semáforo en cruce
//Escrito por: Huang Tingjian
//Primera vez escrito: 2 de enero de 2009
//Función del programa : El norte y el sur son carreteras, con un retraso de 60 segundos; el este y el oeste son aceras, con un retraso de 20 segundos, y la luz amarilla se mostrará durante 2 segundos en los últimos 3 segundos antes de cambiar.
//Descripción de la CPU: AT89C51 MCU;? Oscilador de cristal de 24MHZ
//Tiempo de finalización: 6 de enero de 2009
//************ ****** *******************//
#include
#include< reg51.h>
#include
sfr?p0=?0x80;
sfr?p1=?0x90;
sfr?p2=?0xA0;
sfr?p3=?0xb0;?//Esta parte del contenido en realidad ya está en "#include
sbit?sw?=?p0^0;
sbitOE=P0^6;
sbitLE=P0^7;?//74LS373 pestillo Terminal de control definición
char?display[]={?0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99?};//Pantalla de tiempo del tubo digital del puerto P1 Llame, use 74L74BCD código, salida del controlador de 8 bits;
//Declaración de función?begin
void?delay1(int?count);
void?delay_long (int? número1,int?número2);
voidpeople_car_drive();
//Fin de declaración de función
//********* *** *************//Subrutina de retraso
void?delay1(int?count) {?int?i;
for (i=count; i>0;i--)
{?;}? }
void?delay_long(int?number1,int?number2) {
int? a,b; para(a=número1;a>0;a--)
{
para(b=número2;b>0;b- -) {?_nop_ ();?}
} }
//************************ //Retraso de subrutina voidpeople_car_drive () {
intp_1=2,i,j=9,p_2=6;//****************/ /Cuando pasen peatones, retraso 20 segundos p2=0x09;?//Las luces rojas norte y sur están encendidas
p3=0x24;?//Las luces verdes este y oeste están encendidas while(p_1-->0) {?LE= 1 ;
OE=0;
if(p_1==0){OE=1;}//Cuando el dígito de las decenas se reduce a 0, solo se muestra el dígito de las unidades p>
p1=display[p_1];
retraso1(1000);
LE=0;?
j=9; (i =10;i>0;i--)
{? if(p_1==0&&j==3)break;?//Salga del ciclo cuando se reduzca a 3 y deje que su la luz amarilla parpadea para mostrar p1= display[j--]; delay_long(16000,2); if(sw==1)return;
} }?
//* ******* ******************************************* ******** **********************// p2=0x12;?//Las luces amarillas norte y sur parpadean durante tres segundos para recordar peatones a prestar atención p3=0x12;? p1=display[ 3];? delay_long(8000,1); p2=0x12;? =mostrar[2]; retardo_long(8000,1); p2=0x00; p1=mostrar[1]; ; p2=0x00;? p3=0x00; retraso_long(14000,1);
<p>//*********************El siguiente es un retraso de 60 segundos para el tráfico de vehículos//
p2=0x24;?// Las luces verdes norte y sur están encendidas
p3=0x09;?//Las luces rojas este y oeste están encendidas while(p_2-->0) {?LE=1;
OE=0;
if (p_2==0){OE=1;}//Cuando el dígito de las decenas se reduce a 0, solo se muestra el dígito de las unidades
p1 =mostrar[p_2];
retraso1 (1000);
LE=0;
j=9; for(i=10;i>0; i--)
{? if (p_2==0&&j==3)break;?//Salir del ciclo cuando se reduce a 2 p1=display[j--]; ; if(sw==1)return;?
} } p2=0x12;//Las luces amarillas norte y sur parpadean durante tres segundos para recordar a los peatones que presten atención p3=0x12;? [3];? retraso_long(8000,1); p2=0x00;? p3=0x00 ;? retraso_long(8000,1) ; p2=0x00;? p3=0x00; retraso_long(8000,1); p2=0x12; p3=0x00; 14000,1);//Las luces amarillas norte y sur parpadean durante tres segundos} void?main() //Entrada a la función principal
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//Inicializar cada puerto{? while(1)? { if(sw==0)
{?people_car_drive();}
else {
p2=0x00;
p3=0x00;//Apagar todo semáforos} } }
}
Detalles, puede consultar aquí: /hjiannew/blog/item/b1b17a40f0b52a1a9313c6bb.html
Además, si no No entiendo hardware o software, puedes agregarme en QQ: 314955772 y te guiaré en línea.