danyboy666
Joined: 01 Mar 2011 Posts: 30
|
Help needed for noob plz |
Posted: Tue Mar 01, 2011 4:16 pm |
|
|
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 |
|