WOJSKOWA AKADEMIA TECHNICZNA
im. Jarosława Dąbrowskiego
Laboratorium z przedmiotu
SYSTEMY WBUDOWANE
SPRAWOZDANIE
Z ĆWICZENIA LABORATORYJNEGO
Temat ćwiczenia: Wyświetlacz 7-segmentowy.
Prowadzący: mgr inż. Sławomir Kaźmierczak
Wykonał: Damian Sulej
Grupa: I8Y3S1
Data wykonania ćwiczenia: 20.05.2010
Zadanie do zrealizowania
Celem laboratorium było stworzenie wyświetlacza 7-segmentowego wyświetlającego cyfry w systemie szesnastkowym (heksadecymalnym) opierającego się o mikrokontroler ATMEL - AT89C52. Wyświetlanie cyfr ma odbywać się za pomocą 16 przycisków podłączonych do AT89C52. Każda cyfra wyświetlana oddzielnie za pomocą swojego przycisku. Problem z jakim należało się zmierzyć to podłączyć sterowanie wyświetlacza do jednego 8-bitowego portu (mając do dyspozycji 16 przycisków).
Zmontowany układ
Opis wyświetlacza
Kod źródłowy programu
#include <REGX52.H>
#define _A 0xFE
#define _B 0xFD
#define _C 0xFB
#define _D 0xF7
#define _E 0xEF
#define _F 0xDF
#define _G 0xBF
#define _H 0x7F
unsigned char code tab [16]= {
_A&_B&_C&_D&_E&_F, //0
_B&_C, //1
_A&_B&_G&_D&_E, //2
_A&_B&_C&_D&_G, //3
_B&_C&_F&_G, //4
_A&_F&_G&_C&_D, //5
_A&_C&_D&_E&_F&_G, //6
_A&_B&_C, //7
_A&_B&_C&_D&_E&_F&_G, //8
_A&_B&_C&_D&_F&_G, //9
_A&_B&_C&_E&_F&_G, //A
_C&_D&_E&_F&_G, //B
_A&_D&_E&_F, //C
_B&_C&_D&_E&_G, //D
_A&_D&_E&_F&_G, //E
_A&_E&_F&_G, //F
};
unsigned char code mask [5]={
0xEF, //1110 1111
0xDF, //1101 1111
0xBF, //1011 1111
0x7F, //0111 1111
};
void main (void){
while(1){
P1=0xFF;
for(i = 0;i<4;++i){
P2 = mask [i];
while(P2_0==0){
if(P2_4==0)P1=tab[0];
if(P2_5==0)P1=tab[1];
if(P2_6==0)P1=tab[2];
if(P2_7==0)P1=tab[3];
}
while(P2_1==0){
if(P2_4==0)P1=tab[4];
if(P2_5==0)P1=tab[5];
if(P2_6==0)P1=tab[6];
if(P2_7==0)P1=tab[7];
}
while(P2_2==0){
if(P2_4==0)P1=tab[8];
if(P2_5==0)P1=tab[9];
if(P2_6==0)P1=tab[10];
if(P2_7==0)P1=tab[11];
}
while(P2_3==0){
if(P2_4==0)P1=tab[12];
if(P2_5==0)P1=tab[13];
if(P2_6==0)P1=tab[14];
if(P2_7==0)P1=tab[15];
}
}
}
}
Przykładowe działanie programu
Krótki opis działania układu
Do rozwiązania naszego problemu mieliśmy wykorzystać jeden port 8-bitowy. Podłączenie do niego 16 przycisków tak aby każdy odpowiadał za inną cyfrę było nie lada wyzwaniem. Okazało się jednak że aby tego dokonać należało używać dwóch bitów do sygnalizowania wciśniętego przez nas przycisku. Z tego też względu każdy przycisk został podłączony do 2 bitów portu. Przyciski ułożyłem wierszami dla lepszej czytelności układu, zresztą na układzie naniosłem legendę ukazująca który przycisk odpowiada jakiej cyfrze. Pierwsze 4 bity portu P2 układu zostały podłączone do pierwszych zacisków poszczególnych przycisków (zacisk znajdujący się po lewej stronie przycisku) natomiast kolejne 4 bity do drugich zacisków przycisku ( zacisk znajdujący się po prawej stronie przycisku). Wciśnięcie klawisza było sygnalizowane za pomocą jednego bitu z pierwszych 4 bitów (0,1,2,3) oraz jednego bitu z 4 kolejnych bitów(4,5,6,7) portu P2. Dzięki temu każdy z przycisków posiadał własny zestaw bitów. Napisany program swoim działaniem uaktywniał jeden z bitów na bitach 4-7. Tak naprawdę na tych bitach odbywało się główne sterowanie wyświetlaczem. Po wciśnięciu przycisku sygnał przechodzi na jeden z bitów 0-3 i staję się aktywny. Zwolnienie przycisku powoduje że taki stan przestaje się utrzymywać. Dzięki pętli for aktywny bit przechodzi po bitach 4-7 ustawiając w ten sposób odpowiednie maski, rozróżniające poszczególne cyfry do wyświetlenia. Maski te szybko się zmieniają. Pętla while wewnętrzna natomiast utrzymuje stan na bitach 0-3 po wciśnięciu jakiegoś przycisku. Połączenie stanu bitów na pierwszych 4 bitach (0-3) oraz stanu bitów na kolejnych 4 bitach (4-7), które ustawiają aktywny bit powoduje wyświetlenie odpowiedniej cyfry na wyświetlaczu cyfrowym. Cyfra przestaje być wyświetlana po zwolnieniu przycisku i wyświetlacz zostaje wtedy wyzerowany.
Strona 5 z 5