Итак, имеем микруху, кварц. На порт В вешаем катодами вперед два индикатора с общим анодом. Катоды соединяем с портом через резисторы 330 Ом следующим образом В0-a, В1-b,B2-c,B3-d,B4-e,B5-f,B6-g. Так получится что одинаковые сегменты разных индикаторов закорочены, но управлять будем динамически транзисторами.
На D0 и D1 вешаем базы транзисторов (у меня КТ503Е) через резисторы 1.2 кОм. Коллектор на +5В, емитер на анод индикатора. Причем D0 - первый, а D1 - второй. Даем питание и сброс, вот собственно и вся схема. Током коллектора - эмитера будет ограничивать резистор 330 Ом и сегмент индикатора.
На счет программы распространятся не буду, скажу только что таймер через каждые 5 мс выдает добро на прерывание которое в свою очередь считает секунды и выдает их на индикаторы.
Программу подаю без комментариев, 100% работает как на софте так и на плате. Советую лишь разобраться с командами и прошивкой Епромки. Программу писал в AVRStudio4.0 прошивал SP12slavomir...
При перекомпиляции нужно позаботиться о наличии файла 2313def.inc
А начертание цифир можно посмотреть из ЕЕпрома. В общем удачи, будут проблемы обращайся. :lol:
- Код: Выделить всё • Развернуть
.include "2313def.inc"
; ***** объявление переменных *****************
.def del_set =r9
.def lcd =r24
.def tmp =r25
.def count =r26
.def second =r29
; ************** векторы прерываний ***********
rjmp RESET ;Reset Handle
reti ;irq0
reti ;irq1
reti ;timer1
reti ;timer1 comA
reti ;timer1 over
rjmp OVER0 ;timer0 over
reti ;spi
reti ;uart
reti ;uart
reti ;uart
reti ;anacomp
; *********************************************
; ***** вектор прерывания переп. Т1 ***********
OVER0:
ldi tmp,177
out TCNT0,tmp ;корректировка таймера
;**************** ПОДПРОГРАММЫ ****************
rcall clock
rcall out_display
reti
; ***** выход из обработчика прерывания *******
; ***** подпрограмма секундного счетчика ******
clock:
inc count
cpi count,198
brne nochange
clr count
inc second
mov tmp,second
andi tmp,0x0f
cpi tmp,10
brne nochange
andi second,0xf0
ldi tmp,0x10
add second, tmp
cpi second,0x60
brne nochange
clr second
nochange:
ret
; ***** вывод на дисплей **********************
out_display:
cbi portD,0
cbi portD,1
inc lcd
cpi lcd,1
brne d2
sbi portD,0
rjmp digit1
d2:
cpi lcd,2
brne d3
sbi portD,1
rjmp digit2
d3:
clr lcd
digit1:
mov tmp,second
swap tmp
andi tmp,0x0f
out EEAR, tmp
sbi EECR, EERE
in tmp, EEDR
out portB,tmp
rjmp exit
digit2:
mov tmp,second
andi tmp,0x0f
out EEAR, tmp
sbi EECR, EERE
in tmp, EEDR
out portB,tmp
exit:
ret
; ***** обработка прерывания сброса ***********
reset:
ldi second,0
clr tmp ;очистка регистра
ldi tmp,$6f ;установка значений битов регистра
out SPL,tmp ;установка начального адреса стека
clr tmp
sei
clr tmp
ldi tmp,0x02 ;установка значений битов регистра
out TIMSK,tmp ;установка битов в TIMSK
clr tmp
ldi tmp,0x04
out TCCR0,tmp ;запуск таймера
ldi tmp,177
out TCNT0,tmp
clr count
ldi tmp,0xff
out DDRB,tmp
out DDRD,tmp
next:
rjmp next
; ***** сегмент EЕPROMа ***********************
.eseg
.org 0
table1:
.db 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0xFF
;dig 0 1 2 3 4 5 6 7 8 9