Zur Zeit gibts es nur Fortschritte in homöopathischen Dosen.
Ich habe meine get_time-Funktionen erweitert um aus dem BCD-Code eine "normale" Zahl zu erzeugen:
Diese lässt sich auch auf dem LCD-Display ausgeben:Code:unsigned char get_time_s() { i2c_start_wait(DS1307+I2C_WRITE); i2c_write(0x00); i2c_stop(); i2c_start(DS1307+I2C_READ); time_s = i2c_readNak(); i2c_stop(); einer=time_s; einer&= 0x0f; zehner=time_s; zehner=zehner>>4; zehner&= 0x07; time_s = einer+10*zehner; return time_s; }
Allerdings kann ich damit keine Switch-Anweisung füttern. BeiCode:sprintf(buffer, "%i",time_s); lcd_puts(buffer);
springt er immer in das case 0 -Ergebnis.Code:switch(time_s) { case 0: COLUMN = (1<<C1); ROW = ~(1<<R1); break; case 2: COLUMN = (1<<C2); ROW = ~(1<<R1); break; case 4: COLUMN = (1<<C3); ROW = ~(1<<R1); break; case 6: COLUMN = (1<<C4); ROW = ~(1<<R1); break; ......
Hier noch der komplette Code
Code://***Included Files**// #include "i2cmaster/i2cmaster.h" #include <util/delay.h> #include <stdio.h> #include <avr/io.h> #include <stdlib.h> //***Defines***// #define DS1307 0xD0 #define R1 PD0 #define R2 PD1 #define R3 PD3 #define R4 PD4 #define R5 PD2 #define C1 PB0 #define C2 PB1 #define C3 PB2 #define C4 PB3 #define C5 PB4 #define COLUMN PORTB #define ROW PORTD unsigned char time_s; unsigned char time_m; unsigned char time_h; unsigned char zehner; unsigned char einer; int test; unsigned char buffer[10]; //***Functions***// unsigned char set_clock(unsigned char reg, unsigned char val) { if (i2c_start(DS1307+I2C_WRITE) != 0) return 1; i2c_write(reg); i2c_write(val); i2c_stop(); return 0; } unsigned char get_time_s() { i2c_start_wait(DS1307+I2C_WRITE); i2c_write(0x00); i2c_stop(); i2c_start(DS1307+I2C_READ); time_s = i2c_readNak(); i2c_stop(); einer=time_s; einer&= 0x0f; zehner=time_s; zehner=zehner>>4; zehner&= 0x07; time_s = einer+10*zehner; return time_s; } unsigned char get_time_m() { i2c_start_wait(DS1307+I2C_WRITE); i2c_write(0x01); i2c_stop(); i2c_start(DS1307+I2C_READ); time_m = i2c_readNak(); i2c_stop(); einer=time_m; einer&= 0x0f; zehner=time_m; zehner=zehner>>4; zehner&= 0x07; time_m = einer+10*zehner; return time_m; } unsigned char get_time_h() { i2c_start_wait(DS1307+I2C_WRITE); i2c_write(0x02); i2c_stop(); i2c_start(DS1307+I2C_READ); time_h = i2c_readNak(); i2c_stop(); einer=time_h; einer&= 0x0f; zehner=time_h; zehner=zehner>>4; zehner&= 0x07; time_h = einer+10*zehner; return time_h; } //***Mainfunction***// int main (void) { //***Initilize I/O***// DDRB = (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4); // PB0 to PB4 as Output (Columns) DDRD = (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4); // PD0 to PD4 as Output (Rows) //set_time(0x00, 0x17); //set_time(0x01, 0x24); //set_time(0x02, 0x20); while (1) { get_time_s(); // get_time_m(); test = time_s; switch(time_s) { case 0: COLUMN = (1<<C1); ROW = ~(1<<R1); break; case 2: COLUMN = (1<<C2); ROW = ~(1<<R1); break; case 4: COLUMN = (1<<C3); ROW = ~(1<<R1); break; case 6: COLUMN = (1<<C4); ROW = ~(1<<R1); break; case 8: COLUMN = (1<<C5); ROW = ~(1<<R1); break; case 10: COLUMN = (1<<C1); ROW = ~(1<<R2); break; case 12: COLUMN = (1<<C2); ROW = ~(1<<R2); break; case 14: COLUMN = (1<<C3); ROW = ~(1<<R2); break; case 16: COLUMN = (1<<C4); ROW = ~(1<<R2); break; case 18: COLUMN = (1<<C5); ROW = ~(1<<R2); break; case 20: COLUMN = (1<<C1); ROW = ~(1<<R3); break; case 22: COLUMN = (1<<C2); ROW = ~(1<<R3); break; case 24: COLUMN = (1<<C3); ROW = ~(1<<R3); break; case 26: COLUMN = (1<<C4); ROW = ~(1<<R3); break; case 28: COLUMN = (1<<C5); ROW = ~(1<<R3); break; case 30: COLUMN = (1<<C1); ROW = ~(1<<R4); break; case 32: COLUMN = (1<<C2); ROW = ~(1<<R4); break; case 34: COLUMN = (1<<C3); ROW = ~(1<<R4); break; case 36: COLUMN = (1<<C4); ROW = ~(1<<R4); break; case 38: COLUMN = (1<<C5); ROW = ~(1<<R4); break; case 40: COLUMN = (1<<C1); ROW = ~(1<<R5); break; case 42: COLUMN = (1<<C2); ROW = ~(1<<R5); break; case 44: COLUMN = (1<<C3); ROW = ~(1<<R5); break; case 46: COLUMN = (1<<C4); ROW = ~(1<<R5); break; case 48: COLUMN = (1<<C5); ROW = ~(1<<R5); break; case 50: COLUMN = (1<<C1)|(1<<C2); ROW = ~(1<<R1); break; case 52: COLUMN = (1<<C1)|(1<<C2); ROW = ~(1<<R2); break; case 54: COLUMN = (1<<C1)|(1<<C2); ROW = ~(1<<R3); break; case 56: COLUMN = (1<<C1)|(1<<C2); ROW = ~(1<<R4); break; case 58: COLUMN = (1<<C1)|(1<<C2); ROW = ~(1<<R5); break; case 60: COLUMN = (1<<C1)|(1<<C3); ROW = ~(1<<R1); break; case 255: COLUMN = (1<<C1)|(1<<C3); ROW = ~(1<<R1)|~(1<<R5); break; } } return 0; }







Zitieren

Lesezeichen