music._c

来自「一个新颖的乐器.我参加西电星火杯的作品.里面有详细的.doc说明」· _C 代码 · 共 103 行

_C
103
字号
#include <iom8v.h>
#include <macros.h>
#include "do_le_mi.h"
int T=0xFF00;
int N=0xFF00;

void GPIO_INIT(void)
{
  	DDRB=0x00; //定义 PB为输入
	//SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD置0,
	PORTB|=0xFF; // 将 PORT 置1,满足上拉电阻的另一个条件 
	DDRC=0x01; //定义 PC0为输出 
	//PORTC=~BIT(0); // PC0 输出高电平
	PORTC=0xFF; // PC0 输出高电平
	DDRD=0x80;
	PORTD=0x80;


}
void timer1_init(void)
{
 		TCCR1B = 0x00; //stop
		TCNT1=65535-T;
 		TCCR1A = 0x00;//can be ignored
 		TCCR1B = 0x01; //start Timer   devide 1
        //TCCR1B = 0x04; //start Timer   devide 256
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
 TCNT1=65535-T;
 PORTC=~PORTC;
}
void main(void)

{
  char x;
  int y;
  //int a,b;
  //开中断
  CLI(); //disable all interrupts
  OSCCAL=0XBA;
  MCUCR = 0x00;
  GICR  = 0x00;
  TIMSK=0x04;
  timer1_init();
  SEI(); //re-enable interrupts
  GPIO_INIT();

  
  while(1)
  {
        
            x=PINB;
			//x=~0xFF01;
			y=(int)x;
			
            switch(y)
            {  
                  case ~0xFF01:N=L7;break;
                  case ~0xFF02:N=M1;break;
                  case ~0xFF04:N=M2;break;
                  case ~0xFF08:N=M3;break;
                  case ~0xFF10:N=M4;break;
                  case ~0xFF20:N=M5;break;
                  case ~0xFF40:N=M6;break;
                  case ~0xFF80:N=M7;break;
                  case ~0xFF81:N=L5;break;
                  case ~0xFF42:N=L6;break;
                  case ~0xFF24:N=H1;break;
                  case ~0xFF18:N=H2;break;
                  default:N=EM;TCCR1B=0x00;PORTC=0x00;
				  /*
				  case ~0xFF01:N=400;break;
                  case ~0xFF02:N=401;break;
                  case ~0xFF04:N=402;break;
                  case ~0xFF08:N=403;break;
                  case ~0xFF10:N=404;break;
                  case ~0xFF20:N=405;break;
                  case ~0xFF40:N=406;break;
                  case ~0xFF80:N=407;break;
                  case ~0xFF81:N=408;break;
                  case ~0xFF42:N=409;break;
                  case ~0xFF24:N=410;break;
                  case ~0xFF18:N=411;break;
                  default:N=399;TCCR1B=0x00;PORTC=0x00;
				  */
            }
        if (T==N)
          ;
        else
		{
          T=N;
		  TCCR1B=0x01;
          TCNT1=65535-T;
        }    
           
      
    
  }
}
  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?