Advertisement
MagnusArias

SW | Wyświetlacz 7seg

May 11th, 2016
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.27 KB | None | 0 0
  1. #include "AT91SAM9263.h"
  2.  
  3. void dbgu_print_ascii(){}
  4.  
  5. #define A (1<<25)
  6. #define B (1<<24)
  7. #define C (1<<22)
  8. #define D (1<<21)
  9. #define E (1<<20)
  10. #define F (1<<27)
  11. #define G (1<<26)
  12. #define DOT (1<<23)
  13.  
  14. #define Q1 (1<<29)
  15. #define Q2 (1<<28)
  16. #define Q3 (1<<30)
  17.  
  18. void initLCD(){
  19.     AT91C_BASE_PIOB->PIO_OER =  (A | B | C | D | E | F | G | DOT | Q1 | Q3 | Q2 );
  20.     AT91C_BASE_PIOB->PIO_PER =  (A | B | C | D | E | F | G | DOT | Q1 | Q3 | Q2 );  
  21. }
  22.  
  23. void clearLCD(){
  24.     AT91C_BASE_PIOB->PIO_CODR=  (A | B | C | D | E | F | G | DOT | Q1 | Q3 | Q2 );
  25. }
  26.  
  27.  
  28.  
  29. void delay (volatile int ms){
  30.     volatile int i = 0;
  31.    
  32.     AT91C_BASE_PITC->PITC_PIMR = ((1<<24) | 6250);
  33.    
  34.     while (i < ms){
  35.        
  36.         if (AT91C_BASE_PITC->PITC_PISR != 0)
  37.         {
  38.             AT91C_BASE_PITC->PITC_PIVR;
  39.             i++;
  40.         }
  41.     }
  42. }
  43.  
  44. void showNumber(volatile int number){
  45.     switch (number){
  46.         case 0:
  47.             AT91C_BASE_PIOB->PIO_SODR = (A | B | C | D | E | F);
  48.             break;
  49.            
  50.         case 1:
  51.             AT91C_BASE_PIOB->PIO_SODR = (B | C );
  52.             break;
  53.            
  54.         case 2:
  55.             AT91C_BASE_PIOB->PIO_SODR = (A | B | G | E | D);
  56.             break;
  57.            
  58.         case 3:
  59.             AT91C_BASE_PIOB->PIO_SODR = (A | B | C | D | G);
  60.             break;
  61.            
  62.         case 4:
  63.             AT91C_BASE_PIOB->PIO_SODR = ( B | C | F | G);
  64.             break;
  65.            
  66.         case 5:
  67.             AT91C_BASE_PIOB->PIO_SODR = ( A | F | D | C | G);
  68.             break;
  69.            
  70.         case 6:
  71.             AT91C_BASE_PIOB->PIO_SODR = (A | G | C | D | E | F);
  72.             break;
  73.            
  74.         case 7:
  75.             AT91C_BASE_PIOB->PIO_SODR = (A | B | C);
  76.             break;
  77.            
  78.         case 8:
  79.             AT91C_BASE_PIOB->PIO_SODR = (A | B | C | D | E | F | G);
  80.             break;
  81.        
  82.         case 9:
  83.             AT91C_BASE_PIOB->PIO_SODR = (A | B | C | D | F | G);
  84.             break;
  85.     }
  86. }
  87.  
  88. void rightLCD(){
  89.     AT91C_BASE_PIOB->PIO_SODR = Q2;
  90.     AT91C_BASE_PIOB->PIO_CODR = Q3;
  91. }
  92. void leftLCD(){
  93.     AT91C_BASE_PIOB->PIO_SODR = Q3;
  94.     AT91C_BASE_PIOB->PIO_CODR = Q2;
  95. }
  96.  
  97. int main(void){
  98.    
  99.     volatile int c = 0;
  100.     volatile int numb = 0;
  101.     volatile int carry = 0;
  102.  
  103.     initLCD();
  104.     clearLCD();
  105.    
  106.     while (1){
  107.  
  108.         for (c = 0; c < 10; c++){
  109.                 delay(10);
  110.                 clearLCD();
  111.                 leftLCD();
  112.                 showNumber(carry);
  113.                
  114.                 delay(10);
  115.                 clearLCD();
  116.                 rightLCD();
  117.                 showNumber(numb);
  118.         }
  119.        
  120.         if (numb < 8){
  121.             numb += 2;
  122.         }
  123.         else
  124.         {
  125.             if (carry < 9){
  126.                 ++carry;
  127.             }
  128.             else{
  129.                 carry = 0;
  130.             }
  131.             numb = 0;
  132.         }
  133.     }      
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement