Часы На Атмеги

20-04-2013, 12:02 От: admin Посмотрели: 934
Я неделю назад начал осваивать AVR и опыта в программировании не имею. Решил поучиться нашел сайт где более менее для меня понятно как и что делать http://cavr.ru/obuchenie-novichkov, но при написании программы часов столкнулся с проблемой минуты и секунды например начинаются: 1,2,3..., а не 01,02,03......DSC01029.JPG


Вторая проблема не могу вывести дату на вторую строчку.

Прошу помощи и совета...



[

#include <mega8.h>

#include <i2c.h>

#include <ds1307.h>

#include <alcd.h>

#include <delay.h>

#include <stdio.h>

unsigned char hour,min,sek; //часы, минуты, секунды

char buffer[05];



// Declare your global variables here



void main(void)

{

char cikl=1; //для редактирования

int regim;   //для  изменения часов,минут,секунд

// Declare your local variables here



// Input/Output Ports initialization

// Port B initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);

// State: Bit7=T Bit6=T Bit5=T Bit4=P Bit3=P Bit2=P Bit1=T Bit0=T

PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);



// Port C initialization

// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);

// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);



// Port D initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T

PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);



// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);

TCNT0=0x00;



// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Disconnected

// OC1B output: Disconnected

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0<<AS2;

TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);

TCNT2=0x00;

OCR2=0x00;



// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);



// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);



// USART initialization

// USART disabled

UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);



// Analog Comparator initialization

// Analog Comparator: Off

// The Analog Comparator's positive input is

// connected to the AIN0 pin

// The Analog Comparator's negative input is

// connected to the AIN1 pin

ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

SFIOR=(0<<ACME);



// ADC initialization

// ADC disabled

ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);



// SPI initialization

// SPI disabled

SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);



// TWI initialization

// TWI disabled

TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);



// Bit-Banged I2C Bus initialization

// I2C Port: PORTB

// I2C SDA bit: 0

// I2C SCL bit: 1

// Bit Rate: 100 kHz

// Note: I2C settings are specified in the

// Project|Configure|C Compiler|Libraries|I2C menu.

i2c_init();

rtc_init(00,00,00);



// Alphanumeric LCD initialization

// Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:

// RS - PORTD Bit 0

// RD - PORTD Bit 1

// EN - PORTD Bit 2

// D4 - PORTD Bit 3

// D5 - PORTD Bit 4

// D6 - PORTD Bit 5

// D7 - PORTD Bit 6

// Characters/line: 8

lcd_init(8);



while (1)

  {

  //*******************  

if(PINB.3==0) //перейдем когда нажмем кнопку редактирования

{

cikl=1;

regim=1; //начнем с часов

while(PINB.3==0){}; //ждем пока отпустим кнопку

   while(cikl==1)//зациклим

  {  

if(PINB.2==0) //перейдем когда нажмем кнопку вверх

   {

   //-------

if(regim==1){hour=hour+1;} //если режим 1, то плюс 1 час

if(regim==2){min=min+1;}//если режим 2, то плюс 1 минута  

if(regim==3){sek=sek+1;}//если режим 3, то плюс 1 секунда

   //-------

   }

if(PINB.4==0) //перейдем когда нажмем кнопку в низ

   {

if(regim==1){hour=hour-1;}//если режим 1, то минус 1 час

if(regim==2){min=min-1;} //если режим 2, то минус 1 минута

if(regim==3){sek=sek-1;}//если режим 3, то минус 1 секунда

   }  

if(PINB.3==0) //перейдем когда нажмем кнопку редактирования

   {

if(regim<3){regim=regim+1;} //переходим на следующее значение

else //сохраняем и выходим если все значения выбраны

{cikl=0;rtc_set_time(hour,min,sek); }  // сохранимзначения

   }

//сделаем красивый вывод в зависимости от того. что меняем:

  if(regim==1){sprintf(buffer,"[%i]-%i",hour,min);} //еслирежим 1

  if(regim==2){sprintf(buffer,"%i-[%i]",hour,min);} //еслирежим 2

  if(regim==3){sprintf(buffer,"sek: %i",sek);}   //еслирежим 3

lcd_clear();  //очистимэкран

lcd_puts(buffer);//выведем

delay_ms(450); //сделаем не большую задержку

  }

}

  //*******************

rtc_get_time(&hour,&min,&sek);   //загружаем данные времени   

sprintf(buffer,"%i:%i:%i",hour,min,sek); // перенесем значение переменных в буфер

lcd_clear();  //очистим экран

lcd_puts(buffer);// выведем на экран первую строчку

delay_ms(450); // немного подождем



  }

}



]



Прикрепленный файл
 vremy.zip   123,94 Кб
  3 раз скачано
Раздел: Песочница или Вопрос-Ответ

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Часы На Атмеги все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Апрель 2024    »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930