实例介绍
【实例截图】
【文件目录】
激光琴资料
├── 激光竖琴程序.c
├── 激光竖琴原理图.SCHDOC
├── 激光竖琴原理图.pdf
└── 激光竖琴制作教程.doc
0 directories, 4 files
-
名称:电子琴
-
编写:Cgr
-
修改:无
-
内容:7个激光束控制7个音符7个LED显示,1个控制播放音乐,1个高中低音切换
-
-
------------------------------------------------*/
-
#include "reg52.h"
-
#include "intrins.h"
-
-
sbit SPK = P3^4;
-
sbit LED_L = P3^7;
-
sbit LED_M = P3^6;
-
sbit LED_H = P3^5;
-
sbit KEY = P3^3;
-
-
#define KEYDELAY 20
-
#define KEY_PORT P2
-
#define LED_PORT P1
-
-
bit FT_1ms,FT_250ms;
-
bit F_PlaySong,F_PlayTone,F_KeyDelay,F_Tone,F_KeyUp,F_Music_Ide;
-
unsigned char Freq_H,Freq_L,SongLen,PlayIde,i;
-
unsigned char KeyBuf,KeySure,KeyDelay_Cnt,Timer1_Cnt,KeyDelay_Cnt1;
-
unsigned char k,Time,PortTemp;
-
-
//世上只有妈妈好数据表
-
code unsigned char MUSIC[]={6,2,6, 5,2,2, 3,2,4, 5,2,4, 1,3,4, 6,2,2, 5,2,2,
-
6,2,8, 3,2,4, 5,2,2, 6,2,2, 5,2,4, 3,2,4, 1,2,2,
-
6,1,2, 5,2,2, 3,2,2, 2,2,8, 2,2,6, 3,2,2, 5,2,4,
-
5,2,2, 6,2,2, 3,2,4, 2,2,4, 1,2,8, 5,2,6, 3,2,2,
-
2,2,2, 1,2,2, 6,1,2, 1,2,2, 5,1,12, 0,0,0
-
};
-
/***********************生日快乐**********************/
-
code unsigned char MUSIC1[]={
-
5,1,2, 5,1,2, 6,1,4, 5,1,4, 1,2,4, 7,1,8,
-
5,1,2, 5,1,2, 6,1,4, 5,1,4, 2,2,4, 1,2,8,
-
5,1,2, 5,1,2, 5,2,4, 3,2,4, 1,2,4, 7,1,4,
-
6,1,8, 4,2,2, 4,2,2, 3,2,4, 1,2,4, 2,2,4,
-
1,2,12, 0,0,0};
-
-
// 音阶频率表 高八位
-
code unsigned char 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 unsigned char 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 TimerInit(void)
-
{
-
TMOD = 0x11;
-
TH1 = (65536 - 1000) / 256;
-
TL1 = (65536 - 1000) % 256;
-
ET0 = 1;
-
ET1 = 1;
-
TR0 = 1;
-
TR1 = 1;
-
EA = 1;
-
}
-
void ScanKey(void)
-
{
-
if(F_KeyDelay)
-
{
-
KeyDelay_Cnt --;
-
if(KeyDelay_Cnt == 0)
-
{
-
F_KeyDelay = 0;
-
KeySure = KeyBuf;
-
F_KeyUp = 1;
-
}
-
}
-
if(KeyBuf != KEY_PORT)
-
{
-
KeyBuf = KEY_PORT;
-
KeyDelay_Cnt = KEYDELAY;
-
F_KeyDelay = 1;
-
}
-
-
if(!KEY)
-
{
-
KeyDelay_Cnt1 --;
-
if(KeyDelay_Cnt1 == 0)
-
{
-
if(F_PlaySong == 0)
-
{
-
F_Music_Ide = !F_Music_Ide;
-
F_PlaySong = 1;
-
i = 0;
-
}
-
}
-
}
-
else
-
{
-
KeyDelay_Cnt1 = KEYDELAY;
-
}
-
if(PlayIde == 1)
-
{
-
LED_L = 1;
-
LED_M = 0;
-
LED_H = 1;
-
}
-
if(PlayIde == 2)
-
{
-
LED_L = 1;
-
LED_M = 1;
-
LED_H = 0;
-
}
-
if(PlayIde == 0)
-
{
-
LED_L = 0;
-
LED_M = 1;
-
LED_H = 1;
-
}
-
}
-
void main(void)
-
{
-
TimerInit();
-
F_PlayTone = 0;
-
PortTemp = 0x7f;
-
for(i = 0;i < 7;)
-
{
-
if(FT_250ms)
-
{
-
FT_250ms = 0;
-
i ;
-
PortTemp = _crol_(PortTemp,1);
-
LED_PORT= PortTemp;
-
}
-
}
-
for(i = 0;i < 7;)
-
{
-
if(FT_250ms)
-
{
-
FT_250ms = 0;
-
i ;
-
PortTemp = _cror_(PortTemp,1);
-
LED_PORT= PortTemp;
-
}
-
}
-
LED_PORT = 0xff;
-
i = 0;
-
while(1)
-
{
-
if(FT_1ms)
-
{
-
FT_1ms = 0;
-
WDT_CONTR = 0x38;
-
ScanKey();
-
if(F_PlaySong)
-
{
-
if(FT_250ms)
-
{
-
FT_250ms = 0;
-
if(Time > 0)
-
{
-
Time --;
-
}
-
else
-
{
-
PortTemp = 0x01;
-
F_PlayTone = 1;
-
if(F_Music_Ide)
-
{
-
k = MUSIC[i] 7 * MUSIC[i 1] - 1;//去音符振荡频率所需数据
-
PlayIde = MUSIC[i 1] - 1;
-
PortTemp <<= (MUSIC[i]-1);
-
Time = MUSIC[i 2] - 1; //节拍时长
-
if(! MUSIC[i])
-
{
-
i = 0;
-
F_PlaySong = 0;
-
LED_PORT = 0xff;
-
F_PlayTone = 0;
-
SPK = 1;
-
PlayIde = 1;
-
Time = 4;
-
}
-
}
-
else
-
{
-
k = MUSIC1[i] 7 * MUSIC1[i 1] - 1;//去音符振荡频率所需数据
-
PlayIde = MUSIC1[i 1] - 1;
-
PortTemp <<= (MUSIC1[i]-1);
-
Time = MUSIC1[i 2] - 1; //节拍时长
-
if(! MUSIC1[i])
-
{
-
i = 0;
-
F_PlaySong = 0;
-
LED_PORT = 0xff;
-
F_PlayTone = 0;
-
SPK = 1;
-
PlayIde = 1;
-
Time = 4;
-
}
-
}
-
PortTemp = ~PortTemp;
-
LED_PORT = PortTemp;
-
Freq_H = FREQH[k];
-
Freq_L = FREQL[k];
-
i = i 3;
-
}
-
}
-
}
-
else
-
{
-
switch(KeySure)
-
{
-
-
case 0x81: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=0; LED_PORT = 0xfe;
-
break;
-
case 0x41: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=1; LED_PORT = 0xfd;
-
break;
-
case 0x21: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=2; LED_PORT = 0xfb;
-
break;
-
case 0x11: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=3; LED_PORT = 0xf7;
-
break;
-
case 0x09: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=4; LED_PORT = 0xef;
-
break;
-
case 0x05: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=5; LED_PORT = 0xdf;
-
break;
-
case 0x03: F_Tone = 0;F_PlayTone = 1; Timer1_Cnt = 0;k=6; LED_PORT = 0xbf;
-
break;
-
case 0x00:
-
if(F_KeyUp)
-
{
-
F_KeyUp = 0;
-
PlayIde ;
-
if(PlayIde == 3)
-
{
-
PlayIde = 0;
-
}
-
}
-
break;
-
default:
-
break;
-
}
-
Freq_H = FREQH[(PlayIde * 7) k];
-
Freq_L = FREQL[(PlayIde * 7) k];
-
if(F_Tone)
-
{
-
F_Tone = 0;
-
F_PlayTone = 0;
- ……………………
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论