院 系;电气信息工程学院
班 级;10通信工程三班
* ****
指导老师:
设计周数:一周
一设计题目:
设计一简易电子琴,要求能够发出1、2、3、4、5、6、7等七个音符。
使用元件:ATC51、LM324,喇叭,按键等
二设计目的
(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,对其进行测试与检查。
(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。
(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
三设计思路
在本次课程设计中,根据复杂程序设计思想——模块化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。
程序设计的思路按以下顺序进行:
1.分析与确定程序总体设计目标
2.将总体目标划分为若干模块
3.定义每个模块的具体任务,明确它与其他模块间的通信方式
4.编写源程序,进行调试
四、设计原理、思路及流程图
设计原理
(1)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A, 即可在其输出端得到一定的电压输出。给D/A转换器输入按正弦规律变化的数据, 在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。
各音阶标称频率值:
(2)由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
原理:
系统硬件图
流程图:
。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216--5﹡105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,:
五 实验源程序
方案一:产生按键音符
ORG 0000H
M设置定时器0的工作方式
SETB ET0 ; 设置定时器0中断
SETB TR0 ; 启动定时器0
W调用KEY子程序,判断有键按下否?第几个键?
CLR EA ;屏蔽中断
CJNE R3,#00H,WAIT1 ;如果R3=0,表示有键按下
MOV A,22H ;将22H里存放的按键号送给A
RL A ; 因为查表里都是字,所以得乘2查得数据
MOV DPTR,#TABLE ;指向表头
MOVC A,@A+DPTR ; 查表
MOV TH0,A ;将数据高位送TH0
MOV 21H,A ; 将高位备份
MOV A,22H ;将22H里存放的按键号送给A
RL A ;因为查表里都是字,所以得乘2查得数据
INC A ;取低位数据
WAIT2: LCALL KEY
KEY: MOV R3,#00H ; KEY子程序,判断有键按下否?第几个键?
CPL C ;利用标志位CY来判断是哪个键按下
W移位判断
INC R0
S将按键号存22H,R3=0有键按下
B中断产生方波,从P1.0口输出
TABLE: DW 65030,968,8,820,777,684,580 ; 7,6,5,4,3,2,1
方案二:产生按键音符
START: MOV P1,#00H
SETB ET0 ;计数器0
MOV TL1,#09CH ;定时器初植
CLR TR0 ;定时器不允许
S键盘扫描
MOV A,P2 ;判断键盘按下,跳到SCAN_1,若未按,继续扫描
SCAN_1:ACALL DELAY ;是不是真的要按下?如果是,则跳转SU_KEY查询是哪个按下?
S判断是哪个键按下?
信号周期
M如果第一个按键按下,则R1=19,同时程序转NEXT
MU_3: MOV R1,#15
MU_4: MOV R1,#14
MU_5: MOV R1,#13
MU_6: MOV R1,#11
MU_7: MOV R1,#10
SETB TR0 ;启动定时器
N没键按下继续执行,有键按下,返回读引脚
MOV A,P2 ;真的没键按下?
CLR TR0 ;不响
AJMP SCAN ;扫描键盘去
中断程序
DJNZ R0,RE ;R0不等于0时,返回
D延长时间等待,键盘消抖
生日快乐歌:(扩展功能部分程序)
M;设置定时器0工作方式
MOV IE,#82H ;设置中断
MAIN0:MOV 30H,#00H
NEXT: MOV A,30H
MOV DPTR,#TABLE ;查表
SING: DEC A
MOV DPTR,#TABLE1 ;查表
T;中断服务程序
D;延时187ms
W2: MOV R4,#187
W3: MOV R3,#248
T;音符计数植
DW 65157,65178,65217
;节拍表
DB 0C4H,0B4H,04H
DB 0C4H,0B4H,04H
DB 0C4H,0B4H,04H
END
六、实验总结:
经过这个课程设计,虽然时间比较短,完成任务的效果不是很理想,但是既然自己尝试
过,就肯定学到了不少东西,也真正体会到做电子设计行业工作的辛苦,不过自己收获还是挺大的。
这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较综合。
经过短短一周的课程设计,我认识到,课程设计能真正让人学到实际应用的东西的一门课程。收获比上几星期课还多。
首先,要实现题目要求的功能并有所创新,我们必须全心地投入其中,养成一种敢于钻研敢于创新的习惯。在把课程要求实现到实际中来的过程中,首先必须清楚明白地了解几个参考程序的每一行的意思,这就需要敢于静心钻研。为了把使得程序更加完整,就必须进行创新,这就需要敢于创新。
其次,通过课程设计,让我在课本的基础上,更深入的了解了各种芯片的用法和程序的完成过程,调试方法及技巧。为了了解键盘,查找了不少单片机的资料,了解了键盘的初始化,存取缓存,扫描键盘,读取键码以及键码和显示码之间的转换。为了实现基本功能,认真研究了参考程序的意义,了解了电子琴的不同音阶放音功能的实现,长短音的实现,更深入了解了单片机的使用方法。
编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。调试程序中,学习了DEBUG 的使用,DEBUG对检查程序的错误作用很大。同时,也要灵活使用各种调试方法,来缩小寻找错误的范围。
检查程序过程中,在充分思考的基础上多次实验是检查改正程序的良方。在设计扩展功能的过程中,大胆想像并且用多种思路来求解实现目标是必备的武器。
参考文献:
《单片机应用及C51程序设计》 机械工业出版社
《单片机原理与实践指导》 中国电力出版社
《电子线路CAD》北京大学出版社
《电子线路CAD设计》电子工业出版社
《51单片机开发与应用技术详解》电子工业出版社