基于at89c51系列单片机的音乐盒毕业论文内容摘要:
54 903 108 Do# 1109 54 54 Re 294 1701 204 Re 587 852 102 Re 1175 51 51 Re# 311 1608 193 Re# 622 804 97 Re# 1245 48 48 Mi 330 1515 182 Mi 659 759 91 Mi 1318 45 45 Fa 349 1433 172 Fa 698 716 86 Fa 1397 43 43 Fa# 370 1351 162 Fa# 740 676 81 Fa # 1480 41 41 So 392 1276 153 So 784 638 77 So 1568 38 38 So# 415 1205 145 So# 831 602 72 So# 1661 36 36 La 440 1136 136 La 880 568 68 La 1760 34 34 La# 464 1078 129 La# 932 536 64 La# 1865 32 32 Si 494 1012 121 Si 988 506 61 Si 1976 30 30 do re mi fa so la si 分别编码为 17 重音 do 编为 8 重音 re 编为 9 停顿编为 0 播放长度以十六分音符为单位在本程序中为 165ms一拍即四分音符等于 4个十六分音符编为 4其它的播放时间以此类推音调作为编码的高 4位而播放时间作为低 4位如此音调和节拍就构成了一个编码以 0xff 作为曲谱的结束标志 举例 1 音调 do 发音长度为两拍即二分音符将其编码为 0x18 举例 2 音调 re 发音长度为半拍即八分音符将其编码为 0x22 歌 曲播放的设计先将歌曲的简谱进行编码储存在一个数据类型为 unsigned char 的数组中程序从数组中取出一个数然后分离出高 4 位得到音调接着找出相应的值赋给定时器 0使之定时操作蜂鸣器得出相应的音调接着分离出该数的低 4位得到延时时间接着调用软件延时 表 44 简谱对应的简谱码 T 值节拍数 简谱 发音 简谱码 T 值 节拍码 节拍数 5 低音 SO 1 64260 1 14 拍 6 低音 LA 2 64400 2 24 拍 7 低音 TI 3 64524 3 34 拍 1 中音 DO 4 64580 4 1 拍 2 中音RE 5 64684 5 1 又 14 拍 3 中音 MI 6 64777 6 1 又 12 拍 4 中音 FA 7 64820 8 2 拍 5 中音 SO 8 64898 A 2 又 12拍 6 中音 LA 9 64968 C 3 拍 7 中音 TI A 65030 F 3又 34 拍 1 高音 DO B 65058 2 高音 RE C 65110 3 高音 MI D 65157 4 高音 FA E 65178 5 高音 SO F 65217 42 编程思路简述 述 要产生音频信号只要算出某一音频的周期 频率的倒数将此周期除以 2 即为半周期的时间利用定时器计时此半周期时间计时到后取反输出重复此过程即得到此频率的声音信号此信号从 P30 脚输出 定时器 T0 工作在定时方式 1 改变 TH0 及 TL0 产生不同的音频频率必须考虑到中断响应时间的影响尤其在高音部分若忽略中断响应时间会使音频频率比标准值低几十 Hz相当于 14音程很容易听出来对低音部分影响不大一般中断响应时间为 3~ 6个机器周期经过反复试验取 5个机器周期作为校正最为恰当表 21中所给的定时初值就是考虑中断响应后的定时常数另外为避免 T1 中断可能引起杂音应将定时器 T0 中断设为高 优先级这样编写出来的程序播放的音与标准音叉进行差频校音非常准确和谐本设计中单片机晶振频率为 110592MHz 每个音符使用两个字节低位字节偶地址代表音级 00H 表示不发音休止符01H~ 30H 依次表示的音级为 c# cd# defa3# a3b3 详见表 21 高位字节奇地址代表音符的时值拍数 00H~ 0FH依次表示拍数为 18拍 010s~ 8拍 640s见表 22乐曲的结束标志是两个字节 0FFH0FFH 设计延时程序 125ms 来控制节拍并在延时中判断是否有停止键按下以便随时停止音乐改变延时程序的延迟时间即可实现歌曲的快慢演奏 主程 序的任务是按顺序读取数据表中的字节根据情况调用音级子程序和演唱子程序启动定时器 T0 通过延时控制节拍并循环回音级子程序等待演唱完毕 要编写的乐谱按要求以音符字节数据表的形式存放在程序中改变乐曲就是通过改变该数据表的内容来实现的 主程序的任务是按顺序读取数据表中的字节根据情况调用音级子程序和音长子程序启动定时器 T0 根据定时器 T1 应中断的次数启动定时器 T1 数据表读完后根据所设置的循环演奏次数决定是否结束程序音级子程序的任务是取出字节中的音级部分分析 TH0 和 TL0 中应送入何值送给 33H34H 演唱子程序的任务是取出对 应频率值并乘以 2 启动 T0 实现发音之后执行延时程序体现节拍依此循环直到音乐结束 定时器 T0的中断服务程序任务是取反 P30输出产生方波重新为 TH0TL0送初值 定时器 T1 的中断服务程序任务是判断计数完成否给 373 的控制端高或低电平从而实现数据输出或禁止达到二极管亮灭闪烁的效果 当乐曲较长时超过 254 个字节数据表指针溢出应及时修改基址寄存器 DPTR内容即数据表的表头指针 图 Y N 图 41 程序原理框图 43 总原理图及元器件清单 元器件清单为 AT89C52 晶振电容电阻排阻按键数码管二极管蜂鸣器三极管 第章 结论 致 谢 感谢我的导师严谨细致一丝不苟的作风一直是我的榜样他们循循善诱的教导和不拘一格的思路给予我无尽的启迪感谢我的爸爸妈妈感谢我的室友们是你们和我共同维系着彼此之间感情在论文即将完成之际我的心情无法平静从开始进入课题到论文的顺利完成有多少可敬的师长同学朋友给了我无言的帮助在这里请接受我诚挚的谢意 参考文献 ]北京清华大学出版社 199711 [4] 李华 MC51 系列单片机实用接口技术 [M]北京北京航空航天大学出版社19938 [5] 马忠梅单片机的 C语言 Windows 环境编程宝典 [M]北京北京航空航天大学出版社 20206 [6] 李广弟单片机基础 [M]北京北京航空航天大学出版社 20206 毕业设计小结 附件 程序清单 include include include define uchar unsigned char define uint unsigned int define w_c_add XBYTE[0x2070] 写命令字地址 define w_d_add XBYTE[0x2071] 写数据地址 define r_s_add XBYTE[0x2072] 读状态字地址 define r_d_add XBYTE[0x2073] 读数据地址 uchar code xdata music uchar code xdata music_name uchar code tab[] 0xf80x940xf90x5c0xfa0x1a0xfa0x6a0xfb0x000xfb0x8c0xfc0x0e 0xfc0x4a0xfc0xae0xfd0x080xfd0x300xfd0x800xfd0xc60xfe0x02 0xfe0x2a0xfe0x5c0xfe0x840xfe0x980xfe0xc00xfe0xe80xfe0x06 uchar code music_name1[20] 0xc70xfa0xc40xbf0xd20xbb0xa10xc30xc10xbd0xd60xbb0xc00xcf0xbb0xa20xef0xff 两只老虎 uchar code music1[] 0x440x540x640x440x440x540x640x440x640x740x880x64 0x740x880x820x920x820x720x640x440x820x920x820x72 0x640x440x540x140x480x540x140x480x00 uchar code music_name2[20] 0xc70xfa0xc40xbf0xb60xfe0xa10xc30xc90xfa0xc80xd50xbf0xec0xc00xd60xff 生日快乐 uchar code music2[] 0x820x010x810x940x84。基于at89c51系列单片机的音乐盒毕业论文
相关推荐
1 时显示 5 10 点阵。 命令 7: CGRAM 地址设置,地址范围 00H~ 3FH(共 64 个单元,对应 8 个自定义字符)。 命令 8: DDRAM 地址设置,地址范围 00H~ 7FH。 命令 9:读忙 标志和计数器地址。 计数器地址范围 00H~ 7FH。 命令 10: 写 DDRAM 或 CGROM。 要配合地址设置命令。 命令 11:读 DDRAM 或 CGROM。
6p 1. 67p 1. 78R S T9P 3. 0 ( R X D )10P 3. 1 ( T X D )11P 3. 2 ( / I N T 0 )12P 3. 3 ( / I N T 1 )13P 3. 4 ( T 0)14P 3. 5 ( T 1)15P 3. 6 ( / W R )16P 3. 7 ( / R D )17X T A L 218X T A L 119GND20P 2.
内部 上拉电阻 来输出电流( IIL)。 P3 口除了作为 普通 的 I/O 口线外,更重要的是它的第二 作用见表 , P3 口还 可以 接收一些用于 闪速存储器 编程 和程序 校正检验 的 控制信号。 端口引脚 第二功能 RXD(串行输入 ) TXD(串行输出 ) INT0(外 部 中断 0) INT1(外 部 中断 1) T0(定时 /计数器 0 外部输入 ) T1(定时 /计数器 1
真工具 Proteus 和单片机编程软件 Keil 实现了系统软、硬件的交互仿真,并结合液晶显示器 1602C、DS18B20 和 STC89C52RC 单片机开发板进行了电路焊接和调试,实现了课题设计目的。 验码,这也是多个 DSl8B20 可以采 用 一线进行通信的原因。 64 位激光 ROM 的机构如表 1所示: 表 1 64位激光 ROM的结构 8位 CRC编号 48位 序列号 8位
时间指的是快充时的最大充电时间,它和定时电容 CcT 的关系如下式所示。 CCT = tCHG 式中, tCHG 的单位为小时, CcT 的单位为 nF。 大多数情况下,快充时最大充电时间不超过 3 小时,因此常取 CcT 为 100nF。 ( 4)在限制电流 的模式下,通过外接的电阻 RSET 来设置最大充电电流IFSTCHG,关系如下式所示 12 式中, RSET 的单位为Ω,
程序存储器锁定 5 128*8 位内部 RAM 6 32 可编程 I/O 线 7 两个 16 位定时器 /计数器 8 6 个中断源 9 可编程串行通道 10 片内振荡器和时钟电路 另外, AT89C51 是用静态逻辑来设 计的,其工作频率可下降到 0Hz,并提供两种可用软件来选择的省电方式 ——空闲方式( Idle Mode)和掉电方式( Power Down Mode)。 在空闲方式中,