Skocz do zawartości

Multipleksowanie wyświetlacza 7seg INTEL 8051 - problem poczatkującego


wld

Pomocna odpowiedź

Witam,

Potrzebuje Waszej pomocy, gdyż nie wiem już jak mam zabrać się za napotkany problem i "błądzę".

Ogolnym założeniem programu jest odczyt wartości z przetworinka i wyświetlenie jej na wyświetlaczu 7-segmentowym w postaci 0...255. Wszystko wydaje się być ok - moim jedynym problemem jest zbyt wolne "przełączanie" między segmentami. Ukazane jest to na filmiku poniżej:

https://streamable.com/1o8vu

Kolejnym wątpliwym punktem tego programu jest poniższa instrukcja. Powinna ona odpowiadać za zwiększenie/zmniejszenie prędkości przełączania (nie została dodana przeze mnie). Jest to dosyć prymitywne rozwiązanie i jak widać na załączonym obrazku słabo spełnia swoje zadanie. Niestety po próbie zastąpienia jej innym fragmentem - program przestaje działać.

if(++presc2==1)			
{
		presc2=0; 
[...]
[...]
[...]
}

Całośc kodu:


#include <reg52.h>
#include <intrins.h>
#include "lcd.h"
#include "mkd51sim.h"


unsigned char xdata Tab7s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char xdata PTSEG _at_ 0x8018;  
unsigned char xdata PTAC _at_ 0x8000;
unsigned char xdata POT0 _at_ 0x8005;
char potencjometr (void); 
unsigned char delay1;
unsigned char wyswietlacz[3] = {0,1,2};
unsigned char adc_value;

unsigned char presc2=0,segment=0;


void main(void) {

while (1)
{
//odczyt wartosci z potencjometru
POT0=0;
adc_value = potencjometr();


	if(++presc2==1)			
{
		presc2=0; 

		wyswietlacz[0]=(unsigned char)adc_value%10;
		wyswietlacz[1]=(unsigned char)(adc_value/10)%10;
			wyswietlacz[2]=(unsigned char)(adc_value/100)%10;
			segment++;
	if (segment>=3){
		segment=0;
	}
	P1=segment;
}

	PTSEG=Tab7s[wyswietlacz[segment]];

}
}	

Link do komentarza
Share on other sites

Gość es2

Kolejnym wątpliwym punktem tego programu jest poniższa instrukcja. Powinna ona odpowiadać za zwiększenie/zmniejszenie prędkości przełączania (nie została dodana przeze mnie). Jest to dosyć prymitywne rozwiązanie i jak widać na załączonym obrazku słabo spełnia swoje zadanie. Niestety po próbie zastąpienia jej innym fragmentem - program przestaje działać.

if(++presc2==1)			
{
		presc2=0; 
[...]
[...]
[...]
}

A jak ten inny fragment wygląda?

Co do całego kodu, schemat z pewnością nie utrudniłby analizy kodu. A tak na początek, multipleksowanie bez przerwań?

Filmik nie dział u mnie. Może w normalnym formacie umieści (mp4)? Albo na Youtube?

[ Dodano: 17-04-2018, 21:23 ]

moim jedynym problemem jest zbyt wolne "przełączanie" między segmentami

Jakie jest taktowanie procesora?

Jaki to procesor? Biblioteki 8052 niewiele mówią, może to byc np 89C51RD2 a ja nie wiem co montowano w MDK51 20 lat temu.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.