音乐倒数计时器

  • 格式:doc
  • 大小:76.00 KB
  • 文档页数:15

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告

设计题目:音乐倒数计数器

院系:

班级:

姓名:

组员:

指导教师:

一、设计要求

利用单片机结合七段数码管设计一个倒数计时器,可以煮方便面、煮开水或小睡片刻等,做一小段时间的倒计时。当倒数计时为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 设计流程图

原理:

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: MOV R6, #50

D1: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次此子程序,则延时时间约为100ms

6,工作方式设计

本次设计中采用的定时器模式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 EQU 24

HIA EQU 99

CO EQU 200 ;5ms中断计数时间常数,计数200次表示1s MUB EQU 20H.0 ;音乐演奏标志

MIN EQU 31H ;已经运行的分钟数

SEC EQU 32H ;正在运行的秒数

SECO EQU 34H ;旧的秒数

DEDA EQU 33H ;5ms计数值

MM EQU 36H ;倒数时间分钟数

SS EQU 37H ;倒数时间秒钟数

LO EQU 38H

HI EQU 39H

TC EQU 3AH

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

K1 EQU P3.4

K2 EQU P3.5

K3 EQU P3.6

K4 EQU P3.7

WEI 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_INT

START:

SETB MUB ;测试音乐演奏

CLR RY1 ;继电器关