hi,
ich benutze einen ATmega16 mit 8 Mhz internem oszilator
Ich progge in "C" mit WinAVR und AVR Studio 4
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/sleep.h>
#include "lcd.c"
/*************************Variablen********************************************************/
uint8_t std = 0;
uint8_t min = 0;
uint8_t sec = 0;
uint8_t day = 0;
uint8_t auswahl = 0;
uint8_t smiley = 0;
uint8_t delay = 0;
/****************************Timer Interupts********************************/
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
char cSREG;
cSREG = SREG; // Statusregister puffern in Variable cSREG //
if(delay >0) delay--;
sec++;
if(sec == 60){
min++;
sec = 0;
if(min == 60){
std++;
min = 0;
if(std == 24){
sec = 0;
min = 0;
std = 0;
day++;
if(day == 7){
day = 0;
}
}
}
}
if(bit_is_clear(PINC,0)){
auswahl++;
if(auswahl == 4) auswahl = 0;
}
/*if(bit_is_clear(PINC,4)){
auswahl++;
smiley++;
if(smiley == 7) smiley = 0;
}*/
if(auswahl == 0){
if(bit_is_clear(PINC,1)){
std++;
}
if(bit_is_clear(PINC,2)){
std--;
}
}
if(auswahl == 1){
if(bit_is_clear(PINC,1)){
min++;
}
if(bit_is_clear(PINC,2)){
min--;
}
}
if(auswahl == 2){
if(bit_is_clear(PINC,1)){
sec++;
}
if(bit_is_clear(PINC,2)){
sec--;
}
}
if(auswahl == 3){
if(bit_is_clear(PINC,1)){
day++;
}
if(bit_is_clear(PINC,2)){
day--;
}
}
SREG = cSREG; // Statusregister aus Variable cSREG retten //
}
/******************************Initialisierung der PORTS**************************/
void init_ports (void)
{
DDRB = 0xff; // Port B als Ausgang
DDRD = 0xff; // Port D als Ausgang
DDRC = 0x00; // Port C als Eingang
PORTC = 0xff; //interne Pullup widerstände aktivieren
}
/************************Timer Initialisierung***************************************/
void init_timer1 (void)
{
// fclk=2MHz//
// N=Prescaler = 64//
// OCR1A= Output_Compare_Vergleichswert//
cli(); // Interrupts sperren!
TCCR1A= 0x00; // Compare- Ausgang A und B nicht toggeln
TCCR1B |= (1<<WGM12) | (1<<CS12); // Mode: Output Compare ; Prescaler: Faktor 256
OCR1AH= 0x7A; // Output Compare High = 0x7A dez. 31250
OCR1AL= 0x12; // Output Compare Low = 0x12
TCNT1H= 0x00; // Timer1 auf 0 stellen
TCNT1L= 0x00; // Timer1 auf 0 stellen
TIMSK |= (1<<OCIE1A); // Timer1 Output Compare Interrupt Enable A aktivieren (Bit setzen) //
sei(); // Interrrupts freigeben!
}
/*************************Hauptprogramm***************************/
int main (void) //Hauptprogramm begin
{
init_timer1();
init_ports();
lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_home();
lcd_puts("00:00:00");
while (1){ //endlos schleife
if(bit_is_clear(PINC,4)){
delay = 10;
}
if(delay >0){
lcd_init(LCD_DISP_ON);
lcd_home();
lcd_gotoxy(0,0);
switch (std){
case 0 : lcd_puts("00");
break;
case 1 : lcd_puts("01");
break;
case 2 : lcd_puts("02");
break;
case 3 : lcd_puts("03");
break;
case 4 : lcd_puts("04");
break;
case 5 : lcd_puts("05");
break;
case 6 : lcd_puts("06");
break;
case 7 : lcd_puts("07");
break;
case 8 : lcd_puts("08");
break;
case 9 : lcd_puts("09");
break;
case 10 : lcd_puts("10");
break;
case 11 : lcd_puts("11");
break;
case 12 : lcd_puts("12");
break;
case 13 : lcd_puts("13");
break;
case 14 : lcd_puts("14");
break;
case 15 : lcd_puts("15");
break;
case 16 : lcd_puts("16");
break;
case 17 : lcd_puts("17");
break;
case 18 : lcd_puts("18");
break;
case 19 : lcd_puts("19");
break;
case 20 : lcd_puts("20");
break;
case 21 : lcd_puts("21");
break;
case 22 : lcd_puts("22");
break;
case 23 : lcd_puts("23");
break;
case 24 : lcd_puts("24");
break;
case 25 : lcd_puts("25");
break;
case 26 : lcd_puts("26");
break;
case 27 : lcd_puts("27");
break;
case 28 : lcd_puts("28");
break;
case 29 : lcd_puts("29");
break;
case 30 : lcd_puts("30");
break;
case 31 : lcd_puts("31");
break;
case 32 : lcd_puts("32");
break;
case 33 : lcd_puts("33");
break;
case 34 : lcd_puts("34");
break;
case 35 : lcd_puts("35");
break;
case 36 : lcd_puts("36");
break;
case 37 : lcd_puts("37");
break;
case 38 : lcd_puts("38");
break;
case 39 : lcd_puts("39");
break;
case 40 : lcd_puts("40");
break;
case 41 : lcd_puts("41");
break;
case 42 : lcd_puts("42");
break;
case 43 : lcd_puts("43");
break;
case 44 : lcd_puts("44");
break;
case 45 : lcd_puts("45");
break;
case 46 : lcd_puts("46");
break;
case 47 : lcd_puts("47");
break;
case 48 : lcd_puts("48");
break;
case 49 : lcd_puts("49");
break;
case 50 : lcd_puts("50");
break;
case 51 : lcd_puts("51");
break;
case 52 : lcd_puts("52");
break;
case 53 : lcd_puts("53");
break;
case 54 : lcd_puts("54");
break;
case 55 : lcd_puts("55");
break;
case 56 : lcd_puts("56");
break;
case 57 : lcd_puts("57");
break;
case 58 : lcd_puts("58");
break;
case 59 : lcd_puts("59");
break;
case 60 : lcd_puts("60");
break;
default: lcd_puts(" ");
break;
}
lcd_gotoxy(2,0);
lcd_puts(":");
lcd_gotoxy(3,0);
switch (min){
case 0 : lcd_puts("00");
break;
case 1 : lcd_puts("01");
break;
case 2 : lcd_puts("02");
break;
case 3 : lcd_puts("03");
break;
case 4 : lcd_puts("04");
break;
case 5 : lcd_puts("05");
break;
case 6 : lcd_puts("06");
break;
case 7 : lcd_puts("07");
break;
case 8 : lcd_puts("08");
break;
case 9 : lcd_puts("09");
break;
case 10 : lcd_puts("10");
break;
case 11 : lcd_puts("11");
break;
case 12 : lcd_puts("12");
break;
case 13 : lcd_puts("13");
break;
case 14 : lcd_puts("14");
break;
case 15 : lcd_puts("15");
break;
case 16 : lcd_puts("16");
break;
case 17 : lcd_puts("17");
break;
case 18 : lcd_puts("18");
break;
case 19 : lcd_puts("19");
break;
case 20 : lcd_puts("20");
break;
case 21 : lcd_puts("21");
break;
case 22 : lcd_puts("22");
break;
case 23 : lcd_puts("23");
break;
case 24 : lcd_puts("24");
break;
case 25 : lcd_puts("25");
break;
case 26 : lcd_puts("26");
break;
case 27 : lcd_puts("27");
break;
case 28 : lcd_puts("28");
break;
case 29 : lcd_puts("29");
break;
case 30 : lcd_puts("30");
break;
case 31 : lcd_puts("31");
break;
case 32 : lcd_puts("32");
break;
case 33 : lcd_puts("33");
break;
case 34 : lcd_puts("34");
break;
case 35 : lcd_puts("35");
break;
case 36 : lcd_puts("36");
break;
case 37 : lcd_puts("37");
break;
case 38 : lcd_puts("38");
break;
case 39 : lcd_puts("39");
break;
case 40 : lcd_puts("40");
break;
case 41 : lcd_puts("41");
break;
case 42 : lcd_puts("42");
break;
case 43 : lcd_puts("43");
break;
case 44 : lcd_puts("44");
break;
case 45 : lcd_puts("45");
break;
case 46 : lcd_puts("46");
break;
case 47 : lcd_puts("47");
break;
case 48 : lcd_puts("48");
break;
case 49 : lcd_puts("49");
break;
case 50 : lcd_puts("50");
break;
case 51 : lcd_puts("51");
break;
case 52 : lcd_puts("52");
break;
case 53 : lcd_puts("53");
break;
case 54 : lcd_puts("54");
break;
case 55 : lcd_puts("55");
break;
case 56 : lcd_puts("56");
break;
case 57 : lcd_puts("57");
break;
case 58 : lcd_puts("58");
break;
case 59 : lcd_puts("59");
break;
case 60 : lcd_puts("60");
break;
default: lcd_puts(" ");
break;
}
lcd_gotoxy(5,0);
lcd_puts(":");
lcd_gotoxy(6,0);
switch (sec){
case 0 : lcd_puts("00");
break;
case 1 : lcd_puts("01");
break;
case 2 : lcd_puts("02");
break;
case 3 : lcd_puts("03");
break;
case 4 : lcd_puts("04");
break;
case 5 : lcd_puts("05");
break;
case 6 : lcd_puts("06");
break;
case 7 : lcd_puts("07");
break;
case 8 : lcd_puts("08");
break;
case 9 : lcd_puts("09");
break;
case 10 : lcd_puts("10");
break;
case 11 : lcd_puts("11");
break;
case 12 : lcd_puts("12");
break;
case 13 : lcd_puts("13");
break;
case 14 : lcd_puts("14");
break;
case 15 : lcd_puts("15");
break;
case 16 : lcd_puts("16");
break;
case 17 : lcd_puts("17");
break;
case 18 : lcd_puts("18");
break;
case 19 : lcd_puts("19");
break;
case 20 : lcd_puts("20");
break;
case 21 : lcd_puts("21");
break;
case 22 : lcd_puts("22");
break;
case 23 : lcd_puts("23");
break;
case 24 : lcd_puts("24");
break;
case 25 : lcd_puts("25");
break;
case 26 : lcd_puts("26");
break;
case 27 : lcd_puts("27");
break;
case 28 : lcd_puts("28");
break;
case 29 : lcd_puts("29");
break;
case 30 : lcd_puts("30");
break;
case 31 : lcd_puts("31");
break;
case 32 : lcd_puts("32");
break;
case 33 : lcd_puts("33");
break;
case 34 : lcd_puts("34");
break;
case 35 : lcd_puts("35");
break;
case 36 : lcd_puts("36");
break;
case 37 : lcd_puts("37");
break;
case 38 : lcd_puts("38");
break;
case 39 : lcd_puts("39");
break;
case 40 : lcd_puts("40");
break;
case 41 : lcd_puts("41");
break;
case 42 : lcd_puts("42");
break;
case 43 : lcd_puts("43");
break;
case 44 : lcd_puts("44");
break;
case 45 : lcd_puts("45");
break;
case 46 : lcd_puts("46");
break;
case 47 : lcd_puts("47");
break;
case 48 : lcd_puts("48");
break;
case 49 : lcd_puts("49");
break;
case 50 : lcd_puts("50");
break;
case 51 : lcd_puts("51");
break;
case 52 : lcd_puts("52");
break;
case 53 : lcd_puts("53");
break;
case 54 : lcd_puts("54");
break;
case 55 : lcd_puts("55");
break;
case 56 : lcd_puts("56");
break;
case 57 : lcd_puts("57");
break;
case 58 : lcd_puts("58");
break;
case 59 : lcd_puts("59");
break;
case 60 : lcd_puts("60");
break;
default: lcd_puts(" ");
break;
}
lcd_gotoxy(0,1);
switch (day){
case 0 : lcd_puts("Montag ");
break;
case 1 : lcd_puts("Dienstag ");
break;
case 2 : lcd_puts("Mittwoch ");
break;
case 3 : lcd_puts("Donnerstag ");
break;
case 4 : lcd_puts("Freitag ");
break;
case 5 : lcd_puts("Samstag ");
break;
case 6 : lcd_puts("Sonntag ");
break;
default: lcd_puts(" ");
break;
}
lcd_gotoxy(10,0);
switch (smiley){
case 0 : lcd_puts(":-)");
break;
case 1 : lcd_puts(":-(");
break;
case 2 : lcd_puts(":-x");
break;
case 3 : lcd_puts(";-)");
break;
case 4 : lcd_puts(":-/");
break;
case 5 : lcd_puts(":-!");
break;
case 6 : lcd_puts("8-)");
break;
default: lcd_puts(" ");
break;
}
}
else{
lcd_init(LCD_DISP_OFF);
}
} //endlos schleife
} //hauptprogramm ende
MfG
Martin
Lesezeichen