基于at89c52单片机的简易电子琴设计毕业论文(编辑修改稿)内容摘要:

位操作。 上电复位要求接通电源后,自动实现复位操作。 手动按钮复位需要人为在复位输入端 RST上加入高电平(图 1)。 一般采用的办法是在 RST端和正 电源 Vcc之间接一个按钮。 当人为按下按钮时,则 Vcc的 +5V电平就会直接加到 RST端。 手动按钮复位的电路如所示。 即使 人的动作再快也会 让 按钮保持接通 的状态 达数十毫秒, 因此 , 它能够 完全满足复位的时间要求。 手动复位 的 要求 是, 在电源接通的条件下,在单片机运行 的 期间 内 , 使用按钮开关操作 将 单片机复位。 单片机小系统 一般 采用 手动按键 复位和 上电 复位两种 方法来 实现系统的复位操作。 上电复位要求 是, 接通电源后, 系统能够 自动实现 复位操作。 手动复位要求 是, 在电源接通的条件下,在单片机运行期间 内 ,用按钮开关操作使单片机复位。 它的 结构 见 下图。 图 34 复位电路 10 键盘设计 在设计的过程中由于 键盘 中按键数量 比 较多,为了减少 I/O口的占用, 一般 将按键排列成 矩阵 形式。 在 矩阵 式 键盘 里 , 各个 水平线和垂直线在交叉处 是 不直接连通 的 ,而是通过一个按键 将它们 加以连接的。 所以 一个端口就可以构成 4*4=16 个按键, 与 直接将端口线用于 键盘 相比之下 多出了一倍,而且 在 线数 更 多 的情况下 ,区别 就会 越明显, 或者 再多加一条线就 能够 构成 20 键的 键盘 ,而直接用端口线 就 只能多出一键( 9 键)。 综上所述 ,在需要的键数比较多 的情况时 , 使用 矩阵 法来做键盘是 很 合理的。 在 单片机 的 系统中, 假如 按键 比 较多, 一般就会 采用矩阵式(也称行列式)键盘, 此次毕业设计 就采用了此 种 键盘。 矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。 很明显, 在按键数量 比 较多 的 时 候 ,矩阵式键盘要节省 很多 I/O口。 虽然 矩阵键盘在硬件电路上 相比其他键盘比较复杂 ,而且在程序算法上 还比较麻烦 , 不过 它在节省端口资源上 非常具有优势 ,因 所以 它 比较 适合于多按键电路。 采用矩阵式键盘电路,可以大大的节省单片机 I/O的开销。 图 35 键盘 软件主要由初始化程序、键盘扫描程序、音调发生程序、延时程序和曲调播放程序组成。 程序框图如 11 图 41 所示。 主程序流程图 本设计共两种播放模式,包括自动播放存储音乐和按键发音。 上电 之 后,首 第一先 开中断 ,设置 定时器 0 为工作方式 1,当自动播放键按下 的时 候 ,进入中断,根据乐谱在音频数组中查找相应 的 音律,给定时器赋 上 初值, 最后 开始播放音乐。 当 DO、 RE、 MI、 FA、 SO、 LA、 SI、 DO(高音)八种音符键按下时,根据音阶值和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。 下为主程序流程图。 【播放程序见附录】 12 图 41 程序流程图 程序设计内容 ( 1) 44 矩阵键盘识别处理 之中 每个按键有它 们自己 的行值和列值, 它们 的组合就是 能够 识别这个按键的编码。 在 矩阵 中,它的 的行线和列线分别通过两并行接口和 CPU通 信。 每个按键的状态 都 需 要 变成数字量 “0” 和 “1” ,开关的一端(列线)通过电阻接 VCC,而接地 就 是通过程序输出数字 “0” 所 实现的。 ( 2) 键盘处理程序的 目的 是:确定有 没有 键按下, 再 判断 是 哪一个键按下 的 , 这个键所展示的功能是什么 ; 而且 还要消除按键在闭合或断开 的状态 时的抖动。 两个并行口中,一个输出扫描码,另一个并行口 开始 开中断并设置工作式寄存器 有键按下 自动播放键按下 进入中断 查找相应音律 给定时器赋值 播放音乐 进入中断 查找相应音律 给定时器赋值 播放键值对应音符 13 随之 输入按键状态, 将 按键逐行动态接地,行扫描值和回馈信号共同形成键编码而识别按键, 该键功能可以通过软件查表来看到。 下为主函数键盘处理部分 void main (void) { uchar num,k,i。 lcd_init()。 lcd_string(0,10,dis1[0])。 // 开机画面 lcd_string(11,5,dis1[1])。 //开机画面 Init_Timer0()。 //初始化定时器 0,主要用于数码管动态扫描 SPK=0。 //在未按键时,喇叭低电平,防止长期高电平损坏喇叭 lcd_string(0x40+0,5,NOTE:)。 while (1) { switch(KeyPort) { case 0xfe:num= 1。 break。 case 0xfd:num= 2。 break。 case 0xfb:num= 3。 break。 case 0xf7:num= 4。 break。 case 0xef:num= 5。 break。 case 0xdf:num= 6。 break。 case 0xbf:num= 7。 break。 case 0x7f:num= 8。 break。 default:num= 0。 break。 } lcd_string(0x40+7,1,YINFU[num])。 14 if(num==0) { TR0=0。 SPK=0。 //在未按键时,喇叭低电平,防止长期高电平损坏喇叭 } else { High=freq[num1][1]。 Low =freq[num1][0]。 TR0=1。 } if(tab==0) { delayms(10)。 if(tab==0) { i=0。 while(i100) { k=MUSIC[i]+7*MUSIC[i+1]1。 //去音符振荡频率所需数据 High=FREQH[k]。 Low=FREQL[k]。 Time=MUSIC[i+2]。 //节拍时长 i=i+3。 if(P1!=0xff)//长按任意 8 音键退出播放 { 15 delayms(10)。 if(P1!=0xff) i=101。 } Song()。 } TR0=0。 } } } } ( 3) 音乐播放设计: 一首 曲子 是 很多种 不同的音阶 所 组成的,而每个音阶对应着 各不相 同的频率, 所以就可以 利用不同的频率 之间的 组合构成 人们 所想要的音乐了,我们可以利用单片机的定时 /计数器 T0发出 这样方波频率信号, 所以 , 本设计中 只 需 要把一首 曲子 的音阶对应频 率关系 弄清楚就行了。 想要 产生音频脉冲 的话 , 一般 算出某一音频的周期( 1/频率),再将此 它 除以 2, 就是所谓的 半周期的时间。 使 用定时器计时半 个 周期 时长 , 的时间是每次计时结束之后 , 然后不断重复上面的过程,这个 频率的脉冲 就能够在。 利用 AT89C52单片机 的内部定时器 让它的 工作计数器模式( MODE1)下,改变计数值 TH0 及 TL0 以产生不同频率的方法产生不同 的 音阶, 比如 ,频率为 523Hz,其周期 T= 1/523=1912μs , 所以 只要 让 计数器计时 956μs/1μs = 956,每计数 956次时将 I/O反相,就可得到中音 DO( 523Hz)。 下为歌曲处理函数部分 void Song() { TH0=High。 //赋值定时器时间,决定频率 TL0=Low。 TR0=1。 //打开定时器 delayjie(Time)。 //延时所需要的节拍 } 另, 计数脉冲值与频率的关系式 为 : 16 N= fi247。 2247。 fr 在上 式中, N 是计数值; fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz); fr 就 是想要产生的频率。 其计数初值 T的求法如下: T= 65536- N= 65536- fi247。 2247。 fr 5.调试 Proteus 简介 Proteus 是英国 Labcenter 公司嵌入式系统仿真开发平台。 Proteus 由两个主要程序系统构成 ( 电路原理图设计系统 )和 (印刷电路版设计系统)。 本论文设计主要是运用 ( 电路原理图设计系统 )仿真单片机控制 1616LED 点阵,下面将简单介绍 Proteus 的 电路原理图设计系统。 Proteus的元件库:有分离元件、集 成器件、还有多种带 CPU的可编程序器件。 既有理想元件模型。 还有各种不同厂家及时更新的实际元件模型。 Proteus 的电路原理图设计系统的仿真实验功能:电路不仅能做电路基础实验、模拟电路实验与数字电路实验,而且能做单片机与接口实验。 为课程设计与毕业设计提供综合系统仿真。 它的仿真要求为: ,检测数字电路模型是否连通,有无连接错误。 2. Keil软件编译 C 语言,要求最终编译结果程序 0 错误,将其导入到 Proteus 仿真软件中。 3. Proteus 仿真电路最终能成功显示 C 语言程序编译后的结果。 keil 简介 单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。 机器汇编是通过汇编软件将源程序变为机器码,用于 MCS51 单片机的汇编软件有早期的 A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展, Keil软件是目前最流行开发 MCS51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持 Keil即可看出。 Keil提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发 17 方案,通过一个集成开发环境( uVision)将这些部份组合在一起。 运行 Keil 软件需要 Pentium 或以上的CPU, 16MB或更多 RAM、 20M 以上空闲的硬盘空间、 WIN9 NT、 WIN20 WINXP 等操作系统。 掌握这一软件的使用对于使用 51 系列单片机的爱好者来说是十分必要的,如果使用 C 语言编程,那么 Keil几乎就是不二之选 , 即使不使用 C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会 使工作 事 半功倍。 该软件的优点为: ( 1) Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 ( 2) 与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C 来开发,体会更加深刻。 注意事项 : ( 1) 仿真器 标配 的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。 ( 2) 仿真器 上的复位按钮只复位仿真芯片,不复位目标系统。 ( 3) 仿真芯片的 31 脚( /EA)已接至高电平,所以仿真时只能使用片内 ROM,不能使用片外 ROM;但 仿真器 外引插针中的 31 脚并不与仿真芯片的 31 脚相连,故该仿真器仍可插入到扩展有外部 ROM(其CPU 的 /EA引脚接至低电平)的目标系统中使用。 18 仿真步骤 首先用 Protel99se 软件绘制电路原理图,如图 51 1 2 3 4 5 6ABCD654321DCBAT i t l eN um b e r R e vi s i o nS i z eBD a t e : 19 M a y 20 13 S h e e t o f F i l e : C。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。