CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Help needed for noob plz

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
danyboy666



Joined: 01 Mar 2011
Posts: 30

View user's profile Send private message

Help needed for noob plz
PostPosted: Tue Mar 01, 2011 4:16 pm     Reply with quote

Hi all, I'm currently working on a simple digital clock project but I need some help with the code. I want to use some tac switch to adjust the time. The PIC I'm working with is a 18F2550 and some 74LS47 BCD decoders. The thing is I can't figure out how to speed up the FOR...LOOP counter I'm using for the Display loop when the Time Adjust button is pressed.......

Here's the code I'm working on.
Code:

#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,USBDIV,PLL5,CPUDIV1,VREGEN,PUT,NOMCLR,NOLVP
#use delay(clock=48000000)

//Le bootloader commence à l'adresse 800 de la mémoire.
#build(reset=0x800, interrupt=0x808)
#org 0x000, 0x7ff { }

//Nom donné au .hex lors de la compilation
#EXPORT (FILE=Amelie_Dany_7_Segments_Display_LED_Clock.hex)
 
   //Includes et définitions spécifiques pour le pilote USB
   #define USB_MAX_NUM_INTERFACES 1
   #define USB_HID_DEVICE     FALSE
   #define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT
   #define USB_EP1_TX_SIZE    8
   #define USB_EP2_RX_ENABLE  USB_ENABLE_INTERRUPT
   #define USB_EP2_RX_SIZE    8
   
   #include "usb.h"
   #include "usb_desc.h"

   #define __USB_DESCRIPTORS__
      unsigned char USB_NUM_INTERFACES[1] = {1};
      char const USB_STRING_DESC[] = {5, USB_DESC_STRING_TYPE, 'H', 0, 'O', 0, 'L', 0, 'A', 0};

   #include "pic18_usb.h"
   #include "pic18_usb.c"
   #include "usb.c"

//Constantes Globales
int8 Min1=0,Min10=0,Hr10=1,Hr1=2;//Constantes de temps.   
int16 i,j,TAffich;

//Déclaration de la fonction Ajustement du temps.
void TimeAdjust();
//Déclaration de la fonction pour la boucle d'affichage.
void Disp_Loop();
//Fonction principale.
void main()
{
   //Définitions des broches utilisés.
   #define mins PIN_C0
   #define hrs  PIN_C1
   #define AmPm PIN_C2
   #define TimeSet PIN_A0 
   #define HrsSet PIN_A1
   #define MinSet PIN_A2
   
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   //S'assure que le port B est au niveau bas.
   output_b(0);
   //Désactive la sortie des heures.
   output_low(hrs);
   //Active la sortie des minutes.
   output_high(mins);
//Faire la boucle tant que l'entré des minutes n'est pas activée.
do
{
//Boucle à compteur pour ajuster le temps à sa valeur réel(60 secondes).


TAffich=500;
for(j=1;j<=TAffich;j++){

   
   //Appel de la fonction boucle d'affichage.
   Disp_Loop();
   

}

                       

     
//Faire incrémenter l'unité des minutes à chaque passage de la boucle
//d'affichage.
Min1=Min1+1;

//Faire incrémenter la dizaine des minutes quand les unités sont à 10.
   If (Min1==10){
   
      Min1=0;
      Min10=Min10+1;
//Faire incrémenter les unités d'heures quand les dizaines de minutes sont à 60.
         if (Min10==6){
         
            Min10=0;
            Hr1=Hr1+1;
                   };
//Faire incrémenter la dizaine d'heure quand les unités d'heures sont à 10.         
            if ((Hr10==15)&&(Hr1==10)){
                 
               Hr10=1;
               Hr1=0;
                                    };
//Remettre les unités d'heures à 1 quand la dizaine d'heure quand est à 1 et
//les unitées sont à 3.
               if ((Hr10==1)&&(Hr1==3)){
               
                  Hr1=1;
                  Hr10=15;
                  //Inverser l'état de la DEL AM/PM                               
                  output_toggle(AmPm);
                                      };
               };               
}
//Fin de la boucle tant que.
While (input(TimeSet)==1);   
}

//Boucle d'affichage principale.
void Disp_Loop()
{

//Boucle des heures.
   output_toggle(hrs);//Inverse l'état des heures.
   output_toggle(mins);//Inverse l'état des minutes.
   output_b((Hr10<<4)+(Hr1));//Faire sortir sur le port B les heures
      //Pause de 10 milliseconde.
      delay_ms(10);
//Boucle des minutes.     
   output_toggle(hrs);//Inverse l'état des heures.
   output_toggle(mins);//Inverse l'état des minutes.
   output_b((Min10<<4)+(Min1));//Faire sortir sur le port B les minutes.
      //Pause de 10 milliseconde.   
      delay_ms(10);
//Si l'entré ajustement du temps est activé, appel de la fonction ajustement
//du temp.

if (input(TimeSet)==0)TimeAdjust();



}
//Fonction ajustement du temps.
void TimeAdjust(){


if (input(HrsSet)==0)Hr1=Hr1+1;


         if ((Hr10==15)&&(Hr1==10)){
                 
            Hr10=1;
            Hr1=0;
                                    };
              if ((Hr10==1)&&(Hr1==3)){
               
                  Hr1=1;
                  Hr10=15;
                               
                  output_toggle(AmPm);
                                      };

if (input(MinSet)==0)Min1=Min1+1;

   If (Min1==10){
 
      Min1=0;
      Min10=Min10+1;

         if (Min10==6){
         
            Min10=0;
           
                   };
   };
}



Thanks for helping with this noobie problem

db666
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group