课设报告1简易电子琴_第1页
课设报告1简易电子琴_第2页
课设报告1简易电子琴_第3页
课设报告1简易电子琴_第4页
课设报告1简易电子琴_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告课程设计名称: 单片机课程设计 课程设计题目 :单片机简易电子琴设计专业班级: 测控技术与仪器1101班 姓 名: 管文龙 学 号:110401119 实验室号: 信息楼220 实验组号: 20 实验时间: 2013.12.30-2014.1.10 批阅时间: 指导教师: 许会 成 绩: 1. 题目名称单片机简易电子琴设计2. 课设目的 掌握KEILuv下汇编语言的调试方法 了解单片机简单应用系统的研发及调试过程 掌握定时器的功能并能使用定时器产生音频从而使单片机板实现电子琴功能 3. 课设内容、在口线P1.7,通过20uf电解连接0.25W扬声器再接VCC、编写软件由键盘控制单片

2、机定时器的溢出频率符合下表,由口线P1.7输出C调音符561234567Hz392440494524660698784880988、选择演奏两支简单乐曲 掌握串口调试助手的使用,在m2t2上实现单片机串口通信注释:外接扬声器声音很小,需要外接功率放大电路,而单片机带有一蜂鸣器,可以用单片机上的蜂鸣器代替扬声器,因此定时器的脉冲输出端口为P2.6;在按键时,蜂鸣器响应相应的音符,数码管显示相应的数字。 4. 课设方案(1) 定时器控制音符频率原理 乐音实际上是有固定周期的信号,用单片机的一个定时器(如T0)控制,在P2.6输出方波周期信号,产生乐音。根据不同的按键,调节T0的溢出时间,可输出不同

3、频率的乐音。 如果要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P2.6反相,然后在定时器中重新装入初值,重复计时再反相。就可在P2.6引脚上得到此频率的脉冲。 用定时器T0实现定时,并使其工作在计数模式1下,改变TH0、TL0的初值以产生不同频率从而产生不同音阶。 例如,SO的频率是784HZ,单片机机器周期为MC=12/22.1184MHZ=0.542us,所以定时器应计的数为: SO音符周期=1/784=1275us 因此可得定时器初值为: 65536-1275/2/0.542=FB68H 故可得音符与

4、计数初值对应表,如下: 表1 C调音符561234567初值0F6D1H0FBD1H0F7B6H0F921H0FA8CH0FAD8H0FB68H0FBE9H0FC5BH (2) 课设思路 单片机有8个按键,根据表1,分别控制K1K7发出中音DOSI,这样便可手动演奏简单乐曲,控制K8自动播放简单乐曲祝你生日快乐。另外,接通电源,当手动按键演奏时,对应数码管显示相应数字。(3)实现功能 、手动演奏简单乐曲、自动播放简易乐曲、数码管显示5.课设总结 程序清单及注释 DCLK BIT P3.4 ;串行数据时钟,上升沿有效 DIN BIT P3.3 ;串行数据输入 LOAD BIT P2.3 ;串行命

5、令加载,上升沿有效 DOUT BIT P2.2 ;键盘中断和键值数据输出 SPEAKER BIT P2.6 ORG 0000H LJMP MAIN ORG 0030HMAIN: ACALL CH451_INT1;调用CH451_INT1 ACALL DSP ;调用DSP MOV SP,#60H;设置堆栈指针 MOV 30H,#00H;定时器初值清零 MOV 31H,#00H MOV TMOD,#01H;定时器T0工作在工作模式1下 SETB EA SETB ET0 CLR TR0PLEASE: ACALL SCAN;调用键盘扫描子程序 SJMPPLEASE SJMP $CH451_INT1:

6、CLR DIN ; 置低电平 ,通知ch451使能4线串行接口 SETB DCLK;设置默认高电平 SETB DIN;设置默认高电平 SETB LOAD;设置默认高电平 SETB DOUT;设置默认高电平 CLR IT0 SETB PX0 SETB EX0 MOV B,#04;H设定系统参数,启动键盘和显示 MOV A,#03H ACALL WRITE RETWRITE: CLR LOAD;操作命令开始 MOV R3,#08H WRITE1: CLR DCLK RRC A;进位循环右移,将ACC中8位送出 MOV DIN,C SETB DCLK; DCLK上升沿时CH451从DIN输入数据 D

7、JNZ R3,WRITE1;将A中放入的8位送出,低位在前高位在后 MOV A,B MOV R3,#04H WRITE2: CLR DCLK RRC A MOV DIN,C SETB DCLK DJNZ R3,WRITE2;将B中放入的4位送出,低位在前,高位在后 SETB LOAD;包括一个上升沿的低脉冲,加载12位寄存器中的数据 RETDSP: MOVB,#0FH;加载字数据7MOVA,#0BEH;数字0的字形码传送给AACALLWRITE;调用WRITE函数 MOVB,#0EHMOVA,#0BEHACALLWRITEMOVB,#0DHMOVA,#0BEHACALLWRITE MOVB,#

8、0CHMOVA,#0BEHACALLWRITE MOVB,#08HMOVA,#0BEHACALLWRITEMOVB,#0BHMOVA,#0BEHACALLWRITEMOVB,#09HMOVA,#0BEHACALLWRITEMOVB,#0AHMOVA,#0BEHACALLWRITERETSCAN: MOV R2,#36;设置定时器计数脉冲个数 MOV C,DOUT ;有按键按下时,使DOUT产生低电平中 JC SCAN 断然后进行键盘扫描确认 ACALL READ ;调用READ函数读取键值 KEY1: CJNE A,#40H,KEY2;若KEY1按下,顺序进行; 否则跳转到KEY2 MOV 3

9、0H,#0F7H;设置DO的初值 MOV 31H,#0B6H MOV B,#0FH;加载字数据7 MOV A,#18H;第一个数码管显示1 LJMP SETBTIMER;跳转到SETBTIMER处,执行发音程序KEY2: CJNE A,#43H,KEY3 MOV 30H,#0F9H MOV 31H,#22H MOV B,#0EH MOV A,#0EAH LJMP SETBTIMERKEY3: CJNE A,#41H,KEY4 MOV 30H,#0FAH MOV 31H,#8DHMOV B,#0DHMOV A,#0E6H LJMP SETBTIMERKEY4: CJNE A,#42H,KEY5

10、MOV 30H,#0FAH MOV 31H,#0D9HMOV B,#0CHMOVA,#74H LJMP SETBTIMERKEY5: CJNE A,#48H,KEY6 MOV 30H,#0FBH MOV 31H,#69HMOVB,#08HMOVA,#0D6H LJMP SETBTIMERKEY6: CJNE A,#4BH,KEY7 MOV 30H,#0FBH MOV 31H,#0EAHMOVB,#0BHMOVA,#0DEH LJMP SETBTIMERKEY7: CJNE A,#49H,KEY8 MOV 30H,#0FCH MOV 31H,#5CHMOVB,#09HMOVA,#0A4H LJM

11、P SETBTIMERKEY8: CJNE A,#4AH,LP;若KEY8按下,顺序执行; 否则跳转到LP执行 LJMP START1NULL:RETLP: AJMP NULLREAD: CLR LOAD MOV A,#07H MOV R3,#04HREAD1: CLR DCLK RRC A MOV DIN,C SETB DCLK DJNZ R3,READ1 SETB LOAD CLR A MOV R7,#07HREAD2: MOV C,DOUT CLR DCLK RLC A SETB DCLK DJNZ R7,READ2 RETSETBTIMER:MOV TH0,30H ;赋定时器初值 MO

12、V TL0,31H SETB TR0 ;启动定时器T0 JNB TF0,$;TF=0,等待;TF=1,顺序执行CLRTF0;清除中断标志位CLRTR0;关闭低能定时器T0CPLSPEAKER;扬声器取反DJNZR2,SETBTIMER;循环计,产生多个脉冲ACALLWRITE;调用WRITE函数AJMPSCAN START1: ACALLDSP MOV DPTR,#MUSIC;把乐曲MUSIC的地址赋给DPTRCOUT: CLR A MOVC A,A+DPTR;把每个音符初值的高位取出送给 CJNE A,#00,CHK;A=0,顺序执行;否则跳转到CHK执行 AJMP NULLCHK: PUS

13、H ACC;把A压入堆栈CLRAINCDPTRMOVCA,A+DPTRMOVB,APOP ACC;把A弹出堆栈 CHK1: CJNE A,#01,CHK2;A=01,顺序执行;否则跳转到DO1执行 AJMP DO1CHK2: CJNE A,#02,CHK3 AJMP RE1CHK3: CJNE A,#03,CHK4 AJMP MI1CHK4: CJNE A,#04,CHK5 AJMP FA1CHK5: CJNE A,#05,CHK6 AJMP SO1CHK6: CJNE A,#06,CHK7 AJMP LA1CHK7: CJNE A,#07,CHK0 AJMP SI1CHK0: CJNE A,

14、#00,CONT2 AJMP SCANCONT2: INC DPTR SJMP COUTDO1: MOVR3,#36 DO11: MOV TH0,#0F7H;设置DO音阶的初值 MOV TL0,#0B6HSETB TR0;启动定时器T0 JNB TF0,$;TF=0,等待;TF=1,顺序执行CLRTF0;清除中断标志位 CLRTR0;关闭低能定时器T0 CPLSPEAKERDJNZR3,DO11;循环计,产生多个脉冲LL1:ACALLDELAY;调用延时子程序DJNZB,LL1;B不为0;跳转到LL1处执行; B为0,顺序执行INCDPTR AJMP COUT RE1: MOVR3,#36RE

15、22:MOV TH0,#0F9HMOV TL0,#22HSETB TR0 JNB TF0,$CLRTF0CLRTR0CPLSPEAKERDJNZR3,RE22LL2:ACALLDELAYDJNZB,LL2INCDPTR AJMP COUT MI1: MOVR3,#36MI33: MOV TH0,#0FAH MOV TL0,#8DHSETB TR0 JNB TF0,$ CLRTF0 CLRTR0 CPLSPEAKERDJNZR3,MI33LL3:ACALLDELAYDJNZB,LL3INCDPTR AJMP COUT FA1: MOVR3,#36FA44:MOV TH0,#0FAH MOV TL

16、0,#0D9HSETB TR0 JNB TF0,$CLRTF0CLRTR0CPLSPEAKERDJNZR3,FA44LL4:ACALLDELAYDJNZB,LL4INCDPTR AJMP COUT SO1: MOVR3,#36SO55: MOV TH0,#0FBH MOV TL0,#69H SETB TR0 JNB TF0,$CLRTF0CLRTR0CPLSPEAKERDJNZR3,SO55LL5:ACALLDELAYDJNZB,LL5INCDPTR AJMP COUT LA1: MOVR3,#36LA66: MOV TH0,#0FBH MOV TL0,#0EAHSETB TR0 JNB TF

17、0,$CLRTF0CLRTR0CPLSPEAKERDJNZR3,LA66LL6:ACALLDELAYDJNZB,LL6INCDPTR AJMP COUT SI1: MOVR3,#36SI77: MOVTH0,#0FCH MOV TL0,#5CH SETB TR0 JNB TF0,$CLRTF0CLRTR0CPLSPEAKERDJNZR3,SI77LL7:ACALLDELAYDJNZB,LL7INCDPTR AJMP COUT DELAY: MOV R6,#244;延时子程序DL1: MOV R7,#255DL2: DJNZ R7,DL2 DJNZ R6,DL1 RETMUSIC: DB 05,

18、04H,05,04H,06,08H,05,08H,01,08H,07,10H,05,04H,05,04H DB06,08H,05,08H,02,08H,01,08H,05,04H,05,04H,05,08H,03,08H DB01,08H,07,08H,06,08H,04,04H,04,04H,00END(2)程序流程图键盘扫描开中断进数码管显示程序开始定时器初值清零,设置定时器在工作方式1下设定系统参数,启动键盘和显示数码管显示00H有键按下否 总程序流程图 N Y YK7按下K8按下K6按下K5按下K4按下K3按下K2按下K1按下发FA音,数码管显示4发MI音,数码管显示3发RE音,数码管显示2 发DO音,数码管显示1 发SI音,数码管显示7自动播放乐曲“生日快乐”发LA音,数码管显示6发SO音,数码管显示5 结束子程序流程图 a数码管显示流程图 把TAB1的首地址赋给DPTRA清零,然后把A+DPTR的值送给A把A的值给B(用来选择数码管)DPTR自增,A清零A+DPTR A执行WRITE子程序显示子程序执行完毕后DPTR自增R11 R1,R1是否为0 否返回主程序 是 是 b键盘扫描子程序流程图串行接口DOUT输出为零,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论