stm32单片机 代码实现歌曲——红尘情歌

mian.c

#include "sys.h"	
#include "delay.h"	
#include "led.h" 
#include "beep.h"
u8 music[]={
	5,10,10,5,5,9,9,16,8,8,8,9,10,5,5,16, //???????,???????
	6,8,8,6,5,10,10,16,9,8,8,6,9,16, //???????,?????
	5,10,10,5,5,9,9,16,8,8,8,6,5,10,10,16, //???????,???????
	6,11,11,6,5,10,10,16,9,8,8,6,8,16, //???????,?????
	5,12,5,5,12,5,9,16,8,6,8,8,8,10,12,16, //???????,???????!
	8,6,8,8,8,13,12,10,9,8,6,8,8,10,9,16, //??????,?????,?????
	5,12,5,5,12,5,9,16,8,6,8,8,13,12,16, //???????,??????
	8,8,8,13,12,10,9,8,6,8,8,9,8,16, //?????????,??????
};
u8 time[] = {
	4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, //???????,???????
	4,4,4,4,4,4,4,4,4,4,4,4,8,4, //???????,?????
	4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, //???????,???????
	4,4,4,4,4,4,4,4,4,4,4,4,8,4, //???????,?????
	4,4,2,2,4,4,4,4,4,4,2,2,4,4,8,4, //???????,???????!
	4,4,2,2,4,4,4,4,4,4,4,4,4,4,8,4, //??????,?????,?????
	4,4,2,2,4,4,4,4,4,4,4,4,4,8,4, //???????,??????
	4,4,4,4,4,4,4,4,4,4,4,4,8,4, //?????????,??????
};
void Sound(u16 frq)
{   
    u32 n;
    BEEP = 0;
    if(frq != 1000) 
    {
        n = 500000/((u32)frq);
        BEEP = 0;
        delay_us(n);
        BEEP = 1;
        delay_us(n);
    }
    else
    {
    	delay_us(1000);
    }         
}
void play(void)
{
         uc16 tone[] = {247,262,294,330,349,392,440,494,523,587,659,698,784,1000};//?????
u8 music[]={       
	5,5,6,8,7,6,5,6,13,13,//??
	5,5,6,8,7,6,5,3,13,13,
	2,2,3,5,3,5,6,3,2,1,
	6,6,5,6,5,3,6,5,13,13,
	5,5,6,8,7,6,5,6,13,13,
	5,5,6,8,7,6,5,3,13,13,
	2,2,3,5,3,5,6,3,2,1,
	6,6,5,6,5,3,6,1,   
	13,8,9,10,10,9,8,10,9,8,6,
	13,6,8,9,9,8,6,9,8,6,5,
	13,2,3,5,5,3,5,5,6,8,7,6,
	6,10,9,9,8,6,5,6,8
};     
u8 time[] = {       
	2,4,2,2,2,2,2,8,4, 4, //??
	2,4,2,2,2,2,2,8,4, 4,
	2,4,2,4,2,2,4,2,2,8,
	2,4,2,2,2,2,2,8,4 ,4,
	2,4,2,2,2,2,2,8,4, 4,
	2,4,2,2,2,2,2,8,4, 4,
	2,4,2,4,2,2,4,2,2,8,
	2,4,2,2,2,2,2,8,
	4, 2,2,2, 4, 2,2,2, 2,2,8,
	4, 2,2,2,4,2,2,2,2,2,8,
	4, 2,2,2,4,2,2,5,2,6,2,4,
	2,2 ,2,4,2,4,2,2,12
};     
    u32 yanshi;
    u16 i,e;
    yanshi = 10;
    for(i=0;i<sizeof(music)/sizeof(music[0]);i++)
    {
         for(e=0;e<((u16)time[i])*tone[music[i]]/yanshi;e++)
         {
         	Sound((u32)tone[music[i]]);
         }      
    }
}
int main(void)
{
	delay_init();	    	 
	LED_Init();		  	
	BEEP_Init();         	
	BEEP = 0;
	play();
    while(1);			
}

beep.c

#include "beep.h"
void BEEP_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
	GPIO_Init(GPIOB, &GPIO_InitStructure);	 
	GPIO_ResetBits(GPIOB,GPIO_Pin_8);
}

beep.h

#ifndef __BEEP_H
#define __BEEP_H	 
#include "sys.h"
#define BEEP PBout(8)
void BEEP_Init(void);			    
#endif
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32单片机是一种高性能、低功耗的32位微控制器,广泛应用于嵌入式系统的开发中。其原理是基于ARM Cortex-M系列的核心,具有丰富的外设和高性能的计算能力,可以实现多种功能。 STM32单片机的应用非常广泛。其可以应用于智能家居、医疗仪器、工业自动化等领域。它可以用来控制各种传感器,如温度传感器、湿度传感器等,实现对环境的监测和控制。同时,它也可以用于控制各种执行机构,如电机和执行器,实现对设备的控制和运动。此外,STM32单片机还可以应用于通信领域,如无线模块和网络模块的控制,实现设备之间的数据传输和通信。 基于Proteus的虚拟仿真可以帮助开发者在进行STM32单片机的开发过程中,不需要实际搭建硬件电路,即可进行软件开发和调试。Proteus是一款功能强大的虚拟仿真软件,可以模拟STM32单片机和外设的工作过程。它可以提供丰富的模型库和仿真环境,方便开发者进行程序的编写、调试和验证。 通过Proteus的虚拟仿真,开发者可以在电脑上实现STM32单片机的全面测试,包括外设的连接和数据交互。开发者可以使用Proteus提供的虚拟示波器、虚拟显示器等工具,模拟实际硬件的工作状态,及时查看和调试程序。 总而言之,STM32单片机的原理和应用非常广泛,通过Proteus的虚拟仿真可以帮助开发者在进行STM32单片机的开发过程中,提高开发效率和减少成本,并且可以更好地进行软件开发和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值