Понедельник, 21.09.2020, 18:52
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Подарок IT-шнику (продолжение). Бинарные часы
Добрый день всем)
Сделал себе на работу такие часики, может кому то понравятся и тоже захотят.
Код можно попроще сделать, функции для перевода из DEC в BIN в CodeVisionAVR не нашел( поэтому все довольно просто. Часики тикают правильно.
Светодиоды S - секунды
Светодиоды M - минуты
Светодиоды H - часы
В часах осуществляется переход на AM/PM. Время хранится в памяти EEPROM.

Генератор - Inc RC 1Mhz.
CPU - 1Mhz

#include <mega16.h>

eeprom int sek=0; //секунды, хранится в EEPROM
eeprom int min=0; //минуты, хранится в EEPROM
eeprom int hour=0; //часы, хранится в EEPROM
eeprom int hour_24=0;

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
TCNT1H=0;
TCNT1L=0;
sek++;

if(PINC.0==0) //если нажата кнопка + MIN
{
min++;
if(min==60) min=0;
}
if(PINC.1==0) //если нажата кнопка + HOUR
{
hour++;
hour_24++;
}
if(PINC.2==0) //если нажата кнопка RESET ALL
{
sek=0;
min=0;
hour=0;
hour_24=0;
PORTD.7=0;
}
}

void main(void)
{

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x07;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x80;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x3D;
OCR1AL=0x09;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
if (sek==0) //000000
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==1) //000001
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==2) //000010
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==3) //000011
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==4) //000100
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==5) //000101
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==6) //000110
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==7) //000111
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==8) //001000
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==9) //001001
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==10) //001010
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==11) //001011
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==12) //001100
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==13) //001101
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==14) //001110
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==15) //001111
{
PORTA.0=0;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==16) //010000
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==17) //010001
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==18) //010010
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==19) //010011
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==20) //010100
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==21) //010101
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==22) //010110
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==23) //010111
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==24) //011000
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==25) //011001
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==26) //011010
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==27) //011011
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==28) //011100
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==29) //011101
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==30) //011110
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==31) //011111
{
PORTA.0=0;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==32) //100000
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==33) //100001
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==34) //100010
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==35) //100011
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==36) //100100
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==37) //100101
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==38) //100110
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==39) //100111
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==40) //101000
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==41) //101001
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==42) //101010
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==43) //101011
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==44) //101100
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==45) //101101
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==46) //101110
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==47) //101111
{
PORTA.0=1;
PORTA.1=0;
PORTA.2=1;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==48) //110000
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==49) //110001
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==50) //110010
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==51) //110011
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
if (sek==52) //110100
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
}
if (sek==53) //110101
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=0;
PORTA.5=1;
}
if (sek==54) //110110
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=0;
}
if (sek==55) //110111
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=0;
PORTA.3=1;
PORTA.4=1;
PORTA.5=1;
}
if (sek==56) //111000
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=0;
}
if (sek==57) //111001
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
}
if (sek==58) //111010
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
}
if (sek==59) //111011
{
PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=1;
}
//--------Условие для минут-----------
if (sek==60) //если 60 сек. то + минуту
{
sek=0;
min++;
}
//------------------------------------

if (min==0) //000000
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==1) //000001
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==2) //000010
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==3) //000011
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==4) //000100
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==5) //000101
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==6) //000110
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==7) //000111
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==8) //001000
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==9) //001001
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==10) //001010
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==11) //001011
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==12) //001100
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==13) //001101
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==14) //001110
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==15) //001111
{
PORTB.0=0;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==16) //010000
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==17) //010001
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==18) //010010
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==19) //010011
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==20) //010100
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==21) //010101
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==22) //010110
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==23) //010111
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==24) //011000
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==25) //011001
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==26) //011010
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==27) //011011
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==28) //011100
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==29) //011101
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==30) //011110
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==31) //011111
{
PORTB.0=0;
PORTB.1=1;
PORTB.2=1;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==32) //100000
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==33) //100001
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==34) //100010
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==35) //100011
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==36) //100100
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==37) //100101
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==38) //100110
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==39) //100111
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==40) //101000
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==41) //101001
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==42) //101010
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==43) //101011
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==44) //101100
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==45) //101101
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==46) //101110
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==47) //101111
{
PORTB.0=1;
PORTB.1=0;
PORTB.2=1;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==48) //110000
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==49) //110001
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==50) //110010
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==51) //110011
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}
if (min==52) //110100
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=0;
}
if (min==53) //110101
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=0;
PORTB.5=1;
}
if (min==54) //110110
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=0;
}
if (min==55) //110111
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=0;
PORTB.3=1;
PORTB.4=1;
PORTB.5=1;
}
if (min==56) //111000
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=0;
}
if (min==57) //111001
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=0;
PORTB.5=1;
}
if (min==58) //111010
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=0;
}
if (min==59) //111011
{
PORTB.0=1;
PORTB.1=1;
PORTB.2=1;
PORTB.3=0;
PORTB.4=1;
PORTB.5=1;
}

//--------Условие для часов-----------
if (min==60) //если 60 мин. то + час
{
min=0;
hour++;
hour_24++;
}
//------------------------------------

if (hour==0) //0000
{
PORTB.7=0;
PORTB.6=0;
PORTA.7=0;
PORTA.6=0;
}
if (hour==1) //0001
{
PORTB.7=0;
PORTB.6=0;
PORTA.7=0;
PORTA.6=1;
}
if (hour==2) //0010
{
PORTB.7=0;
PORTB.6=0;
PORTA.7=1;
PORTA.6=0;
}
if (hour==3) //0011
{
PORTB.7=0;
PORTB.6=0;
PORTA.7=1;
PORTA.6=1;
}
if (hour==4) //0100
{
PORTB.7=0;
PORTB.6=1;
PORTA.7=0;
PORTA.6=0;
}
if (hour==5) //0101
{
PORTB.7=0;
PORTB.6=1;
PORTA.7=0;
PORTA.6=1;
}
if (hour==6) //0110
{
PORTB.7=0;
PORTB.6=1;
PORTA.7=1;
PORTA.6=0;
}
if (hour==7) //0111
{
PORTB.7=0;
PORTB.6=1;
PORTA.7=1;
PORTA.6=1;
}
if (hour==8) //1000
{
PORTB.7=1;
PORTB.6=0;
PORTA.7=0;
PORTA.6=0;
}
if (hour==9) //1001
{
PORTB.7=1;
PORTB.6=0;
PORTA.7=0;
PORTA.6=1;
}
if (hour==10) //1010
{
PORTB.7=1;
PORTB.6=0;
PORTA.7=1;
PORTA.6=0;
}
if (hour==11) //1011
{
PORTB.7=1;
PORTB.6=0;
PORTA.7=1;
PORTA.6=1;
}
if (hour==12) //1100
{
PORTB.7=1;
PORTB.6=1;
PORTA.7=0;
PORTA.6=0;
}

//--------Условие для AM/PM-----------
if (hour>12) hour=1; //если 13 часов. то это 1 час и вкл. светодиод PM

if((hour_24==12)&(sek>0)) PORTD.7=1;
if(hour_24<12) PORTD.7=0;
if(hour_24==24) hour_24=0;
//------------------------------------

};
}

Категория: Учимся работать с AVR | Добавил: Семафор (05.09.2010)
Просмотров: 6162 | Комментарии: 11 | Рейтинг: 0.0/0 |
Всего комментариев: 11
0
11 ооо   [Материал]
Молодец, что хоть сам писал, а не копи паст

0
10 denden   [Материал]
это же китайский код

0
9 IGRIK6600   [Материал]
ОТЛИЧНЫЙ КОД!!! прям то,что я искал!РЕСПЕКТ ! 3 Семафор

0
8 Иван Красноярск   [Материал]
у меня такие часы правда пока без кнопок просто счет , код 7 строк всего с кнопками в 15-20 уложусь .
я новичек и многое мне непонятно делаю как могу

0
6 Alex23   [Материал]
IT-шник если увидит эти if'ы, ему плохо станет )))

int mas[8];
void DecToBin(int i)
{
int t;
int c;
for (c = 7; c >=0; c--)
{
t = i % 2;
i = i / 2;
mas[c] = t;
}
}

0
7 HiSER   [Материал]
Еще ужасней код =\\\\

0
4 linerx   [Материал]
А чем вас LCD не устраивает?

0
5 HiSER   [Материал]
У автора задача значит была в другом...

0
3 Семафор   [Материал]
)
Да, исправлено. С If'ами это перебор, согласен.
Секунда и минуты остались на тех же портах. Часы переместил на POTRD.
От хранения в памяти отказался, ибо смысла не вижу в этом.
За 24ч часы убежали на 11сек. В принципе неплохо для внутреннего генератора. Схема была рассчитана специально без работы кварца, отсюда можно просто добавить доп. переменную, которая раз в сутки будет обновлять минуты.

0
2 HiSER   [Материал]
У этих часов точности ни какой, для это цели надо использовать асинхронный таймер с внешнем кварцем 32768Hz. Для постоянно изменяемых переменных нужно использовать RAM, а не EEPROM. Для ATmega16 из даташита 512 Bytes EEPROM
Endurance: 100,000 Write/Erase Cycles.
И зачем так много if {}, если достаточно написать:
PORTA=sec;
и тд.

0
1 Pier   [Материал]
м-да, програма ще та :)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2020
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Как вам материалы на сайте
Всего ответов: 860
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz