資源簡介
C51單片機(jī) 通過定時(shí)器產(chǎn)生特定方波,然后按下矩陣鍵盤使蜂鳴器發(fā)出不同音調(diào)

代碼片段和文件信息
#include?
#define?uchar?unsigned?char
#define?uint?unsigned?int
uchar?i;
sbit?Beep?=P2^3?; //訊響器控制腳?
//36種音階
unsigned?sound_list[36]=
{
63628//低?1?DO??
63731//#?1?DO#
63853//低?2?RE
63928//#?2?RE#
64021//低?3?M
64103//低?4?FA
64185//#?4?FA#
64260//低?5?SO
64331//#?5?SO#
64400//低?6?LA
64463//#?6
64524//低?7?SI
64580//中1?DO
64633//#?1?DO#
64684//中?2?RE
64732//#?2?RE#
64777//中?3?M
64820//中?4?FA
64860//#?4?FA#
64898//中?5?SO
64934//#?5?SO#
64968//中?6?LA
64994//#?6
65030//中?7?SI
65058//高?1?DO
65085//#?1?DO#
65110//高?2?RE
65134//#?2?RE#
65157//高?3?M
65178//高?4?FA
65198//#?4?FA#
65217//高?5?SO
65235//#?5?SO#
65252//高?6?LA
65268//#?6
65282//高?7?SI
}?;
/******************************************************************************/
void?Time0_Init();
void?delay(uint?z);
uchar?keyscan();
/****************************************************************/
/*-------------------------------------------------
功能:主程序
-------------------------------------------------*/
void?main()
{
Time0_Init(); //定時(shí)器0中斷初始化
while(1)
{
keyscan();//播放
}
}
void?Time0_Init()
{
TMOD=0x01;
TH0=sound_list[i]/256;?
TL0=sound_list[i]%256;
EA=1;
ET0=1;
}
void?Time0_Int()?interrupt?1
{
Beep=!Beep;
? TH0=sound_list[i]/256;?
TL0=sound_list[i]%256;
}
/******************************
矩陣鍵盤延時(shí)函數(shù)
**********************************/
void?delay(uint?z)
{
uint?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************
矩陣掃描
**************************************/
uchar?keyscan()
{
uchar?temp1=0xed;
uchar?temp;
/*************************這一組的矩陣鍵盤是壞的******************************
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case?0xee:
break;
case?0xde:
break;
case?0xbe:
break;
case?0x7e:
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
/***************************************************/
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case?0xed:
P1=0xaa;
TR0=1;
i=0;
delay(300);//改變聲音的時(shí)間長短
TR0=0;
break;
case?0xdd:
P1=0x55;
TR0=1;
i=3;
delay(300);
TR0=0;
break;
case?0xbd:
P1=0xa5;
TR0=1;
i=6;
delay(200);
TR0=0;
break;
case?0x7d:
P1=0
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4946??2015-06-19?19:03??按鍵音調(diào)\ajyd.c
?????文件??????19853??2015-06-19?19:01??按鍵音調(diào)\ajyd.LST
?????文件???????7644??2015-06-19?19:01??按鍵音調(diào)\ajyd.OBJ
?????文件???????1228??2015-06-19?16:36??按鍵音調(diào)\ajydcs.c
?????文件???????3157??2015-06-19?16:36??按鍵音調(diào)\ajydcs.LST
?????文件???????1939??2015-06-19?16:36??按鍵音調(diào)\ajydcs.OBJ
?????文件???????6829??2015-06-19?19:01??按鍵音調(diào)\按鍵音調(diào)
?????文件???????2056??2015-06-19?19:01??按鍵音調(diào)\按鍵音調(diào).hex
?????文件??????11251??2015-06-19?19:01??按鍵音調(diào)\按鍵音調(diào).M51
?????文件???????1013??2015-06-23?20:13??按鍵音調(diào)\按鍵音調(diào).Opt
?????文件????????163??2015-06-23?20:13??按鍵音調(diào)\按鍵音調(diào).plg
?????文件???????1983??2015-06-19?19:03??按鍵音調(diào)\按鍵音調(diào).Uv2
????.......??????1003??2015-06-23?20:09??按鍵音調(diào)\按鍵音調(diào)_Opt.Bak
????.......?????????0??2015-06-19?13:53??按鍵音調(diào)\按鍵音調(diào)_Uv2.Bak
?????文件???????1937??2015-06-19?16:36??按鍵音調(diào)\按鍵音調(diào)測試
?????文件????????789??2015-06-19?16:36??按鍵音調(diào)\按鍵音調(diào)測試.hex
?????文件???????3241??2015-06-19?16:36??按鍵音調(diào)\按鍵音調(diào)測試.M51
?????文件???????1016??2015-06-19?17:21??按鍵音調(diào)\按鍵音調(diào)測試.Opt
?????文件????????167??2015-06-23?20:09??按鍵音調(diào)\按鍵音調(diào)測試.plg
?????文件???????1991??2015-06-19?17:21??按鍵音調(diào)\按鍵音調(diào)測試.Uv2
????.......?????????0??2015-06-19?16:06??按鍵音調(diào)\按鍵音調(diào)測試_Uv2.Bak
?????目錄??????????0??2015-06-23?20:13??按鍵音調(diào)
-----------?---------??----------?-----??----
????????????????72206????????????????????22
評(píng)論
共有 條評(píng)論