![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 18.05.2012
Сообщений: 2
|
![]()
у меня плата антенного коммутатора листинг на си я не совсем понял как работает особенно с флагами там
1. #include <ez8.h> 2. #include <constant.h> 3. struct { unsigned key_1: 1; 1. unsigned key_2: 1; 2. unsigned key_3: 1; 3. unsigned key_4: 1; 4. unsigned key_5: 1; 5. unsigned key_6: 1; 6. unsigned key_7: 1; 7. unsigned key_8: 1; 8. unsigned key_9: 1; 9. unsigned key_10: 1; 10. unsigned key_11: 1; 11. unsigned key_12: 1; 12. unsigned key_13: 1; 13. unsigned key_14: 1; 14. unsigned key_15: 1; 15. unsigned key_16: 1; 16. unsigned key_17: 1; 17. unsigned key_18: 1; 18. unsigned key_19: 1; 19. unsigned key_20: 1; } Flags; 4. unsigned long key_pressed; //нажатая кнопка 5. unsigned long old_pressed; //предыдущая нажатая кнопка 6. unsigned int delay_after_key; //задержка после нажатия кнопки 7. unsigned char Buffer_UART[0x10] _At 0x100; //буфер приема/передачи UART0 8. unsigned int Position, Silent_Timeout, length; 9. struct { unsigned ErrRcv: 1; 1. unsigned ErrCRC: 1; 2. unsigned DataRcv: 1; 3. unsigned DataTrx: 1; 4. unsigned Err_I2C: 1; i. } FlagUART; 10. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// 11. void init_watchdog(void); 12. void init_ports(void); 13. void init_sfr(void); 14. void load_urmod_fram (void); 15. void save_urmod_fram (void); 16. //---------------------------------------------------------------------------------------------------------------- 17. void clear_all(void) 18. { 19. Flags.key_1=0; Flags.key_2=0; Flags.key_3=0; Flags.key_4=0; 20. Flags.key_5=0; Flags.key_6=0; Flags.key_7=0; Flags.key_8=0; 21. Flags.key_9=0; Flags.key_10=0; Flags.key_11=0; Flags.key_12=0; 22. Flags.key_13=0; Flags.key_14=0; Flags.key_15=0; Flags.key_16=0; 23. Flags.key_17=0; Flags.key_18=0; Flags.key_19=0; Flags.key_20=0; 24. led_1_off; led_2_off; led_3_off; led_4_off; 25. led_5_off; led_6_off; led_7_off; led_8_off; 26. led_9_off; led_10_off; led_11_off; led_12_off; 27. led_13_off; led_14_off; led_15_off; led_16_off; 28. led_17_off; led_18_off; led_19_off; led_20_off; 29. rele_21_on; rele_17_off; rele_18_off; rele_19_off; rele_20_off; 30. } 31. //---------------------------------------------------------------------------------------------------------------- 32. void clear_4x4(void) 33. { 34. Flags.key_17=0; Flags.key_18=0; Flags.key_19=0; Flags.key_20=0; 35. led_17_off; led_18_off; led_19_off; led_20_off; 36. rele_21_off; rele_17_off; rele_18_off; rele_19_off; rele_20_off; 37. } 38. //анализ нажатых кнопок 39. //---------------------------------------------------------------------------------------------------------------- 40. void analizkey(void) 41. { 42. if (key_pressed!=0) 43. { 44. //антенна1 if ( ((key_pressed&key1)!=0)&&(Flags.key _1==0) ) { Flags.key_1=1; Flags.key_2=0; Flags.key_3=0; Flags.key_4=0; Flags.key_5=0; Flags.key_9=0; Flags.key_13=0; led_1_on; save_urmod_fram(); led_2_off; led_3_off; led_4_off; led_5_off; led_9_off; led_13_off; clear_4x4(); } else 45. if ( ((key_pressed&key2)!=0)&&(Flags.key _2==0) ) { Flags.key_2=1; Flags.key_1=0; Flags.key_3=0; Flags.key_4=0; Flags.key_6=0; Flags.key_10=0; Flags.key_14=0; led_2_on; save_urmod_fram(); led_1_off; led_3_off; led_4_off; led_6_off; led_10_off; led_14_off; clear_4x4(); } else 46. if ( ((key_pressed&key3)!=0)&&(Flags.key _3==0) ) i. { Flags.key_3=1; b. Flags.key_1=0; Flags.key_2=0; Flags.key_4=0; Flags.key_7=0; Flags.key_11=0; Flags.key_15=0; c. led_3_on; save_urmod_fram(); d. led_1_off; led_2_off; led_4_off; led_7_off; led_11_off; led_15_off; clear_4x4(); } else 47. if ( ((key_pressed&key4)!=0)&&(Flags.key _4==0) ) i. { Flags.key_4=1; b. Flags.key_1=0; Flags.key_2=0; Flags.key_3=0; Flags.key_8=0; Flags.key_12=0; Flags.key_16=0; c. led_4_on; save_urmod_fram(); d. led_1_off; led_2_off; led_3_off; led_8_off; led_12_off; led_16_off; clear_4x4(); } else 48. //антенна2 49. if ( ((key_pressed&key5)!=0)&&(Flags.key _5==0) ) i. { Flags.key_5=1; ii. Flags.key_1=0; Flags.key_6=0; Flags.key_7=0; Flags.key_8=0; Flags.key_9=0; Flags.key_13=0; b. led_5_on; save_urmod_fram(); c. led_1_off; led_6_off; led_7_off; led_8_off; led_9_off; led_13_off; clear_4x4(); } else 213. void main(void) 214. { 215. SET_VECTOR(TIMER0,timer0); 216. SET_VECTOR(DMA,dma); 217. SET_VECTOR(UART0_RX,uart0_rx); 218. DI(); a. init_ports(); b. init_sfr(); 219. EI(); 220. wdi_reset(); 221. test_led(); 222. load_urmod_fram(); 223. init_UART0(); 224. while (1) 225. { 226. wdi_reset(); 227. analizkey(); 228. wdi_reset(); 229. uart_tx_state(); 230. } 231. } |
![]() |
![]() |