Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2012, 20:16   #1
dimas_a
Новичок
Джуниор
 
Регистрация: 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. }
dimas_a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц