初学单片机,为提高学习兴趣,并且对所学知识的总结与应用,也顺便做笔记,

源码(仅供参考)

#include <REGX52.h>
#include "Delay.h"sbit Buzz = P1^5;#define SPEED 400     //播放速度,值为四分音符的时长(ms)//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#
#define P   0
#define L1  1
#define L1_ 2
#define L2  3
#define L2_ 4
#define L3  5
#define L4  6
#define L4_ 7
#define L5  8
#define L5_ 9
#define L6  10
#define L6_ 11
#define L7  12
#define M1  13
#define M1_ 14
#define M2  15
#define M2_ 16
#define M3  17
#define M4  18
#define M4_ 19
#define M5  20
#define M5_ 21
#define M6  22
#define M6_ 23
#define M7  24
#define H1  25
#define H1_ 26
#define H2  27
#define H2_ 28
#define H3  29
#define H4  30
#define H4_ 31
#define H5  32
#define H5_ 33
#define H6  34
#define H6_ 35
#define H7  36unsigned char MusicSelect , FreqSelect;//索引与频率对照表
code unsigned int  FreqTable_H[] = {
0,
0xF8,0xF8,0xF9,0xF9,0xFA,0xFA,0xFA,0xFB,0xFB,0xFB,0xFB,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};//定时器计时高位 休止符(0) 低调(1~12) 中调(13~24) 高调(25~36)code unsigned int  FreqTable_L[] = {
0,
0x8C,0xF3,0x5B,0xB8,0x15,0x67,0xB9,0x04,0x4B,0x90,0xCF,0x10,0x44,0x79,0xAC,0xDC,0x09,0x34,0x5C,0x82,0xA6,0xC8,0xE8,0x06,0x22,0x3D,0x56,0x6E,0x85,0x9A,0xAE,0xC1,0xD3,0xE4,0xF4,0x03,};//定时器计时低位 休止符(0) 低调(1~12) 中调(13~24) 高调(25~36)/*乐谱好运来*/
code unsigned char Music[] = {
M6,2+1+1,H1,2,H1,2,
M6,4+2,M6,2,
M5,2,M3,2,M5,2,H1,2,
M6,4,0,4,
M6,2,H1,2,H1,2+1,H1,1,
H1,4,M5,4,
M6,2,M5,2,M2,2,M5,2,
M3,4+2,M2,2,
M3,2,M2,2,M1,2,M3,2,
M2,4+2,M3,2,
M6,2,M5,2,M3,2,M6,2,
M6,2,M5,4+2,M6,2,H1,2,H1,2,M6,1,
H2,2,H2,2,H2,2,H1,2,
M6,4,M5,2,H1,2,
M6,4+4,
M6,4+4,                //
M6,4,H3,2+1,H2,1,
H2,4,H1,2,M6,2,
M5,2,H1,2,
M6,4,M6,4,
M6,4,H2,4,
H1,4,M6,2,M5,2,
M2,4,M5,2,M6,2,
M5,2,M3,4+2,M3,4,M6,2+1,M5,1,M6,4,M6,2,M5,2,
M6,4,H2,2+1,H1,1,
H2,4,H2,4,
H1,2+1,H1,1,H1,2,H2,2,
H3,2,H3,2,H2,2,H1,2,
M5,4,H1,2+1,M6,1,
M6,4,M6,4,
M6,4,M6,4,//
H2,4,H2,4,
H2,4,H2,4,H3,4,H3,4,
H3,4,H3,4,
M6,4,M6,4,
M6,4,M6,4,
M6,4,M6,4,
M6,4,M6,4,
0,4,M5,2,M5,2,
M6,4,M6,4,0xFF   //停止标志位
};void Timer0Init()
{TMOD |= 0x01;TL0 = 0x18;TH0 = 0xFC;TR0 = 1;ET0 = 1;EA = 1;
}void main()
{Timer0Init();while(1){if(Music[MusicSelect]!=0xFF)   //判断是否等于终止标志位{FreqSelect = Music[MusicSelect];  //获取音符对应的频率MusicSelect++;                    //MusicSelect++转换至音符长度delay(SPEED/4*Music[MusicSelect]);//选择音符对应的时间长度(时值)MusicSelect++;                   //MusicSelect++转换至下一个音符TR0 = 0;delay(5);                         //音符间短暂停顿TR0 = 1;}  else                           //如果是停止标识符清零重新播放{TR0 = 0;MusicSelect = 0;}             }}void Timer0_Routine() interrupt 1
{if(FreqSelect)   //判断是否为休止符{/*取对应频率值的重装载值到定时器*/TL0 = FreqTable_L[FreqSelect];   //设置定时器初值TH0 = FreqTable_H[FreqSelect];   //设置定时器初值Buzz = !Buzz;//翻转蜂鸣器IO口}
}

最新文章

  1. strcpy与面试官
  2. [POJ]Zipper[动态规划]
  3. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程
  4. 【好消息】Python和Excel终于可以互通了!!
  5. android中如何新建一个activity,《Android Activity》活动的介绍和创建
  6. 网站调用百度地图 根据地址查询经纬度
  7. 通过skimmer发动供应链攻击,苏富比地产100多个网站受影响
  8. 12000字解读BabyCare:母婴用品品牌的终局是走向全品类吗?
  9. python-patterns
  10. 【挨踢人物传】李晨光:兴趣铸就专业,努力决定成败
  11. textview是否超过一行_Android TextView 判断文字内容是否超出显示省略号
  12. json对象、json字符串的区别和相互转换
  13. POJ3322解题报告
  14. 官方微信支付跟特约商户的区别
  15. Android 屏幕适配神器ScreenMatch
  16. linux nohup 命令用法详解
  17. Stanford Parser句法分析标注含义讲解
  18. 网文IP风向之变 | 一点财经
  19. 附彩蛋|Spring Security 竟然故意延长登录时间?知道真相的我惊呆了!
  20. Python连接MySQL数据库部分问题阐述Connection to @localhost failed. [08001] Could not create connection to databa

热门文章

  1. 写一个方法把字符串大小写进行切换【前端每日一题-2】
  2. ios swift MVVM实例(Model-View-ViewModel)
  3. 中国的数字化转型 China’s digital transformation
  4. 第十五章 文正学院成绩录入系统
  5. 课程1 谈论你喜欢的音乐
  6. 添加飞船图像:创建ship类与在屏幕上绘制飞船
  7. 存储过程之八-java代码调用oracle存储过程
  8. 数学计算软件(Matlab、Mathematica)网页版
  9. openEuler couldnt resolve host name
  10. PCL Super4PCS点云粗配准(源码编译)