2013-12-15 3 views
0

У меня есть петля для моих часов, что я пытаюсь добавить 30 секунд, если клавиатура отправит значение х 30. Это отобразится на светодиодном дисплее. Он работает, но у меня, похоже, проблема с добавлением 30 секунд и более 59 секунд. Вначале он работал с добавлением от 30 до 60 до 90 + 120 и т. Д. Но я хочу, чтобы он катился каждые 60 секунд, когда я добавляю 30 секунд. Если я должен переписать код, я все играю, но любые ссылки будут полезны. Знайте этот код для встроенного элемента и это всего лишь фрагмент. до установленного цикла добавляется инициальное заданное время и сохраняется как значение для теста.Часы реального времени, приращение и отображение на светодиодах в C

n=test; 
for(i=0;i<n;i++){ 

     q = test %100; /*q makes real time clock work in 60 sec decriments*/ 

     if(q==0){ 
      test = test - 40; 
     } 
     key = KeypadReadPort(); 
     x = keys[key]; 
     if(x==30){   /*add 30 seconds during count*/ 
       n = n + 30; 
       sec1=(test+30)%90; 
       if(sec1>=60){ 
       min=q; 
       sec2=(test+30)%60; 
       test=sec2+(100+q); 
       } else if (sec1<60){ 
       test=test+30; 
       } 
      SevenSegWrite(test);/* display result on LED*/ 


     } 
     test = test - 1;  /*count down tick*/ 
     SevenSegWrite(test); 
     OSTimeDlyHMSM(0, 0, 1, 0);/*1 second tick*/ 
     if(test==0){ 

      for(i=0;i<750;i++){    /*buzzer*/ 
      PTT = PTT | 0x20; 
      OSTimeDlyHMSM(0,0,0,1); 
      PTT = PTT & 0xDF; 
      OSTimeDlyHMSM(0,0,0,1); 
      } 
     } 
     } 
     test=0; 
+0

Предложите переписать весь блок 'if (x == 30) {...}'. Это очень запутанно. – chux

ответ

1

Я бы сделал это таким образом. Меня устраивает. У вас отличное начало! Вам просто нужно немного сломать номера часов.

if(start<15){ 
     min=0;                /*microwave keypad numeric input method*/ 
     n = test; 
     for(i=0;i<n;i++){ 
     q = test %100;    /*q makes real time clock work in 60 sec decriments*/ 

     if(q==0){ 
      test = test - 40; 
     } 
     key = KeypadReadPort(); 
     x = keys[key]; 
     if(x==30){   /*add 30 seconds during count*/ 

       d4 = test % 10; 
       d3 = (test/10) % 10; 
       d2 = (test/100) % 10; 
       d1 = (test/1000) % 10; 
       min=(d1*1000)+(d2*100); 
       sec1=(d3*10)+d4; 
       n = n + 30; 
       sec2=(sec1+30)%90; 

       if(sec2>=60){ 
       min=min+100; 
       sec1=(sec1+30)%60; 
       test=sec1+(min); 
       } else if (sec2<60){ 
       test=test+30; 
       } 
      SevenSegWrite(test); 


     } 
     test = test - 1;  /*count down tick*/ 
     SevenSegWrite(test); 
     OSTimeDlyHMSM(0, 0, 1, 0); 
     if(test==0){ 

      for(i=0;i<750;i++){    /*buzzer*/ 
      PTT = PTT | 0x20; 
      OSTimeDlyHMSM(0,0,0,1); 
      PTT = PTT & 0xDF; 
      OSTimeDlyHMSM(0,0,0,1); 
      } 
     } 
+0

Спасибо, что отлично работает! –

+0

Нет проблем, у меня есть некоторый опыт работы с этим типом вещей – user2510640

Смежные вопросы