標題:
單片機電子琴加強版代碼
[打印本頁]
作者:
jw2595
時間:
2020-12-28 13:21
標題:
單片機電子琴加強版代碼
#include <stc15.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^6;
sbit KEY4=P3^7;
sbit KEY5=P1^3;
sbit KEY6=P1^2;
sbit KEY7=P1^0;
sbit KEY8=P1^1;
sbit beep=P1^5;
uint z;
uint code tone[8]={0xFCAC,0xFD09,0xFD34,0xFD82,0xFDC8,0xFE06,0xFE22,0xFC44};//對應每個單調的計數(shù)初值
uchar k,i;
void song1();
uchar timer0h,timer0l,time;
//世上只有媽媽好 數(shù)據(jù)表
code uchar sszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,
6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,
6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,
5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,
2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0
};
// 音階頻率表 高八位
code uchar FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;
// 音階頻率表 低八位
code uchar FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
void delay(uint t);
void anjian()
{
KEY1=1;KEY2=1;KEY3=1;KEY4=1;KEY5=1;KEY6=1;KEY7=1;KEY8=1;
if(KEY1==0)
{
timer0h=FREQH[14];
timer0l=FREQL[14];
}
if(KEY2==0)
{
timer0h=FREQH[15];
timer0l=FREQL[15];
}
if(KEY3==0)
{
timer0h=FREQH[16];
timer0l=FREQL[16];
}
if(KEY4==0)
{
timer0h=FREQH[17];
timer0l=FREQL[17];
}
if(KEY5==0)
{
timer0h=FREQH[18];
timer0l=FREQL[18];
}
if(KEY6==0)
{
timer0h=FREQH[19];
timer0l=FREQL[19];
}
if(KEY7==0)
{
timer0h=FREQH[20];
timer0l=FREQL[20];
}
if(KEY8==0)
{
timer0h=FREQH[21];
timer0l=FREQL[21];
}
if(KEY1==0&&KEY8==0)
{
i=0;
song1();
}
}
void zdkg()
{
if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1&&KEY5==1&&KEY6==1&&KEY7==1&&KEY8==1)
{
TR0=0;//如果沒有按鍵按下,就關閉定時器中斷
beep=1;//同時也關閉蜂鳴器
}
else
{
TR0=1;
}
}
void song() // 音樂處理函數(shù)
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);
}
void song1()
{
while(i<100) //音樂數(shù)組長度 ,唱完從頭再來
{
k=sszymmh[i]+7*sszymmh[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=sszymmh[i+2];
i=i+3;
song();
}
}
void main()
{
P1M0=0;P1M1=0;
P3M0=0;P3M1=0;
KEY1=1;KEY2=1;KEY3=1;KEY4=1;KEY5=1;KEY6=1;KEY7=1;KEY8=1;
EA=1;//開總中斷
ET0=1;//定時器T0中斷允許
TMOD=0x01;//使用定時器T0的模式1
TH0=(65536-500)/256;//定時器T0的高8位重新賦初值
TL0=(65536-500)%256;//定時器T0的低8位重新賦初值
while(1)
{
anjian();
zdkg();
}
}
void t0int() interrupt 1 //定時器中斷函數(shù)
{
TR0=0;
beep=!beep;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void delay(uchar t) // 延時函數(shù)
{
uchar t1;
unsigned long t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<8000;t2++);
}
TR0=0;
}
復制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1