找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7544|回复: 3
打印 上一主题 下一主题
收起左侧

STM32单片机红外遥控MP3实验报告

[复制链接]
跳转到指定楼层
楼主
实验12 红外遥控MP3
  • 实验目的及内容
    1、实现开始播放、上一曲、下一曲、音量加、音量减、暂停、快进、快退等功能;
  • 通过遥控红外控制;
  • 正确运用sd卡的功能;
  • 了解串口通道与硬件引脚的对应关系;
  • 正确配置串口;
    二、实验原理图


三、实验步骤(补充完整)

1、利用原有工程Remote,添加各种文件,其中在HARDWARE中添加一个新的usart2文件夹新写入一个usart2.c

2、在usart2.c中写入一个串口2 的中断服务程序

  • usart.c中的串口都写成usart2,引脚写成对应的pa2,pa3

4、主函数中在对应按键下用senddata发送指令,控制播放,暂停,下一曲,快进等

四、实验代码(要有详细的注释)

Usart2.c
void uart_init(u32 bound){
    //GPIO????
    GPIO_InitTypeDef GPIO_InitStructure;
              USART_InitTypeDef USART_InitStructure;
              NVIC_InitTypeDef NVIC_InitStructure;

              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);              //使能USART2,GPIOA
              RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
              USART_DeInit(USART2);  //复位串口2
              //USART2_TX   PA.2
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART2_RX                PA.3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
              USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
              USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
              USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
              USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
              USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制

              USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;              //收发模式
    USART_Init(USART2, &USART_InitStructure); //初始化串口
    //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_Cmd(USART2, ENABLE);                    //使能串口

}
Main.c
int main(void)
{
              u8 key;
              u8 *str=0;              
              delay_init();
              uart_init(9600);                            //串口初始化9600   
              Remote_Init();
              while(1)
              {
                            key=Remote_Scan();            
                            if(key)
                            {                                          
                                          switch(key)
                                          {
                                                        case 0:str="ERROR";break;                                            
                                                        case 162:str="POWER";break;                 
                                                        case 98:str="UP";             //上一曲
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x04);
                                                        USART_SendData(USART2,0xEF);
                                                        delay_ms(1000);break;                 
                                                        case 2:str="PLAY";           //播放
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x01);
                                                        USART_SendData(USART2,0xEF);break;                           
                                                        case 226:str="ALIENTEK";break;                             
                                                        case 194:str="RIGHT";         //快进
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x0A);
                                                        USART_SendData(USART2,0xEF);break;               
                                                        case 34:str="LEFT";           //快退
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x0B);
                                                        USART_SendData(USART2,0xEF);break;                             
                                                        case 224:str="VOL-";          //音量-
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x06);
                                                        USART_SendData(USART2,0xEF);
                                                        delay_ms(1000);break;                             
                                                        case 168:str="DOWN";         //
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x03);
                                                        USART_SendData(USART2,0xEF);
                                                        delay_ms(1000);break;                              
                                                        case 144:str="VOL+";
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x05);
                                                        USART_SendData(USART2,0xEF);
                                                        delay_ms(1000);break;                              
                                                        case 104:str="1";
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0xEF);break;                             
                                                        case 152:str="2";
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x09);
                                                        USART_SendData(USART2,0xEF);break;               
                                                        case 176:str="3";
                                                        USART_SendData(USART2,0x7E);
                                                        USART_SendData(USART2,0x02);
                                                        USART_SendData(USART2,0x06);
                                                        USART_SendData(USART2,0xEF);
                                                        delay_ms(1000);break;                 
                                                        case 48:str="4";break;                              
                                                        case 24:str="5";break;                              
                                                        case 122:str="6";break;                             
                                                        case 16:str="7";break;                                                                                                                  
                                                        case 56:str="8";break;            
                                                        case 90:str="9";break;
                                                        case 66:str="0";break;
                                                        case 82:str="DELETE";break;                           
                                          }
                            }else delay_ms(10);               
              }
}
五、心得体会(不少于100字)

      通过实验,实现了遥控控制MP3实现开始播放、上一曲、下一曲、音量加、音量减、暂停、快进、快退等功能;通过遥控红外控制;正确运用了sd卡的功能;了解串口通道与硬件引脚的对应关系;正确配置串口,通过新建一个中断子函数实现串口USART2的发送接收命令功能,通过PA2和PA3来连通sd卡和单片机,学到了很多关于单片机控制的知识很有帮助。

完整的实验报告下载地址word格式的(可编辑):
http://www.51hei.com/bbs/dpj-86578-1.html



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-6-2 01:02 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:206955 发表于 2017-6-2 08:49 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

地板
ID:222183 发表于 2017-8-11 16:23 | 只看该作者
厉害厉害,正好需要
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表