uuu000

2313 2*a 122-2hz /64

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