📄 music.c
字号:
#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=read_key();
//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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -