|
#include <reg52.H>
unsigned char temp;
unsigned char key;
unsigned char i,j;
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]= {64820,64898,64968,65030,65058,65110,65157,65178}; //音符表 do re mi fa sol la xi duo
unsigned int aa;
sbit K1=P1^0; //音符按鍵
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit K7=P1^6;
sbit K8=P1^7;
sbit Speak=P2^0; //喇叭
/***********************1ms*****************************/
void delay_1ms(unsigned int q)
{
unsigned int i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
void main(void) //主程序
{
TMOD=0x01;
ET0=1;
EA=1;
Speak=0;
while(1)
{
if(!K1)
{
delay_1ms(20);//延時去抖
if(!K1)
{
aa=0;
key=0;//將音樂的值賦值給定時器以便發(fā)出對應(yīng)的聲音
P0=0xC0;//顯示0
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K1)
;
}
}
if(!K2)
{
delay_1ms(20);//延時去抖
if(!K2)
{
aa=0;
key=1;
P0=0xF9;//顯示1
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K2)
;
}
}
if(!K3)
{
delay_1ms(20);//延時去抖
if(!K3)
{
aa=0;
key=2;
P0=0xA4;//顯示2
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K3)
;
}
}
if(!K4)
{
delay_1ms(20);//延時去抖
if(!K4)
{
aa=0;
key=3;
P0=0xB0;//顯示3
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K4)
;
}
}
if(!K5)
{
delay_1ms(20);//延時去抖
if(!K5)
{
aa=0;
key=4;
P0=0x99;//顯示4
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K5)
;
}
}
if(!K6)
{
delay_1ms(20);//延時去抖
if(!K6)
{
aa=0;
key=5;
P0=0x92;//顯示5
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K6)
;
}
}
if(!K7)
{
delay_1ms(20);//延時去抖
if(!K7)
{
aa=0;
key=6;
P0=0x82;//顯示6
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K7)
;
}
}
if(!K8)
{
delay_1ms(20);//延時去抖
if(!K8)
{
aa=0;
key=7;
P0=0xF8;//顯示7
STH0=tab[key]/256; //計算音符對應(yīng)的定時器計數(shù)值
STL0=tab[key]%256;
TR0=1;
while(!K8)
;
}
}
if(aa<50000)aa++;
delay_1ms(20);
if(aa>=150) //延時時間數(shù)字越大越久
{
TR0=0;
Speak=0;//當(dāng)按鍵彈起的時候,蜂鳴器停止發(fā)音
}
}
}
void t0(void) interrupt 1 using 0 { //定時器T0中斷服務(wù)函數(shù)
TH0=STH0;
TL0=STL0;
Speak=~Speak; //產(chǎn)生方波
}
|
-
評分
-
查看全部評分
|