uuu000

2313 2*a 120-2hz

Oct 13th, 2021
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. #define F_CPU 8000000UL
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4. #include <avr/interrupt.h>
  5. #include <avr/eeprom.h>
  6. unsigned char led = 1;
  7. unsigned char led2 = 1;
  8. volatile unsigned char old,now,btn,old1,now1,btn1;
  9.  
  10.  
  11. //***************************************************************
  12. unsigned char st(){ // проверяет нажатие кнопки PB5 POL
  13.  
  14. btn=0;
  15. now=PINB& (1<<PB5); // текущее состояние кнопки PD1
  16. if ((now==0) && (old!=0)) btn=1; // если кнопка нажата
  17. old=now;
  18. return btn;
  19. }
  20. //***************************************************************
  21. unsigned char st2()// проверяет нажатие кнопки PB0 LEVEL
  22. {
  23.  
  24. btn1=0;
  25. now1=PINB& (1<<PB0); // текущее состояние кнопки PB0
  26. if ((now1==0) && (old1!=0)) btn1=1; // если кнопка нажата
  27. old1=now1;
  28. return btn1;
  29. }//***************************************************************
  30. // Процедура прерывания по переполнению таймера 0
  31. #define OVF 8 // периодичность выполнения процедуры прерывания, mS
  32. ISR (TIMER0_OVF_vect){
  33. static unsigned char fToggle,cCount;
  34. static unsigned int uiCount,a;
  35.  
  36. //******************************//
  37. //*** МИГАНИЕ СВЕТОДИОДА PD0 ***//
  38. //******************************//
  39. if (fToggle==1){ // если установлен флаг мигания
  40. if (uiCount<a){ // в течение первого полупериода 1 Гц 250*8
  41. PORTD |= (1<<PD0); // светодиод PD0 включен
  42. }
  43. else if (uiCount<2*a){ // в течение второго полупериода 1 Гц
  44. PORTD &= ~(1<<PD0); // светодиод PD0 выключен
  45. }
  46. else uiCount=0;
  47. uiCount++;
  48. }
  49.  
  50. //***********************************//
  51. //*** ПРОВЕРКА НАЖАТИЯ КНОПКИ PA0 ***//
  52. //***********************************//
  53. if (cCount>(25/OVF)){ // выполняется с периодичностью 25 mS
  54. if (st()){ // если кнопка PA0 нажата
  55. switch(led){
  56. case 1:
  57. PORTD |= (1<<PD0); // включить светодиод PD0
  58. fToggle=0; // снять флаг мигания
  59. break;
  60.  
  61. case 2:
  62. a=2;
  63. fToggle=1; // установить флаг мигания
  64. break;
  65.  
  66. case 3:
  67. a=2;
  68. fToggle=1; // установить флаг мигания
  69. break;
  70. case 4:
  71. a=8;
  72. fToggle=1; // установить флаг мигания
  73. break;
  74.  
  75. case 5:
  76. a=26;
  77. fToggle=1; // установить флаг мигания
  78. break;
  79.  
  80. case 6:
  81. a=128;
  82. fToggle=1; // установить флаг мигания
  83. break;
  84.  
  85. case 7:
  86. PORTD &= ~(1<<PD0); // светодиод PD0 выключен
  87. fToggle=0; // снять флаг мигания
  88. led=0;
  89. break;
  90. }
  91. led++;
  92. }
  93. cCount=0;
  94. }
  95. else cCount++;
  96. }
  97. //***************************************************************
  98. int main (void){
  99.  
  100.  
  101. DDRB=0b11011110;
  102. PORTB=0b00100001;
  103.  
  104. DDRD=0b1111111;
  105. PORTD=0b0000000;
  106.  
  107. TCCR0A = 0b00000000;// нормальный режим WGM00=0; WGM01=0; WGM02=0(TCCR0B);
  108. TCCR0B = 0b00000011;//делитель на 256;CS02=1;CS01=0;CS00=0;
  109. TIMSK = 0b00000010;//TOIE0 =1 разрешение прерывания по переполнению T0
  110.  
  111. sei();
  112.  
  113. while (1)
  114. {
  115.  
  116.  
  117.  
  118. if (st2())
  119. {
  120.  
  121. switch(led2)
  122. {
  123. case 1:
  124. PORTD |=(1<<PD1);PORTB |=(1<<PB1);
  125.  
  126. break;
  127. case 2:
  128. PORTD&=~(1<<PD1);PORTB&=~(1<<PB1);
  129. PORTD |=(1<<PD2);PORTB |=(1<<PB2);
  130.  
  131. break;
  132. case 3:
  133. PORTD&=~(1<<PD2);PORTB&=~(1<<PB2);
  134. PORTD |=(1<<PD3);PORTB |=(1<<PB3);
  135. break;
  136. case 4:
  137. PORTD&=~(1<<PD3);PORTB&=~(1<<PB3);
  138.  
  139. led2=0;
  140. break;
  141.  
  142. }
  143. led2++;
  144. _delay_ms(200);
  145.  
  146. }
  147.  
  148. }
  149. return (0);
  150. }
  151. //***************************************************************
  152.  
  153.  
Advertisement
Add Comment
Please, Sign In to add comment