单片机蜂鸣器唱歌程序

#include

#define uchar unsigned char

#define uint unsigned int

uchar Count;

sbit Speak =P1^2; //蜂鸣器器控制脚  

/*以下数组是音符编码*/

unsigned char code SONG[] ={ //祝你平安

0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,

0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,

0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,

0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,

0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,

0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,

0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,

0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,

0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,

0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,

0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,

0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,

0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,

0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,

//路边的野华不要采

0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,

0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,

0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,

0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,

0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,

0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,

0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,

0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,

0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,

0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,

0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,

0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,

};

/********************************************************************

* 名称 : Time0_Init()

* 功能 : 定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Time0_Init()

{

TMOD = 0x01;

IE = 0x82;

TH0 = 0xDC;

TL0 = 0x00;

}

/********************************************************************

* 名称 : Time0_Int()

* 功能 : 定时器中断,中断中实现 Count 加一

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Time0_Int(

) interrupt 1

{

TH0 = 0xDC;

TL0 = 0x00;

Count++; //长度加1

}

/********************************************************************

* 名称 : Delay_xMs()

* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.

* 输入 : x

* 输出 : 无

***********************************************************************/

void Delay_xMs(uint x)

{

uint i,j;

for(i=0; i

{

for(j=0; j

}

}

/********************************************************************

* 名称 : Play_Song()

* 功能 : 播放蜂鸣器控制程序

* 输入 : i (选择播放哪首歌曲,0为“祝你平安”,1为“路边的野花你不要采”

* 输出 : 无

***********************************************************************/

void Play_Song(uchar i)

{

uchar Temp1,Temp2;

uint Addr;

Count = 0; //中断计数器清0

Addr = i * 217;

while(1)

{

Temp1 = SONG[Addr++];

if (Temp1 == 0xFF) //休止符

{

TR0 = 0;

Delay_xMs(100);

}

else if (Temp1 == 0x00) //歌曲结束符

{

return;

}

else

{

Temp2 = SONG[Addr++];

TR0 = 1;

while(1)

{

Speak = ~Speak;

Delay_xMs(Temp1);

if(Temp2 == Count)

{

Count = 0;

break;

}

}

}

}

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main()

{

Time0_Init(); //定时器0中断初始化

while(1)

{

Play_Song(1); //Play_Song(0)为祝你平安 Play_Song(1)为路边的野花你不要裁

}

}

#include

#define uchar unsigned char

#define uint unsigned int

uchar Count;

sbit Speak =P1^2; //蜂鸣器器控制脚  

/*以下数组是音符编码*/

unsigned char code SONG[] ={ //祝你平安

0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,

0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,

0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,

0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,

0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,

0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,

0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,

0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,

0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,

0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,

0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,

0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,

0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,

0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,

//路边的野华不要采

0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,

0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,

0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,

0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,

0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,

0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,

0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,

0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,

0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,

0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,

0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,

0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,

};

/********************************************************************

* 名称 : Time0_Init()

* 功能 : 定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Time0_Init()

{

TMOD = 0x01;

IE = 0x82;

TH0 = 0xDC;

TL0 = 0x00;

}

/********************************************************************

* 名称 : Time0_Int()

* 功能 : 定时器中断,中断中实现 Count 加一

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Time0_Int(

) interrupt 1

{

TH0 = 0xDC;

TL0 = 0x00;

Count++; //长度加1

}

/********************************************************************

* 名称 : Delay_xMs()

* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.

* 输入 : x

* 输出 : 无

***********************************************************************/

void Delay_xMs(uint x)

{

uint i,j;

for(i=0; i

{

for(j=0; j

}

}

/********************************************************************

* 名称 : Play_Song()

* 功能 : 播放蜂鸣器控制程序

* 输入 : i (选择播放哪首歌曲,0为“祝你平安”,1为“路边的野花你不要采”

* 输出 : 无

***********************************************************************/

void Play_Song(uchar i)

{

uchar Temp1,Temp2;

uint Addr;

Count = 0; //中断计数器清0

Addr = i * 217;

while(1)

{

Temp1 = SONG[Addr++];

if (Temp1 == 0xFF) //休止符

{

TR0 = 0;

Delay_xMs(100);

}

else if (Temp1 == 0x00) //歌曲结束符

{

return;

}

else

{

Temp2 = SONG[Addr++];

TR0 = 1;

while(1)

{

Speak = ~Speak;

Delay_xMs(Temp1);

if(Temp2 == Count)

{

Count = 0;

break;

}

}

}

}

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main()

{

Time0_Init(); //定时器0中断初始化

while(1)

{

Play_Song(1); //Play_Song(0)为祝你平安 Play_Song(1)为路边的野花你不要裁

}

}


    相关文章

    基于单片机的电子音乐门铃设计

    微机控制系统应用方向学年设计任务书 微机控制系统应用方向学年设计说明书 学院名称: 计算机与信息工程学院 班级名称: 计科101 学生姓名: 祖 杰. 赵雷. 周来宇. 朱路平. 张毅苗 学 号:2010211154.2010211150. ...

    单片机毕业设计完整版

    安徽工业大学继续学院 <单片机原理>期末课程设计 题 目: 单片机计时时钟设计与制作 专 业: 电气工程及其自动化 班 级: 14 电 升 姓 名: 夏 云 飞 学 号: [1**********]35 指导老师: 贺 容 波 ...

    北邮小学期AVR单片机模拟电梯系统实验报告

    小学期单片机实验报告 姓名: 申宇飞 班级:信通3班 学号: 班内序号:03 时间:2014/9/9-2014/9/18 基于AVR 单片机的模拟电梯系统制作 目录 基于AVR 单片机的模拟电梯系统制作 .................. ...

    单片机多路抢答器

    基于单片机的多路抢答器 1引言 此次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的抢答器,本方案以AT89C51单片机作为主控核心,与晶振.数码管.蜂鸣器等构成八路抢答器,利用了单片机的延时电路.按键复位电路.时钟电路.定时 ...

    单片机生产实习报告

    生产实习 班 级: ******** 姓 名: 学 号: 成 绩: 电子与信息工程学院 信息与通信工程系 目录 1 设计任务 ......................................................... ...

    热释电红外防盗报警电路设计

    <传感器及应用> 大型作业 -----热释电红外防盗报警电路设计 专业: 班级: 姓名: 学号: 指导老师: 前言 从上世纪初,报警系统就已经在北美稍具雏形.在北美,报警呼救箱放置在街头巷尾,在呼救时发出声响提示,以寻求附近警察 ...

    电子琴实验报告

    电子琴实验报告 一, 实验目的 1.进一步巩固和加深理论课基本知识的理解,提高综合运用所学知识的能力. 2.能根据需要选择参考书,查阅资料,通过独立思考,深入钻研有关问题. 3.学会自己独立分析问题.解决问题. 4.学习按键扫描及蜂鸣器应用 ...

    单片机打铃系统设计

    毕业综合训练 (毕业论文/设计形式用) 课题名称 单片机打铃系统设计 学 院 信息工程学院 专 业 电子信息工程设计 班 级 13专电子1班 姓 名 李跃 学号 2013242638 指导老师 何健 江西科技学院 毕业综合训练任务书 学院 ...

    单片机控制下的坐姿矫正器

    本科毕业论文(设计) 题目: 单片机控制下的坐姿矫正器 学院: 物理与电子科学学院 班级: 2010级电子三班 姓名: 张嘉铭 指导教师: 张丽 职称: 副教授 完成日期: 2014 年 5 月 25 日 单片机控制下的坐姿矫正器 摘要:为 ...