You are on page 1of 19

Tipos de displays de 7 segmentos [Editar]

Una sola pantalla de 7 segmentos consta de siete (con decimales) y ocho individuales LED en una
carcasa comn. Por razones prcticas, una de las dos conexiones de cada LED est conectado a
las mismas conexiones del otro LED y llev a cabo desde el alojamiento conjunto. Esto ahorra
patillas de la vivienda y ms tarde en la unidad. Por lo tanto, hablamos de pantallas con nodo
comn (ing. nodo comn) o ctodo comn (ctodo eng. Comn).

El cableado interno de los displays de 7 segmentos

Una sola pantalla de 7 segmentos [Editar]


Circuito [Editar]

Pin
asignacin de una de 7 segmentos
de visualizacin

El control de una nica pantalla de 7 segmentos


Una sola pantalla de 7 segmentos es de acuerdo al esquema de puerto D conectado el
Mega8.Port D ha sido elegido porque es el nico puerto en Mega8 de los plenos 8 bits. El display
de 7 segmentos, adems de los segmentos de una de g un nodo comn CA y un punto
decimal dp(ver foto).
Qu pin en la pantalla qu segmento (AG) o su equivalente decimal es mejor tomarlo de la hoja de
datos para la visualizacin. Si usted no tiene la hoja de datos, puede que encuentre el pinout
empricamente simplemente probweise todos los pines 'abklappert' con una fuente de 5 V y una
resistencia de 1k. 1k es as, por lo que no sobrecargado en dos casos Fell LED de baja
corriente.Un display de 7 segmentos, que est diseado para el habitual 10 a 20 mA es tan ligero
hasta todava, aunque dbilmente. Pero se necesita ms evidencia de hecho no es suficiente para
encontrar el pinout. A continuacin se supone que esta asignacin segmento:
Si una asignacin diferente utiliza entonces que es posible, en principio, pero que tendran que ser
tenido en cuenta en la programacin.
Como una pantalla de 7 segmentos conceptualmente equivalente a siete LEDs individuales, ningn
cambio se plantea, en principio, en el control de una pantalla como en comparacin con la unidad
LED como la Tutorial AVR: IO Conceptos bsicos se muestra. Al igual que con los LEDs
individuales una de las cuales est activado por el pasador de puerto asociado se establece en
0. Pero a diferencia de individuo LED quiere conseguir con una pantalla de este tipo, una pantalla
digital. Para este propsito, slo es necesario para encender los LEDs para un dgito derecho
dado.

Cdigo Tabla [Editar]

Representacin del nmero "3"


La recodificacin de cada dgito en un patrones de salida especficos se puede hacer a travs de
una llamada tabla de cdigos. El nmero emitida se interpreta como una compensacin para el
comienzo de esta tabla y de la mesa obtenido un byte (Cdigo), que puede ser impreso
directamente sobre el puerto y la incluye patrn de bits correspondiente, por lo que la necesaria
para ese dgito LED Activar o Desactivar.
Ejemplo
Para el numeral 3, indican a los segmentos de la pantalla a, b, c, d y g vamos. Todos los
otros segmentos han de ser oscuro.
Desde el diagrama de cableado muestra que si la salida requerida en Puerto
binario 10110000 debera leer. Si examinamos esto, el resultado de todos los dgitos siguientes
tabla:

.db
.db
.db
.db
.db
.db
.db
.db
.db
.db

0b11000000;
0b11111001;
0b10100100;
0b10110000;
0b10011001;
0b10010010;
0b10000010;
0b11111000;
0b10000000;
0b10010000;

0:
1:
2:
3:
4:
5:
6:
7:
8:
9:

a,
b,
a,
a,
b,
a,
a,
a,
a,
a,

b,
c
b,
b,
c,
c,
c,
b,
b,
b,

c, d, e, f
d,
c,
f,
d,
d,
c
c,
c,

e,
d,
g
f,
e,

g
g
g
f, g

d, e, f, g
d, f, g

Programa [Editar]
El programa de prueba proporciona sucesivamente los nmeros de 0 a 9 estn en el display
de 7 segmentos. El nmero correspondiente se emite en el Registro recuento y se incrementa
en el bucle 1. El registro alcanza el valor de 10, se restablece a 0 de nuevo. Tras el aumento
sigue un patrn de espera, lo que asegura que hasta el prximo nmero pasa de un cierto
tiempo. Normalmente usted no tiene este tipo de colas largas, pero aqu no viene sino para
esperar la activacin de un display de 7 segmentos. Para utilizar un temporizador para esto
sera demasiado esfuerzo al principio.

La salida real y por lo tanto la parte interesante de este artculo, sin embargo, inmediatamente
despus de la etiqueta de bucle en su lugar. La tabla de cdigos ya conocido
por .db Directiva (d efinir b en el YTE) memoria flash set. Puede acceder a ella a travs de la
Z-puntero y el comando lpm. Adems, antes de que el acceso ni el valor del registro
de recuento y por lo tanto el valor del contador actual a la Z-puntero aadido.
Debe tenerse en cuenta nicamente que el valor del contador debe duplicarse. Esto tiene la
siguiente razn: Si la tabla como se muestra aqu por medio de individuales .db.
Instrucciones estructurado, por lo que el ensamblador llama bytes de relleno entre los
bytes individuales de manera que cada .dbdeclaracin se encuentra en una direccin de
memoria recta. Esta es una consecuencia directa del hecho de que la memoria flash como las
palabras (16 bits) y no un byte (8 bits) se organiza. Pero debido a un .db en la tabla a la
siguiente .db hay una diferencia de 2 bytes, esto debe ser considerado en el clculo. En el
segundo ejemplo en esta pgina, esto se hace de manera diferente. All se muestra cmo se
puede solucionar a travs de una ortografa diferente de la mesa la generacin de los bytes de
relleno por el ensamblador.
Por la misma razn, el Z-puntero se carga con el 2 veces de la direccin inicial de la tabla. La
direccin inicial es utilizado por el ensamblador en wordwise abordar lpm quieren que la
direccin de acceso especificada como la direccin del byte.
Tambin es interesante que en el clculo de un registro se requiere, que incluye el 0. Esto se
debe a que no hay un comando en el AVR, puede aadir una constante con la consideracin
simultnea de los bits de acarreo. Por lo tanto, esta constante primero se debe cargar en un
registro y luego la adicin se puede hacer utilizando este registro. Lo interesante ahora es que
esta circunstancia se produce en muchos programas, y es la constante de 0 en las constantes
en la gran mayora de los casos. Muchos programadores se reservan por lo tanto, desde el
primer momento un registro para este propsito y lo llaman el Zero-registro. Lgicamente, su
compromiso con este registro en la zona r0..r15 debido a que estos registros son una segunda
tasa de bits (LDI, IPC, etc. no funcionan con ella).

.include "m8def.inc"
.def zero = r1
.def count = r16
.def temp1 = r17
.org 0x0000
rjmp

main

ldi
out

temp1, HIGH(RAMEND)
SPH, temp1

;
main:

; Reset Handler

ldi
out

temp1, LOW(RAMEND)
SPL, temp1

; Stackpointer initialisieren

ldi
out

temp1, $FF
DDRD, temp1

; die Anzeige hngt am Port D


; alle Pins auf Ausgang

ldi
mov

count, 0
zero, count

; und den Zhler initialisieren

ldi

ZL, LOW(Codes*2)

; die Startadresse der Tabelle in

ldi

ZH, HIGH(Codes*2) ; Z-Pointer laden

mov

temp1, count

; die wortweise Adressierung der

add

temp1, count

; bercksichtigen

add
adc

ZL, temp1
ZH, zero

; und ausgehend vom Tabellenanfang


; die Adresse des Code Bytes

;
loop:
den

Tabelle

berechnen
lpm

; dieses Code Byte in das Register

r0 laden
out

PORTD, r0

; und an die Anzeige ausgeben

inc

count

; den Zhler erhhen, wobei der

cpi
brne
ldi

count, 10
wait
count, 0

; immer nur von 0 bis 9 zhlen soll

ldi

r17, 10

; und etwas warten, damit die Ziffer

ldi

r18, 0

; der Anzeige auch lesbar ist, bevor

ldi
dec
brne
dec
brne
dec
brne

r19, 0
r19
wait2
r18
wait1
r17
wait0

; nchste Ziffer gezeigt wird

;
Zhler

;
wait:
auf
wait0:
die
wait1:
wait2:

;
rjmp

loop

;
Codes:
bis 9

; auf zur nchsten Ausgabe


; Die Codetabelle fr die Ziffern 0
; sie regelt, welche Segmente fr

eine bestimmte

.db
.db
.db
.db
.db
.db
.db
.db
.db
.db

0b11000000
0b11111001
0b10100100
0b10110000
0b10011001
0b10010010
0b10000010
0b11111000
0b10000000
0b10010000

;
;
;
;
;
;
;
;
;
;
;
;

Ziffer eingeschaltet werden mssen


0:
1:
2:
3:
4:
5:
6:
7:
8:
9:

a,
b,
a,
a,
b,
a,
a,
a,
a,
a,

b,
c
b,
b,
c,
c,
c,
b,
b,
b,

c, d, e, f
d,
c,
f,
d,
d,
c
c,
c,

e,
d,
g
f,
e,

g
g
g
f, g

d, e, f, g
d, f, g

Mltiples pantallas de 7 segmentos (multiplexacin) [Editar]


Con el conocimiento previo ahora podra hacerlo a conducir una vez que tres o cuatro pantallas con
la Mega8. Lamentablemente hay un problema, ya que son para clavijas pantalla de ocho puertos
necesarios - por lo tanto, cuatro anuncios necesitaran 32 pines del puerto. El tiene no Mega8
pero. Hay varias maneras de salir, pero. Registros de desplazamiento ya estn en otro tutorial se
describe. De este modo, se podra generar fcilmente las 32 lneas de salida necesarios con
alfileres a slo 3 puertos. El principio de control difiere en nada de la Ansteurung una sola pantalla
de 7 segmentos, slo la forma en cmo los 'pines de salida' llegan a sus valores es diferente y
definido por el uso de registros de desplazamiento. En este punto, sin embargo, otra variante de la
unidad se muestra. A continuacin haremos, pues, la multiplexacin de vista an ms cerca.
Multiplexacin significa que no todas las cuatro luces se encienden al mismo tiempo, pero slo una
breve durante un tiempo. Si el movimiento alternante entre las pantallas ms rpido que los seres
humanos pueden percibir que, todas las cuatro pantallas parecen simultneamente a estar en
funcionamiento a pesar de que solamente se encienden durante un corto tiempo. Este es
prcticamente un caso especial de una matriz de LED con una sola lnea. Las cuatro pantallas
pueden as compartir las lneas de segmentos individuales y todo lo que se necesita son 4 lneas
de control adicionales para los 4 anuncios, con cada uno de los cuales una pantalla est
encendida. Este encendido / apagado se realiza con un transistor PNP en la tensin de
alimentacin de cada monitor en Mega8 en Puerto C ser conducido.
Un aspecto de este tipo de control es la multiplexacin por divisin de frecuencia, por lo que un
ciclo completo, la indexacin de uno a otro. Deben ser lo suficientemente alta para evitar un
parpadeo de la pantalla. El ojo humano es lento, el cine rico 24 fps, el televisor hay 50. Para estar

en el lado seguro, que las imgenes fijas aparecen en calma, cada segmento debe ser impulsado
al menos 100 Hz, por lo que por lo menos cada 10 ms volvi es. En casos excepcionales, sin
embargo, puede fluctuar incluso 100 Hz todava, por. Ejemplo, si el indicador se mueve rpido o
cuando se trata de fenmenos de interferencia con fuentes de luz artificial que funcionan con
corriente alterna.

Control de los cuatro displays de 7 segmentos por divisin de tiempo multiplexacin


En una inspeccin ms cercana, tambin llamativo que las cuatro luces ya no tan brillantes brillan
como la una sola pantalla sin multiplexacin. En algunos anuncios como prcticamente apenas
visible slo cuando varias pantallas no est claro. Con el fin de contrarrestar esto es permitido por
segmento simplemente ms que la corriente fluya, puede entonces se exceden los LEDs en
20mA. Como regla de oro que los n-veces actuales para el (1 / n) veces el tiempo permitido a
fluir. Los detalles se pueden encontrar en la hoja de datos en el punto pico de corriente (corriente
de pico) y ciclo de trabajo (deber ciclo).
Sin embargo, todava hay otro problema si se multiplexan totales demasiados anuncios. Las
corrientes de impulsos a travs de los LED son simplemente demasiado alto. La mayora de los
LEDs pueden ser de 8: 1 multiplexacin, a veces incluso hasta 16: 1. Pero aqu ya que fluye una
corriente de impulsos de 320mA (16 x 20 mA), que ya no es completamente seguro. La
electricidad no puede ser salvado por la multiplexacin, debido a que los cambios de potencia
consumidas cuando n-fold actual de 1 / n de las veces no. Se convierte en fundamental, sin
embargo, si la multiplexacin se desactiva fluye permanentemente (prdida de control por error de
hardware o software) y los n-veces la corriente a travs de un segmento de LED. En la mayora de
los LED 320mA son destruidos en cuestin de segundos. Hay que asegurarse de que tanto el
programa (punto de interrupcin en el depurador) y el circuito (reajustar, encendido, [1]) impiden
que esto ocurra. En principio, uno debe siempre una vez que vencer a la corriente del pulso y el
mltiplex de frecuencia antes se arranca el soldador.
Si los indicadores son demasiado dbiles, como ya se ha descrito, las corrientes se pueden
aumentar por los anuncios. Para ello, las resistencias de 330 puede hacerse ms
pequea. Desde 4 anuncios en este documento son multiplexados, las resistencias en el orden de
por s 100 ofrecera. Incluso entonces, la resistencia de base de los transistores debe ser

reducida. Tambin hay que tener en cuenta que el Mega8 no puede proporcionar de manera
arbitraria o disipar mucho poder en la suma de sus pines del puerto y las lneas de
suministro. Tambin aqu, por lo tanto, una vista est unido a la hoja posterior y, opcionalmente, un
transistor debe ser utilizado como un amplificador (o etapas conductor acaba de terminar en forma
IC) de nuevo.

Programa [Editar]
El siguiente programa muestra una forma de multiplexacin. Para ello, se utiliza un temporizador,
uno de desbordamiento peridicamente en interrumpirfactores desencadenantes. Es dentro de la
rutina de interrupcin de desbordamiento

Actualmente la pantalla iluminada apagado

el patrn para la siguiente pantalla en la salida Port D

La siguiente pantalla se enciende por una salida correspondiente en el puerto C

Dado que las funciones de interrupcin deben ser cortos, la rutina de interrupcin obtiene el
modelo dispensado para cada sitio directamente desde la SRAM, donde se ha producido la funcin
de salida. Esto tiene 2 ventajas:

En primer lugar, la rutina de interrupcin necesita la conversin de un dgito en los patrones


de bits correspondientes ni siquiera

En segundo lugar, el espectador es, pues, independiente de lo que se muestra. La rutina


de interrupcin es el patrn de bits de la forma en que se lee desde la SRAM. Si las clulas
SRAM llenas de patrones apropiados bits, as como algunas letras o grfico de barras o
incluso pequeas barras animaciones se pueden reproducir. En particular, este ltimo a veces
se ven en los dispositivos de consumo que permitan poco despus de encender el dispositivo
en un tipo de inspeccin de defectos o simplemente como una superficie de montaje ptico.

El out_number funcin tampoco es algo inaudito en un formulario similar en otra parte: Utilizaron la
tcnica de continuas sustracciones a un nmero de un solo dgito para desmontar. Una vez que se
establece cada punto, el patrn de bits se busca en la tabla de cdigos, que se almacena para la
funcin de interrupcin en el lugar apropiado en la SRAM.
Atencin: En contraste con la variante mostrada por encima de la tabla de cdigos ha sido
creado sin bytes de relleno. De esta manera, se ha de considerar este tipo de bytes de relleno no
necesarios en la programacin.
El resto es de nuevo el puerto de inicializacin de costumbre, la inicializacin del temporizador y
una aplicacin sencilla usando un contador de 16 bits est aumentando de forma continua y
out_number de salida sobre la funcin. Aumento Contador por 1 y cumplir con las colas de un
cierto tiempo de retardo: Al igual que en el primer ejemplo, ningn esfuerzo ha estado aqu. En una

aplicacin real que, por supuesto, no hacerlo, sino tambin utilizar un temporizador para este
aspecto de la tarea.
Adems, incluso interesante. La funcin de interrupcin de desbordamiento se re-diseado de
manera que puedan funcionar de forma transparente el resto del programa. Esto significa que
todos los registros utilizados estn respaldados funcin cuando se llama a la interrupcin y
restaurados cuando se vaya.ste es en el lado seguro, sin embargo, tiene la desventaja de
"residuo" algn tiempo de la CPU para la copia de seguridad a veces innecesario y limpieza
para. De pie bastante registros gratuitos estn disponibles, entonces, por supuesto, no repetir este
esfuerzo, pero dejar algunos registros exclusivamente con el fin de tratar el display de 7 segmentos
y as ahorrar el costo de registro de ahorro (con la excepcin de SREG supuesto!).

.include "m8def.inc"
.def temp = r16
.def temp1 = r17
.def temp2 = r18
.org 0x0000
rjmp
.org OVF0addr
rjmp

main

; Reset Handler

multiplex

mltiplex ;; *****************************************
***************************; La multiplexacin funcin ;; Objeto de esta
funcin es en cada ejecutar una diferente ubicacin; el display de 7
segmentos para activar y siempre que los patrones; pasar; La funcin se
llama regularmente en un contador de tiempo de interrupcin ;; 6 bytes
utilizado en SRAM (ver .DSEG ms tarde en el programa); Patrones de bits
Digit Siguiente para la activacin de la prxima serie de sesiones;
Nmero de segmento siguiente de la prxima activa segmento; Patrn de
salida Segment0 para el segmento 0; Patrn de salida Segment1 para el
segmento 1; Patrn de salida Segment2 para el segmento 2; Patrn de
salida Segment3 para el segmento 3 ;; Siguiente segmento es simplemente
un contador que con cada llamada a la funcin; est en 1 y continuar el
conteo se restablecer a 0 en. 4; est acostumbrado a partir de la
direccin de Segment0 a que; cada siguiente modelo dispensado de
Segement0, Segment1 ,; Segment2 o acceso Segment3. La direccin de
Segment0 es; carga en el Z-puntero y Siguiente segmento agreg. ;;
Siguiente Dgito contiene el patrn de bits que se emite directamente
hacia el puerto C; es y la siguiente transistor convierte .; Estos
incluyen dgito siguiente al comienzo de el patrn de bits 0b11111110
que; se desplaza con cada llamada 1 lugar a la izquierda. La prxima vez;
Llamando se puede encontrar a continuacin, en 0b11111101 siguiente

dgito, entonces 0b11111011 y; Finalmente 0b11110111. Si la siguiente


operacin de cambio 0b11101111; reconocido, a continuacin, Siguiente
dgito est en 0b11111110 reset (y siguiente segmento; a 0) y todo el
juego comienza la prxima llamada a la funcin de nuevo; desde la parte
delantera. ;; Segment0 .. 3 contiene el patrn de bits que se publicar
para los Einzelleds; los respectivos indicadores de 7 segmentos. Estos
patrones son como son; simplemente emitida. Si uno de los anuncios de
mostrar algo especfico; (por ejemplo, un dgito), por lo que corresponde
al cdigo, los valores de esta SRAM; Escribe clulas para dejar el
responsable de ese patrn de bits que hay .; La rutina mltiplex no le
importa que estos bits patrones; de tal forma que tenga sentido (o lo que
se podra considerar a ser); son. ;; alterado registro de la CPU: no;
multiplex:
push
temp
; Alle verwendeten Register
sichern
push
temp1
in
temp, SREG
push
temp
push
ZL
push
ZH
ldi
out

temp1, 0
PORTC, temp1

; Die 7 Segment ausschalten

; Das Muster fr die nchste


Stelle ausgeben
; Dazu zunchst mal berechnen,
welches Segment als
; nchstest ausgegeben werden muss
ldi
ldi
lds
add
adc
ld
und ausgeben
out
lds

ZL, LOW( Segment0 )


ZH, HIGH( Segment0 )
temp, NextSegment
ZL, temp
ZH, temp1
temp, Z

; das entsprechende Muster holen

PORTD, temp
temp1, NextDigit

einschalten
out

PORTC, temp1

lds
inc

temp, NextSegment
temp

; Und die betreffende Stelle

sec
rol

temp1

; beim nchsten Interrupt kommt

cpi
brne
ldi
ldi

temp1, 0b11101111
multi1
temp, 0
temp1, 0b11111110

; nchste Stelle dran.

sts
sts

NextSegment, temp
NextDigit, temp1

reihum die

multi1:

pop
ZH
; die gesicherten Register
wiederherstellen
pop
ZL
pop
temp
out
SREG, temp
pop
temp1
pop
temp
reti
;
;************************************************************************
; 16 Bit-Zahl aus dem Registerpaar temp (=low), temp1 (=high) ausgeben
; die Zahl muss kleiner als 10000 sein, da die Zehntausenderstelle
; nicht bercksichtigt wird.
; Werden mehr als 4 7-Segmentanzeigen eingesetzt, dann muss dies
; natrlich auch hier bercksichtigt werden
;
out_number:
push
temp
push
temp1
ldi
_out_tausend:
inc
subi
sbci
brcc

temp2, -1

ldi
Codemuster fuer
ldi
nachschlagen
add

ZL, low(2*Codes)

; fuer diese Ziffer das

ZH, high(2*Codes)

; die Anzeige in der Codetabelle

temp2
temp, low(1000)
temp1, high(1000)
_out_tausend

ZL, temp2

; Die Tausenderstelle bestimmen

; -1000

lpm
sts

Segment3, r0

; und dieses Muster im SRAM

ablegen
; die OvI Routine sorgt dann duer
die Anzeige
ldi
_out_hundert:
dec
subi
sbci
brcs
ldi
entsprechende
ldi
add

temp2, 10
; die Hunderterstelle bestimmen
temp2
temp, low(-100)
temp1, high(-100)
_out_hundert

; +100

ZL, low(2*Codes)

; wieder in der Codetabelle das

ZH, high(2*Codes)
ZL, temp2

; Muster nachschlagen

lpm
sts

Segment2, r0

; und im SRAM hinterlassen

ldi

temp2, -1

_out_zehn:

; die Zehnerstelle bestimmen


inc
subi
sbci
brcc

temp2
temp, low(10)
temp1, high(10)
_out_zehn

ldi

ZL, low(2*Codes)

; wie gehabt: Die Ziffer in der

ldi
add

ZH, high(2*Codes)
ZL, temp2

; aufsuchen

lpm
sts

Segment1, r0

; und entsprechend im SRAM

; -10

Codetabelle

ablegen
_out_einer:
subi
sbci

temp, low(-10)
temp1, high(-10)

ldi
ldi
add

ZL, low(2*Codes)
ZH, high(2*Codes)
ZL, temp

; bleiben noch die Einer


; +10

; ... Codetabelle

lpm
sts

Segment0, r0

pop
pop

temp1
temp

; und ans SRAm ausgeben

ret
;
;
*************************************************************************
*
;
main:
ldi
temp, HIGH(RAMEND)
out
SPH, temp
ldi
temp, LOW(RAMEND) ; Stackpointer initialisieren
out
SPL, temp
;
die Segmenttreiber initialisieren
ldi
temp, $FF
out
DDRD, temp
;
die Treiber fr die einzelnen
Stellen
ldi
temp, $0F
out
DDRC, temp
;
initialisieren der Steuerung fr
die
;
Interrupt Routine
ldi
temp, 0b11111110
sts
NextDigit, temp
ldi
sts

temp, 0
NextSegment, temp

ldi
out

temp, ( 1 << CS01 ) | ( 1 << CS00 )


TCCR0, temp

ldi
out

temp, 1 << TOIE0


TIMSK, temp

sei
ldi
ldi
loop:

temp, 0
temp1, 0

inc
brne
inc

temp
_loop
temp1

_loop:
rcall

wait:
wait0:
wait1:
wait2:

out_number

cpi
brne
cpi
brne

temp, low( 4000 )


wait
temp1, high( 4000 )
wait

ldi
ldi

temp, 0
temp1, 0

ldi
ldi
ldi
dec
brne
dec
brne
dec
brne

r21, 1
r22, 0
r23, 0
r23
wait2
r22
wait1
r21
wait0

rjmp

loop

Codes:
.db

0b11000000, 0b11111001

.db

0b10100100, 0b10110000

.db

0b10011001, 0b10010010

.db

0b10000010, 0b11111000

.db

0b10000000, 0b10010000

;
;
;
;
;
;
;
;
;
;

.DSEG
NextDigit:
.byte
Segments
NextSegment: .byte
Segment0:
.byte
Segment1:
.byte
Segment2:
.byte

0:
1:
2:
3:
4:
5:
6:
7:
8:
9:

a,
b,
a,
a,
b,
a,
a,
a,
a,
a,

b,
c
b,
b,
c,
c,
c,
b,
b,
b,

c, d, e, f
d,
c,
f,
d,
d,
c
c,
c,

e,
d,
g
f,
e,

g
g
g
f, g

d, e, f, g
d, f, g

; Bitmuster fr die Aktivierung des nchsten

1
1
1
1

;
;
;
;

Nummer des nchsten aktiven Segments


Ausgabemuster fr Segment 0
Ausgabemuster fr Segment 1
Ausgabemuster fr Segment 2

Segment3:

.byte 1

; Ausgabemuster fr Segment 3

Espaol:

;---------------------------------------------------------------------------------------------------------------------------------------

.include

"m8def.inc"

.def temp = R16


.def temp1 = R17
.def temp2 = r18
.org 0x0000
rjmp
principal; Restablecer controlador
.org OVF0addr
rjmp mltiplex ;; *****************************************
***************************; La multiplexacin funcin ;; Objeto de esta
funcin es en cada ejecutar una diferente ubicacin; el display de 7
segmentos para activar y siempre que los patrones; pasar; La funcin se
llama regularmente en un contador de tiempo de interrupcin ;; 6 bytes
utilizado en SRAM (ver .DSEG ms tarde en el programa); Patrones de bits
Digit Siguiente para la activacin de la prxima serie de sesiones;
Nmero de segmento siguiente de la prxima activa segmento; Patrn de
salida Segment0 para el segmento 0; Patrn de salida Segment1 para el
segmento 1; Patrn de salida Segment2 para el segmento 2; Patrn de
salida Segment3 para el segmento 3 ;; Siguiente segmento es simplemente
un contador que con cada llamada a la funcin; est en 1 y continuar el
conteo se restablecer a 0 en. 4; est acostumbrado a partir de la
direccin de Segment0 a que; cada siguiente modelo dispensado de
Segement0, Segment1 ,; Segment2 o acceso Segment3. La direccin de
Segment0 es; carga en el Z-puntero y Siguiente segmento agreg. ;;
Siguiente Dgito contiene el patrn de bits que se emite directamente
hacia el puerto C; es y la siguiente transistor convierte .; Estos
incluyen dgito siguiente al comienzo de el patrn de bits 0b11111110
que; se desplaza con cada llamada 1 lugar a la izquierda. La prxima vez;
Llamando se puede encontrar a continuacin, en 0b11111101 siguiente
dgito, entonces 0b11111011 y; Finalmente 0b11110111. Si la siguiente
operacin de cambio 0b11101111; reconocido, a continuacin, Siguiente

dgito est en 0b11111110 reset (y siguiente segmento; a 0) y todo el


juego comienza la prxima llamada a la funcin de nuevo; desde la parte
delantera. ;; Segment0 .. 3 contiene el patrn de bits que se publicar
para los Einzelleds; los respectivos indicadores de 7 segmentos. Estos
patrones son como son; simplemente emitida. Si uno de los anuncios de
mostrar algo especfico; (por ejemplo, un dgito), por lo que corresponde
al cdigo, los valores de esta SRAM; Escribe clulas para dejar el
responsable de ese patrn de bits que hay .; La rutina mltiplex no le
importa que estos bits patrones; de tal forma que tenga sentido (o lo que
se podra considerar a ser); son. ;; alterado registro de la CPU: no;
multiplex:
empuje
temp; Todos los registros utilizados
seguro
temp1 empuje
en temp, SREG
empuje temp
empuje ZL
empuje ZH
LDI temp1, 0; Apague el segmento de 7
a cabo
PORTC, temp1; El patrn de salida para el
siguiente punto; Para este primer tiempo de calcular qu segmento como;
debe ser probado Siguiente tipo emitido
LDI ZL, LOW (Segment0)
ZH LDI, ALTA (Segment0)
temp lds, Siguiente Segmento
aadir ZL, temp
ZH adc, temp1
temp ld,
Z; Obtener el patrn correspondiente y
pasar
a cabo
PORTD, temperatura
lds temp1, siguiente
dgito; Y el trabajo en cuestin a su
vez
fuera
PORTC, temp1
temp lds, siguiente segmento
inc temp
seg
rol
temp1; la siguiente interrupcin viene a su
vez del
temp1 cpi, 0b11101111; turno siguiente punto.
Brne Multi1
temp LDI, 0
LDI temp1, 0b11111110 Multi1:
STS siguiente segmento, temp
pts siguiente dgito, temp1

pop

ZH; restaurar la copia de seguridad del

registro
pop ZL
pop temp
cabo SREG, temp
pop temp1
temp pop
reti ;; *******************************
*****************************************; Nmero de 16 bits de la temp
par de registro (= bajo), temp1 (= alto) de salida; El nmero debe ser
inferior a 10.000 que ser, porque los diez miles; no est considerado .;
Si ms de 4 displays de 7 segmentos utilizados, entonces esto debe ser;
son, por supuesto, tambin tenido en cuenta aqu;
out_number:
empujar temp
empuje temp1
LDI temp2, - 1; El dgito miles determinar
_out_tausend:
temp2 inc
Subi temperatura, baja (1000); -1000
Temp1 SBCI, alta (1000)
BRCC _out_tausend
LDI ZL, bajos (2 * cdigos); para ese dgito el patrn de
cdigo para
ZH LDI, alta (2 * cdigos); Busque la visualizacin en la
tabla de cdigos
aadir ZL, TEMP 2
lpm
pts Segment3,
R0; y almacenar este patrn en la SRAM;
Ovi rutina proporciona entonces Duer mostrar
LDI temp2, 10
_out_hundert :; el
dgito de las centenas determinar
diciembre temp2
Subi temperatura, baja (- 100); 100
temp1 SBCI, alta (- 100)
BRCS _out_hundert
LDI ZL, bajos (2 * cdigos); de nuevo en la tabla de cdigos
apropiado
LDI ZH, altos (2 * cdigos); Busque patrones
aaden ZL, TEMP 2
lpm
pts Segment2,
R0; y SRAM dejar
LDI temp2, - 1
_out_zehn :; las
decenas determinan
inc temp2

Subi temperatura, baja (10); -10


Temp1 SBCI, alta (10)
BRCC _out_zehn
LDI ZL, bajos (2 * cdigos); como de costumbre: El dgito en
la tabla de cdigos
ZH LDI, alta (2 * cdigos); consult
aadir ZL, TEMP 2
lpm
pts Segment1,
R0; y en consecuencia en la tienda SRAM
_out_einer :; siendo el Uno
temp Subi, baja (- 10); 10
SBCI temp1, alta (- 10)
ZL LDI, bajos (2 * cdigos); ... Tabla de cdigos de
LDI ZH, altos (2 * cdigos)
aadir ZL, temp
lpm
pts Segment0,
R0; y para la SRAM pasar
pop temp1
pop temp
ret ;; ***************************************
***********************************;
principal:
temp LDI, ALTA (RAMEND)
fuera SPH, temp
LDI temp, LOW (RAMEND); StackPointer inicializar
cabo SPL, temp; el conductor segmento de inicializacin
temp LDI, $ FF
cabo DDRD, temp; los controladores de la ubicaciones
individuales
temp LDI, $ 0F
cabo DDRC, temp; inicializar el control de la; Rutina de
interrupcin
temporal LDI, 0b11111110
pts siguiente dgito, temp
temp LDI, 0
pts siguiente segmento, temp
temp LDI, (1 << CS01) | (1 << CS00)
fuera TCCR0, temp
temp LDI, 1 << TOIE0
cabo TIMSK, temperatura
era
temp LDI, 0
LDI temp1, 0 bucle:
inc temp
Brne _loop

inc temp1
_loop:
rcall out_number
temp cpi, bajo (4000)
Brne esperar
temp1 cpi, alta (4000)
Brne esperar
temp LDI, 0
LDI temp1, 0 de espera:
LDI r21 , 1 WAIT0:
r22 LDI,
0 WAIT1:
r23 LDI, 0 wait2:
diciembre r23
Brne wait2
diciembre r22
Brne WAIT1
diciembre r21
Brne WAIT0
bucle rjmp cdigos: .db 0b11000000, 0b11111001; 0: a, b, c, d,
e, f; 1: b, c .db 0b10100100, 0b10110000; 2: a, b, d, e, g; 3: a, b, c,
d, g .db 0b10011001, 0b10010010; 4: b, c, f, g; 5: a, c, d, f, g .db
0b10000010, 0b11111000; 6: a, c, d, e, f, g; 7: a, b, c .db 0b10000000,
0b10010000; 8: a, b, c, d, e, f, g; 9: a, b, c, d, f, g .DSEG siguiente
dgito: .Byte 1; Patrones de bits para la activacin de la siguiente
segmento
Segmento Siguiente: .Byte 1; Nmero del prximo segmento activo
Segment0:
.Byte 1; Los patrones de gasto para el segmento 0
Segment1:
.Byte 1; Patrones de gastos para el segmento 1
Segment2:
.Byte 1; Patrones de gastos para el segmento 2
Segment3:
.Byte 1; Patrones de gastos para el Segmento 3

You might also like