课设报告1简易电子琴4.1.8

更新时间:2024-06-25 06:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计报告?

课程设计名称: 单片机课程设计 课程设计题目 :单片机简易电子琴设计

专业班级: 测控技术与仪器1101班 姓 名: 管文龙 学 号:110401119 实验室号: 信息楼220 实验组号: 20 实验时间: 2013.12.30-2014.1.10 批阅时间: 指导教师: 许会 成 绩:

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

1. 题目名称 单片机简易电子琴设计 2. 课设目的 ①掌握KEILuv下汇编语言的调试方法 ②了解单片机简单应用系统的研发及调试过程 ③掌握定时器的功能并能使用定时器产生音频从而使单片机板实现电子琴功能 3. 课设内容 ①、在口线P1.7,通过20uf电解连接0.25W扬声器再接VCC ②、编写软件由键盘控制单片机定时器的溢出频率符合下表,由口线P1.7输出 C调音符 Hz 5 392 6 440 1 494 2 524 3 660 4 698 5 784 6 880 7 988 ③、选择演奏两支简单乐曲 ④掌握串口调试助手的使用,在m2t2上实现单片机串口通信 注释:外接扬声器声音很小,需要外接功率放大电路,而单片机带有一蜂鸣器,可以用单片机上的蜂鸣器代替扬声器,因此定时器的脉冲输出端口为P2.6;在按键时,蜂鸣器响应相应的音符,数码管显示相应的数字。 2014年1月 9日 1/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

4. 课设方案 (1) 定时器控制音符频率原理 乐音实际上是有固定周期的信号,用单片机的一个定时器(如T0)控制,在P2.6输出方波周期信号,产生乐音。根据不同的按键,调节T0的溢出时间,可输出不同频率的乐音。 如果要产生音频脉冲,只要算出某一音频的周期(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 故可得音符与计数初值对应表,如下: 表1 C调音符 5 6 1 2 3 4 5 6 7 初值 0F6D1H 0FBD1H 0F7B6H 0F921H 0FA8CH 0FAD8H 0FB68H 0FBE9H 0FC5BH 2014年1月 9日 2/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

(2) 课设思路 单片机有8个按键,根据表1,分别控制K1—K7发出中音DO~SI,这样便可手动演奏简单乐曲,控制K8自动播放简单乐曲——祝你生日快乐。另外,接通电源,当手动按键演奏时,对应数码管显示相应数字。 (3)实现功能 ①、手动演奏简单乐曲 ②、自动播放简易乐曲 ③、数码管显示 5.课设总结 ⑴ 程序清单及注释 DCLK BIT P3.4 ;串行数据时钟,上升沿有效 DIN BIT P3.3 ;串行数据输入 LOAD BIT P2.3 ;串行命令加载,上升沿有效 DOUT BIT P2.2 ;键盘中断和键值数据输出 SPEAKER BIT P2.6 ORG 0000H LJMP MAIN ORG 0030H MAIN: 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 TR0 PLEASE: ACALL SCAN;调用键盘扫描子程序 SJMP PLEASE 2014年1月 9日 3/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

SJMP $ CH451_INT1: 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 RET WRITE: CLR LOAD;操作命令开始 MOV R3,#08H WRITE1: CLR DCLK RRC A;进位循环右移,将ACC中8位送出 MOV DIN,C SETB DCLK; DCLK上升沿时CH451从DIN输入数据 DJNZ 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位寄存器中的数据 RET DSP: MOV B,#0FH;加载字数据7 MOV A,#0BEH;数字0的字形码传送给A ACALL WRITE;调用WRITE函数 MOV B,#0EH MOV A,#0BEH ACALL WRITE MOV B,#0DH MOV A,#0BEH ACALL WRITE MOV B,#0CH MOV A,#0BEH 2014年1月 9日 4/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

ACALL WRITE MOV B,#08H MOV A,#0BEH ACALL WRITE MOV B,#0BH MOV A,#0BEH ACALL WRITE MOV B,#09H MOV A,#0BEH ACALL WRITE MOV B,#0AH MOV A,#0BEH ACALL WRITE RET SCAN: MOV R2,#36;设置定时器计数脉冲个数 MOV C,DOUT ;有按键按下时,使DOUT产生低电平中 JC SCAN 断然后进行键盘扫描确认 ACALL READ ;调用READ函数读取键值 KEY1: CJNE A,#40H,KEY2;若KEY1按下,顺序进行; 否则跳转到KEY2 MOV 30H,#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 SETBTIMER KEY3: CJNE A,#41H,KEY4 MOV 30H,#0FAH MOV 31H,#8DH MOV B,#0DH MOV A,#0E6H LJMP SETBTIMER KEY4: CJNE A,#42H,KEY5 MOV 30H,#0FAH MOV 31H,#0D9H MOV B,#0CH 2014年1月 9日 5/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

MOV A,#74H LJMP SETBTIMER KEY5: CJNE A,#48H,KEY6 MOV 30H,#0FBH MOV 31H,#69H MOV B,#08H MOV A,#0D6H LJMP SETBTIMER KEY6: CJNE A,#4BH,KEY7 MOV 30H,#0FBH MOV 31H,#0EAH MOV B,#0BH MOV A,#0DEH LJMP SETBTIMER KEY7: CJNE A,#49H,KEY8 MOV 30H,#0FCH MOV 31H,#5CH MOV B,#09H MOV A,#0A4H LJMP SETBTIMER KEY8: CJNE A,#4AH,LP;若KEY8按下,顺序执行; 否则跳转到LP执行 LJMP START1 NULL: RET LP: AJMP NULL READ: CLR LOAD MOV A,#07H MOV R3,#04H READ1: CLR DCLK RRC A MOV DIN,C SETB DCLK DJNZ R3,READ1 SETB LOAD CLR A MOV R7,#07H READ2: MOV C,DOUT CLR DCLK RLC A SETB DCLK DJNZ R7,READ2 RET 2014年1月 9日 6/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

SETBTIMER:MOV TH0,30H ;赋定时器初值 MOV TL0,31H SETB TR0 ;启动定时器T0 JNB TF0,$;TF=0,等待;TF=1,顺序执行 CLR TF0;清除中断标志位 CLR TR0;关闭低能定时器T0 CPL SPEAKER;扬声器取反 DJNZ R2,SETBTIMER;循环计,产生多个脉冲 ACALL WRITE;调用WRITE函数 AJMP SCAN START1: ACALL DSP MOV DPTR,#MUSIC;把乐曲MUSIC的地址赋给DPTR COUT: CLR A MOVC A,@A+DPTR;把每个音符初值的高位取出送给 CJNE A,#00,CHK;A=0,顺序执行;否则跳转到CHK执行 AJMP NULL CHK: PUSH ACC;把A压入堆栈 CLR A INC DPTR MOVC A,@A+DPTR MOV B,A POP ACC;把A弹出堆栈 CHK1: CJNE A,#01,CHK2;A=01,顺序执行;否则跳转到DO1执行 AJMP DO1 CHK2: CJNE A,#02,CHK3 AJMP RE1 CHK3: CJNE A,#03,CHK4 AJMP MI1 CHK4: CJNE A,#04,CHK5 AJMP FA1 CHK5: CJNE A,#05,CHK6 AJMP SO1 CHK6: CJNE A,#06,CHK7 AJMP LA1 CHK7: CJNE A,#07,CHK0 AJMP SI1 CHK0: CJNE A,#00,CONT2 2014年1月 9日 7/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

AJMP SCAN CONT2: INC DPTR SJMP COUT DO1: MOV R3,#36 DO11: MOV TH0,#0F7H;设置DO音阶的初值 MOV TL0,#0B6H SETB TR0;启动定时器T0 JNB TF0,$;TF=0,等待;TF=1,顺序执行 CLR TF0;清除中断标志位 CLR TR0;关闭低能定时器T0 CPL SPEAKER DJNZ R3,DO11;循环计,产生多个脉冲 LL1: ACALL DELAY;调用延时子程序 DJNZ B,LL1;B不为0;跳转到LL1处执行; B为0,顺序执行 INC DPTR AJMP COUT RE1: MOV R3,#36 RE22:MOV TH0,#0F9H MOV TL0,#22H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 CPL SPEAKER DJNZ R3,RE22 LL2: ACALL DELAY DJNZ B,LL2 INC DPTR AJMP COUT MI1: MOV R3,#36 MI33: MOV TH0,#0FAH MOV TL0,#8DH SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 2014年1月 9日 8/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

CPL SPEAKER DJNZ R3,MI33 LL3: ACALL DELAY DJNZ B,LL3 INC DPTR AJMP COUT FA1: MOV R3,#36 FA44:MOV TH0,#0FAH MOV TL0,#0D9H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 CPL SPEAKER DJNZ R3,FA44 LL4: ACALL DELAY DJNZ B,LL4 INC DPTR AJMP COUT SO1: MOV R3,#36 SO55: MOV TH0,#0FBH MOV TL0,#69H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 CPL SPEAKER DJNZ R3,SO55 LL5: ACALL DELAY DJNZ B,LL5 INC DPTR AJMP COUT LA1: MOV R3,#36 LA66: MOV TH0,#0FBH MOV TL0,#0EAH SETB TR0 JNB TF0,$ 2014年1月 9日 9/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

CLR TF0 CLR TR0 CPL SPEAKER DJNZ R3,LA66 LL6: ACALL DELAY DJNZ B,LL6 INC DPTR AJMP COUT SI1: MOV R3,#36 SI77: MOV TH0,#0FCH MOV TL0,#5CH SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 CPL SPEAKER DJNZ R3,SI77 LL7: ACALL DELAY DJNZ B,LL7 INC DPTR AJMP COUT DELAY: MOV R6,#244;延时子程序 DL1: MOV R7,#255 DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET MUSIC: DB 05,04H,05,04H,06,08H,05,08H,01,08H,07,10H,05,04H,05,04H DB 06,08H,05,08H,02,08H,01,08H,05,04H,05,04H,05,08H,03,08H DB 01,08H,07,08H,06,08H,04,04H,04,04H,00 END 2014年1月 9日 10/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

(2)程序流程图 ①总程序流程图 进数码管显示程序 设定系统参数,启动键盘和显示 开始 定时器初值清零,,设置定时器在工作方式1下 N Y 有键按下否 开中断 键盘扫描 数码管显示00H 2014年1月 9日 11/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

Y K1按下 K2按下 K3按下 K4按下 K5 按下 K6按下 K7按下 K8按下 发DO音,数码管显示1 发RE音,数码管显示2 发MI音,数码管显示3 发FA音,数码管显示4 发SO 音,数码管 5 显示 发LA音,数码管显示6 发SI音,数码管显示7 自动播放乐曲“生日快乐” 结束 ②子程序流程图 a.数码管显示流程图 把TAB1的首地址赋给DPTR A清零,然后把@A+DPTR的值送给A 把A的值给B(用来选择数码管) DPTR自增,A清零 @A+DPTR A 执行WRITE子程序显示 子程序执行完毕后 DPTR自增 否 R1—1 R1,R1是否为0 是 是 返回主程序 2014年1月 9日 12/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

b.键盘扫描子程序流程图 串行接口DOUT输出为零,调用READ函数读取键值 c.SETBTIMER部分程序流程图 赋定时器初值 开启定时器 等待按键按下 设置定时器计 数次数 按键按下则扫描键值,并执行按键功能 否 判断是否溢出 是 SPEAKER取反 否 R是否为0 是 返回按键扫描程序 关闭定时器, 2014年1月 9日 13/16

沈阳工业大学课程设计报告

专业班级: 测控技术与仪器1101班 学号: 110401120 姓名: 管文龙

6.出现的问题及解决方法 问题1:外接扬声器声音很小,且不清晰 解决方法:使用单片机自带蜂鸣器代替 。 问题2: 只有第一个键KEY1按下时,蜂鸣器发声 解决方法:扫描键盘子函数忘了写RET返回指令,加上RET后,KEY1-KEY7能发出相应的音阶。 问题3:第八个键KEY8按下时,不能播放加载得音阶 解决方法:控制延时子函数次数的B的位置放错了,改正后,蜂鸣器能够连续播放加载的音阶。 7. 心得体会及建议 我一直对程序不感兴趣,让我用单片机设计简易电子琴我决的很困难,有种想做却什么也不会的感觉。CH451使用手册的文档我看了两三遍,却还是不会使用。后来我认真看以前的程序,渐渐的明白了程序是如何运行的,什么时候是跳转,什么时候是调用。最后程序基本上实现了所要求的功能,但是程序不简洁,执行相似功能的程序段可以用一段实现,我用了七段。总的来说,我还是有很大收获的。首先,我掌握了汇编语言的编程和调试的方法,能根据单片机的现象,判断问题是什么,然后努力解决。其次,我了解了单片机的开发过程,也清除了CH451芯片的使用方法。最后,用汇编语言编程没有我想象中的那么难。在这次课程设计中,锻炼了我分析问题解决问题的能力。 2014年1月 9日 14/16

本文来源:https://www.bwwdw.com/article/rxx3.html

Top