单片机电子琴的设计(共28页).doc

上传人:飞****2 文档编号:13886336 上传时间:2022-05-01 格式:DOC 页数:28 大小:1.10MB
返回 下载 相关 举报
单片机电子琴的设计(共28页).doc_第1页
第1页 / 共28页
单片机电子琴的设计(共28页).doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《单片机电子琴的设计(共28页).doc》由会员分享,可在线阅读,更多相关《单片机电子琴的设计(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上单片机电子琴的设计前 言电子琴是一种功能强大,易于制作,成本低廉的现代新型乐器。它可按照使用者的不同要求方便的进行设计,成为现代社会一种颇具市场号召力的乐器。单片机具有强大的操纵功能和灵活的编程实现特性,在现代工业生活中随处可见,此次课程设计要紧确实是利用STC89C52单片机为核心操纵元件,设计简易的一个电子琴,并以此对电子琴原理及硬件组成进行分析并设计,最终由此做出实物。由此更进一步把握微机原理及应用课程的有关知识,提升应用微机解决咨询题的能力,加深对微机应用的懂得。通过查阅资料,结合所学知识进行软、硬件的设计,初步把握应用微机解决咨询题的步骤及方法。为以后结合专

2、业从事微机应用设计奠定基础。第一章 设计要求及工作原理1.1 差不多设计要求基于单片机STC89C52为核心。利用定时/计数器8253设计并制作一个简易电子琴。设计至少8个按键,每个按键对应一种音调,即1、2、3、4、5、6、7、8八个不同的音节。按下按键发声,松开按键后声音延迟一段时刻后停止,可弹奏简单的乐曲。1.2 方案比较与确定 方案一:使用单片机内部定时器,通过编程实现发出不同频率方波,产生音阶。 方案二:使用8253作为外部定时器,通过编程实现产生所需频率的方波。 通过对方案一和方案二的比较能够明白,方案一是通过使用单片机内部定时器,以编程实现方波输出,优点在于外部电路简单,程序结构

3、简单,缺点在于消耗单片机资源过多,不利于优化升级;方案二是利用8253来产生方波,相对来讲这种方案外部电路较为复杂,程序结构也更为复杂,优点在于占用单片机资源少,输出稳固,利于扩展;故而选择方案二较好1.3 系统组成与工作原理声音的频谱范畴约在几十到几千赫兹, 若能利用程序来操纵单片机某个口线持续输出“ 高” “ 低”电平, 则在该口线上就能产生一定频率的方波, 将该方波接上喇叭就能发出一定频率的声音, 若再利用程序操纵“ 高” “ 低”电平的连续时刻, 就能改变输出波形的频率从而改变音调。乐曲中, 每一音符对应着确定的频率, 下表给出各音符频率。如果单片机某个口线输出“ 高” “ 低”电平的

4、频率和某个音符的频率一样, 那么将此口线接上喇叭就能够发出此音符的声音。本系统确实是按照此原理设计, 关于单片机来讲要产生一定频率的方波大致是先将某口线输出高电平然后延时一段时刻再输出低电平, 如此循环的输出就会产生一定频率的方波, 通过改变延时的时刻就能够改变输出方波的频率。单片机内部有两个位的定时计数器T1和T0, 单片机的定时计数器实际上是个计数装置它既能够对单片机的内部晶振驱动时钟计数也能够对外部输入的脉冲计数, 对内部晶振计数时称为定时器, 对外部时钟计数时称为计数器。当对单片机的内部晶振驱动时钟计数时,每个机器周期定时计数器的计数值就加, 当计数值达到计数最大值时计数完毕并通知单片

5、机的尸比对外部输入的时钟信号计数时, 外部时钟的每个时钟上升沿定时计数器的计数值就加, 当计数值达到计数最大值时计数完毕并通知单片机的尸。因此, 如果明白单片机的机器周期或者外部输入时钟信号的周期单片机就能够按照定时器的计数值运算出定时的时刻。用此方法定时十分准确, 想得到多大的延时时刻就能够给定时器赋一定的计数初值, 定时器从预先设置的计数初值开始持续增当增加到计数最大值时计数完毕, 调整计数初值的大小就能够调整定时器定时的时刻, 从而达到准确的延时。在本设计中我们使用的外部时钟信号的晶振频率为12MHz,而采纳的计数方式为方式1,因此计数器的初始值能够由如下公式求得。 T=65536-/2

6、/ff为对应音调的频率;输出频率对比表: 0xA9,0xEF,/00220HZ ,1 /0 0x93,0xF0,/00233HZ ,1# 0x73,0xF1,/00247HZ ,2 0x49,0xF2,/00262HZ ,2# 0x07,0xF3,/00277HZ ,3 0xC8,0xF3,/00294HZ ,4 0x73,0xF4,/00311HZ ,4# 0x1E,0xF5,/00330HZ ,5 0xB6,0xF5,/00349HZ ,5# 0x4C,0xF6,/00370HZ ,6 0xD7,0xF6,/00392HZ ,6# 0x5A,0xF7,/00415HZ ,7 0xD8,0x

7、F7,/00440HZ 1 /12 0x4D,0xF8,/00466HZ 1# /13 0xBD,0xF8,/00494HZ 2 /14 0x24,0xF9,/00523HZ 2# /15 0x87,0xF9,/00554HZ 3 /16 0xE4,0xF9,/00587HZ 4 /17 0x3D,0xFA,/00622HZ 4# /18 0x90,0xFA,/00659HZ 5 /19 0xDE,0xFA,/00698HZ 5# /20 0x29,0xFB,/00740HZ 6 /21 0x6F,0xFB,/00784HZ 6# /22 0xB1,0xFB,/00831HZ 7 /23 0x

8、EF,0xFB,/00880HZ 1 0x2A,0xFC,/00932HZ 1# 0x62,0xFC,/00988HZ 2 0x95,0xFC,/01046HZ 2# 0xC7,0xFC,/01109HZ 3 0xF6,0xFC,/01175HZ 4 0x22,0xFD,/01244HZ 4# 0x4B,0xFD,/01318HZ 5 0x73,0xFD,/01397HZ 5# 0x98,0xFD,/01480HZ 6 0xBB,0xFD,/01568HZ 6# 0xDC,0xFD,/01661HZ 7 /35 基于STC89S52单片机,以8253作为外部中断,通过7279进行键盘操纵,设计

9、一个电子琴。单片机作为主控核心,通过对7279的键盘按键键值进行定义,让定时器8253产生8个特定频率的方波,通过由LM386组成外部功放电路输出至扬声器发出个不音阶。硬件部分要紧功能模块包含:键盘操纵模块、方波发生模块、声音输出模块。八个音节do、re、mi、fa、sol、la、si、do所对应的频率分别为523HZ、587HZ、659HZ、698HZ、784HZ、880HZ、988HZ、1047HZ。软件部分要紧功能模块包含:主程序、8253方波发生子程序、7279初始化子程序、接收发送字节子程序、延时子程序等当按下特定的按键后,程序通过读键值子程序得到所按下键的键值,再将所得的键值与键盘

10、1、2、3、4、5、6、7、8八个键的键值相比较,从而确定所按下的键。当确认按键后再调用8253方波发生子程序,使8253产生相应频率的方波连续输出。系统原理框图如图1.1所示:7279键盘模块单片机AT89C51定时/计数器8253功率放大电路喇叭发声模块图1.1 系统原理框图第二章 硬件电路设计2.1 单片机最小系统 STC89C52要紧特性: 与MCS-51 兼容8K字节可编程闪耀储备器寿命:1000写/擦循环数据保留时刻:10年全静态工作:0Hz-24Hz三级程序储备器锁定512内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器

11、和时钟电路管脚讲明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸取8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据储备器,它能够被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,现在P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平常,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地

12、址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序储备器或16位地址外部数据储备器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据储备器进行读写时,P2口输出其专门功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和操纵信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“

13、1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些专门功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据储备器写选通) P3.7 /RD(外部数据储备器读选通) P3口同时为闪耀编程和编程校验接收一些操纵信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个

14、机器周期的高电平常刻。 ALE/PROG:当访咨询外部储备器时,地址锁存承诺的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平常,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据储备器时,将跃过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。现在, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序储备器的选通信号。在由外部程序储备器取指期间,每个机器

15、周期两次/PSEN有效。但在访咨询外部数据储备器时,这两次有效的/PSEN信号将不显现。 /EA/VPP:当/EA保持低电平常,则在此期间外部程序储备器(0000H-FFFFH),不管是否有内部程序储备器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平常,此间内部程序储备器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器能够配置为片内振荡器。石晶振荡和陶瓷振荡均可采纳。如采纳外部时

16、钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。图2-1 STC89C52结构图单片机最小系统要紧由时钟电路和复位电路组成。此系统的时钟电路设计是采纳的内部方式,即利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。那个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容CX1和CX2构成并联谐振电路,接在放大器的反馈回路中。,此系统电路的晶体振荡器的值为12MHz,电容值约为3

17、0F。 图2.2 时钟电路复位电路是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。其原理图如图3.1所示图2.3 单片机最小系统原理图2.2 键盘模块HD7279是一片具串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还能够连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。HD7279内不含有译码器,可直截了当接收BCD码或16进制码,并同时具有2种译码方式,此外i,还具有多种操纵指令,如消隐、闪耀、左移、右移

18、、段寻址等。HD7279具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。1 要紧特性:串行接口,无需外围元件可直截了当驱动LED。各位独立操纵译码/不译码及消隐和闪耀属性。(循环)左移/(循环)右移指令具有段寻址指令,方便操纵独立LED64键键盘操纵器,内含去抖动电路有DIP和SOIC两种封装形式供选择2 引脚讲明: 图2-4 7279引脚讲明图2-5 7279管脚图键盘模块要紧由键盘串行接口芯片7279扩展组成。键盘采纳4*4矩阵式,按键检查使用行列扫描方式,行设置低电平,同时读入列状态,如果列状态不是全为1,则此列与行为0相交的键确实是所按下的键。在应用过程中,只需要将72

19、79的CS、CLK、DATA和KEY四个端口分别连接至单片机的P1.0、P1.1、P1.2和P1.3即可。当全部硬件电路连接好后,按下键盘的按键,单片机将获得该按键的键值,通过软件编程即可确定所需要的方波频率值,使8253产生该频率的方波,经由功放电路输出至喇叭发声。其原理图如图2-6所示: 图2.6 7279键盘模块原理图2.3 方波发生模块方波发生模块要紧由STC89C52、74LS373、74LS138和8253组成。其中,74LS138的A、B、C口分别连接至AT89C51的P2.5、P2.6和P2.7,E1、E2、E3分别连接至P2.2、P2.3和P2.4口,由译码器74LS138的

20、Y5口输出。由硬件连接可确定端口地址为:0A000H、0A001H、0A002H和0A003H。锁存器74LS373的D0和D1口分别连接至P0.0和P0.1,Q0和Q1口分别连接至8253的A0和A1口,用于地址锁存。8253的D0到D7口分别连接至STC89C52的P0.0至P0.7口,GATE0口连续接高电平,CLK2处的时钟信号经由分频电路连接至单片机的读和写,使8253有稳固的2MHZ的时钟信号输入,最后在OUT2口便可产生连续的方波输出,频率则由软件编程决定。其原理图如图2.6所示:图2.7 方波发生模块原理图2.4 功率放大发声模块 功放模块要紧由扬声器和LM386构成,OUT2

21、信号输出至LM386信号输入端,经由放大电路放大后输出至扬声器发声。其原理图如图2.7所示:图2.8 喇叭发声模块原理图第三章 软件设计3.1 软件结构功能设计软件部分要紧包含:主程序、8253方波发生子程序、7279初始化子程序、接收发送字节子程序、延时子程序等。主程序:判定所读取的键值,并按照键值赋值do、re、mi、fa、sol、la、si、do八个音节的频率。运用switch语句,让所选用的8个键值分别与8个音阶的频率所对应。8253方波发生子程序:设定好8253的操纵字,且为方式3工作方式(方波发生器)。将8个音节的8个不同频率转换成16进制数后赋值给8253的输出端口地址后相减,即

22、可。7279初始化子程序:使片选信号的上升沿时刻复位,使芯片处于上电复位状态。接收发送字节子程序:通过移位将所需要传送的字节存于A中,以便于其它程序进行调用延时子程序:通过for循环得到延时子程序。3.2 主程序设计主程序先对7279进行初始化,调用键值读取子程序,对读取的键值进行判定是否为预设的键值,若不是则返回,若是怎进入switch语句进行赋值。其主程序流程框图如图3.1所示:储存键值调用方波发生子程序开始调用读键值子程序是数字18键吗?程序初始化NYNY图3.1 主程序流程框图3.3 子程序设计方波发生子程序:对8253进行初始化,操纵字赋值,确定工作在方式3,初值送至入口地址。其子程

23、序流程框图如图3.2所示:判定是否有键按下,若有,则发送读键盘数据指令,并储存键值。其子程序流程框图如图3.3所示:方波发生子程序入口8253操纵字赋值设置入口地址赋初值读键值子程序入口是否有键按下?发送读键盘数据指令YN将键值储存于A中子程序返回子程序返回图3.2 方波发生子程序流程框图图3.3 读键值子程序流程框图7279初始化子程序:发送复位指令,子程序返回。其子程序流程框图如图3.4所示:发送一字节子程序:将所需发送的字节带进位左移一位,循环八次后将所需发送的字符储存于A中,子程序返回。其子程序流程框图如图3.5所示:初始化子程序入口发送复位指令发送一字节子程序入口发送复位指令是否循环

24、8次?发送字符存于A中YN子程序返回图3.4 7279初始化子程序流程框图 图3.5 发送一字节子程序流程框图第四章 实验调试及测试结果分析4.1 软件调试此次课程设计简易电子琴的软件设计我并没有运用汇编语言,而是运用了并没有在课程中学习的C语言,故在设计的时候遇到较大的困难。要紧是关于初始化方面不熟悉,后通过上网学习及日立电子钟的设计对单片机的C程序设计运用较为熟练。第一关于一些需要使用的数据类型进行定义,如#define uint unsigned int;后用XBYTE命令对8253进行初始化,用sbit指令对7279进行初始化。然后编写各子程序,最后编写主程序。开始时用的是if(!ke

25、y=*)语句来进行键值的判定,后进行单独赋值的方法,然而后来发觉如此的语句关于只有几个音阶的简易电子琴来讲还具有可行性,然而关于音阶较多的就显得太为纷杂了,故后建立数组,编写了频率对比表,运用switch语句进行键值判定并查表赋值。如此的设计使得此程序的可扩展性较强。运用TR0来操纵发声。当硬件连接好后,我们把程序烧录进单片机进行初步调试,发觉没有任何反应,排查后排除了硬件咨询题,然后进行了软件排查。1单独编写了方波发生程序,发觉能发出方波,然而幅度及频率均与理论值相差庞大。2由于硬件排查时认为单片机及功放两部分工作正常,为了验证那个结论的正确性,我们先在硬件电路上绕过8253,单片机输出直截

26、了当连接功放模块,然后改写程序,使用单片机内部中断,发觉一切工作正常,且可在7279键盘上弹奏音乐。此结果直截了当证明之前咨询题出在8253的论断完全正确,也间接证明程序的编写差不多没有咨询题。3后为了证明程序编写的正确性,我们把自己程序里的一些初始化数值进行了更换,达到与别组硬件匹配后,把自己的程序烧录进别组的硬件中,发觉能够工作。最后由于时刻咨询题,我们没有排查出8253的咨询题,因此更换了之前的设计,去掉了8253运用方案一进行设计。在方案一的调试中遇到以下几个咨询题:发声频率有误差:运用示波器观看,对按照公式更换参数达到要求。按键与设定音阶不符:检查程序为switch语句case设置偏

27、差。经调试后,程序运行正确,达到设计要求。后期课程设计终止后自己增加了锁定功能,自动播放功能。4.2系统联调经硬件检测,程序调试后,将程序下载到单片机,按下所设置的键,与设计要求相比对,扬声器可正常发出中音8音阶,运用示波器检查,8音阶频率稍有误差,差不多与理论值相同,达到要求,结果在误差范畴之内。按照乐谱弹奏,可弹奏出正常乐曲。后期,对程序进行了升级,加入了节奏操纵(以按键时刻长短来操纵延时长短),建立了乐曲频率数组,可播放数组中所存乐曲。此次简易电子琴设计完成。结论总的来讲,此次的简易电子琴设计不是专门成功,因为时刻关系,最终没能找出预先设计中的咨询题,最后只能通过更换设计来实现目的。然而

28、也收成颇多;第一我要紧负责软件的编写,使我对单片机的C程序设计从无到有,从可不能到会,深入的了解了单片机程序设计中汇编与C两种语言的优劣点,使我以后设计程序时对语言的选择有了一个清醒的认识。进而发觉咨询题就要解决咨询题,在这次解决咨询题中发觉了自己专门多不懂得知识,为了解决咨询题自己去找资料学习,同时在老师的指导下学会了如何有条理的去排查咨询题以及如何去验证自己的推测。专门是在我所要紧负责的程序方面,在一次次的验证中持续编写各种功能的程序,从刚开始的什么都不懂,经常要自己上网找资料学习,都后来在编写程序中总能有各种奇思妙想,经常能有一些让自己都经不住感叹的构思,对C语言有一种得心应手的感受。自

29、己在这之中编写了专门多各种功能的程序,如对电子琴进行锁定,录制等功能。最后,虽讲这次的课程设计结果不是专门成功,然而过程中的收成却是相当多的。参考文献 1 杨学昭.单片机原理、接口技术及应用(含c51),2009年2月2 佚名.娱乐应用电路集粹. 机械工业出版社,2005年2月3 阎石.数字电子技术基础.北京:高等教育出版社,2006年5月4 何宏、龚威.单片机原理与接口技术.北京:国防工业出版社,20065 楼然苗、李光飞 .单片机课程设计指导.北京:北京航空航天大学出版社,20076 王福瑞等 .单片机测控系统设计大全.北京:北京航空航天大学出版社,19997 张友德、赵志英、涂时亮.单片

30、机微型机原理、应用与实验.上海:复旦大学出版社,2006第五版8 徐新艳.单片机原理、应用与实践.北京:高等教育出版社,2005年3月9 张毅刚.MCS-51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,200410 杨兴瑶.有用电子电路500例.化学工业出版社,1996附录1:系统原理图附录2 源程序#include /包括一个 52 标准内核的头文件 #include /XBYTE头文件 #define COM8253 XBYTE 0x0A003#define COM8253_H XBYTE 0x0A0#define COM8253_L XBYTE 0x002#define uchar u

31、nsigned char /定义一下方便使用 #define uint unsigned int #define ulong unsigned long #define uchar unsigned char#define uint unsigned intunsigned char key_number;unsigned char flag;#define CMD_RESET 0xa4 /restart#define DECODE1 0xc8/downlaod 1 #define CMD_READ 0x15/ read key#define BLINKCTL 0x88 / blink /*H

32、D7279连接*sbit cs=P10; / cs P1.0sbit clk=P11; / clk P1.1sbit dat=P12; / data P1.2sbit key=P13; / key P1.3/长短延时程序void long_delay(void) unsigned char i; for (i=0;i0x30;i+);void short_delay(void) unsigned char i; for (i=0;i8;i+);void send_byte( unsigned char out_byte) /发送字节到7279 unsigned char i; cs=0; lo

33、ng_delay(); for (i=0;i8;i+) if(out_byte&0x80) dat=1; else dat=0; clk=1; short_delay(); clk=0; short_delay(); out_byte=out_byte*2; dat=0;/7279接收发送子程序unsigned char receive_byte(void) /接收7279一个字节 unsigned char i, in_byte; dat=1; long_delay(); for (i=0;i8;i+) clk=1; short_delay(); in_byte=in_byte*2; if

34、(dat) in_byte=in_byte|0x01; clk=0; short_delay(); dat=0; return (in_byte);void write7279(unsigned char cmd, unsigned char dta) send_byte (cmd); send_byte (dta);unsigned char read7279(unsigned char command) send_byte(command); return(receive_byte();/* 键值表 : 31 30 29 28 23 22 21 20 15 14 13 12 7 6 5 4

35、*/输出频率对比表 uchar code freq36*2= 0xA9,0xEF,/00220HZ ,1 /0 0x93,0xF0,/00233HZ ,1# 0x73,0xF1,/00247HZ ,2 0x49,0xF2,/00262HZ ,2# 0x07,0xF3,/00277HZ ,3 0xC8,0xF3,/00294HZ ,4 0x73,0xF4,/00311HZ ,4# 0x1E,0xF5,/00330HZ ,5 0xB6,0xF5,/00349HZ ,5# 0x4C,0xF6,/00370HZ ,6 0xD7,0xF6,/00392HZ ,6# 0x5A,0xF7,/00415HZ

36、,7 0xD8,0xF7,/00440HZ 1 /12 0x4D,0xF8,/00466HZ 1# /13 0xBD,0xF8,/00494HZ 2 /14 0x24,0xF9,/00523HZ 2# /15 0x87,0xF9,/00554HZ 3 /16 0xE4,0xF9,/00587HZ 4 /17 0x3D,0xFA,/00622HZ 4# /18 0x90,0xFA,/00659HZ 5 /19 0xDE,0xFA,/00698HZ 5# /20 0x29,0xFB,/00740HZ 6 /21 0x6F,0xFB,/00784HZ 6# /22 0xB1,0xFB,/00831H

37、Z 7 /23 0xEF,0xFB,/00880HZ 1 0x2A,0xFC,/00932HZ 1# 0x62,0xFC,/00988HZ 2 0x95,0xFC,/01046HZ 2# 0xC7,0xFC,/01109HZ 3 0xF6,0xFC,/01175HZ 4 0x22,0xFD,/01244HZ 4# 0x4B,0xFD,/01318HZ 5 0x73,0xFD,/01397HZ 5# 0x98,0xFD,/01480HZ 6 0xBB,0xFD,/01568HZ 6# 0xDC,0xFD,/01661HZ 7 /35 ; uchar code jie88=12,14,16,17,

38、19,21,23,24;/1 八个音符在频率表中的位置 /定时中断 0,用于产生唱歌频率 /timer0() interrupt 1 /按键操纵音阶声音输出(电子琴) /主函数void main()COM8253=0xB6; send_byte(CMD_RESET); while (1) if (!key) short_delay(); if(!key) key_number=read7279(CMD_READ); switch(key_number) case 4: COM8253_H= freqjie80*2; COM8253_L=freqjie80*2+1;break;case 5: C

39、OM8253_H= freqjie81*2; COM8253_L=freqjie81*2+1;break;case 6: COM8253_H= freqjie82*2; COM8253_L=freqjie82*2+1;break;case 7: COM8253_H= freqjie83*2; COM8253_L=freqjie83*2+1;break; case 12: COM8253_H= freqjie84*2; COM8253_L=freqjie84*2+1; break;case 13: COM8253_H= freqjie85*2; COM8253_L=freqjie85*2+1;

40、break;case 14: COM8253_H= freqjie86*2; COM8253_L=freqjie86*2+1; break;case 15: COM8253_H= freqjie87*2; COM8253_L=freqjie87*2+1; break; case 31: TR0=0;break; case 30: TR0=1;break;default:break; while(!key)short_delay(); 附录3 电子琴成品图附录4元件清单元件名称规格型号元件数量电阻10、470、10K各1个电容0.047uF、0.1 uF、10 uF、47 uF各1个扬声器1个与非门74LS001个或门74LS321个定时器/计数器82531个杜邦插头28个杜邦插针28个导线细线若干专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁