Red de conocimientos turísticos - Conocimientos sobre calendario chino - Utilice el microcontrolador 51 como base y utilice el lenguaje C para diseñar un contador que requiera la visualización de 8 bits de datos, una función de reinicio, un intervalo de tiempo de 1 segundo y una visualización dinámica.

Utilice el microcontrolador 51 como base y utilice el lenguaje C para diseñar un contador que requiera la visualización de 8 bits de datos, una función de reinicio, un intervalo de tiempo de 1 segundo y una visualización dinámica.

void dis_cnter(void) Se inicia la subrutina de valor del contador

{uchar i; definir carácter variable local i

P3_7=1;P3_6=1; válido y se permite la visualización

for(i=0;i8;i++) bucle 8 veces

{SBUF=SEG7[cnt]; while(!TI);TI=0 ; } Enviar visualización basada en la búsqueda de tabla de 8 unidades

P3_7=0; Desactivar el borrado, visualización normal

} Mostrar el valor del contador finaliza la subrutina

void cnter( void) se inicia la subrutina de conversión de conteo

{uchar i; define la variable local del carácter i

for(i=0;i7;i++) se repite 8 veces

p>

{if(cnt9){cnt=0;cnt[i+1]++;}}Si el valor de un determinado bit en el contador es mayor que 9, el bit volverá a 0,

Y el bit alto será Carry plus 1

--------------------------------- ------------

if(cnt[7]9){for(i=0;i8;i++)cnt=0;} Si el valor más alto del contador es mayor que 9, el contador se borrará a 0

} Conversión de conteo Fin de la subrutina

void pt_cnt(void) Inicio de la subrutina de control de salida

{

if((cnt[0]==pre_cnt[0])&& (cnt[1]==pre_cnt[1])&&

(cnt[2]==pre_cnt [2])&&(cnt[3]==pre_cnt[3])&&

(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5]) &&

(cnt[6]==pre_cnt[6])&&( cnt[7]==pre_cnt[7])) Si el valor de conteo es igual al valor preestablecido

out_flag=1; el indicador de salida se establece en 1

else out_flag=0 de lo contrario, el indicador de salida se establece en 0

===========; =============================== =======

if(out_flag)drv =0; si el indicador de salida es 1, configure el terminal de salida (P3.4) en 0 y active el optoacoplador U2

de lo contrario, drv=1; de lo contrario, el terminal de salida (P3.4) se establece en 1

} La subrutina de control de salida finaliza

void main(void) Se inicia el programa principal

{ IE=0x84 Abrir interrupción de CPU, abrir interrupción de externo; interrupción 1

IT1=1; establece la interrupción externa 1 como disparador de flanco

while(1) bucle infinito

{P3_6=0;P3_7=1; para enviar a la pantalla, el borrado es válido

SBUF=0x00; while(!TI);TI=0 Envíe 0x00 a IC2 para que la salida IC2 esté completa en 0

if( (P3&0x24)!=0x24)keydown_flag=1; Compruebe si P3.2 y P3.5 son de nivel alto.

Si no es de nivel alto, significa que se presiona una tecla y el indicador de tecla presionada se establece en 1

de lo contrario, keydown_flag=0, el indicador de tecla presionada es; establecido en 0

p>

---------------------------------- ---------- ----------------------------------

SBUF=0xfe; while(!TI) ;TI=0; Enviar 0xfe a IC2

if(!P3_2)set_flag=!set_flag; Si P3.2 es 0, significa que se presiona la tecla S9; , y la bandera set_flag está invertida

===================================== ==============

if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}

Si el indicador set_flag es 0, llame al recuento, muestre el recuento, subrutina de control de salida

else {scan_key();dis_pre_cnter();delay(10);}

De lo contrario, el flag set_flag es 1, llama a escanear las teclas S1~S8, muestra la subrutina de configuración de valor previo

=========================== ============== ===============

if(keydown_flag)delay(300); , se llama a la subrutina de retardo de 300 mS,

Para evitar ajustar el valor de la clave demasiado rápido

}

} El programa principal finaliza

void extern_int1(void) interrupción 2 usando 1 subrutina de servicio de interrupción externa 1

{

cnt[0]++ Agrega 1 al bit más bajo del contador

<; p>}

i.js">