標題:
單片機電子琴Proteus仿真程序
[打印本頁]
作者:
黯然D你
時間:
2020-4-19 15:44
標題:
單片機電子琴Proteus仿真程序
#include <STC15F2K60S2.H>
#include<intrins.h>
//***************************用戶數(shù)據(jù)類型定義*********************************
typedef unsigned int uint;
typedef unsigned char uchar;
//*****************************用戶引腳定義***********************************
sbit led_dr = P3^3;
sbit beep_dr = P3^7;
//***************************共陽極數(shù)碼管段碼數(shù)組*****************************
uchar code DigSegBuff[] =
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
//******************************函數(shù)聲明區(qū)************************************
void DelayMs(uint uiXms); //有阻塞延時函數(shù)聲明
void IniSystem(); //系統(tǒng)初始化函數(shù)聲明
void IniPeripheral(); //外圍器件初始化函數(shù)聲明
void LedFlick(uint uiLedFlickNum);//LED閃爍函數(shù)聲明
void DelayDo_956us(); //發(fā)do音的延時函數(shù)聲明
void DelayRe_852us(); //發(fā)re音的延時函數(shù)聲明
void DelayMi_759us(); //發(fā)mi音的延時函數(shù)聲明
void DelayFa_716us(); //發(fā)fa音的延時函數(shù)聲明
void DelaySo_638us(); //發(fā)so音的延時函數(shù)聲明
void DelayLa_568us(); //發(fā)la音的延時函數(shù)聲明
void DelayXi_507us(); //發(fā)xi音的延時函數(shù)聲明
void DelaySo_1276us(); //發(fā)低音SO的延時函數(shù)聲明
void KeySongplay(); //按鍵發(fā)聲函數(shù)聲明
//******************************主函數(shù)區(qū)*************************************
void main()
{
IniSystem();
DelayMs(200);
IniPeripheral();
DelayMs(200);
while(1)
{
KeySongplay();
}
}
//*********************函數(shù)定義區(qū)*********************************************
void DelayMs(uint uiXms)//有阻塞延時函數(shù)定義
{
uint h,l;
for(h=uiXms;h>0;h--)
{
for(l=110;l>0;l--);
}
}
void IniSystem() //系統(tǒng)初始化函數(shù)定義
{
P2 = 0xff;
P1 = 0xff;
led_dr = 1;
beep_dr = 0;
}
void IniPeripheral()//外圍器件初始化函數(shù)定義
{
LedFlick(5);
}
void LedFlick(uint uiLedFlickNum)//LED閃爍函數(shù)定義
{
uint k;
for(k=uiLedFlickNum*2;k>0;k--)
{
led_dr = ~led_dr;
DelayMs(400);
}
}
void DelayDo_956us() //發(fā)do音的延時
{
unsigned char i, j;
i = 12;
j = 37;
do
{
while (--j);
} while (--i);
}
void DelayRe_852us() //發(fā)re音的延時
{
unsigned char i, j;
i = 10;
j = 239;
do
{
while (--j);
} while (--i);
}
void DelayMi_759us() //發(fā)mi音的延時
{
unsigned char i, j;
i = 9;
j = 217;
do
{
while (--j);
} while (--i);
}
void DelayFa_716us() //發(fā)fa音的延時
{
unsigned char i, j;
i = 9;
j = 88;
do
{
while (--j);
} while (--i);
}
void DelaySo_638us() //發(fā)so音的延時
{
unsigned char i, j;
i = 8;
j = 111;
do
{
while (--j);
} while (--i);
}
void DelayLa_568us() //發(fā)la音的延時
{
unsigned char i, j;
i = 7;
j = 158;
do
{
while (--j);
} while (--i);
}
void DelayXi_507us() //發(fā)xi音的延時
{
unsigned char i, j;
i = 6;
j = 232;
do
{
while (--j);
} while (--i);
}
void DelaySo_1276us() //發(fā)低音so音延時
{
unsigned char i, j;
i = 15;
j = 226;
do
{
while (--j);
} while (--i);
}
void KeySongplay()//按鍵發(fā)聲函數(shù)定義
{
while(P1 == 0xff);
DelayMs(10);
if(P1 != 0xff)
{
switch(P1)
{
case 0xfe:
P2 = DigSegBuff[1];
while(P1==0xfe)
{
beep_dr = ~beep_dr;
DelayDo_956us(); //do
}
beep_dr = 0;
break;
case 0xfd:
P2 = DigSegBuff[2];
while(P1==0xfd)
{
beep_dr = ~beep_dr;
DelayRe_852us(); //re
}
beep_dr = 0;
break;
case 0xfb:
P2 = DigSegBuff[3];
while(P1==0xfb)
{
beep_dr = ~beep_dr;
DelayMi_759us(); //發(fā)mi音
}
beep_dr = 0;
break;
case 0xf7:
P2 = DigSegBuff[4];
while(P1==0xf7)
{
beep_dr = ~beep_dr;
DelayFa_716us(); //發(fā)fa音
}
beep_dr = 0;
break;
case 0xef:
P2 = DigSegBuff[5];
while(P1==0xef)
{
beep_dr = ~beep_dr;
DelaySo_638us(); //發(fā)so音
}
beep_dr = 0;
break;
case 0xdf:
P2 = DigSegBuff[6];
while(P1==0xdf)
{
beep_dr = ~beep_dr;
DelayLa_568us(); //發(fā)la音
}
beep_dr = 0;
break;
case 0xbf:
P2 = DigSegBuff[7];
while(P1==0xbf)
{
beep_dr = ~beep_dr;
DelayXi_507us(); //發(fā)xi音
}
beep_dr = 0;
break;
case 0x7f:
P2 = DigSegBuff[5];
while(P1==0x7f)
{
beep_dr = ~beep_dr;
DelaySo_1276us(); //do
}
beep_dr = 0;
break;
}
}
}
復制代碼
electronicorgan.zip
2020-4-19 15:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
149.08 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5
源程序,仿真
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1