ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:45.75KB ,
资源ID:6816775      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6816775.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(音乐倒数计时器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

音乐倒数计时器.docx

1、音乐倒数计时器单片机课程设计报告设计题目:音乐倒数计数器院系: 班级: 姓名:组员: 指导教师:一、设计要求利用单片机结合七段数码管设计一个倒数计时器,可以煮方便面、煮开水或小睡片刻等,做一小段时间的倒计时。当倒数计时为0时,则发出一段音乐,通知倒数终了,该做重要的事情了。具体功能:1:6个七段数码管显示时分秒2:用4个按键操作来设置现在想要倒数的时间3:一旦按键后则开始倒数计时,当计时为零则发出一阵音乐声响4:程序执行后工作指示灯LED闪动,表示程序开始执行,七段显示器显示“000010”5:按下操作键K1K4动作如下:操作键K1,可调整倒数时间1min60min;操作键K2,设置倒数计时时

2、间为5min,显示“000500”;操作键K3,设置倒数计时时间为10min,显示“001000”;操作键K4,设置倒数计时时间为20min,显示“002000”;按下K1键后:操作键K2:增加倒数计时1min;操作键K3,减少倒数计时1min;操作键K4:设置完成,开始倒数计时。当计时为0时则发出一段音乐,同时继电器启动二、设计目的学习单片机定时器时间计时处理、按键扫描、数码管显示及音乐旋律演奏的设计方法。强化对单片机知识的学习能够熟练运用所学知识三、设计的具体实现具体的设计流程可见图1:图1 设计流程图原理:1,定时/计数器:单片机电子钟利用内部定时/计数器溢出产生中断(12M晶振一般为5

3、0ms)再乘以相应的倍率来实现秒、分、时的转换。大家都知道从定时/计数器产生中断请求到响应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。2,工作指示灯:送出低电平时,LED点亮,高电平时则使LED熄灭。3,按键控制:按键控制室控制程序执行时数据的输入或是特殊功能的设置及操作,使用单片机端口3的4条输入口,由程序来控制,平时输入端为高电平,当有按键按下则相对位会呈现低电平,进过轮流扫描判断输入端是否为低电平,便可知道按下的是哪一个按钮。4,控制程序:本课程设计中,可以学习利用单片机定时器设计

4、时间计时处理,其时分秒控制,定时器0计时中断程序每个5ms中断一次当做一个计数,每中断一次则计数加1,当计数200次时,表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了,若计数到了则将相关变量清除为0。单片机定时器负责定时的技术,不会因为案件处理而中断时间描述的增加。在主控程序循环中主要工作为扫描是否有按键,若有按键则做相应的功能处理,同时也检查所倒数的时间是否为0,若为0表示倒数的时间终了,应该执行想对应的工作了,图1为主程序控制工作流程。时间计时处理程序时等过了1s 后,则更新时间数据,将最新剩余倒数的分秒的时间数据转换为数字数据,并显示在数码管上。程序中如何判断

5、是否已过了1s?可以设一旧秒数变量,当新旧秒数变量不一样时,则表示已过了1s,要做相关程序处理了。倒数计时闹铃的动作利用时间计时处理来做秒数倒数,当所设置的时间为0,喇叭则不断发出音乐声,启动继电器,有继电器可以控制家电开启或关闭。音乐声的产生也是有定时器来产生固定频率的方波信号推动压电喇叭,发出旋律。而定时器原先已利用设计时间计时处理了,怎么能在设计来做音乐旋律的控制?在此设计定义一个音乐演奏标志,若音乐演奏标志为0则执行中断程序中计时程序的部分程序,若音乐演奏标志为1则执行音乐发生控制程序。因此只要适当的运用程序设计技巧,计时中断程序中可以做许多种不同的工作,而这些工作是需要特定一段时间就

6、必须要被触发而被执行的程序。5,延时时间的计算若我们想设计程序执行100ms时间延时,程序可以设计如下DELAY: MOV R6, #50D1:MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET如果震荡频率为12MHz则执行时间按为T=1+50*(1+100*2)+2+2+2us =10.057ms如果执行10次此子程序,则延时时间约为100ms6,工作方式设计本次设计中采用的定时器模式0来设计,在此方式中T0、T0可以进行13位的计时,其值保存在两个8位的定时寄存器中。对于其中任一定时器,工作时钟可以由内部或是外部来提供,由C/T位来决定做定

7、时器还是计数器。定时器的时钟为系统工作时钟除以12.此次试验中采用12MHz石英震荡器则产生1us的计数时间脉冲宽度。本次实验的定时器计时时间为5ms,因此定时器0需计数5000次,其定时器初值的加载可以计算如下:TL0=(8192-5000).MOD.32TL1=(8192-5000)/32执行后的结果为,产生的脉冲宽度为T=5ms7,由定时器产生各种频率的声音我们可以设定发音的频率来改变声音产生音乐,计时时间长短也是按照发音的频率而定的。由频率值推得定时器计数初值由下关系式得到:T=1/f(us) ;方波宽度Co=(int)t/2 ;定时器所得计数的次数Lo=(8192-co)%32 ;计

8、数初值低字节Hi=(8192-co)/32 ;计数初值高字节四、源程序:;以下是开始对各个变量的具体定义,加载字节,确定时间常数,时间变量的存放,倒数的分钟秒钟的存放地址,各变量的含义。LOA EQU 24HIA EQU 99CO EQU 200 ;5ms中断计数时间常数,计数200次表示1sMUB EQU 20H.0 ;音乐演奏标志MIN EQU 31H ;已经运行的分钟数SEC EQU 32H ;正在运行的秒数SECO EQU 34H ;旧的秒数DEDA EQU 33H ;5ms计数值MM EQU 36H ;倒数时间分钟数SS EQU 37H ;倒数时间秒钟数LO EQU 38HHI EQ

9、U 39HTC EQU 3AH;以下是对四个按键的定义K1 EQU P3.4K2 EQU P3.5K3 EQU P3.6K4 EQU P3.7WEI EQU P2.7 ;位选DUAN EQU P2.6 ;段选;以下是对继电器、喇叭、闪烁灯的定义RY1 EQU P1.1 ;继电器SPK EQU P2.3 ;扬声器WLED EQU P1.0 ;闪烁灯;程序开始,代码由地址0开始执行,使用的是定时器0中断 ORG 0000H SJMP START ORG 000BH ;T0中断 SJMP T0_INTSTART: SETB MUB ;测试音乐演奏 CLR RY1 ;继电器关 CLR MUB ;清除音

10、乐演奏标志 LCALL INIT LCALL INIT_TIMER LCALL LOOP LCALL DISPLAYLOOP:LCALL DOWN_TIME ;按键控制部分 JNB K1,L1 ;对按键进行检测 JNB K2,L2 JNB K3,L3 JNB K4,L4 JMP LOOP; 按键1按下,则:L1: LCALL DISPLAY JNB K1,L1 MOV MM,#1 LCALL SET_TIME JMP LOOP;按键2按下:L2: LCALL DISPLAY JNB K2,L2 MOV MM,#5 MOV SS,#0 SJMP LOOP ;按键3按下:L3: LCALL DIS

11、PLAY JNB K3,L3 MOV MM,#10 MOV SS,#0 SJMP LOOP;按键4按下:L4: LCALL DISPLAY JNB K4,L4 MOV MM,#20 MOV SS,#0 SJMP LOOP ;继续循环执行INIT: MOV DEDA,#0 ;将所有时间计时清为0 MOV SEC,#0 MOV SECO,#0 MOV MIN,#0;定义初始倒数时间: MOV MM,#0 MOV SS,#10 RET;以下是初始化定时器接口,使用定时器0模式0计时INIT_TIMER: MOV TMOD,#00000000B MOV IE, #10000010B MOV TL0,#

12、LOA MOV TH0,#HIA SETB TR0 RETT0_INT: JNB MUB,W0 ;T0计时中断程序每5ms中断一次,音乐演奏标志为0时 ;则执行计时程序 MOV TL0,LO MOV TH0,HI CPL SPK ;对音乐的加载 RETIW0: PUSH ACC ;对时间计数的初始化 MOV TL0,#LOA MOV TH0,#HIA INC DEDA MOV A,DEDA CJNE A,#CO,W1 ;判断是否为1S MOV DEDA, #0 CPL WLED ;工作指示灯闪烁 INC SEC MOV A,SEC CJNE A,#60,W1 ;判断是否1分到了 INC MIN

13、 MOV SEC,#0 MOV A, MIN CJNE A,#60,W1 ;判断一小时是否到了 MOV SEC,#0 MOV MIN,#0W1: POP ACC ;将累加器由堆栈取出 RETI ;从中断返回SET_TIME: ;按键1的功能,时间设置部分 CLR TR0 ;定时中断 MOV SS,#0 S0: LCALL DISPLAY ;扫描按下的为哪个键 JNB K2,S1 JNB K3,S2 JNB K4,S3 SJMP S0S1: LCALL DISPLAY JNB K2,S1 INC MM MOV A,MM CJNE A,#61,S0 MOV MM,#1 SJMP S0 S2: LC

14、ALL DISPLAY JNB K3,S2 DEC MM MOV A,MM CJNE A,#0,S0 MOV MM,#60 SJMP S0S3: JNB K4,S3 LCALL BZ LCALL BZ SETB TR0 RETBZ: MOV R6,#0 ;喇叭发出声音 B1: CALL DEX CPL SPK DJNZ R6,B1 MOV R5,#10 CALL DELAY RETDEX: MOV R7,#180 ;短暂延迟DE1: NOP DJNZ R7,DE1 RETDELAY:MOV R6, #50;延时子程序,延迟10msD1: MOV R7,#100 DJNZ R7,$ DJNZ R

15、6,D1 DJNZ R5,DELAY RET;过了1S后则更新倒数时间并检查是否倒数终止:DOWN_TIME: LCALL DISPLAY MOV A,SEC ;加载现在时间 MOV B,SECO ;加载旧时间 CJNE A,B,DO1 ;是否过了1S RETDO1: MOV SECO,SEC ;记录旧秒数 DEC SS MOV A,SS CJNE A,#0FFH,D2 ;判断秒数和分钟数是否为0 MOV A,MM CJNE A,#0,D12 CALL TIME_OUT;当秒数和分钟数为0时则停止倒数计时 RETD12: MOV SS,#59 ;秒数=59 分钟数减1 DEC MMD2: RE

16、T;显示模块,将时、分、秒十位、各位分离,并暂存到50H-55H ;内,P2.6口控制段选,P2.7口控制位选DISPLAY:MOV A,#00 ;将时数进行十位、各位分离 MOV B,#10 DIV AB MOV 50H,A MOV 51H,B MOV A,MM ;将分数进行十位、各位分离 MOV B,#10 DIV AB MOV 52H,A MOV 53H,B MOV A,SS ;将秒数进行十位、各位分离 MOV B,#10 DIV AB MOV 54H,A MOV 55H,BM1: MOV R6,#00H;控制扫描次数 MOV R0,#0FEH;R0值为位选值,01H=00000001B

17、,第一位数码管选通 MOV R1,#50H;时、分、秒暂存值的单元首地址给R1 MOV DPTR,#TAB;TAB的首地址给DPTRLOOP1: SETB DUAN MOV A,R1 ;时、分、秒的值给A MOVC A,A+DPTR ;查找对应的段码 MOV P0,A ;把段码值给P0口 CLR DUAN SETB WEI MOV A,R0 ;位选值给A MOV P0,A ;位选值给P0口,控制位选 CLR WEI INC R1 ;时、分、秒暂存值的地址加1 INC R6 ;扫描次数加1 MOV A,R0 ;位选值给A RL A ;位选值左循环 MOV R0,A LCALL DELAY1;延时

18、 CJNE R6,#06H,LOOP1;是否扫描一遍了 RETDELAY1: MOV R4,#5DEL2: MOV R5,#250DEL3: DJNZ R5,DEL3 DJNZ R4,DEL2 RETTIMER0: MOV TL0,#0B0H/给T0装计数初值(50ms) MOV TH0,#9CH /给T0装计数初值(50ms INC R7 RETI/查找表/TAB: DB 3FH /数字0-9所对应数码管上显示0-9的译码值 DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 6FHTIME_OUT:SETB RY1 ;倒数终

19、了程序,继电器ON,停止计时TI1: SETB MUB ;演奏音乐 LCALL MUSIC SJMP TI1 RETMUSIC: ;音乐的设置模块 MOV TMOD,#00000000B MOV IE, #10000010BM0: CALL SOUND_ON ;喇叭打开 MOV R4,#1 ;发出“DO”一拍 MOV R3,#1 CALL PLAY MOV R4,#2 ;发出“RE”一拍 MOV R3,#1 CALL PLAY MOV R4,#3 ;发出“ME”一拍 MOV R3,#3 CALL PLAY CALL SOUND_OFF ;喇叭关闭没有声音 MOV R5,#50 ;静音0.5S

20、CALL DELAY;下面是一段旋律演奏的程序 CALL SOUND_ON CALL PLAY_SONG CALL SOUND_OFF JMP M0;R4音阶指针,R3拍数PLAY:CALL LOAD_VALUE ;单音演奏PL:MOV R5,#10 CALL DELAY DJNZ R3, PL;实现暂停: CALL SOUND_OFF MOV R5,#3 CALL DELAY CALL SOUND_ON ;喇叭开启 RET;演奏一段旋律:PLAY_SONG: MOV TC,#0PP0: ;指向旋律音阶数据列表地址 MOV DPTR, #SONG MOV A,TC MOVC A,A+DPTR

21、MOV R4,A CJNE A,#0FFH,PP1 RETPP1: ;指向旋律拍数数据列表地址 MOV DPTR, #LEN MOV A,TC MOVC A,A+DPTR MOV R3,A CALL PLAY INC TC JMP PP0 RETSOUND_ON: ;喇叭打开 SETB TR0 RETSOUND_OFF: ;喇叭关闭 CLR TR0 RET;以查表法由音阶计数值来载入计数初值,R4表示音阶计数值LOAD_VALUE: MOV DPTR,#HI_LIST ;指向数据列表地址 MOV A,R4 MOVC A,A+DPTR MOV HI,A MOV DPTR,#LO_LIST MOV

22、 A,R4 MOVC A,A+DPTR MOV LO,A RET;定时器的设置用来设置音乐声音:HI_LIST: ;音阶对应定时器0计数初值高字节数据列表 DB 0,226,229,232,233,236,238,240 DB 241,242,244,244,246,247,248LO_LIST: ;音阶对应定时器0计数初值低字节数据列表 DB 0,4,13,10,20,3,8,6 DB 2,23,5,26,1,4,3;以下为旋律数据:SONG: DB 2,6,2,2,3,1,4,3,2,2,1,6,7,1,3,3,5,3,2,7,6,1,0FFHLEN:DB 2,1,1,2,1,1,1,2,

23、1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFHEND五、心得体会在这段时间里,我学到了很多知识也有很多感受,不仅使我对模拟电子及其它专业知识有了更深刻的了解而且我开始了独立的学习和实验查看相关资料和书籍,让自己头脑中模糊的概念逐渐清晰,每一次改进都是我学习的收获,同时使我将理论应用于实际。我不但回顾了以前所学的电路原理的基础知识,而且还学到了一些新知识。最重要的是我深刻体会到要做好一件完整的事情,要有系统的思维方式和逻辑方法,要耐心的面对所有问题、要善于用应用各种资源来充实和满足自己。这次做设计的经历让我终生受益、我感受到做设计是要用心去做的一件事,没有学习就不可能有研究的能力,这次的经历能在以后的学习、工作中激励我继续进步。这份期末的课程设计让我达到了强化自身能力的目的,实际开发过程中,发现日常看起来很普通的一件物品,原来各个都凝聚了人类智慧的结晶,即使只是一个普普通通的倒数计时器,在开发过程中自身学到了很多东西,也充分的认识了自己,以前常认为做事要求的是个人能力,在这次开发过程中,我真正认识到了团队的概念,原来明确的分工,带来的将是意想不到的效果。顺祝老师工作顺利,身体健康。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1