Advertisement
Guest User

Untitled

a guest
Feb 6th, 2015
904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.61 KB | None | 0 0
  1. #include <math.h>
  2. void setup() {
  3. DDRD = 0xFF;
  4. PORTD = 0x00;
  5. #include <ma4th.h>
  6. pinMode(A0, OUTPUT);
  7. pinMode(A1, OUTPUT);  
  8. pinMode(A2, OUTPUT);  
  9. pinMode(A3, OUTPUT);
  10. pinMode(A4, INPUT);
  11. pinMode(A5, INPUT);
  12.  
  13. pinMode(0, OUTPUT);
  14. pinMode(1, OUTPUT);
  15. pinMode(2, OUTPUT);
  16. pinMode(3, OUTPUT);
  17. pinMode(4, OUTPUT);
  18. pinMode(6, OUTPUT);
  19. pinMode(7, INPUT);
  20. pinMode(8, INPUT);
  21. pinMode(12, OUTPUT);
  22. pinMode(10, INPUT);
  23.  
  24. }
  25.  
  26.  
  27. unsigned long cur_millis , lastTick, setTick = 0;
  28. int hours = 12;
  29. int mins = 36;
  30. int sec = 0;
  31. int time = 0;
  32. int hz = 0;
  33. int dgt[10]={0b11010111,0b00000011,0b11001110,0b10001111,0b00011011,0b10011101,0b11011101,0b00000111,0b11011111,0b10011111}; //задаем массив со значениями сегментов совковых индикаторов
  34. int delmks = 1950;
  35.  
  36. int factor_digits(int num, int *digits, int limit) //Обработка чисел в массивы по цифрам
  37. {
  38.     int digits_count = 0;
  39.  
  40.     if (num == 0) {
  41.         digits[0] = 0;
  42.         return 1;
  43.     }
  44.  
  45.     while (num > 0 && limit) {
  46.         digits[digits_count++] = num % 10;
  47.         num /= 10;
  48.         limit--;
  49.    }
  50.    return num ? 0 : digits_count;
  51. }
  52.  
  53.  
  54. double Getterm(int RawADC) {
  55.   double temp;
  56.   temp = log(((10240000/RawADC) - 10000));
  57.   temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp));
  58.   temp = temp - 273.15;
  59.   temp = round(temp);
  60.   return temp;
  61. }
  62.  
  63. void loop() {
  64.  
  65.    cur_millis = millis(); //time
  66.  
  67.   if (cur_millis - lastTick >= 1000) {
  68.     lastTick = cur_millis;
  69.     sec++;
  70.  
  71.     if (sec >= 60) {
  72.       mins++;
  73.       sec = 0;
  74.     }
  75.  
  76.     if (mins >=60) {
  77.       hours++;
  78.       mins = 0;
  79.     }
  80.  
  81.     if (hours >=24) {
  82.       hours=0;
  83.       mins = 0;
  84.     }
  85.   }
  86.  
  87.  
  88. int temphours = hours*10; //костыль
  89. int tempmins = mins*10;
  90.  
  91. int factored_number1[10]={0,0,0,0,0,0,0,0,0,0};  
  92. int factored_number2[10]={0,0,0,0,0,0,0,0,0,0};
  93. int factored_number3[10]={0,0,0,0,0,0,0,0,0,0};
  94. int factored_number_len;
  95. int i;
  96.  
  97. if (digitalRead(10) == LOW) {   //обрабатываем пин 10 - температура
  98.         int temp = Getterm(analogRead(4)); 
  99.         int temptemp = temp*10;
  100.         factored_number_len = factor_digits(temptemp, factored_number3, 10);
  101.         digitalWrite(A2, LOW); // включаем 3 сегмент
  102.     PORTD = 0b11010100;
  103.    
  104.     delayMicroseconds(delmks);
  105.        
  106.    
  107.         digitalWrite(A2, HIGH); // выключаем 3 сегмент
  108.         digitalWrite(A1, LOW); // включаем 2 сегмент
  109.     PORTD = dgt[factored_number3[2]];
  110.  
  111.     delayMicroseconds(delmks);
  112.        
  113.  
  114.         digitalWrite(A1, HIGH); // выключаем 2 сегмент
  115.  
  116.         digitalWrite(A0, LOW); // включаем 1 сегмент
  117.     PORTD = dgt[factored_number3[1]];
  118.  
  119.     delayMicroseconds(delmks);
  120.  
  121.     digitalWrite(A0, HIGH); // выключаем 1 сегмент
  122. } else {
  123. // обрабатываем пин 9 часы
  124. if (digitalRead(9) == LOW) {  
  125.         if (hz > 600) {hours = hours+1; hz = 0; sec = 0;};
  126.         if (hours == 24) {hours = 0; hz = 0; sec = 0;};
  127.  
  128.     factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
  129.     digitalWrite(A3, LOW); // включаем 4 сегмент
  130.     PORTD = dgt[factored_number1[2]];
  131.    
  132.     delayMicroseconds(delmks);
  133.  
  134.    
  135.  
  136.     digitalWrite(A3, HIGH); //выключаем 4 сегмент
  137.     hz = hz+10;
  138.         digitalWrite(A2, LOW); // включаем 3 сегмент
  139.     PORTD = dgt[factored_number1[1]];
  140.    
  141.     delayMicroseconds(delmks);
  142.  
  143.    
  144.         digitalWrite(A2, HIGH); // выключаем 3 сегмент
  145.     hz = hz+10;
  146.   };
  147.        
  148.        
  149.        
  150.        
  151. // обрабатываем  пин 8 - минуты
  152. if (digitalRead(8) == LOW) {  
  153.         if (hz > 600) {mins = mins+1; hz = 0; sec = 0;};
  154.         if (mins == 60) {mins = 0; hz = 0; sec = 0;};
  155.         factored_number_len = factor_digits(tempmins, factored_number2, 10);
  156.         digitalWrite(A1, LOW); // включаем 2 сегмент
  157.     PORTD = dgt[factored_number2[2]];
  158.    
  159.     delayMicroseconds(delmks);
  160.  
  161.    
  162.         digitalWrite(A1, HIGH); // включаем 2 сегмент
  163.     hz = hz+20;
  164.         digitalWrite(A0, LOW); // включаем 1 сегмент
  165.     PORTD = dgt[factored_number2[1]];
  166.    
  167.     delayMicroseconds(delmks);
  168.    
  169.     digitalWrite(A0, HIGH); // выключаем 1 сегмент
  170.     hz = hz+20;
  171.   };
  172.        
  173. if (digitalRead(7) == LOW) { sec = 0; };
  174.  
  175.     factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
  176.     digitalWrite(A3, LOW); // включаем 4 сегмент
  177.     PORTD = dgt[factored_number1[2]];
  178.  
  179.     delayMicroseconds(delmks);
  180.  
  181.  
  182.  
  183.     digitalWrite(A3, HIGH); //выключаем 4 сегмент
  184.  
  185.         digitalWrite(A2, LOW); // включаем 3 сегмент
  186.     PORTD = dgt[factored_number1[1]];
  187.  
  188.     delayMicroseconds(delmks);
  189.  
  190.  
  191.         digitalWrite(A2, HIGH); // выключаем 3 сегмент
  192.  
  193.  
  194. //пишем единицы минут в порт
  195.         factored_number_len = factor_digits(tempmins, factored_number2, 10);
  196.         digitalWrite(A1, LOW); // включаем 2 сегмент
  197.     PORTD = dgt[factored_number2[2]];
  198.  
  199.     delayMicroseconds(delmks);
  200.  
  201.  
  202.         digitalWrite(A1, HIGH); // включаем 2 сегмент
  203.  
  204.         digitalWrite(A0, LOW); // включаем 1 сегмент
  205.     PORTD = dgt[factored_number2[1]];
  206.  
  207.     delayMicroseconds(delmks);
  208.  
  209.     digitalWrite(A0, HIGH); // выключаем 1 сегмент
  210.  
  211.  
  212. };
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement