Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 19th, 2010 | Syntax: None | Size: 1.71 KB | Hits: 64 | Expires: Never
Copy text to clipboard
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. #define segA (1<<0)
  5. #define segB (1<<1)
  6. #define segC (1<<2)
  7. #define segD (1<<3)
  8. #define segE (1<<4)
  9. #define segF (1<<5)
  10. #define segG (1<<6)
  11. #define segDP (1<<7)
  12.  
  13. #define d_1 (0          |segB   |segC)
  14. #define d_2 (0          |segA   |segB   |segD   |segE   |segG)
  15. #define d_3 (0          |segA   |segB   |segC   |segD   |segG)
  16. #define d_4 (0          |segB   |segC   |segF   |segG)
  17. #define d_5 (0          |segA   |segC   |segD   |segF   |segG)
  18. #define d_6 (0          |segA   |segC   |segD   |segE   |segF   |segG)
  19. #define d_7 (0          |segA   |segB   |segC)
  20. #define d_8 (0          |segA   |segB   |segC   |segD   |segE   |segF   |segG)
  21. #define d_9 (0          |segA   |segB   |segC   |segD   |segF   |segG)
  22. #define d_0 (0          |segA   |segB   |segC   |segD   |segE   |segF)
  23.  
  24. int bcd[] = {d_0,
  25.                         d_1,
  26.                         d_2,
  27.                         d_3,
  28.                         d_4,
  29.                         d_5,
  30.                         d_6,
  31.                         d_7,
  32.                         d_8,
  33.                         d_9};
  34.  
  35. void calcDigits (int value, int *digitArray) {
  36.         for (int i = 0; i < 4; i++) {
  37.                 if (value == 0) {
  38.                         *(digitArray + i) = -1;
  39.                 } else {
  40.                         *(digitArray + i) = value % 10;
  41.                         value /= 10;
  42.                 }
  43.         }
  44. }
  45.                        
  46. int main (void){
  47.         DDRC = 0xFF;
  48.         DDRD = 0x0F;
  49.         PORTC = 0xFF;
  50.         PORTD = 0x00;
  51.        
  52.         unsigned int loopsPerNumber = 8;
  53.         unsigned int usDelayPerLoop = 50;
  54.        
  55.         int digits[4] = {0,0,0,0};
  56.        
  57.         /*
  58.         int test[4] = {1,2,3,4};
  59.        
  60.         while(1){
  61.                 for (int k = 0; k < 4; k++){
  62.                         PORTD = (1<<k);
  63.                         PORTC = ~bcd[test[k]];
  64.                         _delay_us(usDelayPerLoop);
  65.                         PORTC = 0xFF;
  66.                 }
  67.         }*/
  68.        
  69.         while(1){
  70.                 for (int i = 0; i < 10000; i++) {
  71.                         calcDigits(i, digits);
  72.                         for (int j = 0; j < loopsPerNumber; j++){
  73.                                 for (int k = 0; k < 4; k++){
  74.                                         PORTD = (1<<k);
  75.                                         int currentValue = digits[3-k];
  76.                                         if (currentValue >= 0)  {
  77.                                                 PORTC = ~bcd[currentValue];
  78.                                         }
  79.                                         _delay_us(usDelayPerLoop);
  80.                                         PORTC = 0xFF;
  81.                                 }      
  82.                         }
  83.                 }
  84.         }
  85. }