51单片机-播放天空之城

发布者:不羁少年最新更新时间:2015-09-22 来源: eefocus关键字:51单片机  天空之城 手机看文章 扫描二维码
随时随地手机看文章
#include   //包含51单片机寄存器定义的头文件
sbit sound=P3^7;    //将sound位定义为P3.7
unsigned int C;     //储存定时器的定时常数
//以下是C调低音的音频宏定义
#define L1  262    //将"L1"宏定义为低音"1"的频率262Hz 时间是1/262=3826/2 us  取半周期
#define L2  286    //将"L2"宏定义为低音"2"的频率286Hz
#define L3  311    //将"L3"宏定义为低音"3"的频率311Hz
#define L4  349    //将"L4"宏定义为低音"4"的频率349Hz
#define L5  392    //将"L5"宏定义为低音"5"的频率392Hz
#define L6  440    //将"l_a"宏定义为低音"6"的频率440Hz
#define L7  494    //将"L7"宏定义为低音"7"的频率494Hz
//以下是C调中音的音频宏定义
#define Z1    523     //将"Z1"宏定义为中音"1"的频率523Hz
#define Z2    587     //将"Z2"宏定义为中音"2"的频率587Hz
#define Z3  659     //将"Z3"宏定义为中音"3"的频率659Hz
#define Z4    698     //将"Z4"宏定义为中音"4"的频率698Hz
#define Z5    784     //将"Z5"宏定义为中音"5"的频率784Hz
#define Z6    880     //将"Z6"宏定义为中音"6"的频率880Hz
#define Z7    987     //将"Z7"宏定义为中音"7"的频率523H      
//以下是C调高音的音频宏定义
#define H1  1046    //将"H1"宏定义为高音"1"的频率1046Hz
#define H2  1174    //将"H2"宏定义为高音"2"的频率1174Hz
#define H3  1318    //将"H3"宏定义为高音"3"的频率1318Hz
#define H4  1396    //将"H4"宏定义为高音"4"的频率1396Hz
#define H5  1567    //将"H5"宏定义为高音"5"的频率1567Hz
#define H6  1760    //将"H6"宏定义为高音"6"的频率1760Hz
#define H7  1975    //将"H7"宏定义为高音"7"的频率1975Hz
void delay()               
   {
     unsigned char i,j;
 for(i=0;i<100;i++)
   for(j=0;j<250;j++)
    ;
   }
void main(void)
  {
  unsigned char i,j;    
//以下是《天空之城》简谱 //每行对应一小节音符
   unsigned  int code f[]={      Z6,Z7,H1,Z7,H1,H3,Z7,Z3,Z3,   Z6,Z5,Z6,H1,Z5,Z3,Z3,  Z4,Z3,Z4,H1, 
                               Z3,H1,H1,H1,Z7,Z4,Z4,Z7,Z7,Z6,Z7,  H1,Z7,H1,H3,Z7,Z3,Z3,   Z6,Z5,Z6,H1,
                                Z5,      Z3,Z4,H1,Z7,H1,H2,H2,H2,H1,H1,Z6,Z7,Z5,Z6,H1,H2,   H3,H2,H3,H5,
           H2,Z5,Z5,   H1,Z7,H1,H3,H3,         Z6,H1,Z7,H2,H1,Z5,Z5,   H4,H3,H2,H1,
           H3,         Z3,H3,      H6,H5,H5,   H3,H2,H1,H1,H2,H1,H2,H5,H3,H3,
           H6,H5,      H3,H2,H1,H1,H2,H1,H2,Z7,Z6,Z6,Z7,   Z6,       
0xff}; //以0xff作为音符的结束标志
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位 
unsigned char code JP[ ]={            4,4,  12,4,8,8,   20,4,4,     12,4,8,8,  20,4,4,     12,4,4,12,
  20,4,4,4,   12,4,8,8,   20,4,4,     12,4,8,8,   20,4,4,     12,4,8,8,
32,      4, 8,4,6,8,    4,4,4,16,   8,4,6,8,    24,4,4,     12,4,8,8,
24,4,4,     4,4,8,8,    32, 4,8,8,6,    12,4,16,    8,8,8,8,
30,         20,8,       16,8,8,     4,4,16,8,   8,4,4,8,    20,8,
16,16,      4,20,8,     8,4,4,8,    20,4,4,     32,
};
  EA=1;         //开总中断
  ET0=1;        //定时器T0中断允许
       TMOD=0x00;    // 使用定时器T0的模式1(13位计数器)
  while(1)       //无限循环
{
i=0;   //从第1个音符f[0]开始播放
     while(f[i]!=0xff)            //只要没有读到结束标志就继续播放
  {
              C=460830/f[i];   //
              TH0=(8192-C)/32;   //可证明这是13位计数器TH0高8位的赋初值方法   5
              TL0=(8192-C)2;   //可证明这是13位计数器TL0低5位的赋初值方法
              TR0=1;             //启动定时器T0
for(j=0;j
                  delay();          //延时1个节拍单位
 TR0=0;               //关闭定时器T0
    i++;                 //播放下一个音符
  }   
sound=0;
}
 void Time0(void ) interrupt 1 using 1  
  {
    sound=!sound;      //将P3.7引脚输出电平取反,形成方波  
    TH0=(8192-C)/32;   //可证明这是13位计数器TH0高8位的赋初值方法
    TL0=(8192-C)2;   //可证明这是13位计数器TL0低5位的赋初值方法 
  }
关键字:51单片机  天空之城 引用地址:51单片机-播放天空之城

上一篇:单片机控制摩托点火器的设计理念
下一篇:51单片机电子琴C代码

推荐阅读最新更新时间:2024-03-16 14:32

C51单片机学习笔记之矩阵键盘
简介 矩阵键盘一般为4×4或4×3的。矩阵键盘的判断方式分按行扫描和按列扫描。 简单说就是给全体一个高电平,然后给一个按键的一端附上低电平,再判断另一端是否为低电平。 原理图 代码部分 #include void delay()//延时函数 { unsigned int i; for(i=0;i 30000;i++); } unsigned char MatrixKey() { unsigned char KeyNumber;//定义一个返回值 P1=0xFF;//全体给高电平 P1_0=0;//一端给低电平 if(P1_4==0)//判断另一端是否为低电平 { delay(); while(P1
[单片机]
C<font color='red'>51单片机</font>学习笔记之矩阵键盘
51单片机矩阵键盘扫描程序
#include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};
[单片机]
51单片机 蜂鸣器
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。 有源蜂鸣器和无源蜂鸣器的区别: 这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 无源蜂鸣器的优点是:1。便宜,2。声音频率可控,可以做出“多来米发索拉西”的效果。
[单片机]
<font color='red'>51单片机</font> 蜂鸣器
51单片机按键抢答器程序
本程序由好几个头文件组成,都在下面,你可以复制代码并保存为独立的文件 头文件STC12C5A.H下载: http://www.51hei.com/mcu/2564.html #include STC12C5A.H #include stdio.h #include LCD1602.h #include interrupt.h #include chiclet_keyboard.h #define uchar unsigned char #define uint unsigned int void main() { delay(500); LCD_init(); interrupts_init(); chiclet
[单片机]
51单片机STC12C5A60S2定时器做延时函数,定时器实现精准延时
/*====================================================================== 利 用 定 时 器 实 现 精 准 延 时 的 调 用 函 数 ========================================================================*/ #include STC12C5A60S2.h typedef unsigned char u8; typedef unsigned int u16; u16 count; //中断次数变量 bit flag = 0; //标志时间结束 //=============
[单片机]
浮点数传送--MCS-51单片机实用子程序
FMOV 功能:浮点数传送 入口条件:源操作数在 中,目标地址为 。 出口信息: = , 不变。 影响资源:A 堆栈需求: 2字节 FMOV: INC R0 INC R0 INC R1 INC R1 MOV A,@R1 MOV @R0,A DEC R0 DEC R1 MOV A,@R1 MOV @R0,A DEC R0 DEC R1 MOV A,@R1 MOV @R0,A RET
[单片机]
51单片机产生PWM软件延时和定时器产生两种方法
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是
[单片机]
<font color='red'>51单片机</font>产生PWM软件延时和定时器产生两种方法
基于AT89C2051单片机的厨房定时器的制作
该制作以5分钟为一个计时单位,最多计时1小时,3V电池做电源,有蜂鸣器报警,工作时功耗为6mA左右(使用AT89C2051),可以使用3V钮扣电池,具有自动关机功能,不运行时耗电量可以忽略不计,单键操作,简单方便。   电路图   VT1为PNP的9012,当电路不工作时VT1的B极由R4得到高电平,VT1截止,AT89C2051无法从VT1的E极得到电源。当SW1按下时,VT1的B极通过VD2和SB1接地,由高电平转为低电平,VT1导通。此时AT89C2051得电,同时通过C1,R4复位。复位成功后P3.7升为高电平,使得VT2导通,从而使VT1的B极保持低电平状态,这时就算松开SB1,VT1也不会截止而导致MCU
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved