7segmentovka (zobrazování jiných symbolů) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

7segmentovka (zobrazování jiných symbolů) – C / C++ – Fórum – Programujte.com7segmentovka (zobrazování jiných symbolů) – C / C++ – Fórum – Programujte.com

 

Jirka
~ Anonymní uživatel
305 příspěvků
30. 9. 2012   #1
-
0
-

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

Nahlásit jako SPAM
IP: 89.102.182.–
KIIV
~ Moderátor
+43
God of flame
30. 9. 2012   #2
-
0
-

kdyz poradne porozumis co se tam deje, tak pochopis ze to vsechno jde

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Jirka
~ Anonymní uživatel
305 příspěvků
30. 9. 2012   #3
-
0
-

Tak jsem se s tím popral po svém. :-D Pro ty, kdo by někdy řešil obdobný problém, tak tady je řešení. Sice nevím jestli je úplně OK, ale funguje.

//pole DAT
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
};

//pomocí podmínky (potreba) je zobrazováno 'xx°C'
char potreba=0;
void zapis_na7segment()		//zobrazovač na 4x7-segmentovce
{
	if (potreba==0)
	{
	des_hodin=pgm_read_byte(&textdata[des_hodin]);
	zapisBYTU74595(des_hodin);
	jed_hodin=pgm_read_byte(&textdata[jed_hodin]);
	zapisBYTU74595(jed_hodin);
	des_minut=pgm_read_byte(&textdata[des_minut]);
	zapisBYTU74595(des_minut);
	jed_minut=pgm_read_byte(&textdata[jed_minut]);
	zapisBYTU74595(jed_minut);
	shift_register_hi;
	_delay_ms(10);
	shift_register_lo;
	}
		else
			{
			des_hodin=pgm_read_byte(&textdata[des_teplota]);
			zapisBYTU74595(des_hodin);
			jed_hodin=pgm_read_byte(&textdata[jed_teplota]);
			zapisBYTU74595(jed_hodin);
			des_minut=pgm_read_byte(&textdata[10]);
			zapisBYTU74595(des_minut);
			jed_minut=pgm_read_byte(&textdata[11]);
			zapisBYTU74595(jed_minut);
			shift_register_hi;
			_delay_ms(10);
			shift_register_lo;
			}

}

Nahlásit jako SPAM
IP: 89.102.182.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý