Lcd.h z filmu:
#include <avr/io.h>
#include <stdlib.h>
#define LCD_PORT PORTD //tu konfigurujemy PORT wyswietlacza
#define TRANZYSTOR_PORT PORTB //tu konfigurujemy PORT tranzystorów
#define LCD_DDR DDR(LCD_PORT)
#define TRANZYSTOR_DDR DDR(TRANZYSTOR_PORT)
#define DDR(x) _SFR_IO8(_SFR_IO_ADDR(x) - 1)
void start_7ser ();
int print_7seg(int liczba, int tranzystor);
lcd.c z filmu:
void start_7ser (){
LCD_DDR = 255;
LCD_PORT = 255;
TRANZYSTOR_DDR = 255;
TRANZYSTOR_PORT = 0;
}
int print_7seg(int liczba, int tranzystor){
TRANZYSTOR_PORT=255;
switch (liczba)
{
case 0: LCD_PORT=0b11000000;break;
case 1: LCD_PORT=0b11111001;break;
case 2: LCD_PORT=0b10100100;break;
case 3: LCD_PORT=0b10110000;break;
case 4: LCD_PORT=0b10011001;break;
case 5: LCD_PORT=0b10010010;break;
case 6: LCD_PORT=0b10000010;break;
case 7: LCD_PORT=0b11111000;break;
case 8: LCD_PORT=0b10000000;break;
case 9: LCD_PORT=0b10010000;break;
default: LCD_PORT=255;break;
}
TRANZYSTOR_PORT=~(0b00000001<<tranzystor);
return 0;
}
Program główny main:
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay_basic.h>
#include "LCD7seg.h"
int main(void)
{
start_7ser();
while(1)
{
print_7seg(1,1);
print_7seg(2,0);
}
}
Sposób działania wyświetlacza 7-segmentowego jest taki, że chcemy używać jak najmniej pinów do sterowania nim. Dlatego używa się 7 pinów do przesłania danych oraz tyle pinów ile mamy wyświetlaczy. W jednej chwili na wyświetlacz może iść tylko jedna liczba i trzeba załączyć tylko ten wyświetlacz na którym ta liczba ma się znajdować. Jeśli będziemy przełączać wyświetlacz bardzo szybko, to nie zauważymy, że wyświetlacze gasną.
Kod można pobrać.
|