51单片机 使用蜂鸣器播放简单音乐
来源:互联网 发布:淘宝上卖宠物用品货源 编辑:程序博客网 时间:2024/05/02 05:05
MCU型号 STC 89C52RC
#include <reg52.h>#define RldTmr(fr) 65536 - (11059200 / 12) / (fr << 1)#define FuDian(n) (n << 1) / 3 //附点n分音符的换算typedef unsigned char UCHAR;typedef unsigned int UINT;typedef unsigned long ULONG;sbit BUZZ = P1^6;UINT code noteFreq[] = { //中音 1-7 和高音 1-7对应的频率列表 523, 587, 659, 698, 784, 880, 988, 1047, 1175, 1319, 1397, 1568, 1760, 1976};UINT code tmrRld[] = { //中音 1-7 和高音 1-7对应的定时器重载值 RldTmr(523), RldTmr(587), RldTmr(659), RldTmr(698), RldTmr(784), RldTmr(880), RldTmr(988), RldTmr(1047), RldTmr(1175), RldTmr(1319), RldTmr(1397), RldTmr(1568), RldTmr(1760), RldTmr(1976),};UCHAR code musicNote[] = { //音名 1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5, 5, 6, 5, 4, 3, 1, 5, 6, 5, 4, 3, 1, 1, 5, 1, 1, 5, 1};UCHAR code noteDuration[] = { //音名对应的时值,4表示4分音符,8表示8分音符,16表示16分音符 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 2, FuDian(8), 16, FuDian(8), 16, 4, 4, FuDian(8), 16, FuDian(8), 16, 4, 4, 4, 4, 2, 4, 4, 2};bit enable = 1, tmrFlg = 0;UCHAR T0RH = 0XFF, T0RL = 0X00;void Delay(UINT n);void PlayMusic(UCHAR speed); //固定标准为4分音符的速度:例如speed = 108 表示一分钟扫过108个4分音符void main() { EA = 1; TMOD = 0X01; TH0 = T0RH; TL0 = T0RL; ET0 = 1; TR0 = 1; while (1) { PlayMusic(72); Delay(40000u); }}void Delay(UINT n) { UINT i; for (i = 0; i < n; i++) ;}void PlayMusic(UCHAR speed) { UCHAR i; UCHAR idx; UINT cnt = 0; UINT durationCnt = 0;//当前音符的时值对应的定时器计数 UINT soundCnt = 0;//当前音符的发声时值对应的计数值 for (i = 0; i < sizeof (musicNote); ) { while (!tmrFlg) ; tmrFlg = 0; if (cnt == 0) { idx = musicNote[i] - 1; T0RH = tmrRld[idx] >> 8; T0RL = tmrRld[idx]; durationCnt = (ULONG)240 * (ULONG)noteFreq[idx] / ((ULONG)noteDuration[i] * (ULONG)speed); soundCnt = durationCnt - (durationCnt >> 2);//当前音符时值的前3/4发声,后1/4静音 enable = 1; cnt++; } else { if (cnt == durationCnt) { cnt = 0; i++; } else { cnt++; if (cnt == soundCnt) { enable = 0; } } } }}void InterruptTmr0() interrupt 1 { TH0 = T0RH; TL0 = T0RL; tmrFlg = 1; if (enable) BUZZ = ~BUZZ; else BUZZ = 1;}
0 0
- 51单片机 使用蜂鸣器播放简单音乐
- 单片机蜂鸣器音乐播放
- 51单片机—用蜂鸣器播放音乐
- 51单片机使用蜂鸣器
- 【51单片机学习笔记】基于STC11F04E的蜂鸣器音乐播放器
- CC2530 蜂鸣器 播放音乐
- Arduino和蜂鸣器制作简单的音乐播放器
- 51单片机之简单的音乐播放器
- 51单片机之简单的音乐播放器
- 51单片机用无源蜂鸣器播放凤凰传奇神曲
- 51单片机STC89C52 蜂鸣器
- 【51单片机】蜂鸣器
- 51单片机 蜂鸣器
- 51单片机蜂鸣器操作
- 详解51单片机播放音乐、电子琴、快进
- 单片机音乐播放器
- Arduino 无源蜂鸣器 音乐播放实验
- 无源蜂鸣器与播放音乐(总结)
- sqlite数据库
- 51CTO Storm项目实战视频教程【价值175元】
- 关于苹果设计,讲些你不知道的
- 《数据结构》实验三:栈和队列实验 (实验报告)
- 项目中Git的使用
- 51单片机 使用蜂鸣器播放简单音乐
- 五档调光项目用WinAVR,STK500, Avrdude以及AVR Dope和CDC比HID模式驱动的问题总结
- iOS应用的本地化
- C# windows服务没有RunInstallerAttribute.Yes的公共安装程序
- 专访UCloud王冬冬:UDDP如何在大数据下抛头露面
- HDU MophuesMophues
- shell 倒计时
- 大数据技术贴:构建一个有指导的数据挖掘模型
- Chrome DEBUG network 的Timing说明