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