毕业设计论文2供参考.docx
《毕业设计论文2供参考.docx》由会员分享,可在线阅读,更多相关《毕业设计论文2供参考.docx(42页珍藏版)》请在冰豆网上搜索。
毕业设计论文2供参考
毕业设计(论文)任务书
专业(班):
01电子信息工程
(1)班姓名:
甘晓聪
1、课题名称、主要内容和基本要求
课题名称:
简易电子琴的制作
主要内容:
该简易电子琴可实现从低音1DO到高音7SI共21个音符的控制,按下相应的键可随意弹奏想要表达的音乐,开关显示为液晶显示。
基本要求:
1、开关显示为液晶显示;
2、用汇编语言按键控制低音1DO到高音7SI共21个音符。
2、进度安排
周次
工作内容
执行情况
1~3
选定题目、搜集资料
完成
4
选择方案、技术可行性分析、方案论证与确定
完成
5
修改开题报告、评定开题报告
完成
6
由老师对方案的制作要求作指定说明并改良
完成
7
电路原理图设计、采购元器件
完成
8~9
硬件的实现(焊接技术、相关仪器设备的使用)
完成
10~13
软件的实现(完成相关软件编程设计工作)
完成
14~15
整个设计的软硬件调试
完成
16
演示制作成品、讲解设计思路、回答提问
3、指导教师评语
指导教师核定成绩:
指导教师签名:
4、评阅教师评语
评阅教师核定成绩:
评阅教师签名:
5、毕业设计(论文)成绩
答辩委员会主任签名:
摘要
本文介绍了一种由AT89S51单片机、1602液晶显示模块和键盘控制组成的简易电子琴的实施方案。
本系统以单片机AT89S51为控制核心,通过对键盘的控制实现对从低音1DO到高音7SI等的21个音符的控制。
开关显示为液晶显示,用户按不同的键即可随意弹奏想要表达的音乐。
它是51单片机中非常典型的应用之一。
关键词:
AT89S51单片机、1602液晶显示模块、键盘控制、简易电子琴
Abstract
ThisarticleintroducethesimpleNovachordthatconsistofAT89C51SCM(SingleChipMicrocomputer)、1602LCD(LiquidCrystalDisplay)andkeys.
Thissystem'smanipulativecoreis89s52singlechip.Throughclickthekeys,wecangetthenotefrombassnoteDOtohighnoteSI.Theon-offdisplayisLCDdisplay.Usercanclickthekeyswhattheywantto,andcanplaythemusicwhattheywant.ThissimpleNovachordisatypicaluseof51SCM.
KEYWORD:
AT89C51SCM、1602LCD、KeysControl、SimpleNovachord
前言
随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时/数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,因此单片机早期的含义称为单片微型计算机,直译为单片机(SingleChipMicrocomputer)单片机的出现是计算机技术发展史上的一个重要里程碑,单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。
单片机的主要特点有:
1、具有优异的性能价格比;2、集成度高、体积小、可靠性高;3、控制功能强;4、低电压、低功耗。
单片机的应用也十分广泛,微小体积和极低的成本,使其可广泛地嵌入到如仪器仪表、工业控制单元、汽车电子系统、办公自动化设备、家用电器、机器人、个人信息终端及通信产品中,成为现代电子系统中最重要的智能化工具。
本毕业设计是51单片机中一个较典型且有趣的应用之一。
介绍了一种由AT89S51单片机、1602液晶显示模块和键盘控制组成的简易电子琴的实施方案。
本系统以单片机AT89S51为控制核心,通过对键盘的控制实现对从低音1DO到高音7SI等的21个音符的控制。
开关显示为液晶显示,用户按不同的键即可随意弹奏想要表达的音乐。
电路简单可靠,价格低廉。
由于本人的知识有限,文中难免有缺点和错误之处,诚恳的希望各位老师以及所有读者批评指正!
一、课题的提出
由于单片机的种种优势,它得到了许多广泛的应用:
1、在智能仪器仪表中的应用:
在各类仪器仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。
2、在机电一体化中的应用:
机电一体化产品是指集机械、微电子技术、计算机技术于一本,具有智能化特征的电子产品。
3、在实时过程控制中的应用:
用单片机实时进行数据处理和控制,使系统保持最佳工作状态,提高系统的工作效率和产品的质量。
4、在人类生活中的应用:
目前国外各种家用电器已普通采用单片机代替传统的控制电路。
5、在其它方面的应用:
单片机除以上各方面的应用,它还广泛应用于办公自动化领域、商业营销领域、汽车及通信、计算机外部设备、模糊控制等各领域中。
为了能对单片机有更深的了解,本人设计了其典型的应用之一—音乐的应用。
本设计采用的是AT89S51芯片。
8051单片机的名字,对于初学单片机的人来说真是如雷贯耳。
8031单片机的身影在很多产品中更是屡见不鲜。
在众多的51系列单片机中,要算ATMEL公司的AT89S51更实用,因他不但和8051指令、管脚完全兼容,而且其片内的4K程序存储器是FLASH工艺的,这种工艺的存储器用户可以用电的方式瞬间擦除、改写,一般专为ATMELAT89xx做的编程器均带有这些功能。
写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。
再者,AT89S51目前的售价比8031还低,市场供应也很充足。
二、方案的选择与论证
2.1、硬件电路(按键)的方案论证
2.1.1独立式按键控制
图2.1
图2.1所示为7个独立式按键的控制,此键盘原理简单明了,直接将按键通过电阻连接P2口,这样只要判断P2对应的位的电平就可以确定是哪个键按下,此方法虽然简单,但是若想将低音1DO到高音7SI一共21个音符都表达出来,所需占用的I/O口太多,所以从效率和成本上考虑并不实际。
2.1.24*4键盘控制
图2.2
图2.2所示,是一个4*4的矩阵式键盘,其可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。
矩阵式键盘中行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V,当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平由与此行线相连的列线电平决定,这是识别按键是否按下的关键。
然而,矩阵式键盘中的行线,列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间相互影响,且其只有16个按键,不能满足控制21个音符。
所以它也不是最佳选择。
2.1.3LINKKEY(利用八个I/O口实现对28个按键的控制)
图2.3
图2.3所示,是本设计所用的LINKKEY,其工作原理如下:
将其中一个I/O口置0,这样通过判断其他口的电平是否也为低电平,若是,这相应两个口所连接的按键就是所按下的键,这是识别按键是否按下的关键。
例如,将P0.0(对应LINK0)置0,然后判断其他按键的电平,如果P0.1(对应LINK1)也为低电平,则可确定为第一个按键按下,以此类推。
根据排列组合的算法,此种连接方法(利用8个I/O口)可实现对28个按键的控制,计算公式:
N*(N-1)/2。
利用此种方法可满足该毕业设计的要求。
2.2、软件实现的方案论证
要产生所需的音频信号,从软件上考虑大体有两种实现的方案,第一种是根据音符的频率计算出其简码值(后有计算方法),然后通过查表的方式将值赋给定时器,当计满时将I/O口反相。
第二种是直接根据音符的频率计算出其周期T,在计数器计满T/2时将I/O口反相。
两种方案对比,第一种相对较为精确,本课程设计采用的是第二种方案,因为其更加简单易懂。
下面以独立式按键的形式分别两种方案的实现。
(1)计算简码值,查表方式
ORG0000H
LJMPMAIN
ORG000BH
LJMPBREAK
MAIN:
MOVTMOD,#01H;设置定时器0的工作方式
SETBEA
SETBET0;设置定时器0中断
SETBTR0;启动定时器0
WAIT1:
LCALLKEY;调用KEY子程序,判断有键按下否?
第几个键?
CLREA;屏蔽中断
CJNER3,#00H,WAIT1;如果R3=0,表示有键按下
MOVA,22H;将22H里存放的按键号送给A
RLA;因为查表里都是字,所以得乘2查得数据
MOVDPTR,#TABLE;指向表头
MOVCA,@A+DPTR;查表
MOVTH0,A;将数据高位送TH0
MOV21H,A;将高位备份
MOVA,22H;将22H里存放的按键号送给A
RLA;因为查表里都是字,所以得乘2查得数据
INCA;取低位数据
MOVCA,@A+DPTR
MOVTL0,A
MOV20H,A
WAIT2:
LCALLKEY
SETBEA
CJNER3,#00H,WAIT1
JMPWAIT2
KEY:
MOVR3,#00H;KEY子程序,判断有键按下否?
第几个键?
MOVR1,#0FFH
MOVR0,#00H
MOVA,R1
MOVP2,A
MOVA,P2
CLRC
CPLC;利用标志位CY来判断是哪个按下
MOVR2,#08H
WAIT3:
RLCA;移位判断
JNCSTORE
INCR0
DJNZR2,WAIT3
STORE:
MOV22H,R0;将按键号存22H,R3=0有键按下
MOVR3,#00H
RET
BREAK:
PUSHACC;中断产生方波,从P1.0口输出
PUSHPSW
MOVTL0,20H
MOVTH0,21H
CPLP1.0
POPPSW
POPACC
RETI
TABLE:
DW65030,64968,64898,64820,64777,64684,64580;
END
(2)直接计算周期
ORG0000H
SJMPSTART
ORG000BH
AJMPINT_0
ORG0030H
START:
MOVP1,#00H
SETBEA
SETBET0;计数器0
MOVTMOD,#02H
MOVTH1,#09CH
MOVTL1,#09CH;定时器初植
CLRTR0;定时器不允许
SCAN:
;键盘扫描
MOVA,P2;判断键盘按下,跳SCAN_1,未按,继续扫描
CJNEA,#0FFH,SCAN_1
NOP
SJMPSCAN
SCAN_1:
ACALLDELAY;是不是真的要按下?
MOVA,P2如果是,则跳转SU_KEY查询是哪个按下?
CJNEA,#0FFH,SU_KEY
NOP
SJMPSCAN
SU_KEY:
JNBP2.1,MU_1;判断是哪个键按下?
JNBP2.2,MU_2
JNBP2.3,MU_3
JNBP2.4,MU_4
JNBP2.5,MU_5
JNBP2.6,MU_6
JNBP2.7,MU_7
SJMPSCAN
MU_1:
MOVR1,#19;如果第一个按键按下,则R1=19,
SJMPNEXT同时程序转NEXT
MU_2:
MOVR1,#17
SJMPNEXT
MU_3:
MOVR1,#15
SJMPNEXT
MU_4:
MOVR1,#14
SJMPNEXT
MU_5:
MOVR1,#13
SJMPNEXT
MU_6:
MOVR1,#11
SJMPNEXT
MU_7:
MOVR1,#10
SJMPNEXT
NEXT:
MOVA,R1
MOVR0,A
SETBTR0;启动定时器0
NEXT_1:
MOVA,P2;没键按下继续执行,有键按下,返回读引脚
CJNEA,#0FFH,NEXT_1
ACALLDELAY
MOVA,P2;真的没键按下?
CJNEA,#0FFH,NEXT_1
CLRTR0;不响
AJMPSCAN;扫描键盘去
INT_0:
;中断程序
DJNZR0,RE;R0不等于0时,返回
CPLP1.0
MOVA,R1
MOVR0,A
RE:
RETI
DELAY:
MOVR7,#100;延长时间等待,键盘消抖
D1:
MOVR6,#10
D2:
DJNZR6,D2
DJNZR7,D1
RET
END
三、主要元器件的介绍
3.1、AT89S51高性能8位单片机
为了更好地理解AT89S51的特性,首先介绍我们常接触的8051。
AT89S51为ATMEL所生产的可电气烧录清洗的8051相容单芯片,其内部程序代码容量为4KB。
8051主要功能列举如下:
□为一般控制应用的8位单芯片
□晶片内部具时钟振荡器(传统最高工作频率可至12MHz)
□内部程式存储器(ROM)为4KB
□内部数据存储器(RAM)为128B
□外部程序存储器可扩充至64KB
□外部数据存储器可扩充至64KB
□32条双向输入输出线,且每条均可以单独做I/O的控制
□5个中断向量源
□2组独立的16位定时器
□1个全多工串行通信端口
□8751及8752单芯片具有数据保密的功能
□单芯片提供位逻辑运算指令
□VCC8051电源正端输入,接+5V。
□VSS电源地端。
□XTAL1单芯片系统时钟的反相放大器输入端。
□XTAL2
系统时钟的反相放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。
□RESET
8051的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,8051便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
□EA/Vpp
"EA"为英文"ExternalAccess"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。
如果是使用8751内部程序空间时,此引脚要接成高电平。
此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
□ALE/PROG
ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。
8051可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为8051是以多工的方式送出地址及数据。
平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。
此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
□PSEN
此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。
8051可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。
□PORT0(P0.0~P0.7)
端口0是一个8位宽的开路汲极(OpenDrain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。
其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。
如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。
设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。
□PORT2(P2.0~P2.7)
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。
P2除了当做一般I/O端口使用外,若是在8051扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。
□PORT1(P1.0~P1.7)
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LSTTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。
如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。
□PORT3(P3.0~P3.7)
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
其引脚分配如下:
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,外部数据存储器的读取信号。
(1)累加器A(Accumulator)
写程序时大部分的指令运算都通过此寄存器,包括数据转移、储存运算结果和条件转移判断。
(2)B寄存器
此寄存器主要用于乘法及除法指令中,在乘法运算中存放乘积结果的高字节数据;在除法运算中则存放余数。
当然也可以做一般寄存器来使用。
(3)程序状态字PSW(ProgramStatusWord)
此寄存器用来存放CPU的状态,类似一般CPU的标志寄存器,使用者可以改变其值来控制CPU的执行。
(4)堆叠指针SP
为8位的寄存器,用以指示目前堆叠区的存放位置,堆叠区最多只有256,而且一定在内部RAM中,当8051系统重置后SP指向07H,因此程序一执行时通常会将堆叠往后移,避免程序执行时把堆叠破坏掉。
(5)数据指针DPTR(DataPointer)
DPTR是一个16位寄存器,由DPH及DPL两寄存器组成,系统DPTR可以看成是16位寄存器寻址到完整的64K存储器空间或是看成两个8位寄存器来加以利用。
一旦当成16位寄存器便可利用指令MOVXA,@DPTR来存取外部数据存储器,或利用指令MOVCA,@DPTR来存取外部程序存储器。
(6)P0、P1、P2、P3(端口0~端口3)
为80514个I/O端口的输出锁存寄存器。
(7)TH0、TL0、TH1、TL1定时/计数寄存器
分别为定时器0及定时器1的工作寄存器,这二对寄存器可以做16位的计时计数用。
(8)串行端口缓冲器SBUF(SerialBuffer)
用来存放串行传输时数据进出的工作寄存器,经由串行端口传送数据出去是将数据写入SBUF,而接收时则由SBUF内读出对方传送来的数据。
(9)控制寄存器
IP、IE寄存器是做8051的中断控制用;TMOD、TCON寄存器用来做计时计数器控制;SCON则控制串行传输的工作模式设定。
PCON则做8051省电模式操作控制。
8051内部控制寄存器只有6个,想要充分发挥8051单芯片的功能必须对这些暂存器有所了解。
IE、IP寄存器:
中断控制用
可位寻址,地址:
A8H
EA(IE.7):
EA=0时,所有中断禁用(中断不产生)。
EA=1时,各中断之产生由个别的启用位决定。
─(IE.6):
保留。
ET2(IE.5):
启用定时器2溢位之中断(8052使用)。
ES(IE.4):
启用串行端口之中断(ES=1启用,ES=0禁用)。
ET1(IE.3):
启用定时器1中断。
EX1(IE.2):
启用外部中断INT1之中断。
ET0(IE.1):
启用定时器0中断。
EX0(IE.0):
启用外部中断INT0之中断。
TMOD、TCON寄存器:
计时计数器用
不可位寻址,地址89H。
TMODD7D6D5D4D3D2D1D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
└─────定时器1──┘└─────定时器0──┘
GATE:
定时器动作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才会动作。
若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1即可动作。
C/T:
做定时器或计数器功能之选择位。
C/T=1为计数器,由外部引脚T0或T1输入计数脉冲。
C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。
M1:
模式选择位1。
M0:
模式选择位0。
可位寻址,地址88H。
TF1(TCON.7):
定时器1溢位标志,当计时溢位时,由硬件设定为1,在执行过相对的中断服务常式后则自动清除为0。
TR1(TCON.6):
定时器1启动控制位,可以由软件来设定或清除。
TR1=1时启动定时器动作,TR1=0时关闭。
TF0(TCON.5):
定时器0溢位标志,当计时溢位时,由硬件设定为1,在执行过相对的中断服务常式后则自动清除为0。
TR0(TCON.4):
定时器0启动控制位,可以由软件来设定或清除。
TR0=1时,启动定时器动作,TR0=0时关闭。
IE1(TCON.3):
外部中断1动作标志,当外部中断被侦测出来时,硬件自动设定此位,在执行过中断服务常式后,则消除为0。
IT1(TCON.2):
外部中断1动作型式选择,IT1=1时,由下降缘产生外部中断,IT1=0时,则为低电平产生中断。
IE0(TCON.1):
外部中断0动作标志,当外部中断被侦测出来时,硬件自动设定此位,在执行过中断服务常式后,则清除为0。