Buscando un programa en lenguaje C sobre el zumbador de un microcontrolador. Si es bueno y factible, obtendré puntos extra ~.
6. ?Generador de alarmas?
1. ?Tarea experimental?
Utilice P1.0 para emitir señales de audio de 1 KHz y 500 Hz para activar el altavoz como señal de alarma. Se requiere que la señal de 1 KHz suene durante 100 ms y la señal de 500 Hz suene durante 200 ms, alternativamente. , y P1.7 está conectado a un interruptor de Control, cuando el interruptor está cerrado, suena la señal de alarma, cuando el interruptor está desconectado, la señal de alarma se detiene y se programa el programa.
?
2. ?Diagrama esquemático del circuito?
Figura 4.6.1?
3. ?Conexión de hardware en la placa del sistema?
(1. Conecte el puerto P1.0 en el área "Sistema SCM" al puerto SPK IN en el área "Módulo de amplificación de audio" con un cable;?
(2.? Conecte un altavoz de 8 ohmios o 16 ohmios al puerto SPK?OUT en el área "Módulo de amplificación de audio";?
(3.? Conecte el P1.7 /RD en el área "Sistema MCU" al puerto K1 en el área "Interruptor de palanca de cuatro direcciones";?
4. ¿Contenido de programación?
(1.? ¿Método de generación de señal?
El período de la señal de 500 Hz es de 2 ms y el nivel de la señal cambia cada 1 ms. El período de la señal de 1 KHz es de 1 ms y el nivel de la señal cambia cada 500 us.
5. ?Diagrama de bloques del programa?
Figura 4.6.2?
6. ?Programa fuente de ensamblaje
FLAG?BIT?00H
ORG?00H
INICIO:?JB?P1.7,INICIO
JNB?FLAG,NEXT
MOV?R2, #200
DV:?CPL?P1.0
LCALL?DELY500
LCALL?DELY500
DJNZ ?R2, DV
CPL?FLAG
SIGUIENTE: ?MOV?R2, #200
DV1: ?CPL?P1.0
LCALL?DELY500
DJNZ?R2, DV1
CPL?FLAG
SJMP?START
DELY500:?MOV?R7 , #250
LOOP:?NOP
DJNZ?R7, LOOP
RET
END
7 .?Programa fuente en lenguaje C p>
#include?lt;AT89X51.Hgt;
#include?lt;INTRINS.Hgt;
bit?flag;
¿sin firmar? char?count;
void?dely500(void)
{
unsigned?char?i;
for(i=250 ;igt;0;i--)
{
_nop_();
}
}
void?main(void)
{
mientras(1)
{
si (P1_7==0) p>
{
for(count=200; countgt; 0; count--)
{
P1_0=~P1_0;
dely500();
}
for(count=200; countgt; 0; count--)
{
P1_0=~P1_0;
dely500();
dely500()
}
}
}
}