单片机课程设计基于at89s52单片机的数码管显示音乐盒的设计内容摘要:
ROM、键盘、马达、 LED、 AD/DA、部分 SPI 器件、部分 IIC 器件等)。 软件编译采用 KEIL C51 软件, Keil C51 是美国 Keil Software 公司出品的 51系列兼容单片机 C 语言软件开发系统,与汇编相比, C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C 来开发,体会更加深刻。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 仿真结果 按照上面设计的电路在 proteus 软件内画图 , 打开单片机软件开发 12 系统 Keil,选择 89c51 单片机 ,在其中编写程序 ,运行生成一个后缀名为hex 的文件 ,然后将该文件下载到 proteus 中的 AT89c51 单片机中进行仿真 ,观察实验现象。 仿真能实现播放音乐,按键选择曲目,暂停,播放功能。 仿真成功后,安装好实验板 ,然后将音乐程序下载到电路板内 ,观察结果。 能实现播放音乐,按键换曲等功能。 系统调试 程序调试中出现的问题及解决的办法: ( 1) 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的 RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。 ( 2) 程序中的跳转指令的运用很重要,为保险起见,都用 LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。 当用 JNZ 指令时,跳转范围比较少,这时要用一个标号中转。 ( 3) 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。 ( 4) 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。 ( 5) 编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着 MP3 的工作方式列写流程图。 ( 6) LCD 计时正常显示的解决办法: 两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器 1设定在方式 3,计 250us,由于定时中断过于频繁,使 CPU 负载过大,导致音乐不能正常播放,时间不能正常显示。 解决办法:将定 时器 1设定在工作方式 1, 16 位计数,计 50ms,效果有很大改观。 但还有问题。 改进方案:若采用可以定时时间更长的单片机,可以避免所有问题。 13 结束语 本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。 本设计特点有 :( 1) 与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。 (2) 电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。 (3)基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。 (4)根据存储容量的大小,可以尽可能多的存储歌曲 ;( 5) 可以设计 彩灯外观效果,使音乐盒的功能更加丰富。 但由于 AT89C51 分辨率不是太高,音乐有点单调,另外,由于时间关系具体电路还有的地方不尽完善之处。 ( 6)因容量问题无法容纳五首歌曲 14 /***************************************************** Header: 单片机 :数码管显示音乐播放 File Name: 数码管显示音乐播放 Author: 戴启盛 Date: 2020/01/03 ******************************************************/ include define uchar unsigned char define uint unsigned int void delay(uint time) { //delay 一次即延时约 20ms uint i。 while(time) for(i=0。 i2580。 i++)。 //约 20ms } uint code timer[]={0x0000, //各音 符频率对应定时器初值 // timer[]为基本音符对应定时器初值, timerup[]为升音音符对应定时器初值。 // 1 2 3 4 5 6 7 0xf88c, 0xf95c, 0xfa15, 0xfa68, 0xfb05, 0xfb90, 0xfc0c, 0xfc44, 0xfcad, 0xfd0a, 0xfd32, 0xfd83, 0xfdc8, 0xfe06, 0xfe22, 0xfe57, 0xfe85, 0xfe9b, 0xfec2, 0xfee4, 0xff02 }。 uint code timerup[]={0x0000, // timer[]为基本音符对应定时器初值, timerup[]为升音音符对应定时器初值。 // 1 2 3 4 5 6 7 0xf8f3, 0xf9b9, 0xfa68, 0xfab9, 0xfb4c, 0xfbd0, 0xfc44, 0xfc7a, 0xfcdd, 0xfd32, 0xfd5d, 0xfda7, 0xfde8, 0xfe22, 0xfe3e, 0xfe6f, 0xfe9b, 0xfeaf, 0xfed3, 0xfef4, 0xff20 }。 uchar th,tl。 sbit out=P2^0。 uint i=0,j=0。 /****************************************************************************** 15 曲子存储格式:频率,节拍;频率,节拍; 0 x 0 0 0。 0 x 0 0 音域,正常为 01; 频率 1 ~ 7; 是 1 否 0 升音 节拍 1 ~ 15 00\02\03 降升八度 0 表示休止 是 1 否 0 顿音 若为 0 则表示停止标志 ********************************************************************************/ uchar code bas[]={//音符 0x01,0x08, 0x02,0x08, 0x03,0x08, 0x04,0x08, 0x05,0x08, 0x06,0x08, 0x07,0x08,// 0x08,0x08, 0x11,0x08, 0x12,0x08, 0x13,0x08, 0x14,0x08, 0x15,0x08, 0x16,0x08, 0x17,0x08, 0x21,0x08, 0x22,0x08, 0x23,0x08, 0x24,0x08, 0x25,0x08, 0x26,0x08, 0x27,0x08, 0,0 }。 uchar code red[]={ //红河谷 0x05,0x01, 0x11,0x01, 0x13,0x03, 0x13,0x01, 0x13,0x02, 0x12,0x01, 0x13,0x01, 0x12,0x01, 0x11,0x03, 0x05,0x01, 0x11,0x01, 0x13,0x02, 0x11,0x01, 0x13,0x01, 0x15,0x02, 0x14,0x01, 0x13,0x01, 0x12,0x04, 0x15,0x01, 0x14,0x01, 0x13,0x02, 0x13,0x01, 0x12,0x01, 0x11,0x02, 0x12,0x01, 0x13,0x01, 0x15,0x01,0x14,0x03, 0x06,0x01, 0x06,0x01, 0x05,0x02, 0x07,0x01, 0x11,0x01, 0x12,0x02, 0x13,0x01, 0x12,0x01, 0x11,0x04, 0,0 }。 uchar code xingyue[]={ //星月神话 0x15,0x01, 0x16,0x01, 0x15,0x01,0x14,0x01,0x15,0x02,0x14,0x01,0x13,0x01, 0x14,0x02, 0x13,0x01,0x12,0x01,0x11,0x04, 0x12,0x02,0x14,0x02, 0x13,0x02,0x11,0x02, 0x06,0x04, 0x14,0x01, 0x15,0x01,0x16,0x02, 0x15,0x01,0x14,0x01, 0x15,0x02,0x14,0x01, 0x13,0x01,0x14,0x02, 0x13,0x01,0x12,0x01, 0x11,0x04, 0x12,0x02,0x16,0x01, 0x13,0x01,0x13,0x02, 0x14,0x01,0x15,0x01, 0x14,0x04, 0x12,0x03,0x14,0x01, 0x13,0x02,0x14,0x01, 0x15,0x01,0x16,0x03, 0x21,0x01,0x16,0x03, 0x00,0x01, 0x12,0x03,0x14,0x01, 0x13,0x02,0x14,0x01, 0x15,0x01,0x14,0x04, 0x00,0x01, 0x14,0x01,0x15,0x01,0x16,0x02, 0x15,0x01,0x14,0x01,0x15,0x02,0x14,0x01,0x13,0x01, 16 0x14,0x02, 0x13,0x01,0x12,0x01,0x11,0x04, 0x12,0x02,0x14,0x02, 0x13,0x02,0x14,0x。单片机课程设计基于at89s52单片机的数码管显示音乐盒的设计
相关推荐
以便投标人获取有关编制投标文件和签署合同所涉及现场的资料。 投标人承担踏勘现场发生的自身费用。 招标人向投标人提供的有关现场的数据和资料,是招标人现有的能被投标人利用的资料,招标人对投标人作出的任何推论、理解和结论均不负责任。 经招标人允许,投标人可为踏勘目的进入招标人的项目现场,但投标 人不得因此使招标人承担有关的责任和蒙受损失,投标人应承担踏勘现场的责任和风险。
窃电 窃电者 将 电能表 进线中的零线断开,仅接入一根 火 线, 再将电器 的另一 端接到大地(自来水管、暖气管或保护接地线)。 电器消耗的 电流直接 流 入大地, 使得没有电网电压进入 电能表, 导致电 能 表 停止 工作 而 不能正常计量 , 从而 实现窃电。 强 外部 强 磁场窃电 永久磁 铁 和电磁场都 会影响电 能 表的正常计量,窃电者在电 能 表附近放置强磁磁铁或大线圈都能干扰电 能
关钢管、扣件用量,考虑现场施工操作面的安排、施工进展的落实,配置相应的劳动力。 高支模 架 体 安装质量,高支撑模板钢管扣件架 体 的支撑体系拟由脚手架安装专业施工人员,对照技术交底和施工附图进行安装。 ,按 1000m2满堂脚手架计算需要钢管脚手架专业人员安装 200工作日计算,配备相应数量的钢管脚手架安装人员。 ,按现场情况灵活调动配置。 落实好有关脚手架班组
R液晶显示步进电机运行状态,其效果比用数码管显示要更加明了,也更容易读取相关状态和数据。 液晶上显示有电机运行的状态、当前 步数 、运行方向以及其运转速度。 其显示原理如下图 42: 图 42 液晶显示流程图 正反转流程图 步进电机的正反转用 K K2控制,初始化电机为顺时针转,即“》”, 每当按下 K4键,电机转向改变,具体流程图如下图 43: 启动与停止流程图 启动与停止是用 K1键来
旦某个DS18B20 接触不好或断线,当程序读该DS18B20 时,将没有返回信号,程序进入死循环。 这一点在进行DS18B20 硬件连接和软件设计时也要给予一定的重视。 DS18B20 的性能特点(1) 独特的单线接口仅需要一个端口引脚进行通讯;(2) 在DS18B20中的每个器件上偶有独一无二的序列号,因此多个DS18B20可以并联在唯一的三线上,实现多点组网功能;(3)
//初始化 ds1302 Write1302(0x8e,0x00)。 //写控制字,允许写 set_ds1302(0x80,now_time_date,8)。 //设置初始时间,日期,年月 //LCD 初始化 LCDInit()。 //LCM 初始化 //显示 初始化界面 DisplayListChar(0, 0, uctech)。 DisplayListChar(2, 1, )。