红外遥控音乐播放器单片机课程设计


    



    单片机课程设计



    项目名称 红外遥控音乐播放器设计
    专业班级 通信X班
    学生姓名
    指导教师


    X年 X 月 X日

    着计算机技术发展 单片机应范围断扩目前单片机渗透工作生活领域单片机核心控制系统中红外遥控成目前较广泛种线通信遥控手段课程设计提出种基单片机红外遥控音乐播放器设计方法采单片机控制核心红外信号通信手段通信蜂鸣器发声完成音乐播放器功设计具线非接触控制抗干扰力强信息传输功耗低成低易实现等显著优点特色通设计完成简单音乐播放器功包括播放更换歌曲等容通次课程设计单片机中断系统等知识进步解单片机相关知识做理联系实际
    关键词:单片机红外遥控中断系统



    该单片机程序设计基HOT51型单片机开发板电路编写开发板

    设计中未HOT51单片机开发板配套红外遥控器红外遥控器键应码值已表41中写出根已红外遥控器键应码值修改代码中键码值部分















    Abstract
    With the development of computer technology the application range of the microcontroller expanding microcontroller penetrated into various fields of work and life Microcontroller as the core of the control system infrared remote control to use a wireless communication and remote control means This course is designed infrared remote control music player based microcontroller design method Mainly using SCM as the control center the infrared signal as a means of communication communication buzzer sound to complete the functionality of the music player The design of wireless noncontact control antiinterference ability reliable transmission of information low power consumption low cost easy to realize significant advantages and characteristics Through this design can be completed simple music player functions including play and change songs Design through the course I interrupt timer external knowledge have a better understanding to do the theory with actual knowledge of the microcontroller
    Keywords Microcontroller UnitInfrared Remote ControlInterrupt System
    目 录
    摘 I
    Abstract II
    第1章 绪 1
    11 概述 1
    12 功 1
    第2章 电路设计 2
    21 整体电路设计 2
    22 电路模块设计 3
    221 单片机系统电路 3
    222 红外解码电路 4
    223 显示播放电路 5
    第3章 程序设计 8
    31 红外解码程序 8
    32 播放显示程序 12
    第4章 硬件调试 17
    结 19
    参考文献 20
    附录1 整体电路图实物图 21
    附录2 电路元件 22
    附录3 程序源码 23
    致谢 32


    第1章 绪
    11 概述
    利单片机演奏音乐单片机爱者兴趣应范围较广泛谓音乐播放器单片机进行信息处理信号放蜂鸣器发出乐曲声知道振动产生声音振动频率发出声音规律振动发出声音乐音音乐音频节拍构成音频发声频率节拍延时长短利单片机定时器产生定频率方波产生定频率声音利单片机软件延时方法产生节拍音频节拍结合起进行合理排列播放出较悦耳音乐文较详细介绍音乐播放器工作原理设计思路硬件选择相关作软件实现方法详细程序清单
    控制单片机播放音乐方式数者利单片机存储音乐控制播放设计利AT89S52单片机少数外围电路控制音乐播放产生两首歌曲 单片机产生音乐关键控制频率输出设计采定时器T0中断方法产生频率脉产生频率声音外红外体化头SM0038接收红外信号通外部中断INT1进行红外信号解码单片机部程序键值完成操作常源蜂鸣器进行发声实现简单遥控音乐播放器功
    12 功
    设计单片机核心实现红外遥控音乐播放器功完成功两首歌曲选择播放暂停暂停断点播放结束播放歌曲播放曲播放曲等功时数码显示红外信号解码键值中方便32位二进制红外信号编码解码8位16进制编码中设计显示红外信号解码8位16进制编码中两位数码户编码数码反码6位予显示设计中常见家红外遥控器进行控制中12两数字键(应功选择12两首歌曲)音量加减两键(应功曲曲)频道加减两键(应功暂停结束播放)确定键(应功播放歌曲)
    第2章 电路设计
    21 整体电路设计
    根设计求红外遥控音乐播放器分三模块进行设计:
    1单片机系统电路:单片机系统者称应系统指少元件组成单片机工作系统单元
    51系列单片机说系统般应该包括:单片机时钟电路复位电路设计中单片机AT89S52晶振电路12MHZ晶振复位电路:电容串联电阻构成系统电RST脚会出现高电RST脚高电持续两机器周期复位
    2红外解码电路:电路红外遥控器发出红外信号进行解码然程序根解码键值相应完成功
    3显示播放电路:部分电路显示红外遥控器键应键值实物中两位16进制数数码进行显示播放电路蜂鸣器播放音乐曲目
    分析模块电路功画出原理框图图21示:


    A
    T
    8
    9
    S
    5
    2
    单片机复位电路
    单片机时钟电路
    红外解码 电路
    红外解码
    显示电路
    音乐播放电路

    图21 红外遥控音乐播放器原理框图

    22 电路模块设计
    221 单片机系统电路
    单片机系统电路图22示:

    图22 单片机系统电路图
    图22知道单片机系统复位电路时钟电路等组成
    1复位电路:电容串联电阻构成结合电容电压突变性质知道系统电RST脚会出现高电高电持续时间电路RC值决定
    典型51单片机RST脚高电持续两机器周期复位适组合RC取值保证复位般教科书推荐C 取10uFR取82K左右然取法原RC组合RST脚产生少2机周期高电单片机复位电路电脑重启部分电脑中出现死机重启钮电脑部程序头开始执行单片机样单片机系统运行中受环境干扰出现程序跑飞时候复位钮部程序动头开始执行
    2时钟电路:单片机部高增益反相放器引脚XTAL1 XTAL2 分该放器输入端输出端果引脚XTAL1 XTAL2 两端跨接晶体振荡器(晶振)陶瓷振荡器构成稳定激振荡电路该振荡电路输出直接送入部时序电


    单片机时钟两种方式产生部时钟方式外部时钟方式
    (1)部时钟方式部时钟方式单片机部高增益反相放器外部跨接晶振微调电容构成时钟电路产生时钟方法外接晶振(陶瓷振荡器)时C1C2 值通常选择30Pf左右C1C2 频率微调作晶振陶瓷谐振器频率范围12MHz ~12MHz间选择减寄生电容更保证振荡器稳定工作振荡器电容应安装单片机引脚XTALl XTAL2 部时钟方式外部电路接线简单单片机应系统中采种方式部时钟方式产生时钟信号频率晶振固频率常fsoc 表示
    (2)外部时钟方式外部时钟方式完全单片机外部电路产生时钟方法外部电路产生时钟信号直接接单片机XTAL1引入时XTAL2 开路
    3外程序存储器选择控制端EAVpp决定单片机访问部外部程序存储器EA高电时访问部程序存储器程序计数器(PC)值超0FFFFH时单片机动转外部程序存储器EA低电时单片机部存储器访问外部存储器[1]
    222 红外解码电路
    红外解码电路图23示:

    图23 红外解码电路图
    图23知道红外解码电路中元件红外体化接收头SM0038
    体化红外接收头SM0038集信号放滤波检波整形体红外接收器电路置PIN二极前置放器采红外滤波环氧树脂材料封装性高易受环境影响防止非控制信号输出脉出现
    部结构图24示:

    图24 SM0038部结构图
    SM0038置带通滤波器积分器动增益控制电路抑制种干扰噪音数信号干扰信号区载波频率脉波长工作周期数信号应该满足载波信号频率量接带通滤波器中心频率(38KHZ)脉长度300us数编码类型相兼容系统选SM0038三方面NEC编码格式相配
    223 显示播放电路
    显示播放电路图25示:

    图25 显示播放电路图

    174HC573:八进制3态非反转透明锁存器
    真值表表21示:
    表21 74HC573真值表
    输入
    输出

    LE
    D
    Q
    L
    H
    L
    L
    L
    H
    H
    H
    L
    L
    X
    Q0
    H
    X
    X
    Z
    真值表知:=0LE=1时输出端数等输入端数=0LE=0时输出端保持变=1时LED输出端高阻态
    74HC57374HC138电路中数码组成显示电路数码显示时果维持数显示持续快速刷新尤四段八位数码等选通显示设备类够接受刷新频率概三十毫秒刷新次占处理器处理时间消耗处理器处理力浪费处理器功耗
    锁存器缓解处理器方面压力处理器数传输锁存器锁存锁存器输出引脚便会直保持数状态直次锁存新数止样数码显示容变前处理器处理时间IO引脚便释放出处理器处理时间仅限显示容发生变化时候整显示时间非常少部分处理器处理完更时间执行务锁存器数码显示方面作节省宝贵MCU时间
    锁存器前状态锁存起CPU送出数接口电路输出端保持段时间锁存状态发生变化直解锁定芯片具锁存器芯片74LS244 (3态8位缓器)具锁存器功通引脚置高电输出会保持现状态直该引脚清0继续变化
    缓寄存器称缓器分输入缓器输出缓器两种前者作外设送数暂时存放便处理器取走者作暂时存放处理器送外设数数控缓器高速工作CPU慢速工作外设起协调缓作实现数传送步缓器接数总线必须具三态输出功
    274HC138:三通道输入八通道输出译码器
    真值表表22示:


    表22 74HC138真值表
    Enable
    Address
    Output
    E3
    E2
    E1
    A2
    A1
    A0
    Y0
    Y1
    Y2
    Y3
    Y4
    Y5
    Y6
    Y7
    X
    X
    H
    X
    X
    X
    H
    H
    H
    H
    H
    H
    H
    H
    L
    X
    X
    X
    X
    X
    H
    H
    H
    H
    H
    H
    H
    H
    X
    H
    X
    X
    X
    X
    H
    H
    H
    H
    H
    H
    H
    H
    H
    L
    L
    L
    L
    L
    L
    H
    H
    H
    H
    H
    H
    H
    H
    L
    L
    L
    L
    H
    H
    L
    H
    H
    H
    H
    H
    H
    H
    L
    L
    L
    H
    L
    H
    H
    L
    H
    H
    H
    H
    H
    H
    L
    L
    L
    H
    H
    H
    H
    H
    L
    H
    H
    H
    H
    H
    L
    L
    H
    L
    L
    H
    H
    H
    H
    L
    H
    H
    H
    H
    L
    L
    H
    L
    H
    H
    H
    H
    H
    H
    L
    H
    H
    H
    L
    L
    H
    H
    L
    H
    H
    H
    H
    H
    H
    L
    H
    H
    L
    L
    H
    H
    H
    H
    H
    H
    H
    H
    H
    H
    L

    74HC138译码器接受3位二进制加权址输入(A0 A1A2)时提供8互斥低效输出(Y0Y7)74HC138特3输入端:两低电效(E1E2)高电效(E3)非E1E2置低E3置高否74HC138保持输出高利种复合特性74HC138充8输出路分配器设计中进行数码位选
    3ULN2003:高压电流达林顿晶体阵列七硅NPN复合晶体组成电路特点 ULN2003达林顿串联27K基极电阻5V工作电压TTLCMOS电路 直接相连直接处理原先需标准逻辑缓器处理数具电流增益高工作电压高温度范围宽带负载力强等特点适应类求高速功率驱动系统设计中源蜂鸣器驱动时次扩展时提供驱动电路












    第3章 程序设计
    分析红外遥控音乐播放功包括选择播放两首歌曲暂停暂停断点播放结束播放歌曲播放曲播放曲数码显示红外信号解码两位16进制数码根功心出结:该程序设计工作核心问题红外信号解码播放音乐操作显示红外信号数码建立红外信号正确解码首先进行正确红外解码然根解码键值进行播放歌曲显示键值出结画出程序流程图图31示:

    开始
    函数判断红外信号
    收红外信号
    未收红外信号
    处理红外信号
    显示解码键值
    播放选择歌曲
    暂停结束曲
    播放曲
    播放曲

    图31 程序流程图
    结合程序流程图知道:整程序设计分两模块:红外解码播放显示
    31 红外解码程序
    进行程序设计前先分析红外信号波形次键红外发射器会发出串脉红外接收器会收串脉宽度等脉波形流脉流包括:(1)前导码:第1脉波形(2)户码1:第2第9脉波形(3)户码2:第10第17脉波形(4)数码:第18第25脉波形(5)数反码:第26第33脉波形(6) 连续键脉:第34第35脉结束脉次键结束会两结束脉果直键放话会直发送连续键脉认收10
    连续键脉键(次设计中考虑连续键脉)码型结构图32示:

    图32 红外信号码型图
    图32知:红外信号码型中次设计中部分图32中8位键数码面分析具体样进行红外信号解码
    红外信号采脉宽调制串行码脉宽0565ms间隔056ms周期1125ms组合表示二进制0脉宽0565ms间隔1685ms周期225ms组合表示二进制1波形图33示

    图33 红外信号脉宽度图
    述01组成32位二进制码38kHz载频进行二次调制提高发射效率达降低电源功耗目然通红外发射二极产生红外线空间发射产生图32示效码组序列图33中样引导码脉宽9ms间隔45ms红外信号解码电路原码型中高低电进行反转新码型中掉第降(引导码)第二降开始效码序列应该进行解码记录设计中解码信号引入外部中断1降效IT11[2]红外解码源码:
    unsigned char irtime 脉宽度时间值
    unsigned char startflag接收开始标志
    unsigned char bitnum 码组位数
    unsigned char irreceok 接收完成标志
    unsigned char irprocok 解码完成标志
    unsigned char irdata[33]脉宽度数组
    unsigned char ircode[4] 解码值数组
    void timer0init(void)
    {
    TMOD0x02 定时器0 定时方式2 8位动重装
    TH00x00 初值0 实现定时256us
    TL00x00
    ET01 开定时器0中断
    EA1 开总中断
    TR01 启动定时器0
    }
    void int1init(void)
    {
    IT11 外部中断1负跳变效
    EX11 开外部中断1中断
    EA1 开总中断
    }
    void irproc(void) 解码函数
    {
    uchar kvaluemj
    k1
    for(j0j<4j++) 4组二进制码
    {
    for(m0m<8m++) 组8位
    {
    valuevalue>>1 低位前右移正常序
    if(irdata[k]>6) irtime6*256us 解码数1
    {
    valuevalue | 0x80 解码数1 高位1 高位置1
    }
    k++ 二进制码位
    }
    ircode[j]value 组解码值存入ircode
    }
    irprocok1 解码完成
    }
    void main()
    {
    timer0init() 定时器初始化
    int1init() 外部中断初始化
    while(1)
    {
    if(irreceok) 接收完成
    {
    irproc() 解码
    irreceok0
    }
    if(irprocok) 解码完成
    {
    irwork() 解码数转成16进制两位数
    irprocok0
    }
    }
    }
    void timer0() interrupt 1
    {
    irtime++
    }
    void int1() interrupt 2
    {
    if(startflag1)
    {
    if(irtime>32) 检测9ms引导码
    {
    bitnum0
    }
    irdata[bitnum]irtime
    irtime0
    bitnum++
    if(bitnum33) 接收结束
    {
    bitnum0
    irreceok1 接收完成
    }
    }
    else
    {
    startflag1 接收开始标志位
    irtime0
    }
    }
    32 播放显示程序
    分析音乐播放程频率声音组合组恰频率声音组合定先序节拍播放时产生音乐产生音频信号算出某音频周期周期2半周期时间利定时器计时半周期时间计时取反输出重复程频率声音信号信号P23脚输出ULN2003驱动蜂鸣器播放音乐中音符两字节表示:低位字节(偶址)代表音级表示音级c﹟cd﹟def……a3﹟a3b3高位字节(奇址)代表音符时值(节拍)表示拍数18拍(010s)~8拍(640s)
    程序设计中软件延时程序控制音级 红外解码定时器0进行节拍控制播放暂停播放中时判断否红外信号改变便时更换结束音乐设计中歌曲音符存数组中开始位置中间位置播放曲目红外信号解码两位阴数码显示中数码[3]显示电路74HC573数码驱动74HC138数码动态扫描时位选蜂鸣器播放音乐源码:
    #define uchar unsigned char
    #define uint unsigned int
    sbit FMP2^3 定义蜂鸣器引脚
    uchar count
    unsigned char code song[] { 祝安
    0x260x200x200x200x200x200x260x100x200x100x200x800x260x200x300x20
    0x300x200x390x100x300x100x300x800x260x200x200x200x200x200x1c0x20
    0x200x800x2b0x200x260x200x200x200x2b0x100x260x100x2b0x800x260x20
    0x300x200x300x200x390x100x260x100x260x600x400x100x390x100x260x20
    0x300x200x300x200x390x100x260x100x260x800x260x200x2b0x100x2b0x10
    0x2b0x200x300x100x390x100x260x100x2b0x100x2b0x200x2b0x400x400x20
    0x200x100x200x100x2b0x100x260x300x300x800x180x200x180x200x260x20
    0x200x200x200x400x260x200x2b0x200x300x200x300x200x1c0x200x200x20
    0x200x800x1c0x200x1c0x200x1c0x200x300x200x300x600x390x100x300x10
    0x200x200x2b0x100x260x100x2b0x100x260x100x260x100x2b0x100x2b0x80
    0x180x200x180x200x260x200x200x200x200x600x260x100x2b0x200x300x20
    0x300x200x1c0x200x200x200x200x800x260x200x300x100x300x100x300x20
    0x390x200x260x100x2b0x100x2b0x200x2b0x400x400x100x400x100x200x10
    0x200x100x2b0x100x260x300x300x800x00
    八月桂花遍开
    0x180x300x1C0x100x200x400x1C0x100x180x100x200x100x1C0x100x180x40
    0x1C0x200x200x200x1C0x200x180x200x200x800xFF0x200x300x1C0x100x18
    0x200x150x200x1C0x200x200x200x260x400x200x200x2B0x200x260x200x20
    0x200x300x800xFF0x200x200x1C0x100x180x100x200x200x260x200x2B0x20
    0x300x200x2B0x400x200x200x1C0x100x180x100x200x200x260x200x2B0x20
    0x300x200x2B0x400x200x300x1C0x100x180x200x150x200x1C0x200x200x20
    0x260x400x200x200x2B0x200x260x200x200x200x300x800x200x300x1C0x10
    0x200x100x1C0x100x200x200x260x200x2B0x200x300x200x2B0x400x200x15
    0x1F0x050x200x100x1C0x100x200x200x260x200x2B0x200x300x200x2B0x40
    0x200x300x1C0x100x180x200x150x200x1C0x200x200x200x260x400x200x20
    0x2B0x200x260x200x200x200x300x300x200x300x1C0x100x180x400x1C0x20
    0x200x200x260x400x130x600x180x200x150x400x130x400x180x800x00}
    void delay_50us(uint t) 延时50微秒
    {
    uchar j
    for(t>0t)
    {
    for(j19j>0j)
    }
    }
    void timer0init(void)
    {
    TMOD 0x01 定时器0 定时方式1
    IE 0x82 开定时器中断 开总中断
    TH0 0xDC 定时10ms
    TL0 0x00 定时10ms
    }
    void play(uchar i) 音乐播放函数
    {
    uchar temp1temp2
    uint addr song[]播放位置
    count 0 中断计数清0
    addr i * 217
    while(1)
    {
    temp1 song[addr++]
    if (temp1 0xFF) 休止符
    {
    TR0 0 关闭定时器0
    delay_50us(100)
    }
    else if (temp1 0x00) 歌曲结束符
    {
    return
    }
    else
    {
    temp2 song[addr++]
    TR0 1 启动定时器0
    while(1)
    {
    FM ~FM
    delay_50us(temp1)
    if(temp2 count)节拍
    {
    count 0
    break
    }
    }
    }

    void main()
    {
    timer0init() 定时器初始化
    while(1)
    {
    play(0) play(0)祝安 play(1)八月桂花遍开
    }
    }
    void timer0() interrupt 1
    {
    TH0 0xDC
    TL0 0x00
    count++ 长度加1
    }
    数码显示红外解码值源码:
    #define uchar unsigned char
    uchar table[16]
    {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5e0x790x71} 数码显示编码
    uchar disp[2] 送数码数
    void irwork(void) 解码数转成16进制两位数
    {
    disp[0]ircode[2]16 取出ircode中两位数码
    disp[1]ircode[2]16 取出ircode中两位数码
    }
    void display(void) 数码显示函数
    {
    P0table[disp[0]] P0口送数
    P20x06 数位选
    delay_50us(2) 显示数值保持100us
    P20x00 关闭位选

    P0table[disp[1]] P0口送数
    P20x07 数位选
    delay_50us(2) 显示数值保持100us
    P20x00 关闭位选
    }
    void main()
    {
    while(1)
    {
    display()
    }
    }













    第4章 硬件调试
    根述设计电路画出电路原理图根原理图焊接电路板实物图图41示:

    图41 实物图
    设计中红外遥控器图42示遥控器键相应码值图43示:
    1b 18
    17 16 15
    14 13 12
    11 10 0f
    1a 0e 19
    00 08
    02
    07 06 05
    0a
    1d 03
    1f 04 0b

    图42 红外遥控器 图43 遥控器键码值
    红外遥控音乐播放器设计中红外遥控器未全部键设计功设计
    键应码值功表41示:
    表41 遥控器键码值功表
    遥控器键
    键应码值

    数字键1
    17
    曲目1
    数字键2
    16
    曲目2
    频道+
    02
    暂停
    音量
    07

    确认
    06
    确认
    音量+
    05

    频道
    0a
    停止
    根设计功进行硬件调试调试程:
    (1)单片机电时键键数码显示00蜂鸣器工作
    (2)数字键1应码值17数码显示17蜂鸣器工作实现播放曲目1:祝安
    (3) 数字键2应码值16数码显示16蜂鸣器工作实现播放曲目2:八月桂花遍开
    (4) 频道+应码值02数码显示02蜂鸣器暂停播放曲目2确认键应码值06数码显示06蜂鸣器继续工作实现断点播放曲目2
    (5) 频道+应码值02数码显示02蜂鸣器暂停播放曲目2音量应码值07数码显示07蜂鸣器播放曲目1实现暂停时更换曲目
    (6) 音量+应码值05数码显示05蜂鸣器播放曲目2实现播放时更换曲目
    (7) 频道应码值0a数码显示0a蜂鸣器停止工作实现停止播放功



    通次课程设计单片机相关知识进步解认识单片机外围电路设计程中学许课没知识学会Proteus仿真软件虚拟环境中进行仿真先通检验电路正确性程序行性需真实电路环境介入必顾仪器设备短缺环境限制够极提高实验效率
    次设计学知识提高逻辑思维力逻辑电路分析程序设计更进步加深组合逻辑电路时序逻辑电路单片机程序设计方面认识进步增进常见逻辑器件解外焊接单片机电路程中学许焊接方面知识技巧培养查阅参考书独立思考力次课程设计真正懂理实际相结合重性


    参考文献
    [1] 张毅刚.MCS51单片机应设计.哈尔滨:哈尔滨工业学出版社2003
    [2] 求科技.8051系列单片机C程序设计完全手册.北京:民邮电出版社2006
    [3] 李升.单片机原理接口技术.北京:北京学出版社2011




    附录1 整体电路图实物图



    附录2 电路元件
    1
    单片机
    AT89S52
    1片
    2
    锁存器
    74HC573
    1片
    3
    三八译码器
    74HC138
    1片
    4
    达林顿晶体
    ULN2003
    1片
    5
    红外体接收头
    SM0038
    1
    6
    电容
    30PF
    2
    7
    电容
    104
    1
    8
    电解电容
    10UF
    2
    9
    电阻
    10K
    1
    10
    电阻
    100
    2
    11
    排阻
    10K
    1
    12
    晶振
    12MHz
    1
    13
    两位阴数码

    1
    14
    蜂鸣器

    1
    15


    1




    附录3 程序源码
    #include
    #define uchar unsigned char
    #define uint unsigned int
    sbit FMP2^3 定义蜂鸣器引脚
    uchar table[16]
    {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5e0x790x71}数码显示编码
    uchar irtimestartflagbitnumirreceokirprocokshuaxinn
    uchar icount
    uchar irdata[33] irtime
    uchar ircode[4] 解码数
    uchar disp[2] 送数码数
    uchar qumu[2] {01} 曲目数组
    unsigned char code song[] { 祝安
    0x260x200x200x200x200x200x260x100x200x100x200x800x260x200x300x20
    0x300x200x390x100x300x100x300x800x260x200x200x200x200x200x1c0x20
    0x200x800x2b0x200x260x200x200x200x2b0x100x260x100x2b0x800x260x20
    0x300x200x300x200x390x100x260x100x260x600x400x100x390x100x260x20
    0x300x200x300x200x390x100x260x100x260x800x260x200x2b0x100x2b0x10
    0x2b0x200x300x100x390x100x260x100x2b0x100x2b0x200x2b0x400x400x20
    0x200x100x200x100x2b0x100x260x300x300x800x180x200x180x200x260x20
    0x200x200x200x400x260x200x2b0x200x300x200x300x200x1c0x200x200x20
    0x200x800x1c0x200x1c0x200x1c0x200x300x200x300x600x390x100x300x10
    0x200x200x2b0x100x260x100x2b0x100x260x100x260x100x2b0x100x2b0x80
    0x180x200x180x200x260x200x200x200x200x600x260x100x2b0x200x300x20
    0x300x200x1c0x200x200x200x200x800x260x200x300x100x300x100x300x20
    0x390x200x260x100x2b0x100x2b0x200x2b0x400x400x100x400x100x200x10
    0x200x100x2b0x100x260x300x300x800x00
    八月桂花遍开
    0x180x300x1C0x100x200x400x1C0x100x180x100x200x100x1C0x100x180x40
    0x1C0x200x200x200x1C0x200x180x200x200x800xFF0x200x300x1C0x100x18
    0x200x150x200x1C0x200x200x200x260x400x200x200x2B0x200x260x200x20
    0x200x300x800xFF0x200x200x1C0x100x180x100x200x200x260x200x2B0x20
    0x300x200x2B0x400x200x200x1C0x100x180x100x200x200x260x200x2B0x20
    0x300x200x2B0x400x200x300x1C0x100x180x200x150x200x1C0x200x200x20
    0x260x400x200x200x2B0x200x260x200x200x200x300x800x200x300x1C0x10
    0x200x100x1C0x100x200x200x260x200x2B0x200x300x200x2B0x400x200x15
    0x1F0x050x200x100x1C0x100x200x200x260x200x2B0x200x300x200x2B0x40
    0x200x300x1C0x100x180x200x150x200x1C0x200x200x200x260x400x200x20
    0x2B0x200x260x200x200x200x300x300x200x300x1C0x100x180x400x1C0x20
    0x200x200x260x400x130x600x180x200x150x400x130x400x180x800x00}
    void delay_50us(uint t) 延时50微秒
    {
    uchar j
    for(t>0t)
    {
    for(j19j>0j)
    }
    }
    void delay_25us(uint t) 延时25微秒
    {
    uchar j
    for(t>0t)
    {
    for(j3j>0j)
    }
    }
    void timer0init(void)
    {
    TMOD0x02 定时器0 定时方式2 8位动重装
    TH00x00 初值0 实现定时256us
    TL00x00
    ET01 开定时器0中断
    EA1 开总中断
    TR01 启动定时器0
    }
    void int1init(void)
    {
    IT11 外部中断1负跳变效
    EX11 开外部中断1中断
    EA1 开总中断
    }
    void irproc(void) 解码函数
    {
    uchar kvaluemj
    k1
    for(j0j<4j++) 4组二进制码
    {
    for(m0m<8m++) 组8位
    {
    valuevalue>>1 低位前右移正常序
    if(irdata[k]>6) irtime6*256us 解码数1
    {
    valuevalue | 0x80 解码数1 高位1 高位置1
    }
    k++ 二进制码位
    }
    ircode[j]value 组解码值存入ircode
    }
    irprocok1 解码完成
    }
    void irwork(void) 解码数转成16进制两位数
    {
    disp[0]ircode[2]16 取出ircode中两位数码
    disp[1]ircode[2]16 取出ircode中两位数码
    }
    void display(void) 数码显示函数
    {
    P0table[disp[0]] P0口送数
    P20x06 数位选
    delay_50us(2) 显示数值保持100us
    P20x00 关闭位选
    P0table[disp[1]] P0口送数
    P20x07 数位选
    delay_50us(2) 显示数值保持100us
    P20x00 关闭位选
    }
    void play(uchar l) 音乐播放函数
    {
    uchar temp1temp2
    uint addr song[]播放位置
    count 0 中断计数清0
    addr l * 217
    while(1)
    {
    temp1 song[addr++]
    if (temp1 0xFF) 休止符
    {
    TR0 0 关闭定时器0
    delay_50us(100)
    }
    else if (temp1 0x00) 歌曲结束符
    {
    return
    }
    else
    {
    temp2 song[addr++]
    TR0 1 启动定时器0
    while(1)
    {
    P0table[disp[0]] P0口送数
    P20x06 数位选
    FM ~FM
    delay_25us(temp1)
    P20x00 关闭位选
    P0table[disp[1]] P0口送数
    P20x07 数位选
    delay_25us(temp1)
    P20x00 关闭位选
    if(temp2 count) 节拍
    {
    count 0
    break
    }
    }
    }
    if(irreceok) 接收完成
    {
    irproc() 解码
    irreceok0
    }
    if(irprocok) 解码完成
    {
    irwork() 解码数转成16进制两位数
    irprocok0
    if(ircode[2]0x02&&shuaxin1) 暂停
    {
    shuaxin0
    while(1)
    {
    if(irreceok) 接收完成
    {
    irproc() 解码
    irreceok0
    }
    if(irprocok) 解码完成
    {
    irwork() 解码数转成16进制两位数
    irprocok0
    }
    display() 显示
    if(ircode[2]0x06) 暂停重新播放
    {
    shuaxin0
    break
    }
    if(ircode[2]0x0a&&shuaxin1) 停止播放
    {
    shuaxin0
    return
    }
    if(ircode[2]0x17&&shuaxin1) 曲目0
    {
    shuaxin0
    return
    }
    if(ircode[2]0x16&&shuaxin1) 曲目1
    {
    shuaxin0
    return
    }
    if(ircode[2]0x07&&shuaxin1) 播放曲
    {
    if(l0) 前播放曲目0
    {
    shuaxin0
    n1
    return 返回函数播放qumu[n]
    }
    else 前播放曲目1
    {
    shuaxin0
    n0
    return 返回函数播放qumu[n]
    }
    }
    if(ircode[2]0x05&&shuaxin1) 播放曲
    {
    if(l0) 前播放曲目0
    {
    shuaxin0
    n1
    return 返回函数播放qumu[n]
    }
    else 前播放曲目1
    {
    shuaxin0
    n0
    return 返回函数播放qumu[n]
    }
    }
    }
    }
    if(ircode[2]0x0a&&shuaxin1) 停止
    {
    shuaxin0
    return
    }
    if(ircode[2]0x17&&shuaxin1) 曲目0
    {
    shuaxin0
    return
    }
    if(ircode[2]0x16&&shuaxin1) 曲目1
    {
    shuaxin0
    return
    }
    if(ircode[2]0x07&&shuaxin1) 播放曲
    {
    if(l0) 前播放曲目0
    {
    shuaxin0
    n1
    return 返回函数播放qumu[n]
    }
    else 前播放曲目1
    {
    shuaxin0
    n0
    return 返回函数播放qumu[n]
    }
    }
    if(ircode[2]0x05&&shuaxin1) 播放曲
    {
    if(l0) 前播放曲目0
    {
    shuaxin0
    n1
    return 返回函数播放qumu[n]
    }
    else 前播放曲目1
    {
    shuaxin0
    n0
    return 返回函数播放qumu[n]
    }
    }
    }
    }
    }
    void main()
    {
    timer0init() 定时器初始化
    int1init() 外部中断初始化
    while(1)
    {
    if(irreceok) 接收完成
    {
    irproc() 解码
    irreceok0
    }
    if(irprocok) 解码完成
    {
    irwork() 解码数转成16进制两位数
    irprocok0
    }
    display() 显示
    if(ircode[2]0x06) 播放歌曲
    {
    shuaxin0
    play(qumu[0])
    }
    if(ircode[2]0x17) 播放曲目0
    {
    shuaxin0
    play(qumu[0])
    }
    if(ircode[2]0x16) 播放曲目1
    {
    shuaxin0
    play(qumu[1])
    }
    if(ircode[2]0x07) 曲
    {
    shuaxin0
    play(qumu[n])
    }
    if(ircode[2]0x05) 曲
    {
    shuaxin0
    play(qumu[n])
    }
    }
    }
    void timer0() interrupt 1
    {
    irtime++
    i++
    if(i39) 39*256us10ms
    {
    i0
    count++ 蜂鸣器节拍
    }
    }
    void int1() interrupt 2
    {
    if(startflag1)
    {
    if(irtime>32) 检测9ms引导码
    {
    bitnum0
    }
    irdata[bitnum]irtime
    irtime0
    bitnum++
    if(bitnum33) 接收结束
    {
    bitnum0
    irreceok1 接收完成
    }
    }
    else
    {
    startflag1 接收开始标志位
    irtime0
    }
    shuaxin1
    }



    致 谢
    次单片机课程设计XX老师指导求完成电路设计步骤程序设计程老师细心教导时学种帮助课程设计感谢老师精心指导受益匪浅感谢学帮助老师表示深深感谢崇高敬意

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    单片机红外遥控系统设计

     单片机红外遥控系统设计 摘要:本文设计了一种基于AT89S52单片机的红外遥控系统,可用于控制多种电器的开关,交流电机的转速及启停等方面。阐述了发射部分和接收部分的设计原理和工作...

    5年前   
    1111    0

    红外遥控电路设计

    摘 要 随着科学技术的飞速发展,信息的飞快传播,红外遥控在人们的生活中已经成为不可或缺的部分。本文重点介绍了利用单片机AT89S52和AT89C2051实现红外发射和接收电路的设计方法...

    5年前   
    1258    0

    基于单片机的遥控窗帘课程设计

    《单片机应用与仿真训练》设计报告基于单片机的遥控窗帘设计姓 名: 学 号: ...

    1年前   
    289    0

    微机原理课程设计音乐播放器

    微机原理课程设计音乐播放器一、课程设计的任务和目的课程设计题目:音乐播放器课程设计的实现目的:本课程设计主要是通过汇编语言用软件编程的方法实现简单的音乐播放功能。通过在《微机原理与接口技术》课...

    1年前   
    301    0

    C51音乐播放器课程设计

    课程设计姓名:学号:班级:组员: 目 录1 设计题目.........................................

    4年前   
    499    0

    基于凌阳单片机的红外通信接口设计

    科 研 训 练 报 告报告题目:基于凌阳单片机的红外通信接口设计姓 名 院(系) 电气与电子工程学院 ...

    2年前   
    376    0

    基于51单片机的红外线遥控智能台灯设计-智能台灯的控制系统电路设计

    随着社会的发展,智能产品也随着变化,电子产品快速发展,我们家用电器智能化越来越多,常见的智能家居如电饭煲,电磁炉,台灯等主要系统都具有一个共同的特点,那就是利用单片机控制系统作为本次的核心系统,...

    3年前   
    949    0

    基于51单片机音乐盒课程设计

    基于51单片机音乐盒课程设计 课程名称: 微机原理课程设计 题 目: 基于51单片机的音乐盒设计 摘要 随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的...

    5年前   
    1246    0

    音乐倒数计数器单片机课程设计

    音乐倒数计数器单片机课程设计摘 要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种。...

    1年前   
    506    0

    成都理工大学Qt课程设计实验报告音乐播放器

     程序设计基础 课程设计(论文)设计(论文)题目 基于QT实现的简易音...

    2年前   
    305    0

    遥控社团课程设计

    课程名称:遥控社团教师: 附件二:一学期结束上交内容与实施(以一学期计算,约16--20课时,含报名选拔和期末的评价)课时主 要 内 容实施的简要流程1认识遥控车1.社员自我介绍2.认识遥控车...

    1年前   
    488    1

    单片机课程设计报告

    1 方案设计与论证1.1 硬件总体设计设计并制作一个基于单片机的数字电压表的电路其结构框图如图 1-1 所示: 图1-1 硬件结构框图(1)单片机最小系统电路部分 (2)数码管显示部分(3) ...

    4年前   
    1650    0

    基于51单片机红外迎宾及人数检测报警系统

    红外感应式门铃如今常用于店铺门口用于迎接顾客。它可依据顾客的进出状况作出有所差别的反应。主要研究了红外感应技术在我们日常生活中的应用,即感应式门铃。通过对它的研究,学会红外接近开关的原理、电路设...

    3年前   
    811    0

    基于单片机的红外报警监控系统设计

    基于单片机的红外报警监控系统设计摘 要伴随着经济的飞快发展,科学技术的发展速度令人侧目。随着人民生活水平日趋提高,大家对自己的个人财产的保护意识也是越来越重,因此,越来越多的家庭都安装了报警...

    2年前   
    506    0

    基于51单片机红外感应家用小夜灯的设计

     本科毕业论文(设计)题 目: 基于51单片机红外感应家用小夜灯的设计 院 系:物理与电子信息科学系 专 业:电子信息科学与技术...

    2年前   
    544    0

    基于单片机的智能遥控感应风扇设计

    本设计为一种智能温控和湿控风扇系统,具有灵敏的温度感测、湿度感测和显示功能,系统STC89C52单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风

    3年前   
    685    0

    单片机简易电子琴单片机课程设计

    XX学院课程设计报告课程名称:单片机原理及应用课程设计设计题目: 电子琴设计 系 别: 通信与控制工程系 专 ...

    2年前   
    482    0

    单片机课程设计报告基于单片机的温控系统

    职业学院机械与电子工程学院基于单片机温控系统课程设计报告班 级 电信班 学生姓名 学 号 指导教...

    3年前   
    979    0

    基于51单片机的定时闹钟设计单片机课程设计

    单片机 课 程 设 计 报 告 院系: 信息工程学院 ...

    1年前   
    472    0

    单片机课程设计实习报告

    单片机课程设计实习报告  实训任务:  做单一灯的左移右移,八个发光二极管l1-l8分别接在单片机的p1.0→p1.2→p1.3┅→p1.7→p1.6→┅→p1.0亮,重复循环3次。然后左移2...

    11年前   
    797    0

    文档贡献者

    文***享

    贡献于2019-07-27

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档