《片单机课程设计电子音调发生器--大学毕设论文.doc》由会员分享,可在线阅读,更多相关《片单机课程设计电子音调发生器--大学毕设论文.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机课程设计设 计 报 告电子音调发生器 2016年 4 月 29 日目录1 课程设计总体目标- 2 -1.1 课题的意义- 2 -1.2 系统的主要功能- 2 -1.3 本人所做的工作- 2 -2 实验原理及设计思路- 3 -2.1 乐曲的音调与节拍- 3 -2.2 红外检测原理- 3 -3 硬件电路设计及描述- 4 -3.1 硬件连接图- 4 -3.2 单片机系统- 5 -3.3 数码管显示电路- 6 -3.4 蜂鸣器电路- 6 -4 软件设计流程及描述- 7 -4.1 蜂鸣器发单音- 7 -4.2 蜂鸣器唱歌- 7 -4.3 数码管动态显示- 7 -4.4 程序框图- 8 -4.5 源
2、程序代码及注释- 9 -5 实验结果- 26-1 总体设计1.1 课题的意义(1) 通过这个实际的课题,熟悉51单片机的开发环境,熟悉JD-51的硬件电路图,并能通过三种调试模式来调试程序,为日后进行一些基于单片机的系统开发打下基础;(2) 掌握使用常用的汇编指令进行51单片机的程序设计,建立严谨的逻辑思维来编写程序,学会画程序框图来帮助编程。(3) 通过使用蜂鸣器来产生相应音调的声音,进一步巩固课上学到的定时器初始化、赋初值、通过查询方式来产生一定频率方波的编程方法;(4) 掌握使数码管扫描显示数字的方法,并同时让LED灯亮或灭,学会如何让蜂鸣器发出不同频率的声音;(5) 了解NEC协议下的
3、红外编码格式,能够使用单片机来解码收到的红外信号,并读取信号中相应的信息。1.2 系统的主要功能电子音调发生器(1)利用JD51开发板上的按键S1S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1S4 及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。(2)编写2支歌曲,并可进行选择播放。1.3 本人所做的工作通过学习课程平台上给出的红外和电子音调发生器这两个程序,将电子音调发送器中关于按键扫描的部分换为对接收到的32位红外信号数据中数据码的反码进行按键判断跳转相应歌曲或音调子程序。2 实验原理及设计思路2.1 乐曲的音调与节拍音调由不同频率的方波产生,音调与频率的
4、关系如下表所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在JD-51单片机上,产生方波的I/O脚选用P2.4,P2.4口与蜂鸣器相连,这样通过P2.4口输出不同频率的方波就能控制蜂鸣器发出不同音调的声音。音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。音调1234567I频率/Hz26229433034939
5、2440494523XF921F9E1FA8CFAD8FB68FBE9FC5BFC8F表1 音调和发音频率及定时器初值X的对应在定时器工作在工作方式1时每个音节相应的定时器初值x可按下法计算(1/2)(1/f)=(12/fosc)(216-x)x=216-(fosc/24f) (1)其中,f是音调频率,JD-51单片机的晶振fosc=11.0592Mhz。曲调值DELAY调4/4125ms调3/4187ms调2/4250ms表2 各节拍延时时间对应关系3 硬件电路设计及描述3.1 硬件连接图系统的硬件连接图包括,晶振电路,复位电路,数码管显示电路,红外发送和接收电路,蜂鸣器电路,硬件连接如下图
6、所示:图4 红外高级电子琴硬件连接图3.2 单片机系统ATMEL公司生产的AT89S52单片机是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。具体连接如下:图5 单片机系统的时钟电路图6 单片机系统的复位电路3.3 数码管显示电路显示电路采用4个共阳极数码管,P0口作为数码管的输入,P2.0、P2.1、P2.2、 P2.3分别控制四个数码管的亮与不亮,P0口控制数码管亮的是数字几。图7 数码管连接图3.4 蜂鸣器电路我们用的蜂鸣器是直流蜂鸣器,驱动简单,一旦在引脚上加入直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的,它与单片机的连接方式如下图所示。B
7、uzzer与P2.4相连,P2.4输出不同频率的方波信号,蜂鸣器就会发出不同的声音。如果控制输出信号的频率和音长,蜂鸣器则会发出音乐。图8 蜂鸣器电路图4 软件设计流程及描述4.1 蜂鸣器发单音根据不同音调的频率值算出该给定时器赋的初值,利用定时溢出后P2.4口电平的翻转来产生和音调频率相同的方波,虽然不是正弦波,听起来有点不自然,但也能听出1234567i这8个音调。4.2 蜂鸣器播放歌曲蜂鸣器播放歌曲是基于节拍表和音符表的基础上的,其基本原理与发出单个频率的声音类似,只不过确定了单个频率发声的时长即节拍长,和不同频率发声的顺序,可以通过查表的方式来使定时器产生不同频率的方波,加入设定好的节
8、拍,就相当于延时,便可以听到音乐。4.3 数码管动态显示所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调时间参数,可以既保证亮度,又保证显示。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组
9、稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的资源,而且功耗更低。开始4.4 程序框图将开关状态送P3.2,P3.3,P3.4,P3.1,P3.6查询键盘按键状态跳转到相应子程序令P3.5口发出相应频率的方波图9 电子音调发生器流程图4.5 源程序代码及注释/*- = 电子音调发生器 =*程序功能说明*通过s1,s2,s3,s4四个按键组合,根据按键组合值让蜂鸣器播放1234567i相应的音调,以及两首歌*/ORG 0000HLJMP KEYP0KEYP0: MOV R0,#00H ; CLR TR0 ; SETB P2.4 ;关蜂鸣器 CLR P2.0 CLR
10、 P2.1 CLR P2.2 CLR P2.3 ;关用于表示音调的数码管 SETB P2.0 ;关用于表示模式的数码管 WU: MOV R0,P3 ;扫描键盘输入 CJNE R0,#0FFH,KEYPO1 ;有输入时跳转 JMP KEYP0KEYPO1:CJNE R0,#0FBH,KEYPO2 ; SETB P2.4 ;蜂鸣器置于高电平 MOV R3,#200MAIN01:MOV TMOD,#01H ;初始化,工作方式1 MOV TL0,#21H ;写入计数初值 MOV TH0,#0F9H SETB TR0 ;启动计数 WAIT1:JNB TF0,WAIT1 CLR TF0 CPL P2.4
11、;蜂鸣器响 CLR P2.3 ;数码管显示1 MOV A,#11111001B MOV P0,A DJNZ R3,MAIN01 LJMP KEYP0 ;返回程序KEYP0 KEYPO2:CJNE R0,#0F7H,KEYPO3 ; SETB P2.4 ;蜂鸣器置于高电平 MOV R3,#200 MAIN02:MOV TMOD,#01H MOV TL0,#0E1H ;写入计数初值 MOV TH0,#0F9H SETB TR0WAIT2:JNB TF0,WAIT2 CLR TF0 CPL P2.4 ;蜂鸣器响 CLR P2.3 ; MOV A,#10100100B MOV P0,A DJNZ R3
12、,MAIN02LJMP KEYP0KEYPO3:CJNE R0,#0EFH,KEYPO4 ; SETB P2.4 ;蜂鸣器置于高电平 MOV R3,#200MAIN03:MOV TMOD,#01H MOV TL0,#08CH MOV TH0,#0FAH SETB TR0WAIT3:JNB TF0,WAIT3 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#10110000B MOV P0,A DJNZ R3,MAIN03LJMP KEYP0KEYPO4:CJNE R0,#0DFH,KEYPO5 ; SETB P2.4MOV R3,#200MAIN04:MOV TMOD,#01
13、H MOV TL0,#0D8H MOV TH0,#0FAH SETB TR0WAIT4:JNB TF0,WAIT4 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#10011001B MOV P0,A DJNZ R3,MAIN04LJMP KEYP0KEYPO5:CJNE R0,#0F3H,KEYPO6 ; SETB P2.4MOV R3,#200 MAIN05:MOV TMOD,#01H MOV TL0,#068H MOV TH0,#0FBH SETB TR0WAIT5:JNB TF0,WAIT5 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#10010
14、010B MOV P0,A DJNZ R3,MAIN05LJMP KEYP0KEYPO6:CJNE R0,#0E7H,KEYPO7 ; SETB P2.4MOV R3,#200 MAIN06:MOV TMOD,#01H MOV TL0,#0E9H MOV TH0,#0FBH SETB TR0WAIT6:JNB TF0,WAIT6 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#10000010B MOV P0,A DJNZ R3,MAIN06LJMP KEYP0KEYPO7:CJNE R0,#0CFH,KEYPO8 ; SETB P2.4MOV R3,#200 MAIN07:
15、MOV TMOD,#01H MOV TL0,#05BH MOV TH0,#0FCH SETB TR0WAIT7:JNB TF0,WAIT7 CLR TF0 CPL P2.4 CLR P2.3 MOV A,#11111000B MOV P0,A DJNZ R3,MAIN07LJMP KEYP0KEYPO8:CJNE R0,#0DBH,KEYPO9 ; SETB P2.4 MOV R3,#200 MAIN08:MOV TMOD,#01H MOV TL0,#08FH MOV TH0,#0FCH SETB TR0WAIT8:JNB TF0,WAIT8 CLR TF0 CPL P2.4 CLR P2.3
16、 MOV A,#10000000B MOV P0,A DJNZ R3,MAIN08LJMP KEYP0KEYPO9:CJNE R0,#0EBH,KEYPO10 ;跳转到第一首歌程序 LJMP MUSTART1KEYPO10:CJNE R0,#0D7H,JIELI ;跳转到第二首歌程序 LJMP MUSTART2 JIELI:JMP KEYP0 ;返回主程序 MUSTART1: ;播放第一首歌 MOV R0,#00H ;将节拍表指针置零 MOV R1,#00H ;将音符表指针置零 RTAB:MOV A,R0 MOV DPTR,#RYTH MOVC A,A+DPTR ;利用查表法将一个节拍数据取出
17、放R2计数器中 MOV R2,ATTAB:MOV A,R1 MOV DPTR,#TONE MOVC A,A+DPTR MOV R3,A ;取出音符表高8位 INC R1 ;指针加1 MOV A,R1 MOV DPTR,#TONE MOVC A,A+DPTR MOV R4,A ;取出音符表低8位 SETB P2.4 ;输出相应音调的方波 LOOP:MOV R5,#3BHMAIN:MOV TMOD,#01H MOV TL0,R4 MOV TH0,R3 SETB TR0WAIT:JNB TF0,WAIT CLR TF0 CPL P2.4MAYA:JB P3.2,MAYB ;判断P3.2口是否有为1
18、JB P3.4,MAYB ;判断P3.4口是否有为1 LJMP RA ;P3.4口为0则跳转到程序RA MAYB:JB P3.3,JIELI ;判断P3.3口是否有为1 JB P3.5,JIELI ;判断P3.5口是否有为1 LJMP MUSTART2 ;P3.5口为0则放第二首歌 RA: DJNZ R5,MAIN ;无打断则继续放第一首歌 DJNZ R2,LOOPINC R0 ;两个表的指针都加1 INC R1CJNE R1,#88,RTAB ;判断是否取完 LJMP KEYP0TONE:DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FC
19、H,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FHDB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68HDB 0FAH,0DBH,0FAH,8CH,0F9H,21H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68HDB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BHDB 0FCH,8FH,
20、0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFHRYTH:DB 04,04,04,04,04,04,04,04,04,04DB 04,05,04,04,04,04,04,04,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,04MUSTART2: MOV R0,#00H MOV R1,#00HRTAB2: MOV A,R1 MOV DPTR,#TABLE1 MOVC A,A+DPTR MOV R2,
21、ATTAB2: MOV A,R1 MOV DPTR,#TONE2 MOVC A,A+DPTR MOV R3,A INC R1 MOV A,R1 MOV DPTR,#TONE2 MOVC A,A+DPTR MOV R4,A SETB P2.4LOOP2: MOV R5,#9BHMAIN2: MOV TMOD,#01H MOV TL0,R4 MOV TH0,R3 SETB TR0WAITR:JNB TF0,WAITR CLR TF0 CPL P2.4MAYA1:JB P3.3,MAYB1 JB P3.5,MAYB1 LJMP RBMAYB1:JB P3.2,BACK JB P3.4,BACK LJ
22、MP MUSTART1BACK:LJMP JIELIRB: DJNZ R5,MAIN2 DJNZ R2,LOOP2 INC R0INC R1CJNE R1,#64,RTAB2LJMP KEYP0TONE2:DB 0FBH,68H,0FDH,6EH,0FDH,45H,0FCH,0EFH,0FCH,8FH,0FCH,8FH,0FCH,8FH,0FCH,5BH,0FCH,8FHDB 0FCH,0EFH,0FDH,45H,0FBH,68H,0FBH,68H,0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H,0FBH,68HDB 0FAH,0DBH,0FAH,8CH,0F9H,2
23、1H,0FAH,8CH,0FAH,0D8H,0FBH,68H,0FBH,68H,0FBH,68H,0FBH,68HDB 0FBH,0E9H,0FBH,0E9H,0FBH,68H,0FBH,0E9H,0FCH,5BH,0FAH,8CH,0FCH,8FH,0FCH,8FH,0FCH,5BHDB 0FCH,8FH,0FCH,0EFH,0FCH,0EFH,0FCH,0EFH,0FCH,8FH,0FDH,45H,0FDH,6EH,0FCH,0EFHTABLE1:DB 04,04,04,04,04,04,04,04,04,04DB 04,05,04,04,04,04,04,04,04,04DB 04,04
24、,04,06,04,04,04,07,04,04DB 04,04,04,06,04,04,04,07,04,04DB 04,04,04,04 END【电子音调发生的部分C语言程序】/*键盘输入函数*/uchar keyscan(uchar key)if(K1=1&K2=1&K3=1&K4=1) /初始化delay(20);if(K1=1&K2=1&K3=1&K4=1)key=0;if(K1=0&K2=1&K3=1&K4=1) /1音,SB1按下delay(20);if(K1=0&K2=1&K3=1&K4=1)key=1; if(K1=1&K2=0&K3=1&K4=1) /2音,SB2按下del
25、ay(20);if(K1=1&K2=0&K3=1&K4=1)key=2;if(K1=1&K2=1&K3=0&K4=1) /3音,SB3按下delay(20);if(K1=1&K2=1&K3=0&K4=1)key=3; if(K1=1&K2=1&K3=1&K4=0) /4音,SB4按下delay(20);if(K1=1&K2=1&K3=1&K4=0)key=4;if(K1=0&K2=0&K3=1&K4=1) /5音,SB1和SB2按下delay(20);if(K1=0&K2=0&K3=1&K4=1)key=5;if(K1=1&K2=0&K3=0&K4=1) /6音,SB2和SB3按下delay(
26、20);if(K1=1&K2=0&K3=0&K4=1)key=6;if(K1=1&K2=1&K3=0&K4=0) /7音,SB3和SB4按下delay(20);if(K1=1&K2=1&K3=0&K4=0)key=7;if(K1=0&K2=1&K3=1&K4=0) /i音,SB1和SB4按下delay(20);if(K1=0&K2=1&K3=1&K4=0)key=8;if(K1=0&K2=1&K3=0&K4=1) /第一首歌,SB1和SB3按下delay(20);if(K1=0&K2=1&K3=0&K4=1)key=9;if(K1=1&K2=0&K3=1&K4=0) /第二首歌,SB2和SB4按下delay(20);if(K1=1&K2=0&K3=1&K4=0)key=10;return (key);/*延时函数*/ void delay(uint t)uint i,j;for(i=0;it;i+)for(j=0;j250;j+);5 实验结果 电子音调发生器:下图是我按下S4时数码管显示“4”,蜂鸣器发出音调“4”,按下其它按键或按键组合出现类似结果。图11 电子音调发生器运行图- 16 -