Electgpl

PIC - Reloj con RTC y Display 7seg HHMMSS

Sep 27th, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1. #include <16F883.h>
  2. #FUSES NOWDT
  3. #FUSES XT
  4. #FUSES MCLR
  5. #use delay(clock=4000000)
  6. #define RTC_RST    PIN_C0
  7. #define RTC_SCLK   PIN_C1
  8. #define RTC_IO     PIN_C2
  9. #include <DS1302.C>
  10. #int_timer0
  11. void timer0_mux(int8 horD, int8 horU, int8 minD, int8 minU, int8 segD, int8 segU){
  12.    output_a(0b00000001);
  13.    output_b(horD);
  14.    delay_ms(3);
  15.    output_a(0b00000010);
  16.    output_b(horU);
  17.    delay_ms(3);
  18.    output_a(0b00000100);
  19.    output_b(minD);
  20.    delay_ms(3);
  21.    output_a(0b00001000);
  22.    output_b(minU);
  23.    delay_ms(3);
  24.    output_a(0b00010000);
  25.    output_b(segD);
  26.    delay_ms(3);
  27.    output_a(0b00100000);
  28.    output_b(segU);
  29.    delay_ms(3);  
  30.    set_timer0(0);
  31. }
  32. int valorDisp[10]={0b00111111,0b00000110,
  33.                    0b01011011,0b01001111,
  34.                    0b01100110,0b01101101,
  35.                    0b01111101,0b00000111,
  36.                    0b01111111,0b01101111};
  37. int8 horU, horD, minU, minD, segU, segD, HHSet, MMSet, HH, MM, SS;
  38. void main(){
  39.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
  40.    set_timer0(0);
  41.    enable_interrupts(INT_TIMER0);
  42.    enable_interrupts(GLOBAL);
  43.    while(TRUE){
  44.       if(input(PIN_C5)==1){
  45.          MMSet = MMSet + 1;
  46.          if(MMSet > 59)
  47.             MMSet = 0;
  48.          minD = MMSet/10;
  49.          minU = MMSet%10;
  50.          timer0_mux(valorDisp[horD], valorDisp[horU], valorDisp[minD],
  51.                     valorDisp[minU], valorDisp[0], valorDisp[0]);
  52.          rtc_set_datetime(0,0,0,0,HHSet,MMSet);
  53.          delay_ms(200);  
  54.       }  
  55.       if(input(PIN_C4)==1){
  56.          HHSet = HHSet + 1;
  57.          if(HHSet > 23)
  58.             HHSet = 0;
  59.          horD = HHSet/10;
  60.          horU = HHSet%10;
  61.          timer0_mux(valorDisp[horD], valorDisp[horU], valorDisp[minD],
  62.                     valorDisp[minU], valorDisp[0], valorDisp[0]);
  63.          rtc_set_datetime(0,0,0,0,HHSet,MMSet);
  64.          delay_ms(200);
  65.       }
  66.       rtc_get_time(HH,MM,SS);
  67.       horD = HH/10;
  68.       horU = HH%10;
  69.       minD = MM/10;
  70.       minU = MM%10;
  71.       segD = SS/10;
  72.       segU = SS%10;
  73.       timer0_mux(valorDisp[horD], valorDisp[horU], valorDisp[minD],
  74.                  valorDisp[minU], valorDisp[segD], valorDisp[segU]);
  75.    }    
  76. }
Advertisement
Add Comment
Please, Sign In to add comment