Narzędzia użytkownika

Narzędzia witryny


narzedzia:avr_8seg

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
narzedzia:avr_8seg [2025/05/13 13:33] – utworzono administratornarzedzia:avr_8seg [2025/05/16 18:46] (aktualna) administrator
Linia 1: Linia 1:
-====== Programowanie wyswietlacza LED 8 segmentowego AVR ====== +====== C: Programowanie wyswietlacza LED 8 segmentowego AVR ====== 
  
 W tym projekcie wykorzystano modul AVT 3505 ktorego schemat jest poniżej W tym projekcie wykorzystano modul AVT 3505 ktorego schemat jest poniżej
Linia 11: Linia 12:
 {{image012.gif?1259x861|2021-11-13 10_26_01-AVT3505.pdf - [AVT3505] - SumatraPDF}} {{image012.gif?1259x861|2021-11-13 10_26_01-AVT3505.pdf - [AVT3505] - SumatraPDF}}
  
- 
-{{avr_8seg_pliki/image009.gif?102x66}} 
  
 Program wykorzystuje multipleksacje za pomocą tranzystorow T2, T3, T4, T5 (rys.2), pozwala to na wykorzystanie 4 krotnie mniej\\ Program wykorzystuje multipleksacje za pomocą tranzystorow T2, T3, T4, T5 (rys.2), pozwala to na wykorzystanie 4 krotnie mniej\\
Linia 20: Linia 19:
  
  
 +<code c main.c>
 +#include <avr\io.h>
 +#include <util\delay.h>
 +// Definicje wyprowadzen
 +
 +#define F_CPU 8000000UL
 +
 +#define LED_A 4
 +#define LED_B 3
 +#define LED_C 5
 +#define LED_D 2
 +#define LED_E 6
 +#define LED_F 0
 +#define LED_G 7
 +#define LED_DP 1
 +#define LEDPORT PORTB
 +#define LEDDDR DDRB
 +#define COM1 5
 +#define COM2 4
 +#define COM3 3
 +#define COM4 2
 +#define COMPORT PORTD
 +#define COMDDR DDRD
 +
 +int displayNumber(int num, int com)
 +{
 + switch(com)
 + {
 + case 1:
 + COMDDR = 1<<COM1 | 0<<COM2 | 0<<COM3 | 0<<COM4;
 + break;
 + case 2:
 + COMDDR = 0<<COM1 | 1<<COM2 | 0<<COM3 | 0<<COM4;
 + break;
 + case 3:
 + COMDDR = 0<<COM1 | 0<<COM2 | 1<<COM3 | 0<<COM4;
 + break;
 + case 4:
 + COMDDR = 0<<COM1 | 0<<COM2 | 0<<COM3 | 1<<COM4;
 + break;
 + }
 + switch(num)
 + {
 + case 0:
 + LEDPORT = ~(1<<LED_A | 1<<LED_B | 1<<LED_C | 1<<LED_D | 1<<LED_E | 1<<LED_F );
 + break;
 + case 1:
 + LEDPORT = ~(1<<LED_B | 1<<LED_C);
 + break;
 + case 2:
 + LEDPORT = ~(1<<LED_A | 1<<LED_B | 1<<LED_G | 1<<LED_E | 1<<LED_D);
 + break;
 + case 3:
 + LEDPORT = ~(1<<LED_A | 1<<LED_B | 1<<LED_G | 1<<LED_C | 1<<LED_D);
 + break;
 + case 4:
 + LEDPORT = ~(1<<LED_F | 1<<LED_B | 1<<LED_G | 1<<LED_C );
 + break;
 + case 5:
 + LEDPORT = ~(1<<LED_A | 1<<LED_F | 1<<LED_G | 1<<LED_C | 1<<LED_D);
 + break;
 + case 6:
 + LEDPORT = ~(1<<LED_A | 1<<LED_F | 1<<LED_G | 1<<LED_C | 1<<LED_D | 1<<LED_E);
 + break;
 + case 7:
 + LEDPORT = ~(1<<LED_B | 1<<LED_C | 1<<LED_A);
 + break;
 + case 8:
 + LEDPORT = ~(1<<LED_A | 1<<LED_B | 1<<LED_C | 1<<LED_D | 1<<LED_E | 1<<LED_F | 1<<LED_G);
 + break;
 + case 9:
 + LEDPORT = ~(1<<LED_A | 1<<LED_B | 1<<LED_C | 1<<LED_D | 1<<LED_F | 1<<LED_G);
 + break;
 + }
 +
 +}
 +
 +int displayInteger(int integer)
 +{
 + int n1,n10,n100,n1000;
 + n1000 = integer / 1000 % 10;
 + n100 = integer / 100 % 10;
 + n10 = integer / 10 % 10;
 + n1 = integer % 10;
 + displayNumber(n1000,1);
 + _delay_ms(10);
 + displayNumber(n100,2);
 + _delay_ms(10);
 + displayNumber(n10,3);
 + _delay_ms(10);
 + displayNumber(n1,4);
 + _delay_ms(10);
 +}
  
 +int main(void)
 +{
 + LEDDDR = 0xff;
 +
 + while(1)
 + {
 +// odliczanie na kazdym wysiwtlaczu od 0 do 9
 +// scrollowanie liczb
 +  for(int i = 0; i <= 9 ; i ++)
 +  {
 +  for(int j = 1; j <= 4 ; j ++)
 + {
 +  displayNumber(i,j);
 +  _delay_ms(2000);
 +  }
 +  }
 +// liczenie od 0 do 9999
 +  for(int i = 0; i <= 9999 ; i++){
 +  displayInteger(i);
 +  }
 +// displayInteger(1234);
 +// }
 +
 + return 0;
 +}
 +}
 +</code>
    
  
  
narzedzia/avr_8seg.1747135994.txt.gz · ostatnio zmienione: 2025/05/13 13:33 przez administrator