El siguiente código se muestra de 0000 a 9999. Sin embargo, el punto importante que se requiere comprender aquí es eso. Las líneas de datos de los 7 segmentos están multiplexadas. Por lo tanto, si enciende todas las pantallas y envía ‘1’, aparecerá como 1111 en los cuatro segmentos.
La forma de resolverlo es encender una pantalla a la vez y cambiarla rápidamente para que parezca 1234.
Aquí hay un tutorial que he escrito para el segmento individual.
- ¿Para qué se utilizan los microcontroladores?
- ¿Alguien puede ayudarme a encontrar la dirección de Pc0-Pc5? La hoja de datos: http://www.pmt-fl.com/downloads/picocap/DB_PCap01Ax_0301_en.pdf
- Tengo la intención de utilizar un microcontrolador (AVR) para diseñar un sistema que capture un valor de un sensor y almacene los datos a lo largo del tiempo. ¿Cómo hago esto?
- ¿Los PLC están en peligro de ser reemplazados por microcontroladores con la mayor flexibilidad de los microcontroladores?
- ¿Cómo es el mercado laboral para VLSI y sistemas integrados en Canadá?
9.8051 Interfaz: siete segmentos
El código completo se puede encontrar a continuación:
ExploreEmbedded / AT89S52_Ultra_Development_Kit
Descargo de responsabilidad: trabajo para Explore Embedded, y los archivos adjuntos y el código son necesarios para explicar la pregunta, o de lo contrario, ¿cómo se resolvería? 😉
#include
#include “delay.h” // Biblioteca de delay definida por el usuario que contiene las rutinas de delay
#define SegmentValue P2 //PORT2.0 está conectado al segmento ‘a’
#define SegmentSlection P0 //PORT0.0 es la línea de selección ‘S1’
#define SegOne 0x01
#define SegTwo 0x02
#define SegThree 0x04
#define SegFour 0x08
#define NoSeg 0x00
void display_number (número int sin signo)
{
unsigned char seg_code [] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82, 0xF8,0x80,0x90};
carácter temporal sin firmar;
unsigned int i, num;
para (i = 0; i <100; i ++)
{
num = número;
temp = num / 1000;
num = num% 1000;
SegmentSlection = SegOne;
SegmentValue = seg_code [temp];
delay_us (10);
temp = num / 100;
num = num% 100;
SegmentSlection = SegTwo;
SegmentValue = seg_code [temp];
delay_us (10);
temp = num / 10;
SegmentSlection = SegThree;
SegmentValue = seg_code [temp];
delay_us (10);
temp = num% 10;
SegmentSlection = SegFour;
SegmentValue = seg_code [temp];
delay_us (10);
}
}
/ * inicia el programa principal * /
vacío principal()
{
unsigned int cnt = 0;
mientras que (1)
{
for (cnt = 0; cnt 9999
{
display_number (cnt);
}
}
}