1 |   //***************************************************************************** |
2 |   // |
3 |   //  File  Name    :  'keyboard.c' |
4 |   //  Title                :  Itronove  hodiny  |
5 |   #define  __PIC18F8720A__ |
6 |   //  Author              :  http://www.prochazka.zde.cz  -&rsaquo   hacesoft  2017 |
7 |   //  Created            :  05-05-2017,  15:08 |
8 |   //  Revised            :  25-08-2017,  11:27 |
9 |   //  Version            :  1.0 |
10 |   //  Target  MCU   :  PIC  18F8720 |
11 |   // |
12 |   //  This  code  is  distributed  under  the  GNU  Public  License |
13 |   //  Vsechny  informace  jsou  zahrnuty  pod  GPL  licenci,  pokud  není  explicitne  uveden  jiný  typ  licence. |
14 |   //  Pouzivání  techto  stránek  ke  komercním  úcelum  lze  jen  se  souhlasem  autora. |
15 |   //  Vsechna  práva  vyhrazena  (c)  1997  -  2017  hacesoft. |
16 |   // |
17 |   //***************************************************************************** |
18 |   //***************************************************************************** |
19 |   /* |
20 |      stací  porovnávat  aktuální  stav  tlacítka  s  predchozím  stavem. |
21 |   |
22 |   A  to  zpravidla  tak,  ze  si  udaláta  dva  (bitové)  promenné  (dva  bity  pro  kazdé  tlacítko)  BUTTON  a  BTNBLOCK.  |
23 |   Pokud  je  zjisteno  stisknuté  tl.  (které  zároven  není  blokováno),  nastaví  BUTTON  i  BTNBLOCK  do  log  1.  |
24 |   BUTTON  je  potom  flag  pro  program,  který  resí  a  obsluhuje  tlacítka.  Po  prectení  flagu  jej  hned  nulujeme,  |
25 |   zatímco  BTNBLOCK  (interní  stavová  promenná  zustává  v  1).  BUTTON  je  tedy  vlastne  signalizace  události  STISKU  tlacítka. |
26 |   V  prípade,  ze  je  tlacítko  blokované  (BTNBLOCK==1)  a  je  zjisteno  jeho  uvolnení,  resetujte  jako  BUTTON  tak  BTNBLOCK. |
27 |     |
28 |   if  ((TLAC_STISKNUTO)&&(!BTNBLOCK))  {  BUTTON=1;  BTNBLOCK=1;  } |
29 |   if  ((!TLAC_STISKNUTO)&&(BTNBLOCK))  {  BUTTON=0;  BTNBLOCK=0;  } |
30 |   |
31 |     Je  pom?rn?  zrejmé,  ze  pro  kazdé  dalsí  tlacítko  jsou  potrebné  dalsí  dve  bitové  promenné  a  dve  samostané  podmínky.  Tyto  podmínky  se  pak  volají  v  prerusení  od  casovace  a  to  |
32 |     jednou  za  kazdých  cca  10-20ms.  Ne  víc,  ne  mín. |
33 |   |
34 |   V  tele  programu  se  potom  pouze  tázete,  bylo-li  stisknuto  tlacítk  a  pokud  ano,  pouze  smazete  príslusný  flag.  Tento  obsluzný  kód  (ke  kazdému  tlacítku)  se  muze  volat  libovolnekrát  za  sekundu.  |
35 |     Flag  BUTTON  se  nastaví  pouze  jedinkrát  pri  STISKU  tlacítka.  Funkce  obsluhy  cudlíku  se  provede  pouze  JEDNOU  pri  stisku  tlacítka.  |
36 |   |
37 |   if  (BUTTON)  { |
38 |      BUTTON=0; |
39 |      Proved_Obsluhu_Stisku_Cudliku(); |
40 |   } |
41 |     |
42 |   #define  TLAC_STISKNUTO  ((PIND  &  (1 &lsaquo &lsaquo   PD2))  ==  0) |
43 |   |
44 |   |
45 |   KÓD:  VYBRA?  V?ETKO |
46 |   volatile  uint8_t  BTNBLOCK=0; |
47 |   volatile  uint8_t  BUTTON=0; |
48 |   |
49 |   |
50 |   KÓD:  VYBRA?  V?ETKO |
51 |   ISR(TIMER1_COMPA_vect){ |
52 |   |
53 |   if  ((TLAC_STISKNUTO)&&(!BTNBLOCK))  {  BUTTON=1;  BTNBLOCK=1;  } |
54 |   if  ((!TLAC_STISKNUTO)&&(BTNBLOCK))  {  BUTTON=0;  BTNBLOCK=0;  }         |
55 |   } |
56 |   |
57 |   |
58 |   KÓD:  VYBRA?  V?ETKO |
59 |   while(1) |
60 |   if  (BUTTON)  { |
61 |      BUTTON=0; |
62 |   nejaka  akcia  ; |
63 |   |
64 |     */ |
65 |   |
66 |   #include &lsaquo xc.h&rsaquo |
67 |   #include  "hsv.h" |
68 |   #include &lsaquo stddef.h&rsaquo   //nefinuje  NULL |
69 |   #include  "i2c.h" |
70 |   #include  "rtc.h" |
71 |   #include  "keyboard.h" |
72 |   #include  "display.h" |
73 |   #include  "ledI2C.h" |
74 |   #include  "eeprom.h" |
75 |   |
76 |   //***************************************************************************** |
77 |   void  init_keyboard_PCA955PW  (void){ |
78 |        __delay_ms(2); |
79 |        I2C_Start(_HW); |
80 |        __delay_ms(2); |
81 |        I2C_Write(_HW,adress_keyboard_write);  |
82 |        __delay_ms(2); |
83 |        I2C_Write(_HW,Polarity_Inversion_Port_0); |
84 |        __delay_ms(2); |
85 |        I2C_Write(_HW,0xff); |
86 |        __delay_ms(2); |
87 |        I2C_Write(_HW,0xff); |
88 |        __delay_ms(2); |
89 |        I2C_ReStart(_HW); |
90 |        __delay_ms(2); |
91 |        I2C_Write(_HW,adress_keyboard_write);  |
92 |        __delay_ms(2); |
93 |        I2C_Write(_HW,Configuration_Port_0); |
94 |        __delay_ms(2); |
95 |        I2C_Write(_HW,0xff); |
96 |        __delay_ms(2); |
97 |        I2C_Write(_HW,0xff); |
98 |        __delay_ms(2); |
99 |        I2C_Stop(_HW); |
100 |        __delay_ms(2); |
101 |         |
102 |       |
103 |        _StruscReadKeyboard.nOK_loop  =  0; |
104 |        _StruscReadKeyboard.position_menu  =  0; |
105 |        _StruscReadKeyboard.DT_blik  =  1; |
106 |        _StruscReadKeyboard.DT_blik_Loop  =  0; |
107 |        _StruscReadKeyboard._SpeedFlag  =  0; |
108 |        _StruscReadKeyboard._SignalButtom  =  0; |
109 |   } |
110 |   //***************************************************************************** |
111 |   void  Read_keyboard_PCA955PW  (void){ |
112 |        GIE  =  0;         //  Global  interrupt  stopped |
113 |        __delay_ms(1); |
114 |        I2C_Start_PCA955PW(); |
115 |        I2C_Write_PCA955PW(adress_keyboard_write);  |
116 |        I2C_Write_PCA955PW(Input_Port_0); |
117 |        I2C_ReStart_PCA955PW(); |
118 |        I2C_Write_PCA955PW(adress_keyboard_read);  |
119 |        _StruscReadKeyboard._Input_Port_0  =  I2C_Read_PCA955PW(ACKNOWLEDGE); |
120 |        _StruscReadKeyboard._Input_Port_1  =  I2C_Read_PCA955PW(NOT_ACKNOWLEDGE); |
121 |        I2C_Stop_PCA955PW(); |
122 |        |
123 |        GIE  =  1;         //  Global  interrupt  enable |
124 |        if  ((TL_OK)&&(!_BTNBLOCKlo._bit.TL_OK_BTNBLOCK)){  _BUTTON._bit.TL_OK_BUTTON  =  1;  _BTNBLOCKlo._bit.TL_OK_BTNBLOCK  =  1;} |
125 |       if  ((!TL_OK)&&(_BTNBLOCKlo._bit.TL_OK_BTNBLOCK)){  _BUTTON._bit.TL_OK_BUTTON  =  0;  _BTNBLOCKlo._bit.TL_OK_BTNBLOCK  =  0;} |
126 |       |
127 |       if  ((TL_LEFT)&&(!_BTNBLOCKlo._bit.TL_LEFT_BTNBLOCK)){  _BUTTON._bit.TL_LEFT_BUTTON  =  1;  _BTNBLOCKlo._bit.TL_LEFT_BTNBLOCK  =  1;} |
128 |       if  ((!TL_LEFT)&&(_BTNBLOCKlo._bit.TL_LEFT_BTNBLOCK)){  _BUTTON._bit.TL_LEFT_BUTTON  =  0;  _BTNBLOCKlo._bit.TL_LEFT_BTNBLOCK  =  0;} |
129 |       |
130 |       if  ((TL_RIGHT)&&(!_BTNBLOCKlo._bit.TL_RIGHT_BTNBLOCK)){  _BUTTON._bit.TL_RIGHT_BUTTON  =  1;  _BTNBLOCKlo._bit.TL_RIGHT_BTNBLOCK  =  1;} |
131 |       if  ((!TL_RIGHT)&&(_BTNBLOCKlo._bit.TL_RIGHT_BTNBLOCK)){  _BUTTON._bit.TL_RIGHT_BUTTON  =  0;  _BTNBLOCKlo._bit.TL_RIGHT_BTNBLOCK  =  0;} |
132 |       |
133 |       if  ((TL_UP)&&(!_BTNBLOCKlo._bit.TL_UP_BTNBLOCK)){  _BUTTON._bit.TL_UP_BUTTON  =  1;  _BTNBLOCKlo._bit.TL_UP_BTNBLOCK  =  1;} |
134 |       if  ((!TL_UP)&&(_BTNBLOCKlo._bit.TL_UP_BTNBLOCK)){  _BUTTON._bit.TL_UP_BUTTON  =  0;  _BTNBLOCKlo._bit.TL_UP_BTNBLOCK  =  0;} |
135 |       |
136 |       if  ((TL_DOWN)&&(!_BTNBLOCKlo._bit.TL_DOWN_BTNBLOCK)){  _BUTTON._bit.TL_DOWN_BUTTON  =  1;  _BTNBLOCKlo._bit.TL_DOWN_BTNBLOCK  =  1;} |
137 |       if  ((!TL_DOWN)&&(_BTNBLOCKlo._bit.TL_DOWN_BTNBLOCK)){  _BUTTON._bit.TL_DOWN_BUTTON  =  0;  _BTNBLOCKlo._bit.TL_DOWN_BTNBLOCK  =  0;} |
138 |   } |
139 |   //***************************************************************************** |
140 |   void  Menu_Keyboard  (void){ |
141 |        if  (_BUTTON._bit.TL_DOWN_BUTTON)  {//show  datum |
142 |            _BUTTON._bit.TL_DOWN_BUTTON  =  0; |
143 |            ShowDate(); |
144 |        } |
145 |        if  (_BUTTON._bit.TL_OK_BUTTON)  { |
146 |            _StruscReadKeyboard.nOK_loop  =  _StruscReadKeyboard.nOK_loop  +  1; |
147 |            if  (_StruscReadKeyboard.nOK_loop  ==  _Delka_stisku_tlacitka_DolniMer){//delka  stisku  3  sec. |
148 |                _StruscReadKeyboard.nOK_loop  =  0; |
149 |                _BUTTON._bit.TL_OK_BUTTON  =  0; |
150 |                ClearDisplay(); |
151 |                Edit(); |
152 |            } |
153 |        } |
154 |        else  { |
155 |            _StruscReadKeyboard.nOK_loop  =  0; |
156 |             _BUTTON._bit.TL_OK_BUTTON  =  0;} |
157 |   } |
158 |   //***************************************************************************** |
159 |   void  Edit  (void){ |
160 |        for(;_StruscReadKeyboard.nOK_loop  ==  0;){//menu |
161 |            __delay_ms(_menuLoop); |
162 |            if  (_BUTTON._bit.TL_OK_BUTTON)  { |
163 |                _StruscReadKeyboard.nOK_EndLoop  =  _StruscReadKeyboard.nOK_EndLoop  +  1; |
164 |                if  (_StruscReadKeyboard.nOK_EndLoop  ==  254){_StruscReadKeyboard.nOK_EndLoop  =  255;}//korekce  preteceni... |
165 |                if  (_StruscReadKeyboard.nOK_EndLoop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
166 |                    _StruscReadKeyboard.nOK_loop  =  1;  //ukonceni  edit  menu |
167 |                   _BUTTON._bit.TL_OK_BUTTON  =  0; |
168 |                    _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
169 |                    _StruscReadKeyboard.nOK_EndLoop  =  0; |
170 |                } |
171 |            } |
172 |            else  { |
173 |                if  (_StruscReadKeyboard.nOK_EndLoop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nOK_EndLoop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//potvrzeni  funkce.  Vnoreni  do  podmenu |
174 |                    _StruscReadKeyboard.nOK_SubMenuLoop  =  1; |
175 |                } |
176 |                _StruscReadKeyboard.nOK_EndLoop  =  0; |
177 |                _BUTTON._bit.TL_OK_BUTTON  =  0; |
178 |            } |
179 |            //********************************************************************* |
180 |            //  kod  editace  a  nastaveni  hodin |
181 |            IndikaceMenu(); |
182 |            switch  (_StruscReadKeyboard.position_menu){ |
183 |                    |
184 |                case  0  ://editace  casu  |
185 |                    if  (_StruscReadKeyboard.nOK_SubMenuLoop  ==  1){//editace  submenu |
186 |                        _BUTTON._bit.TL_OK_BUTTON  =  0; |
187 |                        Edit_Time(); |
188 |                        _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
189 |                        _StruscReadKeyboard.nOK_EndLoop  =  0; |
190 |                    } |
191 |                  break; |
192 |   |
193 |                case  1  ://editace  datumu  |
194 |                    if  (_StruscReadKeyboard.nOK_SubMenuLoop  ==  1){//editace  submenu |
195 |                        _BUTTON._bit.TL_OK_BUTTON  =  0; |
196 |                        Edit_Datumu(); |
197 |                        _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
198 |                    } |
199 |                  break; |
200 |                  |
201 |                 case  2  ://editace  podsvetleni |
202 |                     if  (_StruscReadKeyboard.nOK_SubMenuLoop  ==  1){//editace  submenu |
203 |                         _BUTTON._bit.TL_OK_BUTTON  =  0; |
204 |                        Edit_Podsvetleni(); |
205 |                        _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
206 |                    } |
207 |                  break; |
208 |                  |
209 |                 case  3  ://zobrazeni  teploty  |
210 |                     ShowTemp(); |
211 |                  break; |
212 |   |
213 |                default  ://default...asi  je  neco  spatne  |
214 |                    ShowErr(); |
215 |                 break; |
216 |            }  |
217 |            //  kod  pro  posouvani  v  menu  funkci  ...  doprava  doleva |
218 |            |
219 |            if  (_BUTTON._bit.TL_LEFT_BUTTON)  { |
220 |                _BUTTON._bit.TL_LEFT_BUTTON  =  0; |
221 |                _StruscReadKeyboard.position_menu  =  (unsigned)  _StruscReadKeyboard.position_menu  -  1; |
222 |                if  (_StruscReadKeyboard.position_menu  ==  255){ |
223 |                    _StruscReadKeyboard.position_menu  =  _end_menu; |
224 |                } |
225 |            } |
226 |            |
227 |            if  (_BUTTON._bit.TL_RIGHT_BUTTON)  { |
228 |                _BUTTON._bit.TL_RIGHT_BUTTON  =  0; |
229 |                _StruscReadKeyboard.position_menu  =(unsigned)  _StruscReadKeyboard.position_menu  +  1; |
230 |                if  (_StruscReadKeyboard.position_menu &rsaquo =  (_end_menu  +  1)){ |
231 |                    _StruscReadKeyboard.position_menu  =  0; |
232 |                } |
233 |            } |
234 |            |
235 |            |
236 |        } |
237 |   } |
238 |   //***************************************************************************** |
239 |   void  IndikaceMenu  (void){ |
240 |        //funkce  indikuje  editovany  udaj...pomoci  blikani  patricne  desetinne  tecky |
241 |        |
242 |        _StruscReadKeyboard.DT_blik_Loop  =  (unsigned)_StruscReadKeyboard.DT_blik_Loop  +  1; |
243 |        if  (_StruscReadKeyboard.DT_blik_Loop  ==  _change_DT_Const){//provede  se  zmena  stavu  DT |
244 |            _StruscReadKeyboard.DT_blik_Loop  =  0; |
245 |            DTstatus(); |
246 |        } |
247 |        ClearSetDT();//Smaze  vsechny  nastavene  DT  a  opet  je  nastavi |
248 |        switch  (_StruscReadKeyboard.position_menu){ |
249 |   |
250 |            case  0  ://editace  casu |
251 |                ClearDisplay(); |
252 |                if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
253 |                    BitSet(TTL_Hour_hiD_LAT,  TTL_Segment_DT_D); |
254 |                } |
255 |              break; |
256 |   |
257 |            case  1  ://editace  datumu  |
258 |                ClearDisplay(); |
259 |                if  (_StruscReadKeyboard.DT_blik  ==1)  { |
260 |                    BitSet(TTL_Hour_loE_LAT,  TTL_Segment_DT_E); |
261 |                } |
262 |              break; |
263 |   |
264 |             case  2  ://editace  podsvetleni |
265 |                 ClearDisplay(); |
266 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
267 |                    BitSet(TTL_Minut_hiH_LAT,  TTL_Segment_DT_H); |
268 |                } |
269 |              break; |
270 |                  |
271 |              case  3  ://zobrazeni  teploty  |
272 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
273 |                    BitSet(TTL_Minut_loJ_LAT,  TTL_Segment_DT_J); |
274 |                } |
275 |              break; |
276 |   |
277 |              case  4  ://reserve |
278 |                  ClearDisplay(); |
279 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
280 |                    BitSet(TTL_Second_hiF_LAT,  TTL_Segment_DT_F); |
281 |                } |
282 |              break; |
283 |   |
284 |              case  5  ://reserve |
285 |                  ClearDisplay(); |
286 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
287 |                    BitSet(TTL_SecondLoC_LAT,  TTL_Segment_DT_C); |
288 |                } |
289 |              break; |
290 |   |
291 |            default  ://default...asi  je  neco  spatne  |
292 |                ShowErr(); |
293 |             break; |
294 |        }   |
295 |   } |
296 |   //***************************************************************************** |
297 |   void  DTstatus  (void){ |
298 |        if  (_StruscReadKeyboard.DT_blik  ==  0){//DT  nesviti |
299 |            _StruscReadKeyboard.DT_blik  =  1; |
300 |        } |
301 |        else  {//DT  sviti |
302 |            _StruscReadKeyboard.DT_blik  =  0; |
303 |        } |
304 |   } |
305 |   //***************************************************************************** |
306 |   void  ClearSetDT  (void){ |
307 |        BitClear(TTL_Hour_hiD_LAT,  TTL_Segment_DT_D); |
308 |        BitClear(TTL_Hour_loE_LAT,  TTL_Segment_DT_E); |
309 |        |
310 |        BitClear(TTL_Minut_hiH_LAT,  TTL_Segment_DT_H); |
311 |        BitClear(TTL_Minut_loJ_LAT,  TTL_Segment_DT_J); |
312 |        |
313 |        BitClear(TTL_Second_hiF_LAT,  TTL_Segment_DT_F); |
314 |        BitClear(TTL_SecondLoC_LAT,  TTL_Segment_DT_C); |
315 |   } |
316 |   //***************************************************************************** |
317 |   void  _initInterrupt(void){ |
318 |        BitSet(tRB2_INT2,  INT2);     //Nastavi  RB2/INT2  jako  vstupni  pin |
319 |        BitClear(RB2_INT2,  INT2);  //vynuluje  pripadnou  vystupni  hodnotu |
320 |        INTEDG2  =  0; |
321 |        //bit  4  INTEDG2:  External  Interrupt  2  Edge  Select  bit |
322 |            //1  =  Interrupt  on  rising  edge |
323 |            //0  =  Interrupt  on  falling  edge |
324 |        INT2IE  =  1; |
325 |        //bit  4  INT2IE:  INT2  External  Interrupt  Enable  bit |
326 |        //     1  =  Enables  the  INT2  external  interrupt |
327 |        //     0  =  Disables  the  INT2  external  interrupt |
328 |        |
329 |        INT2IP  =  1; |
330 |        //bit  7  INT2IP:  INT2  External  Interrupt  Priority  bit |
331 |        //     1  =  High  priority |
332 |        //     0  =  Low  priority |
333 |        |
334 |        INT2IF  =  0; |
335 |        //bit  1  INT2IF:  INT2  External  Interrupt  Flag  bit |
336 |        //     1  =  The  INT2  external  interrupt  occurred  (must  be  cleared  in  software) |
337 |        //     0  =  The  INT2  external  interrupt  did  not  occur |
338 |        GIE  =  1;         //  Global  interrupt  enable |
339 |       } |
340 |   //***************************************************************************** |
341 |   void  interrupt  tc_int  (void){ |
342 |        //  interrupt  function   |
343 |        if((INT2IF  ==  _true)  &&  (INT2IE  ==  _true)){  //preruseni  od  INT2   |
344 |            INT2IF  =  0;                              //clear  INT2  interupt |
345 |            //BitSet(TTL_SecondLoC_LAT,  TTL_Segment_DT_C); |
346 |            Read_keyboard_PCA955PW();                //read  keyboard |
347 |        } |
348 |   } |
349 |   //***************************************************************************** |
350 |   void  Edit_Time  (void){ |
351 |        _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
352 |        for(;_StruscReadKeyboard.nOK_SubMenuLoop  ==  0;){//SubMenu |
353 |            __delay_ms(_menuLoop  ); |
354 |            if  (_BUTTON._bit.TL_OK_BUTTON)  { |
355 |                _StruscReadKeyboard.nOK_EndLoop  =  _StruscReadKeyboard.nOK_EndLoop  +  1; |
356 |                if  (_StruscReadKeyboard.nOK_EndLoop  ==  254){_StruscReadKeyboard.nOK_EndLoop  =  255;}//korekce  preteceni... |
357 |                if  (_StruscReadKeyboard.nOK_EndLoop &rsaquo =  (_Delka_stisku_tlacitka_Max)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
358 |                    _StruscReadKeyboard.nOK_SubMenuLoop  =  1;  //ukonceni  edit  submenu |
359 |                   _BUTTON._bit.TL_OK_BUTTON  =  0; |
360 |                   _StruscReadKeyboard.nOK_EndLoop  =  0; |
361 |                   //kod  pro  ulozeni  editovanych  hodnot |
362 |                   SetTime(); |
363 |                } |
364 |            } |
365 |            else  { |
366 |                _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
367 |                _StruscReadKeyboard.nOK_EndLoop  =  0; |
368 |                _BUTTON._bit.TL_OK_BUTTON  =  0; |
369 |            } |
370 |            //********************************************************************* |
371 |            //  kod  editace  a  nastaveni  hodin |
372 |            IndikaceMenuTime(); |
373 |            switch  (_StruscReadKeyboard.position_sub_menu){ |
374 |                    |
375 |                case  0  ://editace  hodin |
376 |                   ChangeSegment  (&  _DateTimeDS3231.Hour_10,&  _DateTimeDS3231.Hour,  2,  3); |
377 |                  break; |
378 |   |
379 |                case  1  ://editace  minut |
380 |                   ChangeSegment  (&_DateTimeDS3231.Minutes_10,&_DateTimeDS3231.Minutes,  5,  9); |
381 |                  break; |
382 |                  |
383 |                case  2  ://editace  sekund  |
384 |                  ChangeSegment  (&_DateTimeDS3231.Seconds_10,&_DateTimeDS3231.Seconds,  5,  9);  |
385 |                break; |
386 |                  |
387 |                default  ://default...asi  je  neco  spatne  |
388 |                    ShowErr(); |
389 |                break; |
390 |            }  |
391 |            //  kod  pro  posouvani  v  menu  funkci  ...  doprava  doleva |
392 |            if  (_BUTTON._bit.TL_LEFT_BUTTON)  { |
393 |                _BUTTON._bit.TL_LEFT_BUTTON  =  0; |
394 |                _StruscReadKeyboard.position_sub_menu  =  (unsigned)  _StruscReadKeyboard.position_sub_menu  -  1; |
395 |                if  (_StruscReadKeyboard.position_sub_menu  ==  255){ |
396 |                    _StruscReadKeyboard.position_sub_menu  =  _end_menu_edit_time; |
397 |                } |
398 |            } |
399 |            |
400 |            if  (_BUTTON._bit.TL_RIGHT_BUTTON)  { |
401 |                _BUTTON._bit.TL_RIGHT_BUTTON  =  0; |
402 |                _StruscReadKeyboard.position_sub_menu  =(unsigned)  _StruscReadKeyboard.position_sub_menu  +  1; |
403 |                if  (_StruscReadKeyboard.position_sub_menu &rsaquo =  (_end_menu_edit_time  +  1)){ |
404 |                    _StruscReadKeyboard.position_sub_menu  =  0; |
405 |                } |
406 |            } |
407 |        } |
408 |   } |
409 |   //***************************************************************************** |
410 |   void  ChangeSegment  (uint8_t  *SegmentHi,  uint8_t  *SegmetLo,  uint8_t  MaxSegmentHi,  uint8_t  MaxSegmentLo){ |
411 |        if  (_BUTTON._bit.TL_UP_BUTTON  or  _BUTTON._bit.TL_DOWN_BUTTON)  {    |
412 |            if  (_BUTTON._bit.TL_UP_BUTTON){ |
413 |                _StruscReadKeyboard._SignalButtom  =  _UP_; |
414 |                if  (_StruscReadKeyboard._SpeedFlag  ==  1){//rychle  pocitani  nahoru,  tlacitko  UP  je  stisknute  a  porad  je  drzeno,  takze  se  jedna  o  autorepeat |
415 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
416 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
417 |                    *SegmetLo  =  *SegmetLo  +(unsigned)  1; |
418 |                    if  (*SegmetLo &rsaquo   9){//novy  rad |
419 |                        *SegmetLo  =  0; |
420 |                        *SegmentHi  =  *SegmentHi  +  (unsigned)1; |
421 |                    } |
422 |                   if  ((*SegmentHi &rsaquo   MaxSegmentHi  and   *SegmetLo  ==  0)  or  (*SegmentHi  ==  MaxSegmentHi  and  *SegmetLo &rsaquo   MaxSegmentLo)){ |
423 |                        *SegmentHi  =  0; |
424 |                        *SegmetLo  =  0; |
425 |                    } |
426 |                } |
427 |                else  { |
428 |                    _StruscReadKeyboard.nUpDown_Loop  =  _StruscReadKeyboard.nUpDown_Loop  +  1; |
429 |                    if  (_StruscReadKeyboard.nUpDown_Loop  ==  254){_StruscReadKeyboard.nUpDown_Loop  =  255;}//korekce  preteceni... |
430 |                    if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
431 |                        _StruscReadKeyboard._SpeedFlag  =  1; |
432 |                    } |
433 |                } |
434 |            } |
435 |            if  (_BUTTON._bit.TL_DOWN_BUTTON){ |
436 |                _StruscReadKeyboard._SignalButtom  =  _DOWN_; |
437 |                if  (_StruscReadKeyboard._SpeedFlag  ==  1){//rychle  pocitani  dolu,  tlacitko  DOWN  je  stisknute  a  porad  je  drzeno,  takze  se  jedna  o  autorepeat |
438 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
439 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
440 |                    *SegmetLo  =  *SegmetLo  -(unsigned)  1; |
441 |                    if  (*SegmetLo  ==  255){//novy  rad |
442 |                        *SegmetLo  =  9; |
443 |                        *SegmentHi  =  *SegmentHi  -  (unsigned)1; |
444 |                    } |
445 |                   if  (*SegmentHi  ==  255  and   *SegmetLo  ==  9){ |
446 |                        *SegmentHi  =  MaxSegmentHi; |
447 |                        *SegmetLo  =  MaxSegmentLo; |
448 |                    }    |
449 |                } |
450 |                else  { |
451 |                    _StruscReadKeyboard.nUpDown_Loop  =  _StruscReadKeyboard.nUpDown_Loop  +  1; |
452 |                    if  (_StruscReadKeyboard.nUpDown_Loop  ==  254){_StruscReadKeyboard.nUpDown_Loop  =  255;}//korekce  preteceni... |
453 |                    if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
454 |                        _StruscReadKeyboard._SpeedFlag  =  1; |
455 |                    } |
456 |                }  |
457 |            } |
458 |        } |
459 |        else  { |
460 |            if  (_StruscReadKeyboard._SignalButtom  ==  _UP_){ |
461 |                if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nUpDown_Loop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){ |
462 |                    //  tlacitko  UP  je  stisknuto  a  volneno,  tak  se  pricte  jen  jednou |
463 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
464 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
465 |                    *SegmetLo  =  *SegmetLo  +(unsigned)  1; |
466 |                    if  (*SegmetLo &rsaquo   9){//novy  rad |
467 |                        *SegmetLo  =  0; |
468 |                        *SegmentHi  =  *SegmentHi  +  (unsigned)1; |
469 |                    } |
470 |                   if  ((*SegmentHi &rsaquo   MaxSegmentHi  and   *SegmetLo  ==  0)  or  (*SegmentHi  ==  MaxSegmentHi  and  *SegmetLo &rsaquo   MaxSegmentLo)){ |
471 |                        *SegmentHi  =  0; |
472 |                        *SegmetLo  =  0; |
473 |                    }  |
474 |                 } |
475 |            } |
476 |            if  (_StruscReadKeyboard._SignalButtom  ==  _DOWN_){ |
477 |                 if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nUpDown_Loop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){ |
478 |                    //  tlacitko  DOWN  je  stisknuto  a  volneno,  tak  se  odecte  jen  jednou      |
479 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
480 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
481 |                    *SegmetLo  =  *SegmetLo  -(unsigned)  1; |
482 |                    if  (*SegmetLo  ==  255){//novy  rad |
483 |                        *SegmetLo  =  9; |
484 |                        *SegmentHi  =  *SegmentHi  -  (unsigned)1; |
485 |                    } |
486 |                   if  (*SegmentHi  ==  255  and   *SegmetLo  ==  9){ |
487 |                        *SegmentHi  =  MaxSegmentHi; |
488 |                        *SegmetLo  =  MaxSegmentLo; |
489 |                    }  |
490 |                } |
491 |            } |
492 |             //nulovani  vseho  co  zpusobuje  autorepeat  a  indikace  stisknuti  tlacitka |
493 |            _StruscReadKeyboard._SpeedFlag  =  0; |
494 |            _StruscReadKeyboard._SignalButtom  =  0; |
495 |            _StruscReadKeyboard.nUpDown_Loop  =  0; |
496 |            _BUTTON._bit.TL_UP_BUTTON  =  0;  |
497 |        } |
498 |   } |
499 |   //***************************************************************************** |
500 |   void  Edit_Datumu  (void){ |
501 |        _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
502 |        for(;_StruscReadKeyboard.nOK_SubMenuLoop  ==  0;){//SubMenu |
503 |            __delay_ms(_menuLoop  ); |
504 |            if  (_BUTTON._bit.TL_OK_BUTTON)  { |
505 |                _StruscReadKeyboard.nOK_EndLoop  =  _StruscReadKeyboard.nOK_EndLoop  +  1; |
506 |                if  (_StruscReadKeyboard.nOK_EndLoop  ==  254){_StruscReadKeyboard.nOK_EndLoop  =  255;}//korekce  preteceni... |
507 |                if  (_StruscReadKeyboard.nOK_EndLoop &rsaquo =  (_Delka_stisku_tlacitka_Max)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
508 |                    _StruscReadKeyboard.nOK_SubMenuLoop  =  1;  //ukonceni  edit  submenu |
509 |                   _BUTTON._bit.TL_OK_BUTTON  =  0; |
510 |                   _StruscReadKeyboard.nOK_EndLoop  =  0; |
511 |                   //kod  pro  ulozeni  editovanych  hodnot |
512 |                   SetDate();     |
513 |                } |
514 |            } |
515 |            else  { |
516 |                _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
517 |                _StruscReadKeyboard.nOK_EndLoop  =  0; |
518 |                _BUTTON._bit.TL_OK_BUTTON  =  0; |
519 |            } |
520 |            //********************************************************************* |
521 |            //  kod  editace  a  nastaveni  hodin |
522 |            IndikaceMenuDate(); |
523 |            switch  (_StruscReadKeyboard.position_sub_menu){ |
524 |                    |
525 |                case  0  ://editace  poradi  dne....Pondeli  je  1,  utery  je  2  atd |
526 |                    ChangeSegmentDat  (&  _DateTimeDS3231.Day,  NULL,  ConsDay); |
527 |                  break; |
528 |   |
529 |                case  1  ://editace  datumu |
530 |                    ChangeSegmentDat  (&_DateTimeDS3231.Date,  NULL,   ConsDate); |
531 |                  break; |
532 |                  |
533 |                 case  2  ://editace  cisla  mesice  |
534 |                    ChangeSegmentDat  (&_DateTimeDS3231.Month_Century,  NULL,   ConstMonth);  |
535 |                  break; |
536 |                  |
537 |                  case  3  ://editace  roku  |
538 |                    ChangeSegmentDat  (&_DateTimeDS3231.Year,  &_DateTimeDS3231.Month_Century,  ConstYear);  |
539 |                  break; |
540 |                  |
541 |                default  ://default...asi  je  neco  spatne  |
542 |                    ShowErr(); |
543 |                 break; |
544 |            }  |
545 |            //  kod  pro  posouvani  v  menu  funkci  ...  doprava  doleva |
546 |            if  (_BUTTON._bit.TL_LEFT_BUTTON)  { |
547 |                _BUTTON._bit.TL_LEFT_BUTTON  =  0; |
548 |                _StruscReadKeyboard.position_sub_menu  =  (unsigned)  _StruscReadKeyboard.position_sub_menu  -  1; |
549 |                if  (_StruscReadKeyboard.position_sub_menu  ==  255){ |
550 |                    _StruscReadKeyboard.position_sub_menu  =  _end_menu_edit_date; |
551 |                } |
552 |            } |
553 |            |
554 |            if  (_BUTTON._bit.TL_RIGHT_BUTTON)  { |
555 |                _BUTTON._bit.TL_RIGHT_BUTTON  =  0; |
556 |                _StruscReadKeyboard.position_sub_menu  =(unsigned)  _StruscReadKeyboard.position_sub_menu  +  1; |
557 |                if  (_StruscReadKeyboard.position_sub_menu &rsaquo =  (_end_menu_edit_date  +  1)){ |
558 |                    _StruscReadKeyboard.position_sub_menu  =  0; |
559 |                } |
560 |            } |
561 |        } |
562 |   } |
563 |   //***************************************************************************** |
564 |   void  ChangeSegmentDat  (uint8_t  *SegmentSource,  uint8_t  *Century,  uint16_t  MaxNumberSegment){ |
565 |        uint8_t  nBuffer; |
566 |        uint8_t  nBuffer10; |
567 |        if  (_BUTTON._bit.TL_UP_BUTTON  or  _BUTTON._bit.TL_DOWN_BUTTON)  {    |
568 |            if  (_BUTTON._bit.TL_UP_BUTTON){ |
569 |                _StruscReadKeyboard._SignalButtom  =  _UP_; |
570 |                if  (_StruscReadKeyboard._SpeedFlag  ==  1){//rychle  pocitani  nahoru,  tlacitko  UP  je  stisknute  a  porad  je  drzeno,  takze  se  jedna  o  autorepeat |
571 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
572 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
573 |                    switch  (MaxNumberSegment){ |
574 |                       case  ConsDay  ://editace  poradi  dne  v  tydnu  |
575 |                            *SegmentSource  =  *SegmentSource  +  (unsigned)  1; |
576 |                            if  (*SegmentSource  ==  8){*SegmentSource  =  1;} |
577 |                         break; |
578 |   |
579 |                       case  ConstMonth  ://editace  mesice  |
580 |                           nBuffer  =  *SegmentSource; |
581 |                           if  ((unsigned)((nBuffer  and  0b00010000)  ror  4)  ==  1){nBuffer  =  (unsigned)  nBuffer  +  10;} |
582 |                           BitClear  (nBuffer,  4); |
583 |                           nBuffer  =  nBuffer  +  (unsigned)  1; |
584 |                           switch  (nBuffer){ |
585 |                               case  10  : |
586 |                                   *SegmentSource  =  0; |
587 |                                    BitSet  (*SegmentSource,  4); |
588 |                                break; |
589 |   |
590 |                                case  13  : |
591 |                                    *SegmentSource  =  1;     |
592 |                                break; |
593 |   |
594 |                                default  ://default.  |
595 |                                    nBuffer  =  (unsigned)*SegmentSource  and  0b00010000;  //vytvorit  masku  5th  bytu |
596 |                                    BitClear  (*SegmentSource,  4); |
597 |                                    *SegmentSource  =  *SegmentSource  +  (unsigned)  1; |
598 |                                    *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer; |
599 |                                break;  |
600 |                           } |
601 |                         break; |
602 |   |
603 |                        case  ConsDate  ://editace  datuma  |
604 |                            nBuffer  =  *SegmentSource; |
605 |                            nBuffer10  =  *SegmentSource; |
606 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b00110000)  ror  4)  ; |
607 |                            BitClear  (nBuffer,  4); |
608 |                            BitClear  (nBuffer,  5); |
609 |                            nBuffer  =  nBuffer  +  (unsigned)  1; |
610 |                            if  (nBuffer  ==  10){ |
611 |                                *SegmentSource  =  0; |
612 |                                nBuffer10  =  nBuffer10  +  (unsigned)  1; |
613 |                                *SegmentSource  =  (unsigned)  nBuffer10  rol  4; |
614 |                            } |
615 |                            else  if  (nBuffer10  ==  3  and  nBuffer  ==  2){ |
616 |                                *SegmentSource  =  1; |
617 |                            } |
618 |   |
619 |                            else  { |
620 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b00110000;  //vytvorit  masku  5th  bytu |
621 |   |
622 |                                BitClear  (*SegmentSource,  4); |
623 |                                BitClear  (*SegmentSource,  5); |
624 |                                *SegmentSource  =  nBuffer; |
625 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
626 |                            } |
627 |                         break; |
628 |   |
629 |                         case  ConstYear  ://editace  roku  |
630 |                            nBuffer  =  *SegmentSource; |
631 |                            nBuffer10  =  *SegmentSource; |
632 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b11110000)  ror  4)  ; |
633 |                            BitClear  (nBuffer,  4); |
634 |                            BitClear  (nBuffer,  5); |
635 |                            BitClear  (nBuffer,  6); |
636 |                            BitClear  (nBuffer,  7); |
637 |                            nBuffer  =  nBuffer  +  (unsigned)  1; |
638 |                            if  (nBuffer  ==  10){ |
639 |                                *SegmentSource  =  0; |
640 |                                nBuffer10  =  nBuffer10  +  (unsigned)  1; |
641 |                                *SegmentSource  =  (unsigned)  nBuffer10  rol  4; |
642 |   |
643 |                                if  (nBuffer10  ==  10  and  nBuffer  ==  10){ |
644 |                                    *SegmentSource  =  0; |
645 |                                    nBuffer10  =  (unsigned)  *Century  and  0b10000000; |
646 |                                    if  (nBuffer10  ==  0){ |
647 |                                        BitSet  (*Century,  7); |
648 |                                    } |
649 |                                    else{ |
650 |                                        BitClear  (*Century,  7); |
651 |                                    } |
652 |                                } |
653 |                            } |
654 |                            else  { |
655 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b11110000;  //vytvorit  masku  5th  bytu |
656 |   |
657 |                                BitClear  (*SegmentSource,  4); |
658 |                                BitClear  (*SegmentSource,  5); |
659 |                                BitClear  (*SegmentSource,  6); |
660 |                                BitClear  (*SegmentSource,  7); |
661 |                                *SegmentSource  =  nBuffer; |
662 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
663 |                            } |
664 |   |
665 |                         break; |
666 |   |
667 |                       default  ://default...asi  je  neco  spatne  |
668 |                           ShowErr(); |
669 |                        break; |
670 |                   } |
671 |                } |
672 |                else  { |
673 |                    _StruscReadKeyboard.nUpDown_Loop  =  _StruscReadKeyboard.nUpDown_Loop  +  1; |
674 |                    if  (_StruscReadKeyboard.nUpDown_Loop  ==  254){_StruscReadKeyboard.nUpDown_Loop  =  255;}//korekce  preteceni... |
675 |                    if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
676 |                        _StruscReadKeyboard._SpeedFlag  =  1; |
677 |                    } |
678 |                } |
679 |            } |
680 |            if  (_BUTTON._bit.TL_DOWN_BUTTON){ |
681 |                _StruscReadKeyboard._SignalButtom  =  _DOWN_; |
682 |                if  (_StruscReadKeyboard._SpeedFlag  ==  1){//rychle  pocitani  dolu,  tlacitko  DOWN  je  stisknute  a  porad  je  drzeno,  takze  se  jedna  o  autorepeat |
683 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
684 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
685 |                    switch  (MaxNumberSegment){ |
686 |                        case  ConsDay  ://editace  poradi  dne  v  tydnu  |
687 |                            *SegmentSource  =  *SegmentSource  -  (unsigned)  1; |
688 |                            if  (*SegmentSource  ==  0){*SegmentSource  =  7;} |
689 |                           break; |
690 |                        case  ConstMonth  ://editace  mesice  |
691 |                           nBuffer  =  *SegmentSource; |
692 |                            nBuffer10  =  *SegmentSource; |
693 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b00010000)  ror  4)  ; |
694 |                            BitClear  (nBuffer,  4); |
695 |                            nBuffer  =  nBuffer  -  (unsigned)  1; |
696 |   |
697 |                           if  (nBuffer  ==  255){ |
698 |                               nBuffer10  =  (unsigned)*SegmentSource  and  0b10000000;  //vytvorit  masku  Century  BITu |
699 |                               *SegmentSource  =(unsigned)  0b00001001  or  nBuffer10;//nastavi  segmenty  na  0  a  9 |
700 |                            } |
701 |                            else  if  (nBuffer10  ==  0  and  nBuffer  ==  0){ |
702 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b10000000;  //vytvorit  masku  Century  BITu |
703 |                                *SegmentSource  =  (unsigned)0b00010010  or  nBuffer10;//nastavi  segmenty  na  1  a  2 |
704 |                            } |
705 |                            else  { |
706 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b10010000;  //vytvorit  masku  5th  bytu  +  Century  BIT |
707 |                                BitClear  (*SegmentSource,  4); |
708 |                                *SegmentSource  =  nBuffer; |
709 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
710 |                            } |
711 |                         break; |
712 |   |
713 |                        case  ConsDate  ://editace  datumu  |
714 |                            nBuffer  =  *SegmentSource; |
715 |                            nBuffer10  =  *SegmentSource; |
716 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b00110000)  ror  4)  ; |
717 |                            BitClear  (nBuffer,  4); |
718 |                            BitClear  (nBuffer,  5); |
719 |                            nBuffer  =  nBuffer  -  (unsigned)  1; |
720 |                            if  (nBuffer  ==  255){ |
721 |                                nBuffer10  =  nBuffer10  -  (unsigned)  1; |
722 |                                *SegmentSource  =  (unsigned)  (nBuffer10  rol  4)  or  9; |
723 |                            } |
724 |                            else  if  (nBuffer10  ==  0  and  nBuffer  ==  0){ |
725 |                                *SegmentSource  =  0b00110001;//nastavi  segmenty  na  3  a  1 |
726 |                            } |
727 |                            else  { |
728 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b00110000;  //vytvorit  masku  5th  bytu |
729 |   |
730 |                                BitClear  (*SegmentSource,  4); |
731 |                                BitClear  (*SegmentSource,  5); |
732 |                                *SegmentSource  =  nBuffer; |
733 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
734 |                            } |
735 |                         break; |
736 |                          |
737 |                        case  ConstYear  ://editace  roku  |
738 |                            nBuffer  =  *SegmentSource; |
739 |                            nBuffer10  =  *SegmentSource; |
740 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b11110000)  ror  4)  ; |
741 |                            BitClear  (nBuffer,  4); |
742 |                            BitClear  (nBuffer,  5); |
743 |                            BitClear  (nBuffer,  6); |
744 |                            BitClear  (nBuffer,  7); |
745 |                            nBuffer  =  nBuffer  -  (unsigned)  1; |
746 |                            if  (nBuffer  ==  0xff){ |
747 |                                nBuffer10  =  nBuffer10  -  (unsigned)  1; |
748 |                                *SegmentSource  =  (unsigned)  (nBuffer10  rol  4)  or  9; |
749 |                                if  (nBuffer10  ==  0xff  and  nBuffer  ==  0xff){ |
750 |                                    *SegmentSource  =  0b10011001;   //  9  +  9 |
751 |                                    nBuffer10  =(unsigned)  *Century  and  0b10000000; |
752 |                                    if  (nBuffer10  ==  0){ |
753 |                                        BitSet  (*Century,  7); |
754 |                                    } |
755 |                                    else{ |
756 |                                        BitClear  (*Century,  7); |
757 |                                    } |
758 |                                } |
759 |                            } |
760 |                            else  { |
761 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b11110000;  //vytvorit  masku  horni  poloviny  bytu |
762 |                                *SegmentSource  =  nBuffer; |
763 |                                BitClear  (*SegmentSource,  4); |
764 |                                BitClear  (*SegmentSource,  5); |
765 |                                BitClear  (*SegmentSource,  6); |
766 |                                BitClear  (*SegmentSource,  7); |
767 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
768 |                            } |
769 |                         break; |
770 |                         |
771 |                         default  ://default...asi  je  neco  spatne  |
772 |                           ShowErr(); |
773 |                        break;               |
774 |                    }   |
775 |                } |
776 |                else  { |
777 |                    _StruscReadKeyboard.nUpDown_Loop  =  _StruscReadKeyboard.nUpDown_Loop  +  1; |
778 |                    if  (_StruscReadKeyboard.nUpDown_Loop  ==  254){_StruscReadKeyboard.nUpDown_Loop  =  255;}//korekce  preteceni... |
779 |                    if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
780 |                        _StruscReadKeyboard._SpeedFlag  =  1; |
781 |                    } |
782 |                }  |
783 |            } |
784 |        } |
785 |        else  { |
786 |            if  (_StruscReadKeyboard._SignalButtom  ==  _UP_){ |
787 |                if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nUpDown_Loop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){ |
788 |                    //  tlacitko  UP  je  stisknuto  a  volneno,  tak  se  pricte  jen  jednou |
789 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
790 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
791 |                    switch  (MaxNumberSegment){ |
792 |                       case  ConsDay  ://editace  poradi  dne  v  tydnu  |
793 |                            *SegmentSource  =  *SegmentSource  +  (unsigned)  1; |
794 |                            if  (*SegmentSource  ==  8){*SegmentSource  =  1;} |
795 |                         break; |
796 |   |
797 |                       case  ConstMonth  ://editace  mesice  |
798 |                           nBuffer  =  *SegmentSource; |
799 |                           if  ((unsigned)((nBuffer  and  0b00010000)  ror  4)  ==  1){nBuffer  =  (unsigned)  nBuffer  +  10;} |
800 |                           BitClear  (nBuffer,  4); |
801 |                           nBuffer  =  nBuffer  +  (unsigned)  1; |
802 |                           switch  (nBuffer){ |
803 |                               case  10  : |
804 |                                   *SegmentSource  =  0; |
805 |                                    BitSet  (*SegmentSource,  4); |
806 |                                break; |
807 |   |
808 |                                case  13  : |
809 |                                    *SegmentSource  =  1;     |
810 |                                break; |
811 |   |
812 |                                default  ://default.  |
813 |                                    nBuffer  =  (unsigned)*SegmentSource  and  0b00010000;  //vytvorit  masku  5th  bytu |
814 |                                    BitClear  (*SegmentSource,  4); |
815 |                                    *SegmentSource  =  *SegmentSource  +  (unsigned)  1; |
816 |                                    *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer; |
817 |                                break;  |
818 |                           } |
819 |                         break; |
820 |   |
821 |                        case  ConsDate  ://editace  datumu  |
822 |                            nBuffer  =  *SegmentSource; |
823 |                            nBuffer10  =  *SegmentSource; |
824 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b00110000)  ror  4)  ; |
825 |                            BitClear  (nBuffer,  4); |
826 |                            BitClear  (nBuffer,  5); |
827 |                            nBuffer  =  nBuffer  +  (unsigned)  1; |
828 |                            if  (nBuffer  ==  10){ |
829 |                                *SegmentSource  =  0; |
830 |                                nBuffer10  =  nBuffer10  +  (unsigned)  1; |
831 |                                *SegmentSource  =  (unsigned)  nBuffer10  rol  4; |
832 |                            } |
833 |                            else  if  (nBuffer10  ==  3  and  nBuffer  ==  2){ |
834 |                                *SegmentSource  =  1; |
835 |                            } |
836 |                            else  { |
837 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b00110000;  //vytvorit  masku  5th  bytu |
838 |                                BitClear  (*SegmentSource,  4); |
839 |                                BitClear  (*SegmentSource,  5); |
840 |                                *SegmentSource  =  nBuffer; |
841 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
842 |                            } |
843 |                         break; |
844 |   |
845 |                         case  ConstYear  ://editace  roku  |
846 |                            nBuffer  =  *SegmentSource; |
847 |                            nBuffer10  =  *SegmentSource; |
848 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b11110000)  ror  4)  ; |
849 |                            BitClear  (nBuffer,  4); |
850 |                            BitClear  (nBuffer,  5); |
851 |                            BitClear  (nBuffer,  6); |
852 |                            BitClear  (nBuffer,  7); |
853 |                            nBuffer  =  nBuffer  +  (unsigned)  1; |
854 |                            if  (nBuffer  ==  10){ |
855 |                                *SegmentSource  =  0; |
856 |                                nBuffer10  =  nBuffer10  +  (unsigned)  1; |
857 |                                *SegmentSource  =  (unsigned)  nBuffer10  rol  4; |
858 |                                if  (nBuffer10  ==  10  and  nBuffer  ==  10){ |
859 |                                    *SegmentSource  =  0; |
860 |                                    nBuffer10  =  (unsigned)*Century  and  0b10000000; |
861 |                                    if  (nBuffer10  ==  0){ |
862 |                                        BitSet  (*Century,  7); |
863 |                                    } |
864 |                                    else{ |
865 |                                        BitClear  (*Century,  7); |
866 |                                    } |
867 |                                } |
868 |                            } |
869 |                            else  { |
870 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b11110000;  //vytvorit  masku  5th  bytu |
871 |                                BitClear  (*SegmentSource,  4); |
872 |                                BitClear  (*SegmentSource,  5); |
873 |                                BitClear  (*SegmentSource,  6); |
874 |                                BitClear  (*SegmentSource,  7); |
875 |                                *SegmentSource  =  nBuffer; |
876 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
877 |                            } |
878 |                         break; |
879 |   |
880 |                       default  ://default...asi  je  neco  spatne  |
881 |                           ShowErr(); |
882 |                        break; |
883 |                    } |
884 |                 } |
885 |            } |
886 |            if  (_StruscReadKeyboard._SignalButtom  ==  _DOWN_){ |
887 |                 if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nUpDown_Loop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){ |
888 |                    //  tlacitko  DOWN  je  stisknuto  a  volneno,  tak  se  odecte  jen  jednou      |
889 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
890 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
891 |                    switch  (MaxNumberSegment){ |
892 |                        case  ConsDay  ://editace  poradi  dne  v  tydnu  |
893 |                            *SegmentSource  =  *SegmentSource  -  (unsigned)  1; |
894 |                            if  (*SegmentSource  ==  0){*SegmentSource  =  7;} |
895 |                           break; |
896 |                        case  ConstMonth  ://editace  mesice  |
897 |                           nBuffer  =  *SegmentSource; |
898 |                            nBuffer10  =  *SegmentSource; |
899 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b00010000)  ror  4)  ; |
900 |                            BitClear  (nBuffer,  4); |
901 |                            nBuffer  =  nBuffer  -  (unsigned)  1; |
902 |   |
903 |                           if  (nBuffer  ==  255){ |
904 |                               nBuffer10  =  (unsigned)*SegmentSource  and  0b10000000;  //vytvorit  masku  Century  BITu |
905 |                               *SegmentSource  =  (unsigned)0b00001001  or  nBuffer10;//nastavi  segmenty  na  0  a  9 |
906 |                            } |
907 |                            else  if  (nBuffer10  ==  0  and  nBuffer  ==  0){ |
908 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b10000000;  //vytvorit  masku  Century  BITu |
909 |                                *SegmentSource  =  (unsigned)0b00010010  or  nBuffer10;//nastavi  segmenty  na  1  a  2 |
910 |                            } |
911 |                            else  { |
912 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b10010000;  //vytvorit  masku  5th  bytu  +  Century  BIT |
913 |                                BitClear  (*SegmentSource,  4); |
914 |                                *SegmentSource  =  nBuffer; |
915 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
916 |                            } |
917 |                         break; |
918 |   |
919 |                        case  ConsDate  ://editace  datumu  |
920 |                            nBuffer  =  *SegmentSource; |
921 |                            nBuffer10  =  *SegmentSource; |
922 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b00110000)  ror  4)  ; |
923 |                            BitClear  (nBuffer,  4); |
924 |                            BitClear  (nBuffer,  5); |
925 |                            nBuffer  =  nBuffer  -  (unsigned)  1; |
926 |                            if  (nBuffer  ==  255){ |
927 |                                nBuffer10  =  nBuffer10  -  (unsigned)  1; |
928 |                                *SegmentSource  =  (unsigned)  (nBuffer10  rol  4)  or  9; |
929 |                            } |
930 |                            else  if  (nBuffer10  ==  0  and  nBuffer  ==  0){ |
931 |                                *SegmentSource  =  0b00110001;//nastavi  segmenty  na  3  a  1 |
932 |                            } |
933 |                            else  { |
934 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b00110000;  //vytvorit  masku  5th  bytu |
935 |   |
936 |                                BitClear  (*SegmentSource,  4); |
937 |                                BitClear  (*SegmentSource,  5); |
938 |                                *SegmentSource  =  nBuffer; |
939 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
940 |                            } |
941 |                         break; |
942 |                          |
943 |                        case  ConstYear  ://editace  roku  |
944 |                            nBuffer  =  *SegmentSource; |
945 |                            nBuffer10  =  *SegmentSource; |
946 |                            nBuffer10  =  (unsigned)((nBuffer10  and  0b11110000)  ror  4)  ; |
947 |                            BitClear  (nBuffer,  4); |
948 |                            BitClear  (nBuffer,  5); |
949 |                            BitClear  (nBuffer,  6); |
950 |                            BitClear  (nBuffer,  7); |
951 |                            nBuffer  =  nBuffer  -  (unsigned)  1; |
952 |                            if  (nBuffer  ==  0xff){ |
953 |                                nBuffer10  =  nBuffer10  -  (unsigned)  1; |
954 |                                *SegmentSource  =  (unsigned)  (nBuffer10  rol  4)  or  9; |
955 |                                if  (nBuffer10  ==  0xff  and  nBuffer  ==  0xff){ |
956 |                                    *SegmentSource  =  0b10011001;   //  9  +  9 |
957 |                                    nBuffer10  =  (unsigned)*Century  and  0b10000000; |
958 |                                    if  (nBuffer10  ==  0){ |
959 |                                        BitSet  (*Century,  7); |
960 |                                    } |
961 |                                    else{ |
962 |                                        BitClear  (*Century,  7); |
963 |                                    } |
964 |                                } |
965 |                            } |
966 |                            else  { |
967 |                                nBuffer10  =  (unsigned)*SegmentSource  and  0b11110000;  //vytvorit  masku  horni  poloviny  bytu |
968 |                                *SegmentSource  =  nBuffer; |
969 |                                BitClear  (*SegmentSource,  4); |
970 |                                BitClear  (*SegmentSource,  5); |
971 |                                BitClear  (*SegmentSource,  6); |
972 |                                BitClear  (*SegmentSource,  7); |
973 |                                *SegmentSource  =  (unsigned)*SegmentSource  or  nBuffer10; |
974 |                            } |
975 |                        break; |
976 |                         |
977 |                        default  ://default...asi  je  neco  spatne  |
978 |                           ShowErr(); |
979 |                        break;                      |
980 |                    } |
981 |                } |
982 |            } |
983 |             //nulovani  vseho  co  zpusobuje  autorepeat  a  indikace  stisknuti  tlacitka |
984 |            _StruscReadKeyboard._SpeedFlag  =  0; |
985 |            _StruscReadKeyboard._SignalButtom  =  0; |
986 |            _StruscReadKeyboard.nUpDown_Loop  =  0; |
987 |            _BUTTON._bit.TL_UP_BUTTON  =  0;  |
988 |        } |
989 |   } |
990 |   //***************************************************************************** |
991 |   void  ShowDate  (void){ |
992 |        __delay_ms(100); |
993 |        ShowDayDateMonth(); |
994 |        __delay_ms(1700); |
995 |        ShowYear(); |
996 |       __delay_ms(1700); |
997 |        ShowDayDateMonth(); |
998 |        __delay_ms(1700); |
999 |        ShowYear();  |
1000 |        __delay_ms(1700); |
1001 |   } |
1002 |   //***************************************************************************** |
1003 |   void  ShowDayDateMonth(void){ |
1004 |        _hour_raw  (decode_segment(_DateTimeDS3231.Day),decode_segment(21));//show  number  day |
1005 |        _minut_raw  (decode_segment((unsigned)(_DateTimeDS3231.Date  and  0b00110000)  ror  4),decode_segment((unsigned)_DateTimeDS3231.Date  and  0b00001111));//show  date |
1006 |        _second_raw  (decode_segment((unsigned)(_DateTimeDS3231.Month_Century  and  0b00010000)  ror  4),decode_segment((unsigned)_DateTimeDS3231.Month_Century  and  0b00001111));//show  month |
1007 |   } |
1008 |   //***************************************************************************** |
1009 |   void  ShowYear  (void){ |
1010 |        _hour_raw  (decode_segment(21),decode_segment(21));//show  empty  char |
1011 |        _minut_raw  (decode_segment(2),decode_segment((unsigned)(_DateTimeDS3231.Month_Century  and  0b10000000)  ror  7));//show  2  +  century |
1012 |        _second_raw  (decode_segment(((unsigned)_DateTimeDS3231.Year  and  0b11110000)  ror  4),decode_segment((unsigned)_DateTimeDS3231.Year  and  0b00001111));//show  year |
1013 |   } |
1014 |   //***************************************************************************** |
1015 |   |
1016 |   void  Edit_Podsvetleni(void){ |
1017 |        _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
1018 |        _StruscReadKeyboard.position_sub_menu  =  0; |
1019 |        for(;_StruscReadKeyboard.nOK_SubMenuLoop  ==  0;){//SubMenu |
1020 |            __delay_ms(_menuLoop  ); |
1021 |            if  (_BUTTON._bit.TL_OK_BUTTON)  { |
1022 |                _StruscReadKeyboard.nOK_EndLoop  =  _StruscReadKeyboard.nOK_EndLoop  +  1; |
1023 |                if  (_StruscReadKeyboard.nOK_EndLoop  ==  254){_StruscReadKeyboard.nOK_EndLoop  =  255;}//korekce  preteceni... |
1024 |                if  (_StruscReadKeyboard.nOK_EndLoop &rsaquo =  (_Delka_stisku_tlacitka_Max)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
1025 |                    _StruscReadKeyboard.nOK_SubMenuLoop  =  1;  //ukonceni  edit  submenu |
1026 |                   _BUTTON._bit.TL_OK_BUTTON  =  0; |
1027 |                   _StruscReadKeyboard.nOK_EndLoop  =  0; |
1028 |                   _StruscReadKeyboard.position_sub_menu  =  0; |
1029 |                   //kod  pro  ulozeni  editovanych  hodnot |
1030 |                   WriteEEprom(); |
1031 |                } |
1032 |            } |
1033 |            else  { |
1034 |                _StruscReadKeyboard.nOK_SubMenuLoop  =  0; |
1035 |                _StruscReadKeyboard.nOK_EndLoop  =  0; |
1036 |                _BUTTON._bit.TL_OK_BUTTON  =  0; |
1037 |            } |
1038 |            //********************************************************************* |
1039 |            //  kod  editace  a  nastaveni  hodin |
1040 |            IndikaceMenuHLS_ALL(); |
1041 |            switch  (_StruscReadKeyboard.position_sub_menu){ |
1042 |                    |
1043 |                case  0  ://editace  IC2 |
1044 |                   ChangeHLS_ALL  (IC2); |
1045 |                break; |
1046 |   |
1047 |                case  1  ://editace  IC3  |
1048 |                   ChangeHLS_ALL  (IC3); |
1049 |                break; |
1050 |                  |
1051 |                case  2  ://editace  IC4   |
1052 |                  ChangeHLS_ALL  (IC4);  |
1053 |                break; |
1054 |                |
1055 |                case  3  ://editace  IC5   |
1056 |                  ChangeHLS_ALL  (IC5);  |
1057 |                break; |
1058 |                |
1059 |                case  4  ://editace  IC6   |
1060 |                  ChangeHLS_ALL  (IC6);  |
1061 |                break; |
1062 |                |
1063 |                case  5  ://editace  IC7   |
1064 |                  ChangeHLS_ALL  (IC7);  |
1065 |                break; |
1066 |                |
1067 |                case  6  ://editace  ALL  led  for  itrons  |
1068 |                  ChangeHLS_ALL  (IC_ALL); |
1069 |                break; |
1070 |                  |
1071 |                default  ://default...asi  je  neco  spatne  |
1072 |                    ShowErr(); |
1073 |                break; |
1074 |            }  |
1075 |            //  kod  pro  posouvani  v  menu  funkci  ...  doprava  doleva |
1076 |            if  (_BUTTON._bit.TL_LEFT_BUTTON)  { |
1077 |                _BUTTON._bit.TL_LEFT_BUTTON  =  0; |
1078 |                _StruscReadKeyboard.DT_blik_Loop  =  0;  //  nulovani  pocitadla  pocitani  blikani |
1079 |                _StruscReadKeyboard.DT_blik  ==  1;  //  nastavrni  sviceni |
1080 |                _StruscReadKeyboard.position_sub_menu  =  (unsigned)  _StruscReadKeyboard.position_sub_menu  -  1; |
1081 |                if  (_StruscReadKeyboard.position_sub_menu  ==  255){ |
1082 |                    _StruscReadKeyboard.position_sub_menu  =  _end_menu_HLS_ALL; |
1083 |                } |
1084 |            } |
1085 |            |
1086 |            if  (_BUTTON._bit.TL_RIGHT_BUTTON)  { |
1087 |                _BUTTON._bit.TL_RIGHT_BUTTON  =  0; |
1088 |                _StruscReadKeyboard.DT_blik_Loop  =  0;  //  nulovani  pocitadla  pocitani  blikani |
1089 |                _StruscReadKeyboard.DT_blik  ==  1;  //  nastavrni  sviceni |
1090 |                _StruscReadKeyboard.position_sub_menu  =(unsigned)  _StruscReadKeyboard.position_sub_menu  +  1; |
1091 |                if  (_StruscReadKeyboard.position_sub_menu &rsaquo =  (_end_menu_HLS_ALL  +  1)){ |
1092 |                    _StruscReadKeyboard.position_sub_menu  =  0; |
1093 |                } |
1094 |            } |
1095 |        } |
1096 |   } |
1097 |   //***************************************************************************** |
1098 |   void  ChangeHLS_ALL  (uint8_t  _tag){ |
1099 |        if  (_BUTTON._bit.TL_UP_BUTTON  or  _BUTTON._bit.TL_DOWN_BUTTON)  {    |
1100 |            if  (_BUTTON._bit.TL_UP_BUTTON){ |
1101 |                _StruscReadKeyboard._SignalButtom  =  _UP_; |
1102 |                if  (_StruscReadKeyboard._SpeedFlag  ==  1){//rychle  pocitani  nahoru,  tlacitko  UP  je  stisknute  a  porad  je  drzeno,  takze  se  jedna  o  autorepeat |
1103 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
1104 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
1105 |                    //***************************************************************************** |
1106 |                    |
1107 |                    |
1108 |                    //***************************************************************************** |
1109 |                } |
1110 |                else  { |
1111 |                    _StruscReadKeyboard.nUpDown_Loop  =  _StruscReadKeyboard.nUpDown_Loop  +  1; |
1112 |                    if  (_StruscReadKeyboard.nUpDown_Loop  ==  254){_StruscReadKeyboard.nUpDown_Loop  =  255;}//korekce  preteceni... |
1113 |                    if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
1114 |                        _StruscReadKeyboard._SpeedFlag  =  1; |
1115 |                    } |
1116 |                } |
1117 |            } |
1118 |            if  (_BUTTON._bit.TL_DOWN_BUTTON){ |
1119 |                _StruscReadKeyboard._SignalButtom  =  _DOWN_; |
1120 |                if  (_StruscReadKeyboard._SpeedFlag  ==  1){//rychle  pocitani  dolu,  tlacitko  DOWN  je  stisknute  a  porad  je  drzeno,  takze  se  jedna  o  autorepeat |
1121 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
1122 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
1123 |                    //***************************************************************************** |
1124 |                    |
1125 |                    |
1126 |                    |
1127 |                    |
1128 |                    //***************************************************************************** |
1129 |                } |
1130 |                else  { |
1131 |                    _StruscReadKeyboard.nUpDown_Loop  =  _StruscReadKeyboard.nUpDown_Loop  +  1; |
1132 |                    if  (_StruscReadKeyboard.nUpDown_Loop  ==  254){_StruscReadKeyboard.nUpDown_Loop  =  255;}//korekce  preteceni... |
1133 |                    if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_HorniMer)){//delka  stisku  3  sec.  Vyskoceni  z  menu |
1134 |                        _StruscReadKeyboard._SpeedFlag  =  1; |
1135 |                    } |
1136 |                }  |
1137 |            } |
1138 |        } |
1139 |        else  { |
1140 |            if  (_StruscReadKeyboard._SignalButtom  ==  _UP_){ |
1141 |                if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nUpDown_Loop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){ |
1142 |                    //  tlacitko  UP  je  stisknuto  a  volneno,  tak  se  pricte  jen  jednou |
1143 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
1144 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
1145 |                    //***************************************************************************** |
1146 |                    |
1147 |                    |
1148 |                    |
1149 |                    |
1150 |                    //*****************************************************************************   |
1151 |                }      |
1152 |            } |
1153 |            if  (_StruscReadKeyboard._SignalButtom  ==  _DOWN_){ |
1154 |                 if  (_StruscReadKeyboard.nUpDown_Loop &rsaquo =  (_Delka_stisku_tlacitka_DolniMer)  and  _StruscReadKeyboard.nUpDown_Loop &lsaquo =  (_Delka_stisku_tlacitka_HorniMer)){ |
1155 |                    //  tlacitko  DOWN  je  stisknuto  a  volneno,  tak  se  odecte  jen  jednou      |
1156 |                    _StruscReadKeyboard.DT_blik  =  0;  //Zobrazeni  segmentu |
1157 |                    _StruscReadKeyboard.DT_blik_Loop  =  0;//Nulovani  pocitani  kdy  zacit  blikat |
1158 |                    //***************************************************************************** |
1159 |                    |
1160 |                    |
1161 |                    |
1162 |                    //*****************************************************************************   |
1163 |                 }     |
1164 |            } |
1165 |             //nulovani  vseho  co  zpusobuje  autorepeat  a  indikace  stisknuti  tlacitka |
1166 |            _StruscReadKeyboard._SpeedFlag  =  0; |
1167 |            _StruscReadKeyboard._SignalButtom  =  0; |
1168 |            _StruscReadKeyboard.nUpDown_Loop  =  0; |
1169 |            _BUTTON._bit.TL_UP_BUTTON  =  0;  |
1170 |        }  |
1171 |   } |
1172 |   //***************************************************************************** |
1173 |   void  IndikaceMenuHLS_ALL  (void){ |
1174 |        //funkce  indikuje  editovany  udaj...pomoci  blikani  patricne  desetinne  tecky,  v  rezimu  ALL  blikaji  vsechny  desetinne  tecky |
1175 |        |
1176 |        _StruscReadKeyboard.DT_blik_Loop  =  (unsigned)_StruscReadKeyboard.DT_blik_Loop  +  1; |
1177 |        if  (_StruscReadKeyboard.DT_blik_Loop  ==  _change_DT_Const){//provede  se  zmena  stavu  DT |
1178 |            _StruscReadKeyboard.DT_blik_Loop  =  0; |
1179 |            DTstatus(); |
1180 |        } |
1181 |   |
1182 |        if  (_StruscReadKeyboard.DT_blik  ==  0)  {      |
1183 |            ClearALL_Dot(); |
1184 |        } |
1185 |        |
1186 |        switch  (_StruscReadKeyboard.position_sub_menu){ |
1187 |           case  0  ://editace  IC2 |
1188 |               PrintHex(1,PoleLedHSL.IC2_PWM.h); |
1189 |               PrintHex(2,PoleLedHSL.IC2_PWM.s); |
1190 |               PrintHex(3,PoleLedHSL.IC2_PWM.v); |
1191 |               if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1192 |                   ClearALL_Dot(); |
1193 |                   BitSet(TTL_HourHi_LAT,  TTL_Segment_DT_D); |
1194 |               } |
1195 |            break; |
1196 |   |
1197 |            case  1  ://editace  IC3 |
1198 |               PrintHex(1,PoleLedHSL.IC3_PWM.h); |
1199 |               PrintHex(2,PoleLedHSL.IC3_PWM.s); |
1200 |               PrintHex(3,PoleLedHSL.IC3_PWM.v); |
1201 |               if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1202 |                   ClearALL_Dot(); |
1203 |                   BitSet(TTL_HourLo_LAT,  TTL_Segment_DT_E); |
1204 |               } |
1205 |            break; |
1206 |   |
1207 |            case  2  ://editace  IC4  |
1208 |               PrintHex(1,PoleLedHSL.IC4_PWM.h); |
1209 |               PrintHex(2,PoleLedHSL.IC4_PWM.s); |
1210 |               PrintHex(3,PoleLedHSL.IC4_PWM.v); |
1211 |               if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1212 |                   ClearALL_Dot(); |
1213 |                   BitSet(TTL_MinitHi_LAT,  TTL_Segment_DT_H); |
1214 |                } |
1215 |            break; |
1216 |   |
1217 |            case  3  ://editace  IC5   |
1218 |               PrintHex(1,PoleLedHSL.IC5_PWM.h); |
1219 |               PrintHex(2,PoleLedHSL.IC5_PWM.s); |
1220 |               PrintHex(3,PoleLedHSL.IC5_PWM.v); |
1221 |               if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1222 |                   ClearALL_Dot(); |
1223 |                   BitSet(TTL_MinitLo_LAT,  TTL_Segment_DT_J); |
1224 |                } |
1225 |            break; |
1226 |   |
1227 |            case  4  ://editace  IC6 |
1228 |               PrintHex(1,PoleLedHSL.IC6_PWM.h); |
1229 |               PrintHex(2,PoleLedHSL.IC6_PWM.s); |
1230 |               PrintHex(3,PoleLedHSL.IC6_PWM.v); |
1231 |               if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1232 |                   ClearALL_Dot(); |
1233 |                   BitSet(TTL_SecondHi_LAT,  TTL_Segment_DT_F); |
1234 |                } |
1235 |            break; |
1236 |   |
1237 |            case  5  ://editace  IC7 |
1238 |                PrintHex(1,PoleLedHSL.IC7_PWM.h); |
1239 |                PrintHex(2,PoleLedHSL.IC7_PWM.s); |
1240 |                PrintHex(3,PoleLedHSL.IC7_PWM.v); |
1241 |                if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1242 |                    ClearALL_Dot(); |
1243 |                    BitSet(TTL_SecondLoC_LAT,  TTL_Segment_DT_C); |
1244 |                } |
1245 |            break; |
1246 |   |
1247 |            case  6  ://editace  ALL  led  for  itrons  |
1248 |                PrintSpace(1); |
1249 |                PrintSpace(2); |
1250 |                PrintSpace(3); |
1251 |                if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1252 |                    BitSet(TTL_HourHi_LAT,  TTL_Segment_DT_D); |
1253 |                    BitSet(TTL_HourLo_LAT,  TTL_Segment_DT_E); |
1254 |                    BitSet(TTL_MinitHi_LAT,  TTL_Segment_DT_H); |
1255 |                    BitSet(TTL_MinitLo_LAT,  TTL_Segment_DT_J); |
1256 |                    BitSet(TTL_SecondHi_LAT,  TTL_Segment_DT_F); |
1257 |                    BitSet(TTL_SecondLoC_LAT,  TTL_Segment_DT_C); |
1258 |                } |
1259 |            break; |
1260 |   |
1261 |            default  ://default...asi  je  neco  spatne  |
1262 |                ShowErr(); |
1263 |            break; |
1264 |        }   |
1265 |   } |
1266 |   //***************************************************************************** |
1267 |   void  ClearALL_Dot  (void){ |
1268 |        BitClear(TTL_HourHi_LAT,  TTL_Segment_DT_D); |
1269 |        BitClear(TTL_HourLo_LAT,  TTL_Segment_DT_E); |
1270 |        BitClear(TTL_MinitHi_LAT,  TTL_Segment_DT_H); |
1271 |        BitClear(TTL_MinitLo_LAT,  TTL_Segment_DT_J); |
1272 |        BitClear(TTL_SecondHi_LAT,  TTL_Segment_DT_F); |
1273 |        BitClear(TTL_SecondLoC_LAT,  TTL_Segment_DT_C); |
1274 |   } |
1275 |   //***************************************************************************** |
1276 |   void  IndikaceMenuTime  (void){ |
1277 |        //funkce  indikuje  editovany  udaj...pomoci  blikani  patricne  dvojcislice |
1278 |        |
1279 |        _StruscReadKeyboard.DT_blik_Loop  =  (unsigned)_StruscReadKeyboard.DT_blik_Loop  +  1; |
1280 |        if  (_StruscReadKeyboard.DT_blik_Loop  ==  _change_DT_Const){//provede  se  zmena  stavu  DT |
1281 |            _StruscReadKeyboard.DT_blik_Loop  =  0; |
1282 |            DTstatus(); |
1283 |        } |
1284 |        //nacteni  a  zobrazeni  casu  na  editaci |
1285 |        _hour_raw  (decode_segment(_DateTimeDS3231.Hour_10),decode_segment(_DateTimeDS3231.Hour)); |
1286 |        _minut_raw  (decode_segment(_DateTimeDS3231.Minutes_10),decode_segment(_DateTimeDS3231.Minutes)); |
1287 |        _second_raw  (decode_segment(_DateTimeDS3231.Seconds_10),decode_segment(_DateTimeDS3231.Seconds)); |
1288 |        switch  (_StruscReadKeyboard.position_sub_menu){ |
1289 |   |
1290 |            case  0  ://editace  casu  |
1291 |                if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1292 |                    _hour_raw  (decode_segment(21),decode_segment(21)); |
1293 |                } |
1294 |              break; |
1295 |   |
1296 |            case  1  ://editace  datumu  |
1297 |                if  (_StruscReadKeyboard.DT_blik  ==1)  { |
1298 |                    _minut_raw  (decode_segment(21),decode_segment(21)); |
1299 |                } |
1300 |              break; |
1301 |   |
1302 |             case  2  ://editace  podsvetleni  |
1303 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
1304 |                    _second_raw  (decode_segment(21),decode_segment(21)); |
1305 |                } |
1306 |              break; |
1307 |   |
1308 |            default  ://default...asi  je  neco  spatne  |
1309 |                ShowErr(); |
1310 |             break; |
1311 |        }   |
1312 |   } |
1313 |   //***************************************************************************** |
1314 |   void  IndikaceMenuDate  (void){ |
1315 |        //funkce  indikuje  editovany  udaj...pomoci  blikani  patricne  dvojcislice |
1316 |        |
1317 |        _StruscReadKeyboard.DT_blik_Loop  =  (unsigned)_StruscReadKeyboard.DT_blik_Loop  +  1; |
1318 |        if  (_StruscReadKeyboard.DT_blik_Loop  ==  _change_DT_Const){//provede  se  zmena  stavu  DT |
1319 |            _StruscReadKeyboard.DT_blik_Loop  =  0; |
1320 |            DTstatus(); |
1321 |        } |
1322 |        //nacteni  a  zobrazeni  datumu  na  editaci |
1323 |        if  (_StruscReadKeyboard.position_sub_menu  ==  3){ShowYear();} |
1324 |        else  {      |
1325 |            ShowDayDateMonth(); |
1326 |        } |
1327 |        switch  (_StruscReadKeyboard.position_sub_menu){ |
1328 |   |
1329 |            case  0  ://editace  dnu  v  tydnu  |
1330 |                if  (_StruscReadKeyboard.DT_blik  ==  1)  { |
1331 |                    _hour_raw  (decode_segment(21),decode_segment(21)); |
1332 |                } |
1333 |              break; |
1334 |   |
1335 |            case  1  ://editace  Date  |
1336 |                if  (_StruscReadKeyboard.DT_blik  ==1)  { |
1337 |                    _minut_raw  (decode_segment(21),decode_segment(21)); |
1338 |                } |
1339 |              break; |
1340 |   |
1341 |             case  2  ://editace  Month  |
1342 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
1343 |                    _second_raw  (decode_segment(21),decode_segment(21)); |
1344 |                } |
1345 |              break; |
1346 |              |
1347 |             case  3  ://editace  Year  |
1348 |                 if  (_StruscReadKeyboard.DT_blik  ==1)  { |
1349 |                     _minut_raw  (decode_segment(21),decode_segment(21)); |
1350 |                    _second_raw  (decode_segment(21),decode_segment(21)); |
1351 |                } |
1352 |              break; |
1353 |   |
1354 |            default  ://default...asi  je  neco  spatne  |
1355 |                ShowErr(); |
1356 |             break; |
1357 |        }   |
1358 |   } |