Advertisement
Guest User

Midi_song

a guest
Apr 24th, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.40 KB | None | 0 0
  1. #include <16F886.h>
  2. #device ADC=10 *=16
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES PUT                      //Power Up Timer
  6. #FUSES NOMCLR                   //Master Clear pin not enabled
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NOCPD                    //No EE protection
  9. #FUSES BROWNOUT                 //Brownout reset
  10. #FUSES IESO                     //Internal External Switch Over mode enabled
  11. #FUSES FCMEN                    //Fail-safe clock monitor enabled
  12. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  13. #FUSES NODEBUG                  //No Debug mode for ICD
  14. #FUSES NOWRT                    //Program memory not write protected
  15. #FUSES BORV40                   //Brownout reset at 4.0V
  16. #FUSES RESERVED                 //Used to set the reserved FUSE bits
  17. #FUSES INTRC_IO
  18.  
  19. #use delay(clock=8M)
  20.  
  21. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
  22.  
  23. #define RUN_BUTTON   PIN_B7
  24. int16 START_TIME = 65059;
  25.  
  26. //Happy Birthday
  27. int16 arr[25] = {
  28. 65059,65059,65111,65059,65179,65157,65059,65059,65111,65059,65218,65179,
  29. 65059,65059,65306,65252,65179,65157,65111,
  30. 65268,65268,65252,65179,65218,65179
  31. };
  32. int16 time[25] = {
  33. 100,80,140,120,120,140,100,80,140,120,120,140,100,80,140,140,120,120,120,100,80,140,120,120,120
  34. };
  35.  
  36. #INT_TIMER1
  37. void timer1_isr(){
  38.    set_timer1(START_TIME);
  39.    output_toggle(PIN_A0);
  40. }
  41. void main()
  42. {
  43.    int i = 0;
  44.    setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
  45.    set_timer1(START_TIME);
  46.    enable_interrupts(INT_TIMER1);
  47.    enable_interrupts(GLOBAL);
  48.    int c = 0;
  49.    int song_on = 0;
  50.    int ax = 0;
  51.    int bx = 0;
  52.    While(1){
  53.       if( c==0 ){
  54.          if(!input(PIN_A3)){
  55.             if(song_on == 0){
  56.                song_on = 1;
  57.             }
  58.             else {
  59.                song_on = 0;  
  60.             }
  61.             i=0;
  62.             c=1;
  63.          }
  64.       }else {
  65.          if(input(PIN_A3)){
  66.             c=0;
  67.          }    
  68.       }  
  69.       if(!input(PIN_B7) && song_on == 0){
  70.          START_TIME = 65306;// C 1043Hz
  71.          enable_interrupts(INT_TIMER1);
  72.       }else if(!input(PIN_B5) && song_on == 0){
  73.          START_TIME = 65333;// D 1175Hz
  74.          enable_interrupts(INT_TIMER1);
  75.       }else if(!input(PIN_B4) && song_on == 0){
  76.          START_TIME = 65356;// E 1319Hz
  77.          enable_interrupts(INT_TIMER1);
  78.       }else if(!input(PIN_B3) && song_on == 0){
  79.          START_TIME = 65367;// F 1399Hz
  80.          enable_interrupts(INT_TIMER1);
  81.       }else if(!input(PIN_B2) && song_on == 0){
  82.          START_TIME = 65386;// G 1565Hz
  83.          enable_interrupts(INT_TIMER1);
  84.       }else if(!input(PIN_B1) && song_on == 0){
  85.          START_TIME = 65404;// A 1764Hz
  86.          enable_interrupts(INT_TIMER1);
  87.       }else if(!input(PIN_B0) && song_on == 0){
  88.          START_TIME = 65418;// B 1972Hz
  89.          enable_interrupts(INT_TIMER1);
  90.       }else if(!input(PIN_A1) && song_on == 0){
  91.          START_TIME = 65426;// C High 2088Hz
  92.          enable_interrupts(INT_TIMER1);
  93.       }else if(song_on == 1){
  94.          if(ax%2 == 0){
  95.             if(!bx){
  96.                START_TIME = arr[i%29];
  97.                enable_interrupts(INT_TIMER1);
  98.                i++;
  99.                bx=1;
  100.             }else{
  101.                bx=0;
  102.             }
  103.          }
  104.          ax++;
  105.          delay_ms(time[(i%30)-1]);
  106.       }else{
  107.          START_TIME = 0;
  108.          i=0;
  109.       }  
  110.    }  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement