搜档网
当前位置:搜档网 › 用单片机演奏世上只有妈妈好的代码

用单片机演奏世上只有妈妈好的代码

用单片机演奏世上只有妈妈好的代码
用单片机演奏世上只有妈妈好的代码

关于“世上只有妈妈好”的单片机音乐演奏程序

单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。

这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。

半个周期的时间是多长呢?众所周知,周期为频率的倒数,可以通过音符的频率计算出半周期。

演奏时,要根据音符频率的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。

下面是个网上广泛流传的单片机音乐演奏程序,它可以循环的播放“世上只有妈妈好”这首乐曲。很多人都关心如何修改这个乐曲的内容,但是不知如何入手。

做而论道对这个程序,给出说明,希望对大家有所帮助,以后大家自己就能够编写进去新的乐曲。

在这个程序中,有两个数据表,其中存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。

有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共28个音符。演奏乐曲时,就根据音符的不同数值,从半周期数据表中找到定时时间初始值,送入定时器即可控制发音的音调。

比如把表中的0xF2和0x42送到定时器,定时器按照这个初始值来产生中断,输出的方波,人们听起来,这就是低音1。

乐曲的数据,也要写个数据表,程序中以 code unsigned char sszymmh[] 命名。

这个表中每三个数字,说明了一个音符,它们分别代表:

第一个数字是音符的数值1234567之一,代表多来咪发...;

第二个数字是0123之一,代表低音、中音、高音、超高音;

第三个数字是时间长度,以半拍为单位。

乐曲数据表的结尾是三个0。

程序如下:

#include

sbit speaker = P1^7;

unsigned char timer0h, timer0l, time;

//--------------------------------------

//单片机晶振采用11.0592MHz

// 频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据

code unsigned char FREQH[] = {

0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567

0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i

0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 234567

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567

// 频率-半周期数据表低八位

code unsigned char FREQL[] = {

0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567

0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i

0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 234567

0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567

//--------------------------------------

//世上只有妈妈好数据表要想演奏不同的乐曲, 只需要修改这个数据表

code unsigned char sszymmh[] = {

6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1,

//一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以半拍为单位)。//6, 2, 3 分别代表:6, 中音, 3个半拍;

//5, 2, 1 分别代表:5, 中音, 1个半拍;

//3, 2, 2 分别代表:3, 中音, 2个半拍;

//5, 2, 2 分别代表:5, 中音, 2个半拍;

//1, 3, 2 分别代表:1, 高音, 2个半拍;

//

6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,

6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,

5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,

2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0};

//--------------------------------------

void t0int() interrupt 1 //T0中断程序,控制发音的音调

{

TR0 = 0; //先关闭T0

speaker = !speaker; //输出方波, 发音

TH0 = timer0h; //下次的中断时间, 这个时间, 控制音调高低

TL0 = timer0l;

TR0 = 1; //启动T0

}

//--------------------------------------

void delay(unsigned char t) //延时程序,控制发音的时间长度

{

unsigned char t1;

unsigned long t2;

for(t1 = 0; t1 < t; t1++) //双重循环, 共延时t个半拍

for(t2 = 0; t2 < 8000; t2++); //延时期间, 可进入T0中断去发音

TR0 = 0; //关闭T0, 停止发音

}

//--------------------------------------

void song() //演奏一个音符

{

TH0 = timer0h; //控制音调

TL0 = timer0l;

TR0 = 1; //启动T0, 由T0输出方波去发音

delay(time); //控制时间长度

}

//--------------------------------------

void main(void)

{

unsigned char k, i;

TMOD = 1; //置T0定时工作方式1

ET0 = 1; //开T0中断

EA = 1; //开CPU中断

while(1) {

i = 0;

time = 1;

while(time) {

k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;

//第i个是音符, 第i+1个是第几个八度

timer0h = FREQH[k]; //从数据表中读出频率数值

timer0l = FREQL[k]; //实际上, 是定时的时间长度

time = sszymmh[i + 2]; //读出时间长度数值

i += 3;

song(); //发出一个音符

} } }

//======================================

应网友要求,下面再详细写一下乐谱和数据的转换关系。

以李叔同大师的《送别》的前二小节来说明转换的方法。

这部分的歌词是:“长亭外,古道边,”;

这部分的乐谱是:| 5 35 1 - | 6 16 5 - |。

(注意:乐谱中的1是高音,上边是带点的;还有些音符,应该有下划线,在这里都无法标出。感兴趣的网友应该去查看正规的乐谱。)

那么,据此就可以写出《送别》前二小节的数据表:

//--------------------------------------

code unsigned char sszymmh[] = {

5, 2, 2, 3, 2, 1, 5, 2, 1, 1, 3, 4,

//嗦,中音,2个半拍; 咪,中音,1个半拍; 嗦,中音,1个半拍; 哆,高音,4个半拍

6, 2, 2, 1, 3, 1, 6, 2, 1, 5, 2, 4,

//啦,中音,2个半拍; 哆,高音,1个半拍; 啦,中音,1个半拍; 嗦,中音,4个半拍

0, 0, 0};

//结束标记

//--------------------------------------

记住:三个数字一组,代表一个音符。

第一个数字是1234567之一,代表音符哆来咪发...;

第二个数字是0123之一,代表低音、中音、高音、超高音;

第三个数字是半拍的个数,代表时间长度。

当三个数字都是0,就代表乐曲数据表的结尾。

用这个数据表,替换掉程序中《世上只有妈妈好》的数据表,本程序就可以播放《送别》的前两小节。

#include

sbit speaker=P1^2;

unsigned char timer0h,timer0l,time;

//生日歌

code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4, 5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,

5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,

4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4};

// 音阶频率表高八位

code unsigned char FREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,

} ;

// 音阶频率表低八位

code unsigned char FREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i

0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,

};

void delay(unsigned char t)

{

unsigned char t1;

unsigned long t2;

for(t1=0;t1

{

for(t2=0;t2<8000;t2++)

{

;

}

}

TR0=0;

}

void t0int() interrupt 1

{

TR0=0;

speaker=!speaker;

TH0=timer0h;

TL0=timer0l;

TR0=1;

}

void song()

{

TH0=timer0h;

TL0=timer0l;

TR0=1;

delay(time);

}

void main(void)

{

unsigned char k,i;

TMOD=1; //置CT0定时工作方式1

EA=1;

ET0=1;//IE=0x82 //CPU开中断,CT0开中断

while(1)

{

i=0;

while(i<75){ //音乐数组长度,唱完从头再来 k=sszymmh[i]+7*sszymmh[i+1]-1;

timer0h=FREQH[k];

timer0l=FREQL[k];

time=sszymmh[i+2];

i=i+3;

song();

}

}

}

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

例文:世上只有妈妈好

“世上只有妈妈好……”当这首情深意浓的歌在我耳际响起的时候,我的心中就会涌起层层热浪,激起阵阵暖流,母亲那瘦弱的身影就会在我眼前浮现。我的妈妈中等个儿,一双大大的眼睛镶嵌在慈祥、和蔼的脸上,给人一种亲切之感。那本来纤细光滑的双手因日夜操劳而变得像松树皮那样粗糙。额头上已爬满了细细的皱纹,看上去比实际年龄大多了。母亲日复一日,年复一年张罗着全家人的生活,从不说声苦,也不说声累。母亲不仅辛苦,而且对子女百般呵护,倾注了她全部的爱。记得那是我刚升上三年级。开学的第一天,早晨背着洗得发白的书包,准备去上学,向妈妈伸手要书钱时,妈妈说:“你爸爸出外打工,一直没有寄来过钱,家中尽有的一点钱都给你奶奶买药了,你先去报名,我给你想想办法。”听了妈妈的话,我只好悻悻地向学校走去。报名的时候,同学们都把自己的书费交给了老师,只有我怯生生的站在办公桌旁一声不吭,虽然老师没有批评我,只是提醒我第二天带好书费,但我觉得我在同学面前就是一只丑小鸭,我心里充满了对妈妈的怨恨。一整天我都觉得无精打采。下午放学,我憋着一肚子的怨气,快步回到家,怒气冲冲地指着妈妈说:“妈,就怪你,就怪你,今天我在同学们面前丢尽了脸,全班只有我一个人没交书钱!”妈妈望着我,那眼神是那样柔和。她沉默了一会儿,长叹了一口气说:“今天周围的邻居家,我都借过了,可是没借到一分钱。吃过晚饭给你爸爸写信,叫他想办法赶快寄过来,然后再给你好吗?珍儿。”我一听顿时像泄了气的皮球一样,瘫在炕头上痛哭起来,当时我真不知有多么恨妈妈。过了片刻,我抬起了头,此时妈妈垂头丧

气地坐在凳子上,脸上挂着晶莹的泪珠,看到她那失魂落魄的样子,我心里又不是滋味。妈妈坐了好大一会儿,忽然有点兴奋地说:“珍儿,快别哭,我记起来了,冯家台你表叔这几天刚从外地打工回来,说不准有钱。吃过晚饭我去问问”。“哼,别哄我了,表叔家那么远的山路,天又不早了。”我没好气的说。“我几时哄过你,快收拾晚饭。”妈妈边说边急忙起身去做饭。吃过晚饭,妈妈说:“珍儿,认真写作业。你的书皮,回来再包,我先去借钱。”说着急匆匆出了大门。而我呢,草草写完作业,便等妈妈,等着、等着,不知不觉躺在炕上睡着了。第二天早上,我睁开朦胧的双眼,发现枕头边放着一张攥得皱皱巴巴的五十元钱。这下把我高兴得一蹦三尺高,竖着大拇指对妈妈说:“好妈妈,您真好!我要马上去交给老师。”妈妈为了不让女儿丢脸,自己不顾山高路远,不怕天黑地暗,费尽了口舌,受尽了委屈。幼稚的我却不知这些。现在回想起那时无知的我,给妈妈增添的烦恼,悔恨的泪止不住往下流。啊!我的好妈妈,是您给了我生命,给了我幸福的生活。请原谅女儿以前的过错吧!今后我一定会努力学习,决不辜负您的期望,以优异的成绩报答您。评语:该篇文章叙事具体,表达的感情细腻感人。先具体写无知的我,由于妈妈没有及时准备书费而心生怨恨。后写长大后想起这件事产生的懊悔。这种恨与爱交织在一起,使文章的主题更加鲜明。再加上小作者成功的外貌、语言描写,使一位贤惠、善良的妇女形象展现在我们的面前。 妈妈我想对您说

单片机蜂鸣器播放音乐

#include #define uchar unsigned char #define uint unsigned int sbit speaker = P1^7; uint j; uchar m=1; uchar flag; uchar line; uchar code * data song; // 休止符低6 低7 中1 中2 中3 中4 中5 中 6 中7 高 1 低 3 低 5 低 4 高3 uchar code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xF D,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85}; uchar code song1[97]={0x34,0x32,0x32,0x34,0x42,0x51, //<<干杯,朋友>> 0x62,0x52,0x42,0x32,0x34,0x04, 0x74,0x74,0x62,0x62,0x64, 0x3c,0x04, 0x64,0x62,0x52,0x42,0x32,0x34, 0x33,0x31,0x32,0x72,0x76,0x72, 0x83,0x81,0x82,0x82,0x82,0x74,0x72, 0x7c,0x04, 0x63,0x61,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x44,0x42,0x42,0x52,0x62,0x52, 0x5c,0x04, 0x64,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x46,0x53,0x41,0x42,0x32, 0x3c,0x04, 0x44,0x48,0x02,0x32, 0x3f, 0x44,0x48,0x02,0x32, 0x3f, 0x34,0x0c, 0xFF}; uchar code song2[46]={0x12,0x52,0x52,0x52,0x56,0x42, //<<兰花草>>

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

51单片机蜂鸣器播放音乐代码

/*生日快乐歌曲*/ #include <> #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j // 这是单片机音乐代码生成器生成的代码 #define uchar unsigned char sbit beepIO=P1^5; // 输出为可以修改成其它 IO 口uchar m,n;

世上只有妈妈好.doc

世上只有妈妈好 我的妈妈是一位勤劳、朴素的妇女。她既不像科学家那样赫赫有名,又不像大名鼎鼎的明星那样引人注目。可是在我的眼中,她那么的让人敬佩,那么让人羡慕。我总觉得她时时刻刻都在无微不至的关心着我,教育着我…… 有一次,我空闲时翻了翻《笑话大全》,看到这样一则笑话,说的是:小明的妈妈平时总爱吃烂香蕉、烂苹果、烂梨子……让小明吃好的水果。一次,小明的妈妈因病住进了医院,小明来到妈妈的病房,特意挑出烂苹果递给妈妈,说:“妈妈,这是喜欢的水果。”这一则笑话,不仅没让我哈哈大笑,还差点让我声泪惧下。是呀!许多家庭都发生过这样的事。我妈妈的“爱好”不是香蕉、不是苹果,而是鱼。 平时我们家一个月只吃几次鱼,每当我们家吃鱼时,妈妈总是把鱼用刀切成三段――第一段是鱼头、第二段是鱼肚、第三段就是鱼肚旁的鱼尾。每一次吃鱼头的总是妈妈,而我吃鱼肚,而爸爸就吃鱼尾。 我一开始不明白妈妈为什么这么做,这次吃鱼,我明白了。 又到了吃鱼的日子,妈妈依然按照原来的老方法切鱼,切好鱼、煮好鱼后,便把鱼一段段的放到盘子里,然后端上桌子,看着这样香喷喷的鱼肉,口水便情不自禁的流了出来,妈妈看到这一幕,便把一块鱼肚上的肉放到我的碗里,我狼吞虎咽的吃着。妈妈看到我贪吃的

样子,开心的笑了,便接二连三的把鱼肚上的肉放到我的碗里。直到我把鱼肚上的肉都吃得一一干二净了,妈妈才吃起盘子里的鱼头来。她吃得那么的香甜,那么津津有味,脸上洋溢着一种心满意足的微笑。 看着这种心满意足的微笑,我恍然大悟,原来总是妈妈把好的东西留给我吃。一时间,我仿佛看到妈妈辛苦的背景、景像,我真想大声说:“妈妈呀!您为了我健康、幸福、愉快的生活,付出了很多,长大后我一定要报答您的。”可是话还没说出口,两行晶莹的泪水,沿着我的脸颊,无声的淌了下来…… “世上只有妈妈好,有妈的孩子像块宝,投入妈妈的怀抱,幸福享不了……”每当听见这首歌时,我就会想到:在生活当中,妈妈代表着给予,只有无私的给予,而没有丝毫的索取。每个人都是母亲所生,都受到母亲的哺育。人所共知,在这个社会细胞中,“世上只有妈妈好!” 我的妈妈是一位勤劳、朴素的妇女。她既不像科学家那样赫赫有名,又不像大名鼎鼎的明星那样引人注目。可是在我的眼中,她那么的让人敬佩,那么让人羡慕。我总觉得她时时刻刻都在无微不至的关心着我,教育着我…… 有一次,我空闲时翻了翻《笑话大全》,看到这样一则笑话,说的是:小明的妈妈平时总爱吃烂香蕉、烂苹果、烂梨子……让小明吃好的水果。一次,小明的妈妈因病住进了医院,小明来到妈妈的病房,特意挑出烂苹果递给妈妈,说:“妈妈,这是喜欢的水果。”这

单片机 利用蜂鸣器演奏音乐

实验三-利用蜂鸣器演奏音乐 一、实验目的 1.了解BlueSkyC51单片机实验板中蜂鸣器的硬件电路 2.学会利用蜂鸣器实现音乐的演奏 3.掌握蜂鸣器实现音乐演奏的编程 二、实验硬件设计及电路 1. BlueSkyC51单片机实验板 ` 2.单片机最小系统

。 3.蜂鸣器电路连接 三极管主要是做驱动用的。因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以

我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。 三、实验原理 1.音调及节拍 用一个口,输出方波,这个方波输入进蜂鸣器就会产生声音,通过控制方波的频率、时间,就能产生简单的音乐。一般说来,单片机演奏音乐基本都是单音频率,因此单片机奏乐只需控制音调和节拍。 (1)音调的确定 音调是由频率来确定的。通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O 口来回取反,从而让蜂鸣器发出不同频率的声音。只需将定时器给以不同的定时值就可实现。通过延时,即可发出所需要的频率。 … (2)节拍的确定 一拍的时长大约为400—500ms,每个音符的时长通过节拍来计算。详细见程序代码。 2.软件设计相关 (1)头文件 #include<> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long sbit beep=P1^4; 译实验相关问题 ; (1)实际发音颤音重 解决方法为修改蜂鸣器的驱动频率. (2)实际节奏过快或者过慢 调整延时 四、C51程序代码(部分来源于网络) #include<> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long ~ sbit beep=P1^4; //蜂鸣器与口连接 uchar th0_f; //中断装载T0高8位 uchar tl0_f; //T0低8位 uchar code freq[36*2]={ //音阶码表 0xf7,0xd8, //440hz , 1 //0 0xf8,0x50, //466hz , 1# //1

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

欣赏《世上只有妈妈好》

欣赏《世上只有妈妈好》 看罢《世上只有妈妈好》,泪水早已浸没了我的双眼。 妈妈对子女的爱在这部电影中表现得淋漓尽致。儿子童稚的声音唱出《世上只有妈妈好》的歌曲时,妈妈疲惫的面庞充满了欣慰。独自抚养儿子中的艰辛、劳累,平时遭受到白眼,在一声声的歌曲中早已抛之脑后,有的只是对儿子无尽的爱,儿子就是她的一切。 然而。伯父对自己地劝谏“孩子只有在北平才能获得更好的教育啊”和伯父对伯母地质问“你怎么那么自私,只考虑你自己而不考虑别人”,这两句话不停地在自己的耳边回荡,在她的心中掀起了巨浪。是啊,不能因为爱儿子,儿子就是自己的一切就耽误了儿子的前程啊。泪水早已湮没了她那柔弱的内心,她仍毅然将儿子送到他父亲那,儿子撕心裂肺的哭声和多次偷偷跑回来找妈妈的行为如一根根针扎在她心里。的确,每天晚上她是以泪洗面的,她是含着泪,唱着儿子对她唱过的《世上只有妈妈好》,她也是含着泪。回忆着与儿子在一起的点点滴滴。即使这样,她也是狠下心将儿子再次送回。 一次意外,让她变得神志不清,却依然抱着曾经送给儿子的小熊,嘴中不停地喃喃道:“小强……小强……”儿子长大了,“妈妈,妈妈,我是小强啊”饱含着悲恸与无奈。儿子抱着神志不清的妈妈,同样是含着泪唱着《世上只有妈妈好》,一遍又一遍,如催泪曲一般,让我泪水不止。也正是儿子对妈妈的爱,在一遍

又一遍的歌唱中唤醒了妈妈,给该电影画上了一个圆满的句号。 是的,妈妈对子女的爱是子女们究毕身之力也无法回报完的。作为子女的我们,要懂得感恩,尽己所能,回报父母,要知百善孝为先啊。人云:“读《出师表》不哭则不忠,读《陈情表》不哭则不孝。”而《陈情表》中有言“乌鸟私情,愿岂终养”乌鸦尚能反哺,何况人呢?“臣无祖母,无以至今日”我想说的是,我们如果没有父母,会有今天的我们吗?我们都长大了,是一名大学生了,可我们能够走到今天,还不都是由于父母给我们的指导吗?我们需要感恩,更要报恩。给父母捶捶背、搓搓手、洗洗脚;为家里做几件家务:打扫卫生、叠被子、洗碗、洗衣服等,虽然只是一些小事,可都是在报恩啊。为什么非要到“子欲报母而亲不待”的境地呢? 在懂得对父母感恩的时候,也要懂得对那些帮过你的人感恩,滴水之恩当涌泉相报。人的一生中,从小时候起,就领受着父母的养育之恩;上学后,又接受老师的教育之恩;工作后,又有领导、同事的关怀、帮助之恩;年纪大了之后,又免不了要接受晚辈的赡养、照顾之恩。无论如何,我们都要记住那些帮助过我们的人。 总之,要知恩、感恩、报恩。

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

世上只有妈妈好(相声)

世上只有妈妈好(相声) 甲:爸爸乙:儿子 甲:今天,由我们爷儿俩给大家说段相声,这个相声呀,它…… 乙:(唱)妈妈呀妈妈,亲爱的妈妈,你用那甘甜的乳汁,把我喂养大……甲:等会儿,你这一上台就唱妈妈。 乙:(唱)小时候,妈妈对我讲…… 甲:讲什么啦? 乙:(唱)世上只有妈妈好! 甲:妈妈好,那你说我这当爸爸的咋样啊? 乙:(唱)爸爸象个大活宝! 甲:啊,我象个大活宝! 乙:你看你恼羞成怒、气势汹汹的样子! 甲:啊! 乙:就象个活宝。 甲:唉!你这儿胡说。 乙:有理不在身高。 甲:嗨!我、我还没理了! 乙:妈妈每次都跟我讲到你。 甲:啊! 乙:不-像-样,就知道骂人! 甲:嗨,我什么时候骂人啦? 乙:妈妈加班回来晚了,你骂妈妈假积极,有这事没? 甲:她那是…… 乙:妈妈不收别人送的礼,你骂妈妈是傻气,有这事没? 甲:我…… 乙:最可气的就是! 甲:喔 乙:你打麻将不糊牌,还说家里什么、什么风水不好。 甲:我这是什么时候说的? 乙:动物园老虎呆的假山,那地方风水好。你敢去吗? 甲:对,我去喂老虎去啦! 乙:爸爸就是没有妈妈好! 甲:爸爸就是比妈妈好!我问你,你小时候尿片是不是爸爸洗的? 乙:尿片子? 甲:对。 乙:我记不清了。 甲:是记不清,那你每次生病是不是爸爸送你上的医院? 乙:那是应该的呀!

甲:是应该的!那你看的小人书,是不是爸爸给你买的? 乙:是你买的。 甲:那不结了! 乙:可是,是买给你自己的。 甲:啊,我看小人书? 乙:看了,还学了。 甲:学什么? 乙:嗨!“我一定会回来的”!“巴拉巴拉小魔仙变身”! 甲:那我成孩子啦! 乙:爸爸就是没有妈妈好。 甲:我再问问你。 乙:唉! 甲:我教你唱过歌吧?我教你唱的歌总比你妈妈教的强吧? 乙:妈妈教的歌好唱,你教的歌我唱不了。 甲:我教的哪首歌你唱不了? 乙:就那首。 甲:你给我唱唱。 乙:你听着。(唱)妹妹你的大胆的往前走啊!往前走、莫回呀头…… 甲:暂停!再走你就掉下台去了。我教你这么多歌,你专拿这首歌损我。 乙:爸爸就是没有妈妈好! 甲:***,今天你就当着大伙的面,说爸爸几句好话。 乙:行啊! 甲:那你快说说吧! 乙:我还没学会。 甲:那你唱两句赞美爸爸的歌。 乙:哪有唱爸爸的歌? 甲:怎么没有? 乙:不唱不唱。 甲:那我唱出来,怎么办? 乙:奖励你今天洗碗呗! 甲:这不像话,真的有唱爸爸的歌。(唱)爸爸呀爸爸,啊亲爱的爸爸…… 乙:什么,这是唱妈妈的歌! 甲:这是唱妈妈的,对,妈妈的,嗨,听(唱)爸爸,爸爸、爸爸、爸爸、亲爱的爸爸,爸爸,爸爸、爸爸、爸爸、慈祥的爸爸!你满嘴没有一颗牙,满头是白发,整天嘻嘻又哈哈,象个洋娃娃。 你说,这是不是唱爸爸的歌? 乙:这根本就不是唱爸爸的。 甲:那是唱谁的? 乙:是唱爷爷的。 甲:啊!……(完)

单片机蜂鸣器播放音乐

#include #define uchar unsigned char #define uint unsigned int sbit sp eaker = P1^7; uint j; uchar m=1; uchar flag; uchar line; uchar code * data song; // 中4 高3 中5 休止 符 低6 中7 低7 高1 中1 低3 中2 低5 中3 低4 uchar code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xF D,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85}; uchar code song1[97]={0x34,0x32,0x32,0x34,0x42,0x51, 0x62,0x52,0x42,0x32,0x34,0x04, //<< 干杯,朋友>> 0x74,0x74,0x62,0x62,0x64, 0x3c,0x04, 0x64,0x62,0x52,0x42,0x32,0x34, 0x33,0x31,0x32,0x72,0x76,0x72, 0x83,0x81,0x82,0x82,0x82,0x74,0x72, 0x7c,0x04, 0x63,0x61,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x44,0x42,0x42,0x52,0x62,0x52, 0x5c,0x04, 0x64,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x46,0x53,0x41,0x42,0x32, 0x3c,0x04, 0x44,0x48,0x02,0x32, 0x3f, 0x44,0x48,0x02,0x32, 0x3f, 0x34,0x0c, 0xFF}; uchar code song2[46]={0x12,0x52,0x52,0x52,0x56,0x42, //<< 兰花草>>

相声:世上只有妈妈好

相声:世上只有妈妈好 甲:爸爸乙:儿子 甲:今天,由我们爷儿俩给大家说段相声,这个相声呀,这…… 乙:(唱)妈妈呀妈妈,亲爱的妈妈,你用那甘甜的乳汁,把我喂养大…… 甲:等会儿,你这一上台就唱妈妈。 乙:(唱)小时候,妈妈对我讲…… 甲:讲什么啦? 乙:(唱)世上只有妈妈好。 甲:妈妈好,那你说我这当爸爸的呢? 乙:(唱)爸爸像个大活宝。 甲:啊,我像个大活宝。 乙:你看你老羞成怒,气势汹汹的样子。 甲:啊 乙:就像个大活宝。 甲:啊 乙:就像个大活宝。 甲:唉,你这胡说。 乙:有理不在声高。 甲:嗨,我,我还没理了。 乙:妈妈每次都跟我讲道理。甲:啊。 乙:不像你,就知道骂人。 甲:嗨,我什么时候骂人啦。 乙:妈妈加班回来晚了,你骂妈妈假积极,有这事没?甲:她那是…… 乙:妈妈不收别人送的礼,你骂妈妈是傻气,有这事没?甲:我…… 乙:最可气的就是 甲:喔 乙:你打麻将不糊牌,还说家里什么,什么风水不好。甲:我这是什么时候说的? 乙:动物园老虎躲的假山,那地方风水好,你敢去吗?甲:对,我去喂老虎去啦! 乙:爸爸就是没有妈妈好。 甲:爸爸就是比妈妈好。我问你,小时候尿片子是不是爸爸洗的? 乙:尿片子? 甲:对! 乙:我记不清了。 甲:是记不清,那你每次生病是不是爸爸送你上的医院?乙:那是应该的呀! 甲:是应该的。那你看的小人书,是不是爸爸给你买的?乙:是你买的。

甲:这不得了。 乙:可是买给你自己的。 甲:啊,我看小人书? 乙:看了还学了。 甲:学什么? 乙:嗨!人间大炮一级准备,如来佛主前来拜访。 甲:我成那孩子啦! 乙:爸爸就是没有妈妈好。 甲:我再问问你。 乙:唉! 甲:我教你唱过歌吧?我教你唱的歌总比你妈妈教的强吧? 乙:妈妈教的歌好唱,你教的歌我唱不了。 甲:我教哪首歌你唱不了? 乙:就那首。 甲:你给我唱唱。 乙:你听着。(唱)妹妹你大胆的往前走呀,往前走,莫回呀头…… 甲:暂停,再走你就摔下台去了,我教你这么多歌,你专拿这首歌损我。 乙:爸爸就是没有妈妈好。 甲:乖儿子,今天你就当着大伙的面,说爸爸几句好话。乙:行啊。甲:那你快说吧! 乙:我还没学会。 甲:那你唱两句赞美爸爸的歌。 乙:哪有唱爸爸的歌? 甲:怎么没有? 乙:不唱不唱。 甲:那我唱出来,怎么办? 乙:奖两项条例。 甲:这不像话,真的唱爸爸的歌,(唱)爸爸呀爸爸,呀……乙:什么,这是唱妈妈的歌。 甲:这是唱妈妈的,对,妈妈的,嗨,听(唱)爸爸、爸爸、爸爸、爸爸,亲爱的爸爸,爸爸、爸爸、爸爸、爸爸,慈祥的爸爸,你满嘴没有一颗牙,满头是白发,整天嘻嘻又哈哈,象个洋娃娃。你说这是不是唱爸爸的歌? 乙:这根本就不是唱爸爸的歌。 甲:那是唱谁的? 乙:是唱爸爸的。 甲:啊!

51单片机蜂鸣器播放单音节音乐

51单片机的唱歌实验 晶振:11.0592MHZ 程序: #include #define uchar unsigned char bit flag; //标志音乐输出脚电平的高低 uchar ptr = 0x00; //取音符 uchar high; //计数器高位 uchar low; //计数器低位 // 本曲谱为"新年好",前两个十六进制表示发声频率,后一个表示发声时间,0xFF,0xFF 表示休止符 // 0x00 表示结束 // 1 _ 1_ 1 .5 uchar code music[] = { 0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF, // 3 _ 3_ 3 1 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, // 1_ 3_ 5 5 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF, // 4_ 3_ 2 - 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF, // 2_ 3_ 4 4 0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF, // 3_ 2_ 3 1 0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, // 1_ 3_ 2 .5 0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF, // .7_ 2_ 1 - 0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF, 0x00//结束 }; void Init(void); //初始化函数 void DelayMs(unsigned int time); //毫秒级延时函数 void main() { uchar time; Init(); TH0 = high; TL0 = low; while (1) {

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/7f355496.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/7f355496.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/7f355496.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

单片机控制蜂鸣器概要

单片机控制蜂鸣器20年月日

目录 绪论 (1) 1、硬件设计 (2) 1.1 总体设计图 (2) 1.2 简易结构框图 (2) 1.3各部分硬件设计及功能 (3) 1.3.1 蜂鸣器发声电路:(如图1.3.1) (3) 1.3.2 电源稳压电路: (4) 1.4 元件清单 (4) 2、软件设计 (5) 2.1设计思想 (5) 2.2 程序流程图 (5) 2.3 音调、节拍以及编码的确定方法 (6) 2.3.1音调的确定 (6) 2.3.2 节拍的确定 (8) 2.3.3 编码 (9) 3、电路仿真与分析 (10) 4、电路板焊接、调试 (11) 4.1 焊接 (11) 4.2 调试 (12) 5、讨论及进一步研究建议 (12) 6、心得 (12) 7、单片机音乐播放器程序实例(卡农) (13)

绪论 蜂鸣器播放音乐电路设计对于单片机初学者来说是一个简单易实现的课题。通过编写程序使单片机产生一定频率的方波信号,方波信号进入蜂鸣器便产生我们熟知的音调。 我们用定时/计数器使单片机产生方波,利用定时/计数器使输出管脚在一定周期内反复翻转,达到所需频率,而我们给定时/计数器的初始值就是我们的音符—半周期数据表,通过我们播放的音乐的乐谱,来对数据表进行调用。 我们用延时子程序来表示节拍,不同的节拍代表不同的延时。 完成此次设计之后完全可以进行扩展,例如增加按键以及LED灯光效果,制成一个简易的音乐盒,给人以视觉听觉等全方位的享受。

1、硬件设计1.1 总体设计图 1.2 简易结构框图

1.3各部分硬件设计及功能 1.3.1 蜂鸣器发声电路:(如图1.3.1) 图1.3.1 如图所示,蜂鸣器发声电路是播放音乐电路的主要执行电路,它由一个蜂鸣器,一个三极管和一个电位器组成。蜂鸣器负责发声,三极管将电流放大,而电位器则控制流过蜂鸣器电流的大小,来达到控制音量的目的。

51单片机C语言编程基础和实例之欧阳光明创编

基础知识:51单片机编程基础 欧阳光明(2021.03.07) 单片机的外部结构: 1.DIP40双列直插; 2.P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入 时,要先输出高电平) 3.电源VCC(PIN40)和地线GND(PIN20); 4.高电平复位RESET(PIN9);(10uF电容接VCC与 RESET,即可实现上电复位) 5.内置振荡电路,外部只要接晶体至X1(PIN18)和X0 (PIN19);(频率为主频的12倍) 6.程序配置EA(PIN31)接高电平VCC;(运行单片机内部 ROM中的程序) 7.P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1.四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2.两个16位定时计数器;(TMOD,TCON,TL0,TH0, TL1,TH1) 3.一个串行通信接口;(SCON,SBUF) 4.一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1.十六进制表示字节0x5a:二进制为01011010B;0x6E为 01101110。 2.如果将一个16位二进数赋给一个8位的字节变量,则自动 截断为低8位,而丢掉高8位。 3.++var表示对变量var先增一;var—表示对变量后减一。 4.x |= 0x0f;表示为 x = x | 0x0f;

5.TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四 位赋值0x5,而不改变TMOD的高四位。 6.While( 1 ); 表示无限执行该语句,即死循环。语句后的分号 表示空循环体,也就是{;}

单片机驱动蜂鸣器音乐生日快乐的播放程序

;音乐生日快乐的播放 ;P1.6是喇叭输出端口,用杜邦线连接到J42插针B1针脚,喇叭即播放音乐numtim equ 20h gewei equ 21h shiwei equ 22h scanled equ 23h org 000h jmp start org 00bh jmp tim0 org 100h start:; JB P3.7,$ ;检测播放按键是否按下 mov tmod,#00000001b mov ie,#10000010b mov numtim,#01h start0:mov 30h,#00h next:mov a,30h mov dptr,#table movc a,@a+dptr mov r2,a jz end0 anl a,#0fh mov r5,a mov a,r2 swap a anl a,#0fh jnz sing clr tr0 jmp d1 sing: dec a mov 22h,a rl a mov dptr,#table1 movc a,@a+dptr mov th0,a mov 21h,a mov a,22h rl a inc a movc a,@a+dptr mov tl0,a mov 20h,a

setb tr0 d1:lcall delay inc 30h jmp next end0:clr tr0 jmp start0 tim0:push acc push psw mov tl0,20h mov th0,21h cpl p1.6 ;由该口输出音频数据 pop psw pop acc reti delay: mov r7,#02h d2: mov r4,#187 d3: mov r3,#248 djnz r3,$ djnz r4,d3 djnz r7,d2 djnz r5,delay ret table1: ;音乐码表dw 64260,64400,64524,64580 dw 64684,64777,64820,64898 dw 64968,65030,65058,65110 dw 65157,65178,65217 table:db 82h,01h,81h,94h,84h db 0b4h,0a4h,04h db 82h,01h,81h,94h,84h db 0c4h,0b4h,04h db 82h,01h,81h,0f4h,0d4h db 0b4h,0a4h,94h db 0e2h,01h,0e1h,0d4h,0b4h db 0c4h,0b4h,04h db 82h,01h,81h,94h,84h db 0b4h,0a4h,04h db 82h,01h,81h,94h,84h db 0c4h,0b4h,04h

相关主题