最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

单片机 生日快乐歌程序

IT圈 admin 31浏览 0评论

2024年3月20日发(作者:奉家欣)

实验名称:生日快乐歌程序

组员名单:A706

指导教室:### 日期:2009年11月10日

#include //包含头文件

#define uint unsigned int //宏定义,定义uint 为无符号整形变量

#define uchar unsigned char//宏定义,定义uchar为无符号字符形变量

sbit BUZZER= P3^6; //定义p3.6为蜂鸣器输出口

uchar code

tab_1[16]={0xFF,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0x

FE,0xFE,0xFE}; //定义音调,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长

的时间。

uchar code

tab_2[16]={0xF1,0x4,0x90,0xC,0x44,0xAC,0x9,0x34,0x82,0xC8,0x06,0x22,0x56,0x85,

0x9A,0xC1}; //定义音调

uchar code

music[32]={8,0,8,9,8,0xB,0xA,0,8,0,8,9,8,0xC,0xB,0,8,0,8,0xF,0xD,0xB,0xA,9,0xE,0,0xE

,0xD,0xB,0xC,0xB,0x0};//定义调用音符数组

uchar code

music_L[32]={2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4};//定义节拍

uchar a,b; //定义a,b 无符号字符型变量。

void delay(uint v) //延时涵数

{

while(v!=0) v--;

}

void delay1(uint j)//延时涵数

{

while(j!=0){j--;delay(180);}

}

void delay2(uint j)//延时涵数

{

while(j!=0){j--;delay1(70);}

}

/*主涵数*/

main()

{

uchar k,n,m; //定义无符号字符型变量k,n,m

TMOD=0x11; //计数器以方式一工作,16位计数器

EA=1;//开启所有中断

ET1=1;//允许定时计数器T1中断

TR1=1;//开启定时计数器T1

while(1)主程序循环

{

for(k=0;k<32;k++)//内循环,程序执行32次《输出32个音符》。

{

n=music[k];//把music[] 的数据读到n

m=music_L[k];//把music_L[]《节拍》 的数据读到m

a=tab_1[n];//把tab_1[]《音调》数据读到a

b=tab_2[n];//把tab_2[]《音调》数据读到b

delay2(m);//调用延时涵数delay2(),节拍

}

}

/*定时计数器1溢出中断服务程序*/

time1 () interrupt 3 using 3

{

TH1=a;//把a的数据读到TH1,定时器1高八位置位

TL1=b;//把b的数据读到TL1,定时器1低八位置位

BUZZER=!BUZZER; //蜂呜器取反输出

}

2024年3月20日发(作者:奉家欣)

实验名称:生日快乐歌程序

组员名单:A706

指导教室:### 日期:2009年11月10日

#include //包含头文件

#define uint unsigned int //宏定义,定义uint 为无符号整形变量

#define uchar unsigned char//宏定义,定义uchar为无符号字符形变量

sbit BUZZER= P3^6; //定义p3.6为蜂鸣器输出口

uchar code

tab_1[16]={0xFF,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0x

FE,0xFE,0xFE}; //定义音调,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长

的时间。

uchar code

tab_2[16]={0xF1,0x4,0x90,0xC,0x44,0xAC,0x9,0x34,0x82,0xC8,0x06,0x22,0x56,0x85,

0x9A,0xC1}; //定义音调

uchar code

music[32]={8,0,8,9,8,0xB,0xA,0,8,0,8,9,8,0xC,0xB,0,8,0,8,0xF,0xD,0xB,0xA,9,0xE,0,0xE

,0xD,0xB,0xC,0xB,0x0};//定义调用音符数组

uchar code

music_L[32]={2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4};//定义节拍

uchar a,b; //定义a,b 无符号字符型变量。

void delay(uint v) //延时涵数

{

while(v!=0) v--;

}

void delay1(uint j)//延时涵数

{

while(j!=0){j--;delay(180);}

}

void delay2(uint j)//延时涵数

{

while(j!=0){j--;delay1(70);}

}

/*主涵数*/

main()

{

uchar k,n,m; //定义无符号字符型变量k,n,m

TMOD=0x11; //计数器以方式一工作,16位计数器

EA=1;//开启所有中断

ET1=1;//允许定时计数器T1中断

TR1=1;//开启定时计数器T1

while(1)主程序循环

{

for(k=0;k<32;k++)//内循环,程序执行32次《输出32个音符》。

{

n=music[k];//把music[] 的数据读到n

m=music_L[k];//把music_L[]《节拍》 的数据读到m

a=tab_1[n];//把tab_1[]《音调》数据读到a

b=tab_2[n];//把tab_2[]《音调》数据读到b

delay2(m);//调用延时涵数delay2(),节拍

}

}

/*定时计数器1溢出中断服务程序*/

time1 () interrupt 3 using 3

{

TH1=a;//把a的数据读到TH1,定时器1高八位置位

TL1=b;//把b的数据读到TL1,定时器1低八位置位

BUZZER=!BUZZER; //蜂呜器取反输出

}

发布评论

评论列表 (0)

  1. 暂无评论