//-----------------------------------------------------------------
// 名称: 按键控制定时器选播多段音乐
//-----------------------------------------------------------------
// 说明: 本例内置三段音乐曲目,K1可启停音乐播放,K2用于选择音乐段.
//-----------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
//当前曲目索引,音符索引
INT8U Song_idx = 0, Tone_idx = 0;
sbit SPK = P3^7; //蜂鸣器
sbit K1 = P1^0; //播放和停止键K1( 曲目选择键K2由INT0中断控制)
//数码管段码表
INT8U code SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//14个音符在TIMER0模式0下的定时/计数寄存器值初值表
INT8U code HI_LIST[] =
{ 0,226,229,232,234,236,238,240,241,243,244,245,246,247,248 };
INT8U code LO_LIST[] =
{ 0, 4, 12, 9, 20, 2, 8, 6, 2, 22, 5, 26, 1, 4, 2 };
//三段曲目音符(这些数据是任意编写的,读者可以自行修改)
INT8U code Song[][50] =
{
{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},
{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,5,3,3,2,1,1,-1},
{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1}
};
//三段曲目节拍
INT8U code Len[][50] =
{
{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1},
{1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},
{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1}
};
//-----------------------------------------------------------------
// 延时子程序
//-----------------------------------------------------------------
void delay_ms(INT16U ms)
{
INT8U i; while(ms--) for(i = 0; i < 120; i++);
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
}
//-----------------------------------------------------------------
// 外部中断0(K2)
//-----------------------------------------------------------------
void EX0_INT() interrupt 0
{
}
//-----------------------------------------------------------------
// 定时器0中断函数
// SPK输出脉冲,并根据曲目索引及音符索引设置新的定时初值
//-----------------------------------------------------------------
void T0_INT() interrupt 1
{
}
yinyue.zip_按键音乐
版权申诉
174 浏览量
2022-09-21
19:17:04
上传
评论
收藏 22KB ZIP 举报
刘良运
- 粉丝: 71
- 资源: 1万+
最新资源
- 基于python+flask+mysql实现的豆瓣电影可视化系统+源代码+文档说明+数据库sql.zip
- 程氏舞曲V4.2程氏舞曲V4.2程氏舞曲V4.2程氏舞曲V4.2
- FPGA读写 AD9708+ AD9280 ADDA实验Verilog逻辑源码Quartus工程文件+文档说明+硬件参考原理图
- 基于CH340C设计USB转TLL串口通信模块PADS 9.5设计硬件(原理图+PCB)文件.zip
- 信号与系统大作业-图像处理 实现了直接滤波法维纳滤波法最小二乘滤波法LR递归法matlab源码.zip
- php-leetcode题解之最小栈.zip
- php-leetcode题解之最长不含重复字符的子字符串.zip
- php-leetcode题解之最长公共前缀.zip
- php-leetcode题解之最小差值.zip
- php-leetcode题解之最小基因变化.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈