Red de conocimiento informático - Conocimiento informático - Para realizar la lectura de cuatro interruptores DIP 8421 de dos segmentos, ¿se puede cambiar el siguiente ensamblaje al código de lenguaje C?

Para realizar la lectura de cuatro interruptores DIP 8421 de dos segmentos, ¿se puede cambiar el siguiente ensamblaje al código de lenguaje C?

Dos o más diales BCD pueden usar el método de escaneo dinámico del pin público A.

Los pines macho de todos los diales BCD A se usan como diferentes líneas de escaneo para conectarse al microcontrolador.

Si las líneas de datos 8, 4, 2 y 1 se levantan, el terminal A adopta una exploración baja; si las líneas de datos 8, 4, 2 y 1 se bajan, el terminal A; adopta una exploración alta.

El escaneo bajo aquí tiene dos significados:

Primero, solo una de las líneas de escaneo es de nivel bajo en cualquier momento y las otras líneas de escaneo son de nivel alto

;

En segundo lugar, durante el proceso de escaneo, las líneas de escaneo deben cambiar a un nivel bajo periódicamente. La exploración alta es exactamente lo opuesto a la exploración baja.

También cabe señalar que los valores leídos de los pines 8, 4, 2 y 1 durante el escaneo alto son los códigos BCD correspondientes a la entrada del dial, mientras que el escaneo bajo requiere una inversión del código BCD correcto.

DialChangeA=1; DialChangeB=0; //Escanea el dígito de las unidades

__no_operación();__no_operación();__no_operación();__no_operación();

__no_operación(); __no_operación(); __no_operación(); __no_operación(); __no_operación(); ;__no_operación();__no_operación();__no_operación();

__no_operación();__no_operación();__no_operación();__no_operación();

__no_operación(); __no_operación(); ;__no_operación();__no_operación();

val=PINC;

val gt;gt;= 2;

i = val amp; /Bit a bit AND, obtengo el valor unitario.

DialChangeA=0; DialChangeB=1; //Escanea el dígito de las decenas __no_operación(); __no_operación(); > __no_operación();__no_operación();__no_operación();__no_operación();

__no_operación();__no_operación();__no_operación();__no_operación();

__no_operación() __no_operación(); __no_operación(); __no_operación(); __no_operación(); ; __no_operación(); __no_operación();

val = val gt; / Bit a bit Y, obtengo el valor de las decenas.

l *= 10; //Multiplica el valor de las decenas por 10

i = l //Luego súmalo al valor de las unidades.

Dalay=1;

return i; //Devuelve el número decimal obtenido