基于单片机的电子琴系统设计_毕业设计(编辑修改稿)内容摘要:
P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时, P2 口输出地址的高八位。 在给出地址“ 1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时, P2 口输出其特殊功能寄存器的内容。 P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口: P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL门电流。 当 P3 口写入“ 1”后,它们被内部上拉为高电平,并用作输入。 作为输入, 由于外部下拉为低电平, P3 口将输出电流( ILL)这是由于上拉的缘故。 P3 口也可作为 AT89C51 的一些特殊功能口如下所示: P3 口管脚备选功能: RXD (串行输入口 ) P3. 1 TXD (串行输出口) /INTO (外部中断 0) /INT1 (外部中断 1) T0 (记时器 0 外部输入) T1 (记时器 1 外部输入) /WR (外部数据存储器写选通) /RD (外部数据存储器读选通) P3 口同时为闪存编程和编程校验接收一些控制信号。 RST:复位输入。 当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。 在 FLASH 编程期间,此引脚用于输入编程脉冲。 在平时, ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。 因此它可用作对外部输出的脉冲或用于定时目的。 然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。 如想禁止 ALE 的输出可在 SFR8EH 地址上 置 0。 此时, ALE 只有在执行 MOVX, M0VC 指令是 ALE 才起作用。 另外,该引脚被略微拉高。 如果微处理器在外部执行状态 ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。 在由外部程序存储器取指令期间,每青岛理工大学毕业设计 10 个机器周期两次 /PSEN 有效。 但在访问外部数据存储器时,这两次有效的 /PSEN信号将不出现。 /EA/VPP :当 /EA 保 持 低 电 平 时 , 则 在 此 期 间 外 部 程 序 存 储 器(OOOOHFFFFH), 不管是否有内部程序存储器。 注意加密方式 1 时, /EA 将内部锁定为 RESET。 当 /EA 端保持高电平时,此间内部程序存储器。 在 FLASH 编程期间,此引脚也用于施加 12V 编程电源 (VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1 和 XTAL2 分别为反向放大器的输入和输出。 该反向放大器可以配置为片内振荡器。 石晶振荡和陶瓷振荡均可采用。 如采用外部时钟源驱动器件,XTAL2 应不接。 其余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,必须保证脉冲的高低电平要求的宽度。 芯片擦除 整个 PER0M 阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持 ALE 管脚处于低电平 10ms 来完成。 在芯片擦除操作中,代码阵列全被写“ 1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外, AT89C51 设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。 在闲置模式下, CPU 停止工作。 但 RAM 定时器,计数器,串口和中断系统仍在工作。 在掉电模式下,保存 RAM 的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 矩阵式键盘的识别和显示 矩阵式键盘的结构与工作原理 在键盘 中按键数量较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵 形式。 在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。 这样,一个端口(如 P1 口)就可以构成 4 4=16 个按键,比青岛理工大学毕业设计 11 之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成 20 键的键盘,而直接 用 端口线则只能多出一键( 9 键)。 由此可见, 在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些 ,列线通过电阻接正电源,并将行线所接的单片机的 I/O 口作为输出端,而列线所接的 I/O口则作为输入。 这样,到按键没有按下时,所有的输出端都是高电平,代表无键按下。 行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 具体的识别及编程方法如下所述。 矩阵式键盘的按键识别方法 确定矩阵式键盘上何键被按下介绍一种“行扫描法”。 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过程如下。 ( 1)判断键盘中有无键按下将全部行线置低电平,然后检测列线的状态。 只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4 根行线相交叉的 4 个按键之中。 若所有列线均为高电平,则键盘中无键按下。 ( 2)判断闭合键所在 的位置在确认有键按下后,即可进入确定具体闭合键的过程。 其方法是 依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。 在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。 若 某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 键盘接口必须具有的 4 个基本功能 (1) 去抖动 : 每个按键在按下或松开时,都会产生短时间的抖动。 抖动的持续时间与键的质量相关,一般为 5—20mm。 所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。 去抖问题可通过软件延时或硬件电路解决。 (2) 防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。 常用的方法有双键锁定和 N 键轮回两种方法。 双键锁定,是 当 有两个或两个以上的按键按下时,只把最后释放的键当作有效键并青岛理工大学毕业设计 12 产生相应的键码。 N 键轮回,是 当 检测到有多个键被按下时, 能根据发现它们的顺序依次产生相应键的键码。 (3) 被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。 常用的方法有行扫描法 和线反转法两种。 行扫描法的基本思想是,由程序对键盘 逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。 线反转法的基本思想是通过行列颠倒 两 次扫描来识别闭合键,为此需要提供 两 个可编程的双向输 入 /输出端口。 (4) 键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通 过查表获得被按键的键码。 用 AT89C51 的并行口 P0 接 4 4 矩阵键盘,以 P0. 0—P0. 3 作输入线,以P0. 4 一 P0. 7 作输出线;在数码管上显示每个按键的“ 0—F”序号。 LED 数码管 数码管的分类 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多 一个发光二极管单元(多一个小数点显示 );按能显示多少个“ 8”可分为 1 位、2 位、 4 位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极 数码管。 共阳 极 数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。 共阳 极 数码管在应 用 时应将公共极 COM 接到 +5V, 当某一字段发光二极管的阴极为低电平时,相应字段就点亮。 当某一字段的阴极为高电平时,相应字段就不亮。 共阴 极 数码管是指将所有发光二极管的阴极接到一起形成公共阴极 (COM)的数码管。 共阴 极 数码管在应用时应将公共极 COM 接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。 当某一字段的阳极为低电平时,相应字段就不亮。 如 图 32 所示: 青岛理工大学毕业设计 13 图 32 7 段数码管 数码管的驱动方式 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 (1) 静态显示驱动:静态驱动也称直流驱动。 静态驱动是指每个数码管的每一个段码都由一个单片机的 I/O 端口进行驱动,或者使用如 BCD 码二 —十进制译码器译码进行驱动。 静态驱动的优点是编程简单,显示亮度高,缺点是占用 I/O 端口多,如驱动5 个数码管静态显示则需要 5 8 =40 根 I/O 端口来驱动,要知道一个 89S51 单片机可用的 I/O 端口才 32 个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。 (2) 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显 示方式之一,动态驱动是将所有数码管的 8 个显示笔划 a, b, c, d, e, f, g, dp的同 名端连在一起,另外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立的 I/O 线控制, 当 单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通 COM 端电青岛理工大学毕业设计 14 路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。 通过分时轮流控制各 个数码管的 COM 端,就使各个数码管轮流受控显示,这就是动态驱动。 在轮流显示过程中,每位数码管的点亮时间为 1〜 2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效 果和静态显示是一样的,能够节省大量的 I/O 端口,而且功耗更低。 硬件设计图 图 33 利用 PROTEUS 仿真设计的硬件电路图 图中的矩阵键盘,从上到下,从左到右,依次为键盘的 015,在数码管上显示时顺序为 09 和 AF,在按功能键时,图上的两个指示灯会根据功能的不同实现亮 /灭状态的切换。 在播放内置音乐时,指示灯在一定程度上能指示出曲目的音符。 青岛理工大学毕业设计 15 青岛理工大学毕业设计 16 第 4 章 章软件设计 整体程序处理流程图 图 41 整体程序处理流程图 在电子琴开始 工 作时,系统默认电子琴处于弹奏状态,歌曲选择功能键的 目青岛理工大学毕业设计 17 的是赋予矩阵键盘第二功能,即对系统内置的歌曲进行选择,在放歌时能且只能 通过弹奏 /停止键来结束放歌,选歌时必须先按下歌曲选择功能键,在通过矩阵 键盘来选择和切换曲目。 I/O 并行口直接驱动 LED 显示 把“ AT89C51”区域中的 —P2. 7/A15 端口用 8 芯排线连接到一位数码管的 a—h 端口上要求 : , P2. 1/A9 与 b 相连, P2. 2/A10 与 c 相连 „„ P2. 7/A15 与 h 相连。 表 41 字形码表及对应的音符 1 0x3f 低 5 SO 9 0x7f 中 6 LA 2 0x06 低 6 LA A 0x6f 中 7 SI 3 0x5b 低 7 SI b 0x77 高 1 DO 4 0x4f 中 1 DO C 0x7c 高 2 RE 5 0x66 中 2 RE D 0x39 高 3 M 6 0x6d 中 3 M E 0x5e 高 4 FA 7 0x7d 中 4 FA F 0x79 高 5 SO 8 0x07 中 5 SO 0 0x71 高 6 LA 本设计中,数码管的显示通过 P2=DSY_CODE[k] 这句语言来查表并输出,实现音符的显示。 音乐播放设计 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了, 当 然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时 /计数器 T0 来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系青岛理工大学毕业设计 18 弄正确即可。 若要产生音频脉冲,只要算出某一音频的周期( 1/频率),再将此周期除以 2,即为半周期的时间。 利用定时器计时半周期时间,每当计时终止后就将 反相,然后重复计时再反相。 就可在 P3. 7 引脚上得到此频率的脉冲。 利用 AT89C51 的内部定时器使其工作计数器模式( M0DE1)下,改变计数值TH0 及 TL0 以产生不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期 T= 1/523= 1912μ s, 因此只要令计数器计时 956μ s/lμ s=956, 每计数 956 次时将 I/O 反相,就可得到中音 DO (523Hz)。 计数脉冲值与频率的关系式是: N=fi247。 2247。 fr ( 41 ) 式中, N是计数值; fi是机器频率(晶体振荡器为 12MHz时,其频率为 1MHz); fr 是想要产生的频率。 其计数初值 T 的求法如下: T=65536—N。基于单片机的电子琴系统设计_毕业设计(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。