Dobrý den,
řeším problém se 4 sedmisegmentovkama. Na internetu jsem našel program, který jsem si upravil ke své podobě a na kterém se učím.
A můj problém je takovýto:
chtěl bych, aby 7 segmentovka nezobrazovala pouze čísla, ale i jiné symboly.
Třeba '°C', nebo si zobrazit jen jeden segment. Myslíte, že to půjde? Tady přikládám můj program:
//#define F_CPU 8000000L
#include "util/delay.h"
#include "stdlib.h"
#include "avr/io.h"
#include "avr/pgmspace.h"
#include "avr/interrupt.h"
#define shift_register_hi PORTD|=(1<<3)
#define shift_register_lo PORTD&=~(1<<3)
#define clock_register_hi PORTD|=(1<<1)
#define clock_register_lo PORTD&=~(1<<1)
#define serial_register_hi PORTD|=(1<<0)
#define serial_register_lo PORTD&=~(1<<0)
const char textdata[] PROGMEM=
{
0b11000000,//0
0b11111001,//1
0b10100100,//2
0b10110000,//3
0b10011001,//4
0b10010010,//5
0b10000010,//6
0b11111000,//7
0b10000000,//8
0b10010000,//9
0b10011100,//°
0b11000110,//C
};
//====================================================================
unsigned char jed_hodin,des_hodin,jed_minut,des_minut,minuty,hodiny,sekundy; //jednotky hodin, desítky hodin, jednotky minut, desítky minut
//minuty, hodiny, druhý
//--------------------------INICIALIZACE---------------------------------------
void init_devices() //inicializace 74HC595
{
DDRD |= (1 << PD0); //nastaveni bitu PD0 jako vystupni
DDRD |= (1 << PD1); //nastaveni bitu PD1 jako vystupni
DDRD |= (1 << PD3); //nastaveni bitu PD3 jako vystupni
serial_register_lo;
shift_register_lo;
clock_register_lo;
}
//------------------------KONEC INICIALIZACE---------------------------------
void clock_74595() //hodinový pulz 74HC595
{
clock_register_hi;
clock_register_lo;
}
void kirimbyte74595(unsigned char data_led) //zápis BYTE
{
if(bit_is_set(data_led,7)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,6)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,5)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,4)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,3)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,2)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,1)) serial_register_hi;else serial_register_lo;
clock_74595();
if(bit_is_set(data_led,0)) serial_register_hi;else serial_register_lo;
clock_74595();
}
void zapis_na7segment() //zobrazovač na 4x7-segmentovce
{
des_hodin=pgm_read_byte(&textdata[des_hodin]);
kirimbyte74595(des_hodin);
jed_hodin=pgm_read_byte(&textdata[jed_hodin]);
kirimbyte74595(jed_hodin);
des_minut=pgm_read_byte(&textdata[des_minut]);
kirimbyte74595(des_minut);
jed_minut=pgm_read_byte(&textdata[jed_minut]);
kirimbyte74595(jed_minut);
shift_register_hi;
_delay_ms(10);
shift_register_lo;
}
void prevod() //prevod cisla
{
des_hodin=hodiny/10; //destíky hodiny
jed_hodin=hodiny%10; //jednotky hodiny
des_minut=minuty/10; //desítky minut
jed_minut=minuty%10; //jednotky minut
}
ISR (TIMER1_COMPA_vect)
{
TCNT1 = 0;
}
//------------------------------hlavni smycka------------------------------------
int main()
{
minuty=0;
hodiny=0;
sekundy=0;
init_devices();
TCCR1B |= (1<< CS12);
TIMSK |= (1<< OCIE1A);
OCR1A=31249;
sei();
for(;;)
{
prevod(); //fce prevod prevede cislo na jednotky a desitky
zapis_na7segment();
}
}
Budu rád za jakoukoli odpověď. Děkuji