课程设计报告 简易电子琴

时间:2024.4.21

微控制器技术

课程设计报告

设计题目:简易电子琴设计

    

专业:      电机与电器          

班级:        电器132            

学号:       130312239            

姓名:       王小起               

指导教师:                       

设计时间:                       

微控制器技术课程设计任务书

设计题目              简易电子琴设计               

设计时间             2014.6.8--2014.6.19             

设计任务

画出设计原理图,绘制程序流程图,编制程序,实现以下功能:

1、键盘每个键代表一个音阶,按下按键后,小喇叭发出对应音阶;

2、开始按键,喇叭即开始发音;释放按键,停止发音;

3、数码管显示所按下键对应的音阶符号;

4、LED可闪烁装饰。

背景资料:1、单片机原理与应用

          2、检测技术

3、计算机原理与接口技术

进度安排:

1、第1天,领取题目,熟悉设计内容,分解设计步骤和任务。

2、第2-3天,规划设计软硬件,编制程序流程、绘制硬件电路。

3、第4-6天,动手制作硬件电路,或编写软件,并调试。

4、第7天,中期检查。

5、第9-10天,完善设计内容,书写设计报告。

6、第11天,提交设计报告,整理设计实物,等待答辩。

7、第12天,设计答辩。

题目:简易电子琴设计

一、设计目的

单片机课程设计过程中,学生通过查阅资料,接口设计,程序设计,安装调试等环节,完成一个基于AT89C51系列单片机,涉及多种资源应用,并且有综合功能的小应用系统设计。使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路,电子元器件等方面的知识进一步加深认识,同时在软件编程,调试,相关仪器设备和相关软件的使用技能等方面得到较全面的锻炼和提高。使学生增进对单片机的感性认识,加深对单片机理论方面的理解,加深单片机的内部功能模块的应用,如定时器/计数器,中断,片内外存储器,I/O接口,串行口等。使学生了解和掌握单片机应用系统的软硬件设计过程,方法及实现,强化单片机应用电路的设计与分析能力。提高学生在单片机应用方面的实践技能和科学作风,培育学生综合运用理论知识解决问题的能力。

二、设计要求

        主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。 。

三、方案设计与论证

(1)播放模块是由喇叭构成,它几乎不存在噪音,音响效果较好,而且由于所需驱动功率较小,且价格廉价,所以,才被才用

(2)按键模块,电子琴设有8个按键,其中7个作为音符输入,另外一个作为模式转换按键,实现用户存放的自动播放歌曲。7个按键分别代表7个音符,包括中音段的全部音符,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程入口,实现自编歌曲的。

(3)该设计方案是通过按键随意按下所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。通过这样可以不断的弹奏我们想要的音符或者是音调,电路由复位电路,指示灯电路,和功能按键电路组成。

通过上述分析,可规划出系统的总体原理图,如图1-1所示。

                      1-1

四、设计原理和电路图

1.硬件电路

(1)时钟晶振电路

XTAL1脚为片内振荡电路的输入端,XTAL2脚为片内振荡电路的输入端。内部时钟方式由单片机内部的高增益反相放大器和外部跨接的晶振、微调电容构成时钟电路产生时钟的方法,其工作原理如图1-3所示。C1、C2的值通常选择30PF,C1、C2对频率有微调作用,晶振的频率选择12MHz。

图1-2时钟晶振电路

(2)复位电路

此复位电路是是上电/按键复位,按下按键,电源对电容C充电,使RST端快速达到高电平;松开按键,电容向芯片的内阻放电,恢复为低电平,从而使单片机可靠复位,既可上电复位,又可按键复位。

图1-3 复位电路

(3)按键电路

键盘是最常用的单片机输入设备,大致可以分为独立连接式键盘和矩阵式。独立连接式键盘是最简单的键盘电路,每个键独立接入一根数据线。这种键盘结构简单,使用方便,但是占用的I/O口线较多。矩阵式键盘由行线和列线组成,按键位于行列的交叉点上,行列式键盘可以节省I/O口,适合键数较多的场合,所以设计4*4键盘采用矩阵式键盘。

图1-4 按键电路

(4)振荡电路

单片机的时钟信号用来提供单片机内各种位操作的时间基准,时钟信号通常由两种电路形式的到:内部振荡方式和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器,就构成了内部振荡方式,有用单片机内部有一个高增益反相放大器,当外接晶振荡后,就构成了自激振荡器并产生振荡时钟脉冲。晶振通常采用6MHz.12MHz或者24MHz。本设计中采用的是12MHz.电容C1.C2起稳定振荡频率、快速起振的作用,电容值一般5-30pF。内部振荡方式所得的时钟信号比较稳定,电路中使用较多。振荡方式如下图:                                  

图1-5 声音提示电路

(5)LED数码管

数码管的显示方式采用动态显示,在动态显示下,每位数码管的对应段选线连接在一起,共8段,连接到一个8位输出口上。由于单片机P0口内部无上拉电阻,所以P0口要加上拉电阻。每位数码管的位选线连接到一根独立的I/O口线上,显示信息时,段选码由同一个8位I/O口送出,由位选线控制具体哪位数码管显示。工作原理为:先在段选线上送出第一位数码管的段选码,然后让第一位数码管的位选线有效,则第一位数码管显示信息,其余数码管熄灭,延时一下,位码送关断数码管延时一下(作用:消除数码管的阴影),再送第二位数码管的信息,方法与第一位的相同,直到所有的数码管扫描一遍。由于每位数码管轮流点亮,利用人眼的视觉暂留现象可造成所有数码管同时显示的效果。亮度较静态显示方式时暗,所以在位选线上加有译码器,增加驱动能力使数码管点亮。

图1-6 显示电路

2.软件

(1)软件工作的基本流程

图(c) 按键程序流程图

        

图(a) 播放程序流程图                            图(b) 中断程序流程图

图(d) 主程序流程图

五、元件清单

表1  元件清单

六、硬件制作与调试

本设计中用到单片机开发板和keil软件加上相应的下载线,构成软硬件调试环境,支持对单片机的在线调试功能,这样就能方便快速地调试出相应的程序,建议:尽量创造条件完成硬件电路,用硬件电路来调试程序是最好的选择。实际硬件电路与程序结合完成我们想要的结果才是本次设计的目的。

在仿真电路制作期间,发现元件的选择至关重要,元件型号的选择、元件数值的选择都是经过准确计算后得到的。然后就仿真电路的布局,有条理的布局可以使仿真电路整齐美观,更重要的是使人一目了然,电路的可读性、维护性大大提高。

在程序调试期间,在KEIL跟PEROTEUS上仿真调试取得了成功。达到了设计初的预期目标,单片机的功能符合要求,需要反复检查程序,发现问题解决问题,直到运行结果正确。

七、设计总结

本次课程设计制作简易电子琴,虽然自己在网上查找资料,将自己的理论知识与实践相结合起来,进一步巩固了专业基础知识和相关专业课程知识;另一方面,也培养了自己独立自主、综合分析的思维与创新能力,设计的过程不是一帆风顺,遇到过各种各样的问题。特别是设计软件时,一些很细小的问题都可能导致功能性的错误,修改了多次才通过仿真。在设计过程中我发现自己对以前所学过的知识理解得不够深刻,掌握得不够牢固,所以也利用图书馆、网络资源查阅了大量文献资料,也请教了同学,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我不得不考虑这方面的问题,这也让我更深刻地体会到在今后的学习工作中也要注重理论联系实际。

八、参考文献

 [ 1] 李群芳,肖看,《单片机原理、接口及应用》,北京,清华大学出版社,20##年

[2] 戴佳,戴卫恒 ,《51单片机C语言应用程序设计实例精讲》 , 电子工业出版社,20##年

[3] 刘海成,《单片机及应用系统设计原理与实践》,北京,北京航空航天大学出版社,20##年

[4] 楼然苗,李光飞,《单片机课程设计指导》,北京,北京航空航天大学出版社,20##年
[6] 吴国经,《单片机应用技术》,北京,中国电力出版社, 2004.年

附录1 总体电路

附录2 完整程序


#include <reg52.h>

#define unint unsigned int

#define unchar unsigned char

#define keyport P2

sbit sound =P2^7;    //蜂鸣器j45

unchar keyvalue;

/*unchar music[]={64021,64103,64260,64400,

                 64524,64580,64684,64777,

                 64820,64898,64968,65030,

                 65058,65110,65157,65178};*/

unchar music0 [9]={0,0xF8,0xF9,0xFa,0xFa,0xFb,0xfb,0xfc,0xf8};

unchar music1 [9]={0,0x8c,0x5b,0x15,0x67,0x04,0x90,0x0c,0x8c};

unchar keyvalue;

unchar MUSICTH0;

unchar MUSICTL0;

unchar dat;

void delayms(unsigned int i)//延时函数

{

  unsigned int j;

  for(;i>0;i--)

    for(j=100;j>0;j--);

}

//键盘检测函数

void keyscan(void) 

{

       if(keyport!=0xff)

       {

              delayms(10);

              if(keyport!=0xff)

                     {

                            keyvalue=keyport;

                            swswitch(keyvalue)

                            {

                                    case 0xfe:dat=1;break;//比较keyvalue是否=0xfe 如相等 返回 值1

                                    case 0xfd:dat=2;break;

                                    case 0xfb:dat=3;break;

                                    case 0xf7:dat=4;break;

                                    case 0xef:dat=5;break;

                                    case 0xdf:dat=6;break;

                                    case 0xbf:dat=7;break;

                                    //default:dat=0;break;

                            }

                     }

       }

      

      

       MUSICTH0=music0[dat];

       MUSICTL0=music1[dat];

       ET0=1;

       TR0=1;

       while(P2==0xff)

       {

              ET0=0;

              TR0=0;

       }


第二篇:单片机电子琴课程设计报告


1 课程设计的意义

单片机自20世纪70年代问世以来,已对人类社会产生了巨大的影响。尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高、处理功能强、可靠性高、系统结构简单、价格低廉、易于使用等优点,在工业控制、智能仪器仪表、办公室自动化、家用电器等诸多领域得到广泛的应用。20世纪80年代中期以后,Intel公司已把精力集中在CPU芯片的开发、研制上,并逐渐放弃了单片机芯片的生产,但是以MCS-51内核技术为主导的单片机已经成为许多厂家及公司竞相选用的对象。因此,Intel公司以专利转让或技术交换的形式把MCS-51的内核技术转让给了许多国际上著名的半导体芯片生产厂家,如ATMEL、PHILIPS、Cygnal等公司。这些厂家生产的与MCS-51系列单片机兼容的各种增强型、扩展型单片机,已成为世界上8位单片机市场的主流产品。估计在今后若干年内,它们仍是我国8位单片机应用领域的主流机型。

音乐已经成为现代人们生活所不可缺少的艺术,美妙的音乐可以让人放松,使人愉悦,电子琴作为一种乐器已经得到很多音乐人的重视和应用,一个质量好的电子琴可以做出让人欣赏的美好音乐,所以作为从事电子技术领域的我们来说,能做出质量优越的电子琴是我们的义务和责任,虽然今天我们做的是简易电子琴,但其已经具有电子琴的基本功能,为以后的进一步开发研究奠定一个良好的基础。本课程设计的目的是为了深入了解MCS-51系列单片机的功能以及应用,学会制作简单的电子琴。会使用LCD显示屏,对其有进一步的了解。

2 方案论证

2.1 设计的任务

本课程设计的任务是应用单片机制作一个简易的电子琴,能够准确发出基本的音符,并且同时能将音符在显示屏上现实出来。

2.2 设计的要求

利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下键发声,松开延时一段时间停止,中间再按别的键则发另外一音调的声音。

当系统扫描到有按键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就回发出相应的音调。如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键发音程序,发出后按的键的音调。

2.3创新部分

1.用一个诺基亚5110显示屏来显示当前所发出的音符,便于使用者对音符的识别,还可以编辑一首歌并同时显示歌词和时间。

2.可播放音乐。

2.4各部分元器件选用方案论证

2.4.1 单片机的选用

 STC单片机是一款增强型5l单片机,完全兼容MCS-51。STC89C52可以代替AT89C51,而且功能更强,速度更快,寿命更长,价格更低。该单片机具有40个引脚,采用双列直插DIP-40封装。STC89C52可以完成ISP在线编程功能,而AT89C51则不能。因此,将AT89C51中的程序直接烧录到STC89C52中后,STC89C52就可以代替AT89C51直接工作。STC推出的系列51单片机芯片全面兼容其它51单片机。STC89C52内部有E2PROM,可以在程序中修改,而且断电不丢失数据。此外,还增加了两级中断优先级等等。

2.4.2 显示元件的选用

液晶显示模块采用的是NOKIA公司生产的LCD5110液晶显示模块。该液晶屏为48*84点阵的格式,每个英文字符占用6*8个点阵,一行可以显示14个字符,可以显示六行。汉字可以采用两种点阵方式显示,一种是12*12点阵,一种是16*16点阵,一共可以显示3行汉字。

LCD5110有10个引脚,原理图如图1所示:

 

引脚1为LCD5110的复位键,由软件控制即可。引脚2为片选端,引脚3用于控制输入的数据是命令还是普通数据。引脚5为液晶显示器的时钟输入,引脚6为电源输入端,引脚8为电源地。引脚7为背光控制开关,低电平打开背光。引脚9、10用于扩展。

2.4.3 键盘的选用

常用键盘分为独立式键盘接口和行列式键盘接口。本次课题设计使用的是独立式键盘接口。独立式键盘接口就是各键是相互独立的,每个按键各接一条输入线,检验输入线电平的高低可以很容易判断哪个按键被按下。这种键盘适用于按键较少后操作速度较高的场合。我们共用了9个按键,其中8个按键控制1、2、3、4、5、6、7、i的发音。还有一个按键控制LCD屏的显示。

2.4.4 电源的选用

要想使单片机正常运行,可靠、稳定的电源必不可少,在以往的电子设计中,我们一般制作5V电源,这样做的目的是通过变压器变压,将民用220V电直接转为5V电供单片机使用,在没有电脑USB时可以直接找一个插座接上便可使用。但缺点是制作成本较高,且体积较大,烧录程序时还需要另配烧录器。

由于我们在课程设计过程中时刻都要使用笔记本电脑,且程序需要在线烧写,故我们选择使用了USB烧录器,既可以在线烧写程序也可以当作电源使用,方便快捷。

2.4.5 其他元器件的选用

在确定了单片机芯片、诺基亚5110显示屏、电源模块和按键后,我们还确定选用排针、排阻、导线若干以及用于单片机最小系统的电容、晶振、电阻等。

3 系统硬件设计

3.1 总体设计

本设计采用STC89C50032RC单片机作为系统控制芯片,单片机对P0口的按键进行查询,如果有按键按下,则产生相应频率的脉冲通过P2.0口输出,再经过放大电路驱动扬声器,发出相应的音调。在显示系统中对当前的音符进行显示。系统的总体框图如图2所示:

 

3.2 单片机最小系统

最小系统包括晶振电路、复位电路和电源部分。最小系统电路图如图3所示:

 

3.3 按键的连接

一共有八个按键,分别和单片机的P1口相连,并分别连接一个上拉电阻。电路图如图4所示:

 

3.4 蜂鸣器的连接

蜂鸣器经过一个放大电路和单片机的P2.0口相连,选用无源蜂鸣器。电路图如图5所示:

 

3.5 显示屏的连接

显示屏总共有八个引脚,其中VCC和GND分别接3.3V电源和接地,其他引脚与单片机的P0口相连。电路图如图6所示:

 

3.6 整体电路

综合上面所介绍的各个模块的电路图的连接情况,最后总结出整体的电路图。整体电路图如图7所示:

 


4 系统软件设计

4.1主程序的设计

设计软件应从设计主程序着手开始,而设计程序应从流程图开始,经过考察论证,查阅资料,再根据所学的单片机编程的知识,最后总结出主程序的流程图如图8所示:

 

4.2 显示子程序的设计

指令格式分为两种模式:如果D/C(模式选择)置为低,当前字节解释为命令字节(见表1)。如果D/C置为高,接下来的字节将存储到显示数据RAM。每一个数据字节存入之后,地址计数自动递增。在数据字节最后一位期间会读取D/C信号的电平。每一条指令可用任意次序发送到PCD8544。首先传送的是字节的MSB(高位)。当SCE为高时,串行接口被初始化。在这个状态,SCLK时钟脉冲不起作用,串行接口不消耗电力。SCE上的负边缘使能串行接口并指示开始数据传输。

 

4.3 定时子程序的设计

定时子程序只需将TAB中对应的数值送给定时器的初值寄存器,然后开始定时。

5 软硬件联调

5.1 调试步骤

第一:按照整体电路图焊接硬件,硬件实物图如图9所示:

 

第二:编辑软件程序,用Uv4对程序进行编译,编译无误后保存,再用protuse对软件进行仿真。

第三:将硬件通过USB与RS-232串口转换线与电脑连接,用STC下载软件将编译完成后的程序下载烧录到硬件中,观察硬件的运行结果。硬件运行结果如图10所示:

5.2 软硬件联调过程中出现的问题和解决办法

◎问题1:

将USB烧写器尾部的短路帽子摘掉后插上电脑,程序无法烧写进芯片。

解决措施:

将STC中单片机的设置更改为STC89C52型号的,再将波特率改小一点,端口设置正确即可。

◎问题2:

程序烧录进去后显示屏不显示任何数字。

解决措施:

将USB口从电脑上拔下然后再插入即可。

◎问题3:

按键按下之后扬声器的声音抖动。

解决措施:

将放大电路检查一遍再将每个焊点焊实即可。

6 课设计总结

6.1 收获

通过一个多星期的课程设计,从选题到查资料,从完善原理图到写报告文档,让我明白了课程设计是名副其实的综合性训练,不仅要运用学过的单片机技术及应用,数字电路、模拟电路以及电子技术实验等知识,还要学会查阅各种图书资料和工具书,并将新知识和所学的结合起来为自己所用。在做整个课程设计的过程中,我进一步熟悉使用了protuse仿真软件和Uv4软件编辑软件,能较好的应用这些软件,不管是文本程序的编写还是在顶层原理图的设计都有所提高,还增强了动手能力。应用软件的时候,要注意积累每次的体会和错误,下次碰到该注意的地方就要小心点,碰到出过错误的地方就要格外注意不要再犯同样的错误,这种方法应该适用做任何一件事吧。在设计中遇到一些困难和问题,在向老师请教和与同学的讨论中,解决了问题,觉得很有收获。

6.2 心得体会

一个星期很快就过去了,这一周我收获了很多。在过去的一周里,我和耿勇杰、张兴旺、张扬组成的小组,经过大家一起坚持不懈的努力,最终完成了我们选择的单片机课题设计——电子琴设计。在原设计的基础上,我们还加入了显示模块。用诺基亚5110的液晶显示屏,完成弹奏音符的显示,使设计更加完美。

在这一个星期里,我们先把以前收集的资料进行了整理。在做课设之前,我们已经通过学校的图书馆和网络,进行了资料的收集,对基于单片机的电子琴设计有了大体的了解和认识。

并且在这学期得课余时间,我们经过研究和讨论,制定了设计的基本思路,并焊接完成了硬件电路。

这个星期我们的任务安排主要是完成电子琴的程序和5110液晶显示的程序,进行程序调试,使之在硬件上实现,最后完成任务书。

在最初的两天里,先进行的是电子琴的程序设计,了解的音乐产生的原理。音乐的产生是通过单片机的I\O端口输出高低不同的脉冲信号来控制蜂鸣器发声。不同的音频信号的周期不同,通过单片机的定时器,给定时器设置不同的初值,通过定时器中断,中断过程中对I\O端口取反,就得到了音频信号的脉冲。通过这次课设,我掌握了单片机设计单子琴的工作原理,又复习了单片机定时器的工作原理,熟练了计数初值的计算。把自己感兴趣的电子琴和学习的单片机知识联系到了一起,设计过程中,既再次学习了单片机的知识,对学习的知识有了更深刻的认识和理解;又获得了快乐,自己设计了简易的电子琴。用自己的设计弹奏出简单的音乐,还挺有成就感的。兴趣是最好的老师,把自己的兴趣和所学的知识结合起来,学以致用,理论应用于实践,这是我最大的收获。

完成电子琴的发音程序后,我们开始编写5110液晶显示屏的程序。5110液晶屏与一般课本上介绍的液晶显示屏不太一样。我们用的5110液晶显示屏,只有8个引脚,引脚越少,电路的连接越简单。可是看着越简单的东西,实际上要弄明白它的工作和使用就越难。由于5110液晶显示屏的资料比较少,我们又没有接触过。一开始我们先从其它的液晶显示屏资料开始研究,希望可以通过类比,了解5110液晶显示屏。再弄明白了其它液晶显示屏以后,我们开始编写5110的显示程序,编写完成后,与硬件进行调试却失败了。改程序,与硬件连接调试,失败;再改程序,再与硬件连接调试,再失败……这样的过程重复了不知多少遍。调试了两天以后,我们又把5110液晶显示屏的资料拿出来认真的研究,把指令集看了又看,这次我们注重分析了5110液晶屏与其它液晶屏的区别。放弃了通过其它液晶屏来认识5110,而是直接分析5110液晶屏。因为通过学习我们发现,两样东西即使它是类似的,可是在汇编的过程中,一点微小的区别也是不同的。后来在网上我们找到了5110液晶显示驱动PCD8544的使用手册,经过讨论和研究,我们再次编写了程序,结果和硬件连接了几次,还是失败了。最后我们只得求助于柳老师,刘老师编写完程序后,一开始也没有显示,老师把硬件断电再接电后,显示成功。于是我们也把自己写的程序下载到硬件中,断电再接电,显示也成功了。再郁闷了这么长时间后,发现只是因为这个小动作,所以一直没有显示,我们在显示成功高兴的同时,也有点小无奈。真是细节决定成败啊。

通过对5110液晶显示屏的使用,锻炼了我的自学能力。对一个从来没有接触过的器件,通过自己的学习,分析和研究,最终完成任务。这对我来说还是第一次,在这第一次的过程中,我走了很多弯路。一开始不知道如何下手,先是研究错了方向,学习和研究了许多其他的液晶显示屏。而后又拿着5110的资料不知道从哪看起,不知道那是编程要用的重点,只好把资料都看了。再后来又对5110的资料有不少不理解的地方,对引脚的控制和它的工作有许多模糊的地方,只好在编程时,一次次的实验,验证那种理解是正确的。

虽然这个过程曲折,而又让我觉得无奈。但是,在最后显示成功后,通过自己的努力而获得的喜悦,是无以言表的。并且,通过这次学习,我初步学会了看器件的使用手册,看指令表。学会了要想使用一个你不了解的器件,应该看什么,应该注意什么。你要看器件的参数,看各个引脚的连接和作用,看指令表。在编程的过程中,要严格按照指令表编写程序,不能自己想当然。大学教育和课题设计的目的,就是教会我们如何自学,锻炼我们独立思考的能力,在这次课设中,我有了切身的体会。

老师在编写5110显示程序时,本身老师也没有接触过5110的汇编。老师根据资料,通过简单的阅读,就把C语言的5110的显示程序,改成了汇编,并且显示成功。我们的资料和老师看的差不多,却折腾了两三天才把程序编写出来。我们一定会通过努力向老师看齐。

最后,我们还发现了蜂鸣器的问题,一开始我们用的蜂鸣器是有源的,声音小,把分压电阻短路后,声音大了,可是一直“滴滴”响个不停。上网查证后,发现蜂鸣器分为有源和无源的,电子琴设计要用无源的蜂鸣器。虽然是个小问题,但是也增加了一个小知识点。

通过这次课题设计,我的收获很大。我们获得了知识,完成了设计,锻炼了独立思考能力,和动手能力。我也体会到无论是硬件设计还是软件编程,细节决定成败,一定要认真对待每一个小步骤。

最后,谢谢柳延领老师的指导和帮助。

参考文献

1.《基于Proteus的8051单片机实例教程》 李学礼 主编 电子工业出版社

2.《Proteus教程——电子线路设计、制版与仿真》 朱清慧 张凤蕊 翟天嵩 王志奎 编著 清华大学出版社

3.《单片机原理及应用技术》 陈益飞主编 国防工业出版社

4.《单片机控制实训指导及综合应用实例》 张大明 主编 机械工业出版社

附录

电子琴课程设计程序源代码

     SCE  EQU P2.1

       RES EQU P2.2

       DC EQU P2.3

       SDIN EQU P3.0 

       SCLK EQU P3.1

       RX DATA 55H

       RY DATA 56H

                                           ;单片机初始化

       ORG 0000H

       LJMP MAIN

       ORG 0003H

       LJMP PNT0

       ORG 000BH

       LJMP INT_T0

       ORG 001BH

    LJMP TIME1

                          ;设置定时器0\1工作方式0,开中断

MAIN:MOV SP,#70H

     MOV TMOD,#11H

     SETB EA

       SETB ET0

       SETB ET1

       SETB F0

                          ;LCD5110复位,清屏,初始化功能

SRART:

     SETB RES

     SETB SCE

     SETB SCLK

     CALL CLEAR

     CLR RES

     NOP

     SETB RES

     NOP

     LCALL LCDRST

     LCALL LCD

                           ;判断是否有键按下

KEY: MOV P1,#0FFH

     MOV A,P1

       XRL A,#0FFH

       JZ KEY2

       LCALL DE10MS

       MOV A,P1

       MOV R5,A

       XRL A,#0FFH

       JNZ TKEY

       SJMP KEY

KEY2:MOV A,P2

     JNB ACC.5,L1

  L2:SJMP KEY

  L1:LCALL DE10MS

     MOV A,P2

       JB ACC.5,L2

       LJMP FLCD

                                 ;判断那个键按下了

TKEY:MOV A,R5

       JNB ACC.0,K1

       SJMP  K2

 K1: MOV R2,#0

       MOV DPTR,#TLCD1       ;设置LCD5110显示字的表格位置

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

       

 K2: JNB ACC.1,KK2

       SJMP  K3

 KK2:MOV R2,#2

       MOV DPTR,#TLCD2

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

      

 K3: JNB ACC.2,KK3

       SJMP  K4

 KK3:MOV R2,#4

       MOV DPTR,#TLCD3

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

       

 K4: JNB ACC.3,KK4

       SJMP  K5

 KK4:MOV R2,#6

       MOV DPTR,#TLCD4

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

 K5: JNB ACC.4,KK5

       SJMP  K6

 KK5:MOV R2,#8

       MOV DPTR,#TLCD5

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

 K6: JNB ACC.5,KK6

       SJMP  K7

 KK6:MOV R2,#10

       MOV DPTR,#TLCD6

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

 K7: JNB ACC.6,KK7

       SJMP  K8

 KK7:MOV R2,#12

       MOV DPTR,#TLCD7

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

       LJMP MUSIC

 K8: JNB ACC.7,KK8

     LJMP KEY

 KK8:MOV R2,#14

       MOV DPTR,#TLCD8

       MOV 51H,DPH

       MOV 50H,DPL

       LCALL SLCD

                              ;取按键对应音符,设置定时器0的初值

MUSIC:MOV A,R2

      MOV DPTR,#TAB

        MOVC A,@A+DPTR

        MOV R7,A

        MOV TH0,R7

        INC R2

        MOV A,R2

        MOVC A,@A+DPTR

        MOV R6,A

        MOV TL0,R6

        SETB TR0

                                 ;判断按键是否释放

LOOP:MOV P1,#0FFH

     MOV A,P1

     XRL A,#0FFH

       JNZ LOOP

                                 ;按键释放后再响一段时间

DETY:MOV R4,#200

 LP1:MOV R3,#126

       DJNZ R3,$

       DJNZ R4,LP1

       CLR TR0

       LJMP KEY

                                     ;消除抖动延时10MS

DE10MS:MOV R1,#10

   LP2:MOV R0,#248

         DJNZ R0,$

         DJNZ R1,LP2

         RET

                                  ;片P2.0口取反,提供音乐脉冲

INT_T0:PUSH PSW

       PUSH ACC

       MOV TH0,R7

       MOV TL0,R6

         CPL P2.0

         POP ACC

         POP PSW

         RETI

PNT0:PUSH PSW

     PUSH ACC

     JNB TR0,RE2

KEY1:CLR TR0

     MOV P1,#0FFH

     MOV A,P1

       XRL A,#0FFH

       JZ KEY1

       LCALL DE10MS

     MOV P1,#0FFH

       MOV A,P1

       MOV R5,A

       XRL A,#0FFH

       JNZ RE3

 RE3:POP PSW

     POP ACC

       LJMP TKEY

 RE2:POP PSW  

     POP ACC

     RETI

                                      ;LCD5110清屏

CLEAR:MOV 52H,#6

 CLR1:MOV 53H,#84

 CLR2:MOV A,#0

      CALL WR_D

      DJNZ 53H,CLR2

      DJNZ 52H,CLR1

      RET

                                   ;LCD5110初始化

LCDRST:MOV A,#21H

       LCALL WR_C

       MOV A,#0C8H

       LCALL WR_C

       MOV A,#20H

       LCALL WR_C

       MOV A,#0CH

       LCALL WR_C

       RET   

                                         ;LCD5110显示“电子琴设计”

 LCD:SETB F0

     MOV RY,#40H

     MOV RX,#80H

     LCALL SET_XY

     MOV DPTR,#LCD0

       LCALL WDATA

       MOV RY,#41H

    MOV RX,#80H

       LCALL SET_XY

       MOV DPTR,#LCD1

       LCALL WDATA

       MOV RY,#40H

    MOV RX,#90H

       LCALL SET_XY

       MOV DPTR,#LCD2

       LCALL WDATA

       MOV RY,#41H

    MOV RX,#90H

       LCALL SET_XY

       MOV DPTR,#LCD3

       LCALL WDATA

       MOV RY,#40H

     MOV RX,#0A0H

     LCALL SET_XY

     MOV DPTR,#LCD4

       LCALL WDATA

       MOV RY,#41H

     MOV RX,#0A0H

       LCALL SET_XY

       MOV DPTR,#LCD5

       LCALL WDATA

       MOV RY,#40H

     MOV RX,#0B0H

       LCALL SET_XY

       MOV DPTR,#LCD6

       LCALL WDATA

       MOV RY,#41H

     MOV RX,#0B0H

       LCALL SET_XY

       MOV DPTR,#LCD7

       LCALL WDATA

       MOV RY,#40H

     MOV RX,#0C0H

       LCALL SET_XY

       MOV DPTR,#LCD8

       LCALL WDATA

       MOV RY,#41H

     MOV RX,#0C0H

       LCALL SET_XY

       MOV DPTR,#LCD9

       LCALL WDATA

    RET

                                      ;LCD5110写指令子程序

 WR_C:CLR SCE

      CLR DC

      CALL SENT

      SETB SCE

      RET

 ;LCD5110写数据子程序

 WR_D:CLR SCE

      SETB DC

        CALL SENT

        SETB SCE

        RET

;LCD5110设置XY坐标

SET_XY:MOV A, RY

       CALL WR_C

       MOV A,RX

       CALL WR_C

         RET

                                   ;LCD5110串行输入8位数据

SENT:MOV 54H,#08H

  RS:RLC   A

     MOV   SDIN,C

     CLR   SCLK

     NOP

     NOP

     SETB SCLK

     DJNZ 54H,RS

     RET

;写入汉字数据

WDATA:MOV 57H,#16     

STR0:MOV A,#00H

     MOVC A,@A+DPTR

     LCALL WR_D

     INC  DPTR

     DJNZ 57H,STR0

       RET

//电

LCD0:DB 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF

DB 0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00

LCD1:DB 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F

DB 0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00

//子

LCD2:DB 0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2

DB 0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00

LCD3:DB 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F

DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

//琴

LCD4:DB 0x82,0x92,0x92,0xFE,0x92,0x92,0x82,0x00

DB 0x82,0x92,0x92,0xFE,0x92,0x92,0x82,0x00

LCD5:DB 0x08,0x08,0x08,0x14,0x14,0x12,0x16,0x99

DB 0x52,0x32,0x14,0x04,0x08,0x08,0x08,0x00

//设

LCD6:DB 0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E

DB 0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00

LCD7:DB 0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43

DB 0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00

//计

LCD8:DB 0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40

DB 0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x00

LCD9:DB 0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x00

DB 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00

                                   ;LCD5110音符显示

SLCD:MOV RY,#43H

     MOV RX,#0A8H

       LCALL SET_XY

       LCALL WDATA1

       RET

;写入音符数据

WDATA1:MOV 55H,#6     

   STR:MOV A,#00H

       MOVC A,@A+DPTR

       LCALL WR_D

       INC DPTR

       DJNZ 55H,STR

       RET

                                    ;音符数据

TLCD1: DB 00H,84H,0FEH,0FEH,80H,00H

TLCD2:DB 86H,0C3H,0E3H,0B3H,9FH,8EH

TLCD3:DB 44H,83H,92H,92H,0FEH,6CH

TLCD4:DB 38H,2CH,26H,0FFH,20H,20H

TLCD5:DB 00H,0DEH, 9EH, 92H,0F2H, 62H

TLCD6:DB 7CH, 0FEH, 92H, 92H, 0E2H,64H

TLCD7:DB 03H, 01H, 0E1H, 0F1H, 0FH,07H

TLCD8:DB 00H, 84H, 0fdH, 0FDH, 80H,00H

                                  ;音符频率初值

TAB:DW 64580,64684,64777,64820

    DW 64898,64968,65030,65058

                                    

FLCD:JNB F0,CHEN                 ;跳转到显示“谢谢”的子程序

     LJMP START2                  ;跳转到播放音乐子程序

    

CHEN:SETB F0

     MOV RY,#40H

     MOV RX,#80H

       LCALL SET_XY

     LCALL CLEAR

       NOP

       NOP

       MOV RY,#40H

    MOV RX,#80H

    LCALL SET_XY

    MOV DPTR,#FLCD0

       LCALL WDATA

       MOV RY,#41H

    MOV RX,#80H

       LCALL SET_XY

       MOV DPTR,#FLCD1

       LCALL WDATA

       MOV RY,#40H

    MOV RX,#90H

       LCALL SET_XY

       MOV DPTR,#FLCD0

       LCALL WDATA

       MOV RY,#41H

    MOV RX,#90H

       LCALL SET_XY

       MOV DPTR,#FLCD1

       LCALL WDATA

       MOV RY,#40H

     MOV RX,#0A0H

     LCALL SET_XY

     MOV DPTR,#FLCD2

       LCALL WDATA

       MOV RY,#41H

     MOV RX,#0A0H

       LCALL SET_XY

       MOV DPTR,#FLCD3

       LCALL WDATA

       MOV RY,#40H

    MOV RX,#0B0H

       LCALL SET_XY

       MOV DPTR,#FLCD4

       LCALL WDATA

       MOV RY,#41H

    MOV RX,#0B0H

       LCALL SET_XY

       MOV DPTR,#FLCD5

       LCALL WDATA

       MOV RY,#40H

    MOV RX,#0C0H

       LCALL SET_XY

       MOV DPTR,#FLCD6

       LCALL WDATA

       MOV RY,#41H

    MOV RX,#0C0H

       LCALL SET_XY

       MOV DPTR,#FLCD7

       LCALL WDATA

    SJMP KEY                     ;跳转回键盘扫描子程序

//谢

FLCD0:DB 0x40,0x42,0xCC,0x04,0x00,0xFC,0x56,0x55

DB 0xFC,0x50,0x90,0x10,0xFF,0x10,0x10,0x00

FLCD1:DB 0x00,0x00,0x3F,0x50,0x29,0x11,0x4D,0x83

DB 0x7F,0x00,0x41,0x80,0x7F,0x00,0x00,0x00

//柳

FLCD2:DB 0x10,0x10,0xD0,0xFF,0x90,0x10,0xFC,0x04

DB 0x02,0xF8,0x00,0xFC,0x04,0x04,0xFC,0x00

FLCD3:DB 0x04,0x03,0x00,0xFF,0x00,0x01,0x8F,0x44

DB 0x32,0x0F,0x00,0xFF,0x04,0x08,0x07,0x00

//老

FLCD4:DB 0x20,0x20,0x24,0x24,0x24,0x24,0xBF,0x64

DB 0x24,0x34,0x28,0x24,0x22,0x20,0x20,0x00

FLCD5:DB 0x10,0x08,0x04,0x02,0x3F,0x45,0x44,0x44

DB 0x42,0x42,0x42,0x41,0x78,0x00,0x00,0x00

//师

FLCD6:DB 0x00,0xFC,0x00,0x00,0xFF,0x00,0x02,0xE2

DB 0x22,0x22,0xFE,0x22,0x22,0xE2,0x02,0x00

FLCD7:DB 0x00,0x87,0x40,0x30,0x0F,0x00,0x00,0x1F

DB 0x00,0x00,0xFF,0x08,0x10,0x0F,0x00,0x00

START2:CLR F0                    ;音乐播放子程序

       LCALL WORD2

MAIN2: MOV 60H,#00H             ;设置初始指针

NEXT2: MOV A,60H               

      MOV DPTR,#MTAB

      MOVC A,@A+DPTR

      CJNE A,#00H,PLAY

      LJMP STOP

PLAY: MOV 61H,A

      ANL A,#0FH

      MOV 62H,A                 ;把节拍值存放在62H中

      MOV A,61H

      ANL A,#0F0H

      CJNE A,#0,MUSIC2

      LJMP DEL2

MUSIC2:SWAP A

       DEC A

        MOV 63H,A                  ;把音符值存放在63H中

        ADD A,63H

        MOV 64H,A

        MOV DPTR,#MTAB1

        MOVC A,@A+DPTR

        MOV TH1,A

        MOV 65H,A

        MOV A,64H

        INC A

        MOVC A,@A+DPTR

        MOV TL1,A

        MOV 66H,A

        SETB TR1                   ;打开定时器1

DEL2:LCALL DETY2

        INC 60H                     ;指针加一,取下一个音符

        LJMP NEXT2

TIME1:PUSH ACC

      PUSH PSW

      CPL P2.0                     ;播放音乐

      MOV TH1,65H

      MOV TL1,66H

      POP PSW

      POP ACC

      RETI

                                   ;音乐播放完毕,关闭定时器1,返回键盘扫描

STOP: CLR TR1

       LJMP KEY

DETY2: MOV 67H,#2

L0P2:  MOV 68H,#125

L0P1:  MOV 69H,#248

      DJNZ 69H,$

      DJNZ 68H,L0P1

      DJNZ 67H,L0P2

      DJNZ 62H,DETY2

      RET

WORD2:                          ;显示播放音乐的名字

     MOV RY,#40H

     MOV RX,#80H

     LCALL SET_XY

     LCALL CLEAR

      NOP

      NOP

      MOV RY,#42H

      MOV RX,#90H

       LCALL SET_XY

       MOV DPTR,#WLCD0

       LCALL WDATA

       MOV RY,#43H

       MOV RX,#90H

       LCALL SET_XY

       MOV DPTR,#WLCD1

       LCALL WDATA

       MOV RY,#42H

    MOV RX,#0A0H

       LCALL SET_XY

       MOV DPTR,#WLCD2

       LCALL WDATA

       MOV RY,#43H

       MOV RX,#0A0H

       LCALL SET_XY

       MOV DPTR,#WLCD3

       LCALL WDATA

       MOV RY,#42H

    MOV RX,#0B0H

       LCALL SET_XY

       MOV DPTR,#WLCD4

       LCALL WDATA

       MOV RY,#43H

       MOV RX,#0B0H

       LCALL SET_XY

       MOV DPTR,#WLCD5

       LCALL WDATA

    RET

                                   ;音乐的所有音符

MTAB1:DW 64524,64580,64684,64777,64820

       DW 64898,64968,65030,65058

                                   ;音乐对应的音符和节拍

MTAB:DB 64H,42H,62H,98H,74H,92H,72H,68H

      DB 64H,22H,32H,44H,32H,22H,3CH

      DB 64H,42H,62H,94H,04H,82H,74H,94H

      DB 68H,64H,32H,42H,54H,04H,12H,2CH

     DB 74H,94H,98H,84H,72H,82H,98H,72H

     DB 82H,92H,72H,72H,62H,42H,22H,3CH

     DB 64H,42H,62H,94H,04H,82H,74H,94H

     DB 68H,64H,32H,42H,54H,04H,12H,2CH

     DB 00H

                                        ;音乐名

//长

WLCD0:DB 0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0

DB 0x90,0x88,0x84,0x82,0x80,0x80,0x80,0x00

WLCD1:DB 0x00,0x00,0x00,0x00,0xFF,0x40,0x21,0x12

DB 0x04,0x08,0x10,0x20,0x20,0x40,0x40,0x00

//亭

WLCD2:DB 0x00,0x04,0x04,0x74,0x54,0x54,0x55,0x56

DB 0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x00

WLCD3:DB 0x04,0x03,0x01,0x05,0x05,0x45,0x85,0x7D

DB 0x05,0x05,0x05,0x05,0x01,0x05,0x03,0x00

//外

WLCD4:DB 0x00,0xC0,0x30,0x1F,0x10,0x10,0xF0,0x00

DB 0x00,0xFF,0x20,0x40,0x80,0x00,0x00,0x00

WLCD5:DB 0x81,0x40,0x21,0x12,0x0C,0x03,0x00,0x00

DB 0x00,0xFF,0x00,0x00,0x00,0x03,0x00,0x00

                             ;结束

    END

更多相关推荐:
简易电子琴设计报告

简易电子琴课程设计报告摘要555定时器是一种模拟和数字功能相结合的中规模集成器件555定时器成本低性能可靠只需要外接几个电阻电容就可以实现多谐振荡器单稳态触发器及施密特触发器等脉冲产生与变换电路它也常作为定时器...

555简易电子琴设计报告

北京交通大学电子技术课程设计报告随着科学技术的发展和人类的进步电子技术已经成了各种工程技术的核心特别是进入信息时代以来电子技术更是成了基本技术其具体应用领域涵盖了通信领域控制系统测试系统计算机等等各行各业生活中...

简易电子琴课程设计报告

课程设计报告课程名称单片机课程设计题目简易电子琴学院物理与电子信息学院专业电子科学与技术班级12电子学号120xx3020学生姓名李焘指导老师刘小燕摘要单片机具有体积小可靠性高功能强灵活方便等的优点故广泛应用于...

单片机的简易电子琴设计报告

河南理工大学本科课程设计报告设计摘要本设计主要研究基于AT89C52单片机的简易电子琴设计它是以单片机作为主控核心设置键盘蜂鸣器等外围器件另外还用到一些简单器件如两位数码管和NPN型三极管及电阻等利用按键实现音...

简易电子琴设计报告

简易电子琴课程设计报告专业电气工程及其自动化班级12级过程控制小组第22组姓名门振威学号120xx4145指导教师王松林20xx0615摘要555定时器是一种模拟和数字功能相结合的中规模集成器件555定时器成本...

简易电子琴设计报告

电子技术课程设计报告学院电气与电子工程学院专业班级电信班学生姓名指导教师完成时间成绩简易电子琴设计报告一设计要求本设计是基于学校实验室的环境根据实验室提供的实验条件来完成设计任务设计一个简易电子琴1按下不同琴键...

简易电子琴课程设计

课程设计任务书学生姓名专业班级指导教师工作单位信息工程学院题目简易电子琴电路的设计仿真与实现初始条件可选元件集成运算放大器LM324电阻电位器电容若干直流电源或自备元器件可用仪器示波器万用表直流稳压源函数发生器...

课程设计报告 简易电子琴

微控制器技术课程设计报告设计题目简易电子琴设计专业电机与电器班级电器学号1303姓名指导教师设计时间微控制器技术课程设计任务书设计题目简易电子琴设计设计时间20xx6820xx619设计任务画出设计原理图绘制程...

简易电子琴设计及FPGA功能验证_FPGA课程设计

西安邮电大学FPGA课程设计报告题目简易电子琴设计及FPGA功能验证院系电子工程学院专业班级学生姓名导师姓名起止时间至20xx年6月29日目录1任务22目的23使用环境24FPGA课程设计详细内容241技术规范...

简易电子琴单片机课程设计

单片机课程设计论文设计题目简易电子琴学院汽车学院班级电气工程及其自动化03班成员名单指导教师王春梅课程设计时间20xx年5月1420xx年5月27摘要单片微型计算机是大规模集成电路技术发展的产物属第四代电子计算...

单片机课程设计- 简易电子琴设计

郑州科技学院单片机课程设计题目学生姓名专业班级学号院系指导教师完成时间目录1课程设计的目的错误未定义书签2设计目的及任务要求错误未定义书签21设计任务222设计要求23设计的方案与论证34元器件的介绍65硬件电...

cCAD课程设计简易电子琴设计及制作实验报告

目录摘要3前言31课程设计的要求42电路的分析43电路的绘制64pcb图绘制65热转印制版法75电路焊接与调试87总结8附录9参考文献9摘要本次设计在以STC89C52单片机为核心的系统板上利用C语言设计简易电...

简易电子琴课程设计报告(22篇)