




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息与电气工程学院单片机系统设计项目(三级项目)设计说明书(2012/2013学年第二学期)题 目 : 音乐播放器 专业班级 :通信工程10级1班 学生姓名 : 李晓叶 、叶单 贺亚运 、杨思佳 学 号: 100310123、100310117 100310120、100310110 指导教师 :马小进、贾少锐、李晓东、付佳设计周数 : 2周 设计成绩 : 2013年6月21日目录1.项目任务32.项目要求33.项目原理及系统介绍33.1原理33.2总体方案设计33.3 单片机最小系统电路43.3.1 AT89S52芯片性能介绍43.3.2 电源电路73.3.3 时钟振荡电路73.3.4 复位电路83.4 键盘扫描模块83.5 显示模块93.6播放模块104.系统软件设计114.1编程原理及流程图115.软件调试155.1各模块调试165.1.1 测试LCD显示模块165.1.2 测试键盘控制模块175.1.3 测试P2.0口输出185.2 调试中遇到的问题及解决215.3 仿真结果216.总结22参考文献23指导老师意见:241.项目任务根据技术要求和现有开发环境,分析设计题目;设计系统方案;设计并绘制电路原理图;画出功能模块的程序流程图;使用汇编语言(或C语言)编写实现程序;结合硬件调试、修改并完善程序。2.项目要求利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒);利用LCD或数码管显示信息;开机时有英文欢迎提示符,播放时显示歌曲序号(或名称);可通过功能键选择乐曲,暂停,播放;3.项目原理及系统介绍3.1原理 音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制蜂鸣器发音。要想产生音频脉冲信号,需要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用单片机定时器计时这个半个周期时间,每当计时到后就将输出脉冲的I/O口反相,然后重复计时此半周期时间再对I/O口反相,这样就能在此I/O口上得到此频率的脉冲。通常,利用单片机的内部定时器0,工作在方式1下,改变计数初值TH0和TL0来产生不同频率。对于音乐的节拍,每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍。如果1拍为0.4S,1/4拍为0.1S,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,那么1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY,其余的节拍就是它的倍数。总而言之,一首乐曲是由音阶和节拍两大要素构成。一首乐曲演奏的原理是:不同音阶分别对应不同的频率,发出不同的音调,而节拍则控制发出音调时间的长短;若将乐曲的音调连续发出,并使其按相应的节拍变化,即可演奏一首乐曲。根据这一特点,我们采用单片机辅以相应的接口来设计MP3播放器。3.2总体方案设计以AT89S52为核心,通过单片机的定时器产生一定长度的方波,方波脉冲驱动蜂鸣器发声。要产生音频脉冲,只需算出某一音频的周期(1/音频),然后取半周期的时间定时。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲。当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时在LCD显示歌曲序号和歌曲名称5。总体如图3-1所示:AT89C52 键盘扫描模块液晶显示模块蜂鸣器发声模块图3-1总体方案图3.3 单片机最小系统电路3.3.1 AT89S52芯片性能介绍AT89C52是低电压,高性能CMOS八位单片机,片内含8K字节的可反复擦写的只读程序存储器和256字节的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失存储技术生产与标准MCS-51指令系统及8052产品引脚兼容,片内置通用八位中央处理器和Flash存储单元,功能强大适合于许多较复杂控制应用场合6。AT89S52主要性能参数:u 与MCS-51产品指令和引脚完全兼容u 8K字节可重复擦写Flash闪速存储器u 1000次擦写周期u 全静态操作:0Hz33MHzu 三级加密程序存储器u 2568字节内部RAMu 32个可编程I/O口线u 3个16位定时/计数器u 8个中断源u 全双工可编程串行UART通道u 低功耗空闲和掉电模式u 掉电后中断可唤醒 u 看门狗定时器 u 双数据指针u 掉电标识符u 快速编程周期u 灵活ISP编程(字节和模式)芯片如图3-2所示:图3-2 AT89C52引脚图功能特性概述:AT89C52提供以下标准功能:8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器。一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时AT89S52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。而本毕业设计中用到了, AT89C52的各个口, P1口接RZ-1602液晶显示电路,P2口接按键,P3口接晶振,蜂鸣器,工作指示灯,复位等电路。AT89S52使一个功能强大的芯片,各个口由以下功能7:P0口是一组8位漏极开路型双向 I/O 口,即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口 P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。 P1口是一个带内部上拉电阻的 8 位双向 I/O 口,P1的输出缓冲级可驱动(吸收或输出电流)4个 TTL 逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,1 不同之处是,P1.0 和 P1.1 还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。IL与 AT89S5.1/T2EX)。P2口是一个带有内部上拉电阻的8位双向 I/O,P2的输出缓冲级可驱动吸(收或输出电流4个TTL逻辑门电路。对端口 P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I )。IL在访问外部程序存储器或 16 位地址的外部数据存储器(例如执行 MOVX DPTR 指令)时,P2口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器(如执行 MOVX RI 指令)时,P2口输出P2 锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。 P3口是一组带有内部上拉电阻的8位双向 I/O 口。P3口输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能。RST:复位输入,当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。如有必要,可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后只有一条MOVX 和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当 AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次 PSEN信号。EA/VPP:外部访问允许。欲使 CPU 仅访问外部程序存储器(地址为 0000HFFFFH),EA 端必须保持低电平。需注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA端状态。如 EA端为高电平,CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源 Vpp,当然这必须是该器件是使用 12V 编程电压 Vpp。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2: 振荡器反相放大器的输出。 3.3.2 电源电路系统直流9V或者12V电池供电,由一片LM7805将9V/12V电源稳压在5V上。5V电源给所有芯片和电路供电。在电源电路中我们使用了两个滤波电容,使用滤波电容主要目的是为了消除电源波动对系统的干扰,提高系统的抗干扰能力,其中104电容是用来滤除高频杂波干扰,220uF电容是用来滤除低频杂波干扰。如图3-3所示: 图3-3 电源电路图3.3.3 时钟振荡电路AT89S52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器构成自激振荡器。片外石英晶体或者陶瓷谐振器及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。这里我们采用电容30pF,晶振采用12MHZ。电路图如图3-4所示: 图3-4 时钟振荡电路3.3.4 复位电路复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。 复位电路采用RC充电电路组成上电复位单片机电路,当系统上电时,在上电初期,电容C充电,使复位脚持续高电平,当C充电到达一定程度复位脚电位会慢慢变低,最后被电阻R完全拉低,高电平复位的时间由充电的时间决定,充电时间又由R与C的阻值和容值之积决定。一旦单片机复位脚拉低后就一直都低电平,只有下电后再上电才重新开始复位过程。电路图如图3-5所示: 图3-5复位电路3.4 键盘扫描模块本方案采用独立式按键接口设计,各按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键工作状态不会影响其他I/O口线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下。键盘工作方式采用定时扫描方式,采用定时器T0定时,通过读取输出数据,识别按键工作状态。键盘按键所用开关为机械弹性开关,利用了机械触点的合断作用。由于机械触点的弹性作用,一个按键开关在闭合和断开的瞬间均有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为10100ms。电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理。为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响。按键的消抖通常有软件和硬件两种消除方法。如果按键较多,硬件消抖将无法胜任,常采用软件消抖。本设计虽然按键少但还是采用常规的软件延时的方法:在第一次检测到有键按下时,执行一段延时子程序后,再确认电平是否仍保持闭电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。判断键盘程序流程如图3-3所示: 有键按下? 开始 去键盘抖动 同一键按下?根据键值执行功能 循环YESNOYESNO图3-3 键盘判断程序流程图3.5 显示模块常见的基于单片机设计的MP3播放器基本不能显示歌曲。该音乐播放系统设计上增加液晶显示器,可为使用者提供曲目信息。由于LED数码管只能显示数字而无法显示其他中英文字符,并对成本及功能考虑,因此从设计的成本及功能的角度考虑,采用LCD-1602显示模块,它可以显示每首曲目的英文名字。LCD-1602驱动电路简单,可以由单片机直接输出命令驱动。LCD各引脚功能如图表3-1所示:表3-1 LCD引脚功能编号符号引脚说明编号符号引脚说明1VSS电源地9D2双向数据口2VDD电源正极10D3双向数据口3VL对比度调节11D4双向数据口4RS数据/命令选择12D5双向数据口5R/W读/写选择13D6双向数据口6E模块使能端14D7双向数据口7D0双向数据口15BLK背光源地08D1双向数据口16BLA背光源正极 VDD:电源正极,4.55.5V,通常使用5V电压。VL:LCD对比度调节端,电压调节范围为05V。接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地。 RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平。R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据。E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8位三态双向数据总线。如果MCU的I/O口资源紧张的话,该模块也可只使用4位数据线D4D7接口传送数据。本充电器就是采用4位数据传送方式。BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右。BLK: LED背光地端。3.6播放模块 通过蜂鸣器实现发声,当三极管基级由单片机控制变成高电平时,V1导通并工作在饱和区,由于集电极和发射极之间的电压差几乎等于0,故相当于蜂鸣器的另一个脚接地,蜂鸣器会发出蜂鸣声。当三极管基级由单片机控制变成高低电平时,V1不导通并工作在截止区,那么蜂鸣器的另一个脚接到高电平,蜂鸣器不发出蜂鸣声。可以通过改变三极管基级的开关频率来控制蜂鸣器发出各种不同频率的声音。另外,蜂鸣器需要三极管驱动,而不能由单片机口线直接驱动,因为蜂鸣器的工作电流比较大(大概100mA),故单片机口线不能承受。 图3-5 蜂鸣器发声模块图4.系统软件设计4.1编程原理及流程图音乐发声设计原理8:(1)总体原理: 一首乐曲是由多个音符构成的。每个音符都对应着一个确定的频率,乐曲中不同的音符,实质就是不同频率的声音;另外每个音符会根据乐曲的要求设定一个确定的节拍。可以控制单片机产生不同频率不同节拍的脉冲信号,由蜂鸣器发出就产生了美妙和谐的乐曲。 (2) 单片机产生不同频率脉冲信号的原理: 1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。 2)利用单片机内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下: 例如,频率为523Hz,其周期1/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。 计数脉冲值与频率的关系公式如下: N=Fi/2/Fr 其中N表示计数值;Fi表示内部计时一次为1uS,故其频率为1MHz;Fr表示要产生的频率。 3)其计数值的求法如下: T=65536-N=65536-Fi/2/Fr 计算举例: 设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、 高音DO(1046Hz)的计数值。 T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr 低音DO的T=65536-500000/262=63628 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1047=650594) 每个音符使用1个字节,字节高4位代表音符高低,低4位代表音符 节拍。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。只要求得1/4拍的DELAY时间,其余节拍则为它的倍数,本设计取4/4调值,延时时间为125ms,其中节拍码与实际节拍对照表4-1。 简谱 发音 频率(Hz) 计数初值 简谱码 5 低音SO 392 64260 1 6 低音LA 440 64400 2 7 低音SI 494 64524 3 1 中音DO 523 64580 4 2 中音RE 587 64684 5 3 中音MI 659 64777 6 4 中音FA 698 64820 7 5 中音SO 784 64898 8 6 中音LA 880 64968 9 7 中音SI 988 65030 A 1 高音DO 1046 65058 B 2 高音RE 1175 65110 C 3 高音MI 1318 65157 D 4 高音FA 1397 65178 E 5 高音SO 1568 65217 F 不发音 0表4-1简谱对应的频率、简谱码和计数初值表 节拍码 实际节拍 节拍码 实际节拍 节拍码 实际节拍 1 1/4拍 5 1又1/4拍 C 3拍 2 2/4拍 6 1又1/2拍 F 3又3/4拍 3 3/4拍 8 2拍 4 1拍 A 2又1/2拍表4-2节拍码与实际节拍对照表建立音乐步骤:1)先把乐谱的音符找出,然后由上表建立T值表的顺序。 2)把T值表构成一个编码表,构成发音符的计数值放在计数初值编码表里。 3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序 的简谱编码表里。 建立编码表具体如下:1)定时值为十六进制4位数,拆分为两组,如5对应的定时值为FD80H,拆分FDH和80H两组.前者装入定时器的高位TH0,后组装入定时器的低位TL0。2)在程序中使用定时器T0方式1来产生来产生歌谱中各音符对应频率的音频脉冲,由P2.0输出,经三极管将信号放大后驱动蜂鸣器发出不同音节的声音。3)程序中的节拍控制是通过调用延时子程序DELAY的次数来实现,1拍为500ms,即需要调用4次DELAY;3/4拍需要调用3次DELAY;2/4拍需要调用2次DELAY。 4)节拍的控制码在表TABLE中位于音符码的后面。5)当一个音符的发音时间到时,再查下一个音符的定时常数和延时常数。依此进行下去,就可演奏出悦耳动听的乐曲。程序流程图如图4-1所示: 结束扫描键盘蜂鸣器发音LCD显示选择的歌曲判断键值盘停止放音开始系统初始化扫描键盘得到键值暂停键是否按下是继续放音图4-1 主程序流程图如图4-2所示,开始播放自定义音乐程序时,指针指向乐谱第一个字节,将第一字节拆分为高低字节,其高字节即为音符中音高对应定时器定时常数,低字节即为音符中节拍对应的1/4节拍的次数,同时启动中断定时器0工作在方式1,由定时器定时常数得到相应音高,通过延时子程序设定1/4节拍的时间,由节拍次数得到节拍,再读取下一个乐谱字节,循环下去则演奏出美妙和谐的乐曲9。开始程序 指向乐谱第一个字节 拆分字节的高低字节 由高字节得音高对应定时器定时常数 由低字节得到节拍对应节拍次数 启动定时器0 延时节拍时间 关闭定时器0 读取下一个乐谱字节 字节是00H吗? 程序循环YESNO 图4-2 音乐播放子程序流程图5.软件调试结构化软件的调试一般可以将重点放在分模块调试上,通调是最后一环。软件调试可以采取离线调试和在线调试两种方式。前者不需要硬件仿真器,借助于软件仿真器即可;后者一般需要仿真系统的支持。在本次设计中利用的是KEIL C51软件仿真器,其评估版本可以免费获取,只是有2KB代码限制。基于MCS51的MP3播放器的设计与实现的调试,主要集中在对扬声器的输出音乐部分的调试以及键盘控制和LCD显示部分的调试上。在编写完整的MP3播放器程序前,可以先按照如下的顺序分别调试各个功能模块的程序。5.1各模块调试5.1.1 测试LCD显示模块(1)调试目的使用P0口作为输出口实现LCD的显示,从而检测P0口及LCD显示模块是否正常工作。(2)调试程序 void WriteCMD(uchar Commond)/LCD写指令函数 Delay(); /先延时。LCDE=1; /然后把改为写入命令状态。LCDRS=0;LCDRW=0;LCDPORT=Commond; /再输出命令。LCDE=0; /最后执行命令。void WriteData(uchar dat)/写数据函数 Delay(); /先延时。LCDE=1; /然后把改为写入数据状态。LCDRS=1; LCDRW=0; LCDPORT=dat; /再输出数据。 LCDE=0; /最后显示数据。void init() LCDRW=0; LCDE=0; WriteCMD(0x38); WriteCMD(0x01); WriteCMD(0x0e); WriteCMD(0x06); WriteCMD(0x0c);(3)调试结果 LCD液晶显示歌曲,表明硬件与软件正确。5.1.2 测试键盘控制模块(1)调试目的通过键盘的控制可使LCD液晶显示相应的内容。(2)调试程序void Getch ( ) uchar X;P3=0xff;if(P3!=0xff) /判断是否有键按下delay1(); /延时,软件去干扰 if(P3!=0xff) /确认按键按下; X=P3; /保存行扫描时有键按下时状态switch ( X) /判断键值(那一个键按下)case 0xef: k=0; break; /对键值赋值case 0xdf: k=1; break; case 0xbf: k=2; break; (3)调试结果键盘按下后LCD显示相应的内容,表明软硬件正确。5.1.3 测试P2.0口输出(1)调试目的使用P2.0口做输出口使蜂鸣器工作(2)调试程序main()uint i;k=8;init(); for(i=0;i10;i+) WriteData(tabi);/LCD写数据函数写第一行 mydelay(50); mydelay(1000); WriteCMD(0x80+0x40);/将指针设到第二行 for(i=0; i11;i+) WriteData(tab1i); mydelay(50);InitialSound();/发音初始化程序while(1) Getch();/扫描键盘,获得键值if(k=0)/若键值为0uint i; init(); for(i=0;i10;i+) WriteData(tab2i);/写第一首歌序号 mydelay(50); mydelay(1000); WriteCMD(0x80+0x40);/转到第二行 for(i=0;i9;i+) WriteData(tab3i);/写歌名 mydelay(50); Play(Music_Girl,0,3,360);/播放第一首歌mydelay(500);break;else if (k=1) /若键值为1uint i; init(); for(i=0;i11;i+) WriteData(tab4i); /写第二首歌序号 mydelay(50); mydelay(1000); WriteCMD(0x80+0x40); /转到第二行for(i=0;i11;i+) WriteData(tab5i); /写歌名mydelay(50); Play(Music_Jingle,0,3,360); /播放第二首歌mydelay (500); break;else if (k=2) /若键值为2uint i;init();for(i=0;i10;i+) WriteData(tab6i); /写第三首歌序号mydelay(50); mydelay(1000);WriteCMD(0x80+0x40); /转到第二行for(i=0;i6;i+)WriteData(tab7i); /写歌名mydelay(50);Play(Music_Two,0,3,360); /播放第三首歌mydelay(500);break;(3)调试结果扬声器有声音发出,扬声器正常工作。5.2 调试中遇到的问题及解决(1)编程前要画流程图,这样会使思路清晰。(2)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。(3)有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写。(4)程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。(5)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。(6)开始时候没有将单片机的第31号引脚接到高电平,结果使MP3播放器的播放性能不稳定(有时候能工作,有时候却工作不了),当接一高电平以后,播放器能正常工作了。(7)开始没有考虑键盘的消抖,造成的按键工作紊乱,具体的现象是:按1次键却被要机器认为是按了1次或多次,这就使播放器有时候可以正常工作,有时候却不可以。给键盘程序加了消抖呼程序以后,按键就工作正常了。(8)两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑工程类建筑三类人员专职安全生产管理人员(C3证)-项目负责人(B证)参考题库含答案解析
- 名校测试卷答案数学试卷
- 2025年学历类自考公共课大学语文-政治经济学(财)参考题库含答案解析
- 2025年学历类自考公共课-政治经济学(财)参考题库含答案解析
- 梦见不想做数学试卷
- 盘溪中学九年级数学试卷
- 2025年学历类自考专业(电子商务)电子商务概论-电子商务法概论参考题库含答案解析
- 2025年学历类自考专业(电子商务)市场营销(三)-电子商务网站设计原理参考题库含答案解析
- 2025年学历类自考专业(电子商务)商法(二)-计算机与网络技术基础参考题库含答案解析
- 2025年学历类自考专业(法律)环境与资源保护法-法理学参考题库含答案解析
- 法律知识培训课件
- 学院 军训协议书
- 农村房地产转让合同协议
- GB/T 5184-2016叉车挂钩型货叉和货叉架安装尺寸
- 220kv升压站质量评估报告
- C语言程序设计(第三版)全套教学课件
- 软件系统平台对接接口方案计划
- 大连市劳动用工备案流程
- 某顶级小学2015-2018幼升小考试题
- 办公楼装饰装修 安全保证措施
- 客户订单确认表(共1页)
评论
0/150
提交评论