Advertisement
Guest User

Untitled

a guest
Feb 6th, 2015
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.07 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.  
  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.  if (time == 1000) { sec = sec+1; time=0; };
  66.  if (sec == 60) { mins = mins+1; sec=0; };
  67.  if (mins == 60) { hours = hours+1; mins=0; };
  68.  if (hours == 24) { hours = 0; };
  69.  
  70. int temphours = hours*10; //костыль
  71. int tempmins = mins*10;
  72.  
  73. int factored_number1[10]={0,0,0,0,0,0,0,0,0,0};  
  74. int factored_number2[10]={0,0,0,0,0,0,0,0,0,0};
  75. int factored_number3[10]={0,0,0,0,0,0,0,0,0,0};
  76. int factored_number_len;
  77. int i;
  78.  
  79. if (digitalRead(10) == LOW) {  
  80.         int temp = Getterm(analogRead(4)); 
  81.         int temptemp = temp*10;
  82.         factored_number_len = factor_digits(temptemp, factored_number3, 10);
  83.         digitalWrite(A2, LOW); // включаем 3 сегмент
  84.     PORTD = 0b11010100;
  85.   digitalWrite(A5, HIGH);
  86.     delayMicroseconds(delmks);
  87.         time = time+2;
  88.   digitalWrite(A5, LOW);
  89.         digitalWrite(A2, HIGH); // выключаем 3 сегмент
  90.         digitalWrite(A1, LOW); // включаем 2 сегмент
  91.     PORTD = dgt[factored_number3[2]];
  92. digitalWrite(A5, HIGH);
  93.     delayMicroseconds(delmks);
  94.         time = time+2;
  95. digitalWrite(A5, LOW);
  96.         digitalWrite(A1, HIGH); // выключаем 2 сегмент
  97.  
  98.         digitalWrite(A0, LOW); // включаем 1 сегмент
  99.     PORTD = dgt[factored_number3[1]];
  100. digitalWrite(A5, HIGH);
  101.     delayMicroseconds(delmks);
  102. digitalWrite(A5, LOW);
  103.     digitalWrite(A0, HIGH); // выключаем 1 сегмент
  104.     time = time+2; //да, я считаю время как дебил, надо бы померять частотомером частоту сигнала на пинах порта д и выставить делеи, так чтоб целое значение было
  105.  
  106.  
  107.  
  108.  
  109. } else {
  110. // обрабатываем прерывание по пину 7
  111. if (digitalRead(9) == LOW) {  
  112.         if (hz > 600) {hours = hours+1; hz = 0; time = 0;};
  113.     factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
  114.     digitalWrite(A3, LOW); // включаем 4 сегмент
  115.     PORTD = dgt[factored_number1[2]];
  116.   digitalWrite(A5, HIGH);
  117.     delayMicroseconds(delmks);
  118.  
  119.   digitalWrite(A5, LOW);
  120.  
  121.     digitalWrite(A3, HIGH); //выключаем 4 сегмент
  122.     hz = hz+10;
  123.         digitalWrite(A2, LOW); // включаем 3 сегмент
  124.     PORTD = dgt[factored_number1[1]];
  125.   digitalWrite(A5, HIGH);
  126.     delayMicroseconds(delmks);
  127.  
  128.   digitalWrite(A5, LOW);
  129.         digitalWrite(A2, HIGH); // выключаем 3 сегмент
  130.     hz = hz+10;
  131.   };
  132.        
  133. if (digitalRead(7) == LOW) {time = 0;};
  134.        
  135.        
  136. // обрабатываем прерывание по пину 8
  137. if (digitalRead(8) == LOW) {  
  138.         if (hz > 600) {mins = mins+1; hz = 0; time = 0;};
  139.         factored_number_len = factor_digits(tempmins, factored_number2, 10);
  140.         digitalWrite(A1, LOW); // включаем 2 сегмент
  141.     PORTD = dgt[factored_number2[2]];
  142.   digitalWrite(A5, HIGH);
  143.     delayMicroseconds(delmks);
  144.  
  145.   digitalWrite(A5, LOW);
  146.         digitalWrite(A1, HIGH); // включаем 2 сегмент
  147.     hz = hz+20;
  148.         digitalWrite(A0, LOW); // включаем 1 сегмент
  149.     PORTD = dgt[factored_number2[1]];
  150.   digitalWrite(A5, HIGH);
  151.     delayMicroseconds(delmks);
  152.   digitalWrite(A5, LOW);
  153.     digitalWrite(A0, HIGH); // выключаем 1 сегмент
  154.     hz = hz+20;
  155.   };
  156.        
  157.  
  158.  
  159.     factored_number_len = factor_digits(temphours, factored_number1, 10); // Раскладываем в массив часы
  160.     digitalWrite(A3, LOW); // включаем 4 сегмент
  161.     PORTD = dgt[factored_number1[2]];
  162. digitalWrite(A5, HIGH);
  163.     delayMicroseconds(delmks);
  164.  
  165. digitalWrite(A5, LOW);
  166.  
  167.     digitalWrite(A3, HIGH); //выключаем 4 сегмент
  168.     time = time+2;
  169.         digitalWrite(A2, LOW); // включаем 3 сегмент
  170.     PORTD = dgt[factored_number1[1]];
  171.  digitalWrite(A5, HIGH);
  172.     delayMicroseconds(delmks);
  173.  
  174. digitalWrite(A5, LOW);
  175.         digitalWrite(A2, HIGH); // выключаем 3 сегмент
  176.     time = time+2;
  177.  
  178. //пишем единицы минут в порт
  179.         factored_number_len = factor_digits(tempmins, factored_number2, 10);
  180.         digitalWrite(A1, LOW); // включаем 2 сегмент
  181.     PORTD = dgt[factored_number2[2]];
  182. digitalWrite(A5, HIGH);
  183.     delayMicroseconds(delmks);
  184.  
  185. digitalWrite(A5, LOW);
  186.         digitalWrite(A1, HIGH); // включаем 2 сегмент
  187.     time = time+2;
  188.         digitalWrite(A0, LOW); // включаем 1 сегмент
  189.     PORTD = dgt[factored_number2[1]];
  190. digitalWrite(A5, HIGH);
  191.     delayMicroseconds(delmks);
  192. digitalWrite(A5, LOW);
  193.     digitalWrite(A0, HIGH); // выключаем 1 сегмент
  194.     time = time+2;
  195.  
  196. };
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement