音乐倒数计时器.docx

上传人:b****1 文档编号:334570 上传时间:2023-04-29 格式:DOCX 页数:20 大小:31.17KB
下载 相关 举报
音乐倒数计时器.docx_第1页
第1页 / 共20页
音乐倒数计时器.docx_第2页
第2页 / 共20页
音乐倒数计时器.docx_第3页
第3页 / 共20页
音乐倒数计时器.docx_第4页
第4页 / 共20页
音乐倒数计时器.docx_第5页
第5页 / 共20页
音乐倒数计时器.docx_第6页
第6页 / 共20页
音乐倒数计时器.docx_第7页
第7页 / 共20页
音乐倒数计时器.docx_第8页
第8页 / 共20页
音乐倒数计时器.docx_第9页
第9页 / 共20页
音乐倒数计时器.docx_第10页
第10页 / 共20页
音乐倒数计时器.docx_第11页
第11页 / 共20页
音乐倒数计时器.docx_第12页
第12页 / 共20页
音乐倒数计时器.docx_第13页
第13页 / 共20页
音乐倒数计时器.docx_第14页
第14页 / 共20页
音乐倒数计时器.docx_第15页
第15页 / 共20页
音乐倒数计时器.docx_第16页
第16页 / 共20页
音乐倒数计时器.docx_第17页
第17页 / 共20页
音乐倒数计时器.docx_第18页
第18页 / 共20页
音乐倒数计时器.docx_第19页
第19页 / 共20页
音乐倒数计时器.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

音乐倒数计时器.docx

《音乐倒数计时器.docx》由会员分享,可在线阅读,更多相关《音乐倒数计时器.docx(20页珍藏版)》请在冰点文库上搜索。

音乐倒数计时器.docx

音乐倒数计时器

单片机课程设计报告

设计题目:

音乐倒数计数器

院系:

班级:

姓名:

组员:

指导教师:

一、设计要求

利用单片机结合七段数码管设计一个倒数计时器,可以煮方便面、煮开水或小睡片刻等,做一小段时间的倒计时。

当倒数计时为0时,则发出一段音乐,通知倒数终了,该做重要的事情了。

具体功能:

1:

6个七段数码管显示时分秒

2:

用4个按键操作来设置现在想要倒数的时间

3:

一旦按键后则开始倒数计时,当计时为零则发出一阵音乐声响

4:

程序执行后工作指示灯LED闪动,表示程序开始执行,七段显示器显示“000010”

5:

按下操作键K1~K4动作如下:

操作键K1,可调整倒数时间1min~60min;

操作键K2,设置倒数计时时间为5min,显示“000500”;

操作键K3,设置倒数计时时间为10min,显示“001000';

操作键K4,设置倒数计时时间为20min,显示“002000”;按下K1键后:

操作键K2:

增加倒数计时1min;

操作键K3,减少倒数计时1min

操作键K4:

设置完成,开始倒数计时。

当计时为0时则发出一段音乐,同时继电器启动

二、设计目的

学习单片机定时器时间计时处理、按键扫描、数码管显示及音乐旋律演奏的设计方法。

强化对单片机知识的学习

能够熟练运用所学知识

三、设计的具体实现

具体的设计流程可见图1:

主程序开始

1

r

继电器

丰OFF

初始化变量及数码管显示接口

初始化定时器

LCD闪动表示程序开始执行

■*

扫描显示器更新倒数时间数据,检查闹铃时间是否到了

K1:

调整倒数时间

K2:

倒数计时时间为5MIN

K3:

倒数计时时间为10MIN

K4:

倒数计时时间为20MIN

图1设计流程图

原理:

1,定时/计数器:

单片机电子钟利用内部定时/计数器溢出产生中断(12M晶振一般为50mS再乘以相应的倍率来实现秒、分、时的转换。

大家都知道从定时/计数器产生中断请求到响应中断需要3-8个机器周期,定时中断子程序中的数据入栈和重装定时/计数器的初值还需要占用数个机器周期,还有从中断入口转到中断子程序也要占用一定的机器周期。

2,工作指示灯:

送出低电平时,LED点亮,高电平时则使LED熄灭。

3,按键控制:

按键控制室控制程序执行时数据的输入或是特殊功能的设置及操作,使用单片机端口3的4条输入口,由程序来控制,平时输入端为高电平,当有按键按下则相对位会呈现低电平,进过轮流扫描判断输入端是否为低电平,便可知道按下的是哪一个按钮。

4,控制程序:

本课程设计中,可以学习利用单片机定时器设计时间计时处理,其时分秒控制,定时器0计时中断程序每个5ms中断一次当做一个计数,每中断一次则计数加1,当计数200次时,表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了,若计数到了则将相关变量清除为0。

单片机定时器负责定时的技术,不会因为案件处理而中断时间描述的增加。

在主控程序循环中主要工作为扫描是否有按键,若有按键则

做相应的功能处理,同时也检查所倒数的时间是否为0,若为0

表示倒数的时间终了,应该执行想对应的工作了,图1为主程序

控制工作流程。

时间计时处理程序时等过了1s后,则更新时间数据,将最新剩余倒数的分秒的时间数据转换为数字数据,并显示在数码管上。

程序中如何判断是否已过了1s?

可以设一旧秒数变量,当新旧秒数变量不一样时,则表示已过了1s,要做相关程序

处理了。

倒数计时闹铃的动作利用时间计时处理来做秒数倒数,当所设置的时间为0,喇叭则不断发出音乐声,启动继电器,有继电器可以控制家电开启或关闭。

音乐声的产生也是有定时器来产生固定频率的方波信号推动压电喇叭,发出旋律。

而定时器原先已利用设计时间计时处理了,怎么能在设计来做音乐旋律的控制?

在此设计定义一个音乐演奏标志,若音乐演奏标志为0则执行中断程序中计时程序的部分程序,若音乐演奏标志为1则执行音乐发生控制程序。

因此只要适当的运用程序设计技巧,计时中断程序中可以做许多种不同的工作,而这些工作是需要特定一段时间就必须要被触发而被执行的程序。

5,延时时间的计算

若我们想设计程序执行100ms时间延时,程序可以设计如下

DELAY:

MOVR6,#50

D1:

MOVR7,#100

DJNZR7,$

DJNZR6,D1

DJNZR5QELAY

RET

如果震荡频率为12MHZ则执行时间按为

T=1+50*(1+100*2)+2+2+2us

=10.057ms

如果执行10次此子程序,则延时时间约为

6,工作方式设计

100ms

本次设计中采用的定时器模式0来设计,在此方式中T0、T0可以进行13位的计时,其值保存在两个8位的定时寄存器中。

对于其中任一定时器,工作时钟可以由内部或是外部来提供,由C/T位来决定做定时器还是计数器。

定时器的时钟为系统工作时钟除以12.此次试验中采用12MHz石英震荡器则产生1us的计数时间脉冲宽度。

本次实验的定时器计时时间为5ms因此定时器0需

计数5000次,其定时器初值的加载可以计算如下:

TL0=(8192-5000).MOD.32

TL1=(8192-5000)/32

执行后的结果为,产生的脉冲宽度为

T=5ms

7,由定时器产生各种频率的声音

我们可以设定发音的频率来改变声音产生音乐,计时时间长短也是按照发音的频率而定的。

由频率值推得定时器计数初值由下关系式得到:

T=1/f(us);方波宽度

Co=(int)t/2;定时器所得计数的次数

Lo=(8192-co)%32;计数初值低字节

Hi=(8192-co)/32;计数初值高字节

四、源程序:

LOA

EQU24

HIA

EQU99

COEQU200;5ms

MUB

EQU20H.0

MIN

EQU31H

SEC

EQU32H

SECOEQU34H

DEDAEQU33H

MMEQU36H

SSEQU37H

LOEQU38H

;以下是开始对各个变量的具体定义,加载字节,确定时间常数,时间变量的存放,倒数的分钟秒钟的存放地址,各变量的含义。

中断计数时间常数,计数200次表示1s;音乐演奏标志

;已经运行的分钟数

;正在运行的秒数

;旧的秒数

;5ms计数值

;倒数时间分钟数

;倒数时间秒钟数

HIEQU39H

TCEQU3AH

;以下是对四个按键的定义

K1EQUP3.4

K2EQUP3.5

K3EQUP3.6

K4EQUP3.7

WEIEQUP2.7;位选

DUANEQUP2.6;段选

;以下是对继电器、喇叭、闪烁灯的定义

RY1EQUP1.1;继电器

SPKEQUP2.3;扬声器

WLEDEQUP1.0;闪烁灯

;程序开始,代码由地址0开始执行,使用的是定时器0中断

ORG0000H

SJMPSTART

ORG000BH;T0中断

SJMPT0_INT

START:

SETBMUB;测试音乐演奏

CLRRY1;继电器关

 

CLRMUB;

LCALLINIT

LCALLINIT_TIMER

LCALLLOOP

LCALLDISPLAYLOOP:

LCALLDOWN_TIME

JNBK1,L1;

JNBK2,L2

JNBK3,L3

JNBK4,L4

JMPLOOP

;按键1按下,则:

L1:

LCALLDISPLAY

JNBK1,L1

MOVMM,#1

LCALLSET_TIMEJMPLOOP

;按键2按下:

L2:

LCALLDISPLAY

JNBK2,L2

MOVMM,#5

MOVSS,#0

SJMPLOOP

;按键3按下:

L3:

LCALLDISPLAY

JNBK3,L3

MOVMM,#10

MOVSS,#0

SJMPLOOP

;按键4按下:

L4:

LCALLDISPLAY

JNBK4,L4

MOVMM,#20

MOVSS,#0

SJMPLOOP;

INIT:

MOVDEDA,#0;

MOVSEC,#0

清除音乐演奏标志

;按键控制部分对按键进行检测

继续循环执行

将所有时间计时清为0

 

MOVSECO,#0

MOVMIN,#0

;定义初始倒数时间:

MOVMM,#0

MOVSS,#10

0模式0计时

RET

;以下是初始化定时器接口,使用定时器

INIT_TIMER:

MOVTM0D,#00000000B

MOVIE,#10000010B

MOVTL0,#LOA

MOVTH0,#HIA

SETBTR0

RET

T0INT:

JNBMUB,W0;T0次,音乐演奏标志为0时计时程序

MOVTL0,LO

MOVTH0,HI

CPLSPK;RETI

W0:

PUSHACC;

MOVTL0,#LOA

MOVTH0,#HIAINCDEDA

MOVA,DEDACJNEA,#CO,W1

MOVDEDA,#0CPLWLED;

INCSEC

MOVA,SEC

CJNEA,#60,W1

INCMIN

MOVSEC,#0MOVA,MIN

CJNEA,#60,W1

计时中断程序每5ms中断一;则执行

对音乐的加载

对时间计数的初始化

判断是否为1S

工作指示灯闪烁

判断是否1分到了

判断一小时是否到了

将累加器由堆栈取出

从中断返回

按键1的功能,时间设置部分

定时中断

扫描按下的为哪个键

喇叭发出声音

MOVSEC,#0

MOVMIN,#0

W1:

POPACC

RETI;

SET_TIME:

;

CLRTR0

MOVSS,#0

S0:

LCALLDISPLAY

JNBK2,S1

JNBK3,S2

JNBK4,S3

SJMPS0

S1:

LCALLDISPLAY

JNBK2,S1

INCMM

MOVA,MMCJNEA,#61,S0

MOVMM,#1

SJMPS0

S2:

LCALLDISPLAY

JNBK3,S2

DECMM

MOVA,MMCJNEA,#0,S0

MOVMM,#60

SJMPS0

S3:

JNBK4,S3

LCALLBZ

LCALLBZ

SETBTR0RET

BZ:

MOVR6,#0;

B1:

CALLDEX

CPLSPK

DJNZR6,B1

MOVR5,#10

CALLDELAY

RET

DEX:

MOVR7,#180;短暂延迟

DE1:

NOP

DJNZR7,DE1

RET

DELAY:

MOVR6,#50涎时子程序,延迟10ms

D1:

MOVR7,#100

DJNZR7,$

DJNZR6,D1

DJNZR5,DELAY

RET

;过了1S后则更新倒数时间并检查是否倒数终止:

DOWN_TIME:

LCALLDISPLAY

MOVA,SEC;加载现在时间

MOVB,SECO;加载旧时间

CJNEA,B,DO1;是否过了1S

RET

DO1:

MOVSECO,SEC;记录旧秒数

DECSS

MOVA,SS

CJNEA,#0FFH,D2;判断秒数和分钟数是否为0

MOVA,MM

CJNEA,#0,D12

CALLTIME_OUT当秒数和分钟数为0时则停止倒数计时

RET

D12:

MOVSS,#59;秒数=59分钟数减1

DECMM

D2:

RET

;显示模块,将时、分、秒十位、各位分离,并暂存到50H-55H;内,P2.6口控制段选,P2.7口控制位选

DISPLAY:

MOVA,#00;将时数进行十位、各位分离

MOVB,#10

DIVAB

MOV50H,A

MOV51H,B

MOVA,MM;将分数进行十位、各位分离

MOVB,#10

DIVAB

MOV52H,A

MOV53H,B

MOVA,SS;将秒数进行十位、各位分离

MOVB,#10

DIVAB

MOV54H,A

MOV55H,B

M1:

MOVR6,#00H控制扫描次数

MOVR0,#0FEH;R0值为位选值,01H=00000001B第一位数码管选通

MOVR1,#50H时、分、秒暂存值的单元首地址给R1

MOVDPTR,#TAB;TA的首地址给DPTR

LOOP1:

SETBDUAN

MOVA,@R1;时、分、秒的值给A

MOVCA,@A+DPTR查找对应的段码

MOVP0,A;把段码值给P0口

CLRDUAN

SETBWEI

MOVA,R0;位选值给A

MOVP0,A;位选值给P0口,控制位选

CLRWEI

INCR1;时、分、秒暂存值的地址加1

INCR6;扫描次数加1

MOVA,R0;位选值给A

RLA;位选值左循环

MOVR0,A

LCALLDELAY1延时

CJNER6,#06H,LOOP1是否扫描一遍了

RET

DELAY1:

MOVR4,#5

DEL2:

MOVR5,#250

DEL3:

DJNZR5,DEL3

DJNZR4QEL2

RET

TIMER0:

MOVTLO,#OBOH〃给T0装计数初值(50mS

MOVTH0,#9CH//给TO装计数初值(50ms

INCR7

RETI

//////////查找表//////////////

TAB:

DB3FH//数字0-9所对应数码管上显示0-9的译码值

DB06H

DB5BH

DB4FH

DB66H

DB6DH

DB7DH

DB07H

DB7FH

DB6FH

TIME_OUT:

SETBRY1倒数终了程序,继电器ON停止计时

TI1:

SETBMUB;演奏音乐

LCALLMUSIC

SJMPTI1

RET

MUSIC:

;音乐的设置模块

MOVTMOD,#00000000B

MOVIE,#10000010B

M0:

CALLSOUND_ON;喇叭打开

MOVR4,#1;发出“DO—拍

MOVR3,#1

CALLPLAY

MOVR4,#2;发出“RE一拍

MOVR3,#1

CALLPLAY

MOVR4,#3;发出“ME—拍

MOVR3,#3

 

CALLPLAY

CALLSOUND_OFF

MOVR5,#50;

CALLDELAY

;下面是一段旋律演奏的程序

CALLSOUND_ON

CALLPLAY_SONG

CALLSOUND_OFF

JMPM0

;R4音阶指针,R3拍数

PLAY:

CALLLOAD_VALUE

PL:

MOVR5,#10

CALLDELAY

DJNZR3,PL

;实现暂停:

CALLSOUND_OFF

MOVR5,#3

CALLDELAY

CALLSOUND_ON

RET

;演奏一段旋律:

PLAY_SONG:

MOVTC,#0

PP0:

;

MOVDPTR,#SONG

MOVA,TC

MOVCA,@A+DPTR

MOVR4,A

CJNEA,#0FFH,PP1

RET

PP1:

;

MOVDPTR,#LEN

MOVA,TC

MOVCA,@A+DPTR

MOVR3,A

CALLPLAY

INCTC

喇叭关闭没有声音

静音0.5S

单音演奏

喇叭开启

指向旋律音阶数据列表地址

指向旋律拍数数据列表地址

 

JMPPPO

RET

SOUND_ON:

;喇叭打开

SETBTRO

RET

SOUND_OFF:

;喇叭关闭

CLRTRO

RET

;以查表法由音阶计数值来载入计数初值,R4表示音阶计数值

LOAD_VALUE:

MOVDPTR,#HI_LIST;指向数据列表地址

MOVA,R4

MOVCA,@A+DPTR

MOVHI,A

MOVDPTR,#LO_LIST

MOVA,R4

MOVCA,@A+DPTR

MOVLO,A

RET

;定时器的设置用来设置音乐声音:

HI_LIST:

;音阶对应定时器0计数初值高字节数据列表

DB0,226,229,232,233,236,238,240

DB241,242,244,244,246,247,248

LO_LIST:

;音阶对应定时器0计数初值低字节数据列表

DB0,4,13,10,20,3,8,6

DB2,23,5,26,1,4,3

;以下为旋律数据:

SONG:

DB2,6,2,2,3,1,4,3,2,2,1,6,7,1,3,3,5,3,2,7,6,1,0FFH

LEN:

DB2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH

END

五、心得体会

在这段时间里,我学到了很多知识也有很多感受,不仅使我对模拟电子及其它专业知识有了更深刻的了解而且我开始了独立的学习和实验查看相关资料和书籍,让自己头脑中模糊的概念逐渐清晰,每一次改进都是我学习的收获,同时使我将理论应用于实际。

我不但回顾了以前所学的电路原理的基础知识,而且还学到了一些新知识。

最重要的是我深刻体会到要做好一件完整的事情,要有系统的思维方式和逻辑方法,要耐心的面对所有问题、要善于用应用各种资源来充实和满足自己。

这次做设计的经历让我终生受益、我感受到做设计是要用心去做的一件事,没有学习就不可能有研究的能力,这次的经历能在以后的学习、工作中激励我继续进步。

这份期末的课程设计让我达到了强化自身能力的目的,实际开发过程中,发现日常看起来很普通的一件物品,原来各个都凝聚了人类智慧的结晶,即使只是一个普普通通的倒数计时器,在开发过程中自身学到了很多东西,也充分的认识了自己,以前常认为做事要求的是个人能力,在这次开发过程中,我真正认识到了团队的概念,原来明确的分工,带来的将是意想不到的效果。

顺祝老师工作顺利,身体健康。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2