久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
【求助】51單片機電子琴,1-7按鍵播放音符,8按鍵自動播放音樂
[打印本頁]
作者:
無所謂shine
時間:
2017-6-22 09:33
標題:
【求助】51單片機電子琴,1-7按鍵播放音符,8按鍵自動播放音樂
學校實訓,要求51實現電子琴,要求如題。
數碼管為共陰數碼管,但多了595芯片
程序借鑒了一部分網上內容,目前可以實現1-7的發音和數碼管顯示,但按8按鍵卻蜂鳴器長鳴,不知道什么地方出錯
希望各位大神幫忙看下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit BeepIO =P1^7;
sbit DI1 =P1^0;
sbit DI2 =P1^1;
sbit DI3 =P1^2;
sbit DI4 =P1^3;
sbit DIO =P1^4;
sbit RCK =P1^5;
sbit SCLK =P1^6;
uint tune[]={0xfc44,0xfcac,0xfd09,0xfd34,0xfd82,0xfdc8,0xfe07};
uchar code num[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0xff
};
//void KeyProc(uchar dat);
uchar SoundTH;
uchar SoundTL;
unsigned char Time;
unsigned char High,Low; //定時器預裝值的高8位和低8位
// 音階頻率表 高八位
unsigned char code 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,
} ;
// 音階頻率表 低八位
unsigned char code 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,
};
//世上只有媽媽好數據表
unsigned char code MUSIC[]={ 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
};
void KeyProc(uchar dat);
void delayTips(unsigned char t);
void PlaySong();
void Song()
{
uchar i;
uchar k;
i=0;
while(i<100)
{
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
High=FREQH[k];
Low=FREQL[k];
Time=MUSIC[i+2]; //節拍時長
i=i+3;
PlaySong();
// delayTips(Time); //延時所需要的節拍
if(P0==0xef)
{
while(P0==0xef);
break;
}
}
// PlaySong();
TR0=0;
}
//延時函數大約約2*z+5us
void delay2xus(unsigned char z)
{
while(z--);
}
// 延時函數大約約1ms
void delayms(unsigned char x)
{
while(x--)
{
delay2xus(245);
delay2xus(245);
}
}
//節拍延時函數
void delayTips(unsigned char t)
{
unsigned char i;
for(i=0;i<t;i++)
{
delayms(250);
}
TR0=0;
}
//播放音樂的函數
void PlaySong()
{
TH0=High;//賦值定時器時間,決定頻率
TL0=Low;
TR0=1; //打開定時器
delayTips(Time); //延時所需要的節拍
}
/*
//void KeyProc(uchar dat);
void Song()
{
uchar i;
uchar k;
i=0;
while(i<100)
{
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
High=FREQH[k];
Low=FREQL[k];
Time=MUSIC[i+2]; //節拍時長
i=i+3;
}
PlaySong();
}
*/
void LEDIO(uchar x)
{
uchar i;
for(i=0;i<8;i++)
{
if(x&0x80)
DIO = 1;
else
DIO = 0;
SCLK = 0;
SCLK = 1;
x <<= 1;
}
}
//數據送入74HC595的并口輸出寄存器
void LEDRCK()
{
RCK = 0;
RCK = 1;
}
//延時50*T時間函數
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6254;j>0;j--)
;
}
/*void LEDdisplay()
{
uchar i;
for(i=0;i<18;)
{
LEDIO(num[i]);
LEDRCK();
delay_50ms(20);
i++;
if(i==18)
i=0;
}
}
*/
void main()
{
uchar dat;
TMOD = 0X01;
ET0 = 1;
TR0 = 0;
EA = 1;
DI1 =1;
DI2 =1;
DI3 =1;
DI4 =1;
while(1)
{ dat=~P0;
KeyProc(dat);
}
}
void KeyProc(uchar dat)
{
uchar i;
if(dat==0x00)
{
TR0=0;BeepIO=1;
return;
}
switch(dat)
{
case 0x01: i=0;
break;
case 0x02: i=1;
break;
case 0x04: i=2;
break;
case 0x08: i=3;
break;
case 0x10: i=4;
break;
case 0x20: i=5;
break;
case 0x40: i=6;
break;
case 0x80: i=7;
break;
default:break;
}
if(i<7)
{
LEDIO(num[i+1]);
LEDRCK();
SoundTH =tune[i]/256;
SoundTL =tune[i]%256;
TR0=1;}
else
{Song();
}
}
void BeepTimer()interrupt 1
{
BeepIO=!BeepIO;
TH0= SoundTH;
TL0= SoundTL;
}
作者:
無所謂shine
時間:
2017-6-22 13:43
自己頂下
作者:
溶月淡風
時間:
2017-12-17 21:53
調試有錯
作者:
小明1939604039
時間:
2017-12-17 22:08
你按鍵沒有消抖
作者:
郝炯
時間:
2017-12-17 22:59
消抖動
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美日韩在线高清
|
成人福利电影
|
精品欧美一区免费观看α√
|
久久成人国产精品
|
精精久久
|
国产成人久久av免费高清密臂
|
成人 在线
|
国产成人网
|
夏同学福利网
|
欧美一级www片免费观看
|
亚洲成人免费
|
中文字幕在线中文
|
国产亚洲精品久久情网
|
亚洲视频一区
|
国产乱人伦精品一区二区
|
a国产一区二区免费入口
|
久久之精品
|
91影视
|
国产大片一区
|
久久久这里都是精品
|
精品视频免费
|
亚洲第一成人av
|
国产精品久久久久久久久久久新郎
|
成人在线观看免费
|
成人在线精品
|
五月天天色
|
最新免费av网站
|
亚洲国产激情
|
青青草华人在线视频
|
在线视频亚洲
|
av香蕉
|
免费观看一区二区三区毛片
|
欧美一区免费
|
91亚洲国产成人久久精品网站
|
日韩av电影院
|
成人区精品
|
在线观看免费黄色片
|
成人精品久久久
|
国产精品一二三区在线观看
|
欧美精品日韩
|
欧美一区二区三区四区在线
|