|
안녕하세요
현재 학교에서 오르간을 제작하고있는데요
인터럽트를 사용해서 도레미파솔라시도 까지 소리내는걸 만들었는데요
이퀄라이져 까지 하려구(ex. 도를 누르면 p1^1에 물린 led만 켜지고 레를 누르면 p1^1과 p1^2에 물린 led가 켜지는 방식)
하고있는데.. 도통... 되지를 않네요..ㅠㅜ
오늘까지 제출이라 너무 급한 마음에 한번 소스를 올려보겠습니다..
도레미파솔라시도 까지 8개 쓰고요 LED도 8개 사용예정입니다.
#include<reg51.h>
sbit speaker=P2^0;
unsigned char freq_H, freq_L;
void TMRO_int(void) interrupt 1
{
TR0=0;
speaker=~speaker;
TH0=freq_H;
TL0=freq_L;
TR0=1;
return;
}
void main(void)
{
unsigned char sw;
TMOD=0x11;
ET0=1;
PT0=1;
EA=1;
TR0=0;
speaker=0;
P1=0xff;
do
{
do
{
sw=P1;
}while(sw==0xff);
if(sw==0xfe)
{
TH0=0xfe; TL0=0x22;
freq_H=0xfe; freq_L=0x22;
}
else if(sw==0xfd)
{
TH0=0xfe; TL0=0x56;
freq_H=0xfe; freq_L=0x56;
}
else if(sw==0xfb)
{
TH0=0xfe; TL0=0x84;
freq_H=0xfe; freq_L=0x84;
}
else if(sw==0xf7)
{
TH0=0xfe; TL0=0x9a;
freq_H=0xfe; freq_L=0x9a;
}
else if(sw==0xef)
{
TH0=0xfe; TL0=0xc1;
freq_H=0xfe; freq_L=0xc1;
}
else if(sw==0xdf)
{
TH0=0xfe; TL0=0xe3;
freq_H=0xfe; freq_L=0xe3;
}
else if(sw==0xbf)
{
TH0=0xff; TL0=0x02;
freq_H=0xff; freq_L=0x02;
}
else if(sw==0x7f)
{
TH0=0xff; TL0=0x11;
freq_H=0xff; freq_L=0x11;
}
TR0=1;
do
{
sw=P1;
}while(sw != 0xff);
speaker = 0;
TR0=0;
}while(1);
}
헝글에 이런글이 왜 올라오나요? ㅋㅋㅋㅋㅋㅋㅋㅋ 그냥 지나가다 써봅니다..
글쓰신분 정말 급하신듴~!
참고로 조교들은 기한이 중요하지 되는지 않되는지는 그리 중요하지 않아욬ㅋㅋ
물론 점수엔 반영 되겠지만ㅋ;;;
밤새니깐 무슨소린지;;;
어쨋든 무사히 제출하시길 바랍니다!