基于单片机音乐倒数定时器的设计.docx

上传人:b****3 文档编号:4262599 上传时间:2023-05-06 格式:DOCX 页数:34 大小:107.58KB
下载 相关 举报
基于单片机音乐倒数定时器的设计.docx_第1页
第1页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第2页
第2页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第3页
第3页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第4页
第4页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第5页
第5页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第6页
第6页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第7页
第7页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第8页
第8页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第9页
第9页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第10页
第10页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第11页
第11页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第12页
第12页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第13页
第13页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第14页
第14页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第15页
第15页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第16页
第16页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第17页
第17页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第18页
第18页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第19页
第19页 / 共34页
基于单片机音乐倒数定时器的设计.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机音乐倒数定时器的设计.docx

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

基于单片机音乐倒数定时器的设计.docx

基于单片机音乐倒数定时器的设计

一、设计要求……………………………………………1

二、设计目的……………………………………………1

三、设计的具体实现……………………………………2

1系统概述…………………………………………2

2单元电路设计……………………………………3

3软件程设计和调试…………………………………7

四、结论和展望…………………………………………24

五、心得体会及建议……………………………………25

六、附录…………………………………………………26

七、参考文献……………………………………………27

 

基于单片机音乐倒数定时器的设计报告

一、设计要求

利用单片机结合LCD显示器设计一个倒数计时器,可以放在家中使用,例如煮方便面、煮开水或小睡片刻等,做一小段时间计时。

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

具体要求:

文字型LCD(16*2)显示目前倒数的时间;显示格式为“TIME分分:

秒秒”;具有4个按键操作来设置现在想要倒数的时间;一旦按键后则开始倒数计时,当计时为零则发出一阵音乐声响,

程序执行后工作指示灯LED山东,表示程序开始执行,七段显示器显示“0500”,按下操作键K1~K4动作如下:

操作键K1,可调整倒数时间1min~60min;操作键K2,设置倒数计时时间为5min,显示“0500”;操作键K3,设置倒数计时时间为10min,显示“1000”;操作键K4,设置倒数计时时间为20min,显示“2000”,

RESET后按下K1显示如下:

UPDOWNOK

TIME04:

59倒数时间

操作键K2:

增加倒数计时1min;操作键K3,减少倒数计时1min,操作键K4:

设置完成。

一旦按键后则开始倒数计时,当计时为0时则发出一段音乐,同时继电器启动

二、设计目的

1、通过该设计能提高学生分析解决问题的能力。

2、了解模拟电路及数字电路的相关知识。

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

三、设计的具体实现

1.系统概述

1.1总体方案论证

要实现音乐倒数定时器可以用两种方案实现。

方案一:

利用PROG-110可编程控制器

PROG-110可编程器,是一种用《数字简码》控制的产品,它的特点是:

自带一套用于输入数码的按键和显示程序的数码管,只要我们现场输入一列2位数码,编制的程序即能完成,即编,即用。

每一种《数字简码》控制器,它都自带一套系统软件,每一套系统软件都有一套相对应的指令表,配套的指令表表明,只要输入什么样的数,程序将去做什么事,输入一列数,它就会按次序去完成你要求它做的所有的事。

但是首先PROG-110模块总共只有6个I/O端口,这就必须扩展模块端口,用两部以上模块串联,但花钱要多;其次是程序过长,PROG-110模块的E2PROM存储器24C01只可输入128步程序;第三是受PROG-110模块跳转指令步数的限制。

方案二:

利用单片机、LCD显示器和压电喇叭

单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点。

它在硬件结构、指令系统、I/O端口、功率消耗及可靠性等方面均有其独特之处,其最显著的特点之一就是具有非常有效的控制功能。

而LCD显示器具有体积小、重量轻、工作电压低、功耗极低、显示内容丰富、稳定可靠、成本低、控制驱动方便、接口简单易用、模块化结构紧凑等特点。

综上所述,按照设计要求我选择第二种方案,即利用单片机和LCD显示器来实现定时倒数,通过压电喇叭来发出音乐。

1.2单片机选择方案

采用8051单片机

8051单片机内部包含一个8位CPU、一个片内振荡器及时钟电路、ROM程序存储器、RAM数据存储器、两个16位定时器/计数器、可分别寻址64KB的程序存储器空间和64KB的数据存储器空间、32条可编程的I/O口线(4个8位并行I/O端口)、一个可编程全双工串行口、具有5个中断源和2个优先级的中断结构。

可以有效实现本次设计中要求的各项功能。

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

2.单元电路设计

2.1控制电路

图1设计流程图

2.单元电路设计

2.1控制电路

倒数计数器的控制电路可以见附图,其中主要分为以下几部分

单片机8051

8051基本资料如下:

图28051引脚图

8051主要使用引脚功能说明如下:

●8051的引脚40接+5V电源,引脚20接电源地线。

●传统8051工作时钟的最高为12MHz。

●EA引脚低电平动作用来存取外部程序ROM控制。

●EA接地,由外部程序ROM来执行程序。

●EA接高电平,由内部ROM来执行程序。

●开机时必须加入芯片重置信号。

(RESET)

●RESET信号高电平动作,高电平时产生芯片重置。

●RESET信号低电平时,由程序ROM地址0开始执行程序。

在本次设计中采用的8051外接电路如图3所示:

图38051外接电路图

8051系列的单片机的时钟方式分为内部方式和外部方式。

内部方式就是在单片机的引脚18、19外接晶振,就够成了自激振荡器在单片机内部产生时钟脉冲信号。

外部时钟方式是把外部已经有的时钟信号引入到单片机内部。

时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。

在一个单片机应用系统中,时钟有两方面的含义:

一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。

用一个12MHz晶振和两个30Pf瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容可以增加电路的稳定性,可以抗噪声增加稳定性,不容易死机。

在8051中之所以采用高性能的振荡电路,因为:

1.单片机电子钟的计时脉冲基准是由外部晶振的频率经过12分频后提供,采用内部的定时/计数器来实现计时功能。

所以,外接晶振频率精确度直接影响电子钟计时的准确性。

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

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

工作指示灯LED,送出低电平时,LED点亮,高电平时则使LED熄灭。

●程序执行中有情况产生时,LED闪动一下。

●用于状态区分,如状态1闪动一下,状态2闪动两下。

●程序执行中遇到特殊错误时,持续闪动。

LCD显示器

图4LCD芯片接线图

本次设计使用的倒数计时LCD控制,使用的是16字*2行设计。

图4中为4位控制电路,以8051P0的6调输出控制线来实现控制,P0还有提升电阻以增强其驱动能力,控制信号如下:

R/W=0,LCD执行写入的动作,RS寄存器选择控制线。

EN启用控制线。

VO亮度调整控制引脚。

D0~D7双向的数据总线。

必须在有亮度照明的地方,才能看见时间,若使用LCD,选择有背光显示的模块,则在夜晚或黑暗的场合也可以使用,有背光显示的LCD模块在引脚上,与无背光显示的模块兼容,指示价格较贵,一般显示的背光颜色为黄光,与手机的背光颜色相似。

按键控制

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

压电喇叭

图5压电喇叭接线图

8051端口3的第4位是压电喇叭的驱动位,持续送出工作脉冲可以推动喇叭发出哔的声响,当工作频率越高时,声音越清脆,工作频率低时,声音则较低沉。

继电器

继电器接点说明如下:

NC:

常闭点。

以COM为共同点,NC与COM在平时是呈导通。

COM:

共同点。

输出控制接点的共同接点。

NO:

常开点。

NO与COM平时呈开路的状态,当继电器动作时,NO与COM导通,NC与COM则呈开路状态。

电源输入

J1为+5V电源输入,当电源加入时电源指示灯LED将亮起,用哪个以指示电源供给正常,定时器在倒数时间到后压电喇叭会发出音乐旋律,并启动继电器使其状态为ON,控制继电器的ON/OFF状态,可以直接控制家电开关。

2.2控制程序

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

单片机定时器负责定时的技术,不会因为案件处理而中断时间描述的增加,时,分,秒数据是存在变量内并写入LCD而显示相关时间的。

在主控程序循环中主要工作为扫描是否有按键,若有按键则做相应的功能处理,同时也检查所倒数的时间是否为0,若为0表示倒数的时间终了,应该执行想对应的工作了,图为主程序控制工作流程。

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

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

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

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

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

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

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

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

倒数计数器控制程序文件名为DSDS.ASM。

注意:

在程序中128行有以下的指令:

SINCLUDE(DSDS1.ASM);加载程序一起来汇编及编译

表示在主程序DSDS.ASM中还会自动加载另一程序DSDS1.ASM程序一起进来汇编及编译,只是为了方便程序编译用,一些测试正确的程序代码可以分别存档好方便管理,此外整个程序源代码长度也不至于太长,不方便编辑。

DSDS1.ASM主要的程序代码功能为以定时器演奏歌曲旋律的控制。

3.软件程设计和调试

3.1延时时间的计算

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

DELAY:

MOVR6,#50

D1:

MOVR7,#100

DJNZR7,$

DJNZR6,D1

DJNZR5,DELAY

RET

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

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

=10.057ms

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

3.2工作方式设计

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

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

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

本次实验的定时器计时时间为5ms,因此定时器0需计数5000次,其定时器初值的加载可以计算如下:

TL0=(8192-5000).MOD.32

TL1=(8192-5000)/32

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

T=5ms

3.3有定时器产生各种频率的声音

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

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

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

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

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

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

软件的编译和调试使用的是KEIL软件,文件格式是ASM。

3.4子程序说明

DSDS.ASM主要控制子程序说明如下:

INIT:

初始化控制变量。

INIT_TIMER:

初始化定时器接口,使用定时器0的模式0计时。

T0_INT:

定时器0计时中断程序每隔5ms中断一次,或是做音乐演奏控制。

SHOW_DIG:

在LCD的第一行显示数字。

SHOW_DIG2:

在LCD的第二行显示数字。

SET_LCD:

对LCD做初始化工作。

CLR_LINE1:

清除LCD的第一行显示字符。

CLR_LINE2:

清除LCD的第二行显示字符。

LCD_PRINT:

在LCD的第一或第二行显示字符。

WCOM:

以4位控制方式将命令写至LCD。

WDATA:

以4位控制方式将数据写入LCD。

LCDP1:

在LCD的第一行显示字符。

LCDP2:

在LCD的第二行显示字符。

CONV1:

将分秒的倒数数据转换为数字数据系那是在LCD第二行。

DOWN_TIME:

检查是否计时终了。

SET_TIME:

设置所要倒数的时间。

BZ:

压电喇叭发出哔一声。

TIME_OUT:

计时终止启动音乐演奏。

DSDS1.ASM主要控制子程序说明如下:

MUSIC:

以定时器0计时中断程序做音乐演奏控制。

PLAY:

演奏单音控制。

PLAY_SONG:

测试演奏音乐。

SOUND_ON:

启动定时器0开始计时,是喇叭发声。

SOUND_OFF:

停止定时器0计时动作,喇叭静音。

LOAD_VALUE:

一查表法由音阶计数值来载入定时器计数初值。

3.5具体程序解释

下面是对本次程序的说明解释,定义使用软件,文件名称,每个键的作用。

;---------------------------------------------------

;DSDS.ASM8051COUNTDOWNTIMERWITHLCD+MUSIC

;---------------------------------------------------

;K1:

SETMIN0--60K2:

UPK3:

DOWNK4:

OK

;K2:

5MINK3:

10MINK4:

20MIN

;----------------------------------------------

;5mSisr

;MOVTL0,#(8192-5000).MOD.32

;MOVTH0,#(8192-5000)/32

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

LOAEQU24

HIAEQU99

COEQU200;5ms中断计数时间常数,计数200次表示1s

MUBEQU20H.0

HOUREQU30H

MINEQU31H

SECEQU32H

DEDAEQU33H;5mS计数值

SEC0EQU34H;存放旧的秒数

XEQU35H;LCD显示的地址

MMEQU36H;倒数时间分钟数

SSEQU37H;倒数时间秒钟数

LOEQU38H

HIEQU39H

TCEQU3AH

以下是对四个按键的定义

K1EQUP2.4

K2EQUP2.5

K3EQUP2.6

K4EQUP2.7

以下是对LCD、继电器、喇叭、灯的定义

RSEQUP0.0

ENEQUP0.1

RY1EQUP3.5

RY2EQUP3.6

SPKEQUP3.4

WLEDEQUP3.7

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

ORG0H

JMPSTART

ORG0BH;T0中断

JMPT0_INT

START:

SETBMUB;测试音乐演奏

;CALLMUSIC

CLREN;LCD的状态设为OFF

CLRRY1

CLRRY2

CLRMUB;清除音乐演奏标志

CALLLED_BL

CALLSET_LCD

CALLBZ

CALLINIT

CALLINIT_TIMER

CALLMENU

LOOP:

CALLDOWN_TIME

JBK1,L1;对按键进行检测

JNBK1,$

;按键1按下:

;MOVMM,#3

;MOVSS,#1

MOVDPTR,#MADJ

MOVA,#1

CALLLCD_PRINT

CALLSET_TIME

MOVDPTR,#MMENU

MOVA,#1

CALLLCD_PRINT

JMPLOOP

L1:

JBK2,L2

JNBK2,$

;按键2按下:

CALLBZ

MOVMM,#5

MOVSS,#1

CALLLED_BL

JMPLOOP

L2:

JBK3,L3

JNBK3,$

;按键3按下:

CALLBZ

CALLBZ

MOVMM,#10

MOVSS,#1

CALLLED_BL

JMPLOOP

L3:

JBK4,L4

JNBK4,$

;按键4按下:

CALLBZ

CALLBZ

CALLBZ

MOVMM,#20

MOVSS,#1

CALLLED_BL

JMPLOOP

L4:

JMPLOOP;继续循环执行

$INCLUDE(DSDS1.ASM)

以下是在显示器上显示的时间消息:

;--------------------------------------------

LMESS1:

DB"LCDLINE1.....",0

LMESS2:

DB"TIME",0

TITLE:

DB"DSDS.ASM8051DOWNCOUNTWITHLCD+MUSIC"

;--------------------------------------------

以下是初始化控制变量

INIT:

MOVDEDA,#0;将所有时间计时清为0

MOVSEC0,#0

MOVSEC,#0

MOVMIN,#0

MOVHOUR,#0

;定义倒数时间:

MOVMM,#5

MOVSS,#1

RET

以下是初始化定时器接口,使用定时器0模式0计时

INIT_TIMER:

MOVTMOD,#00000000B

MOVIE,#10000010B

MOVTL0,#LOA

MOVTH0,#HIA

SETBTR0

RET

T0_INT:

JNBMUB,W0;T0计时中断程序每5ms中断一次,音乐演奏标志为0时则执行计时程序

MOVTL0,LO;对音乐的加载

MOVTH0,HI

CPLSPK

RETI

W0:

PUSHACC;对时间计数的初始化

MOVTL0,#LOA

MOVTH0,#HIA

INCDEDA

;判断是否为1S

MOVA,DEDA

CJNEA,#CO,W1

MOVDEDA,#0

CPLWLED

INCSEC

MOVA,SEC

CJNEA,#60,W1

;判断是否1分到了

INCMIN

MOVSEC,#0

MOVA,MIN

CJNEA,#60,W1

;判断是否1小时到了

INCHOUR

MOVMIN,#0

MOVA,HOUR

CJNEA,#24,W1

MOVSEC,#0;清除时间变量为0

MOVMIN,#0

MOVHOUR,#0

W1:

POPACC;将累加器有堆栈取出

RETI

以下是使LCD第一行显示

;A:

DIGX:

LCDXPOS

;SHOWONLCDLINE1

SHOW_DIG:

MOVB,#10

DIVAB

ADDA,#30H

PUSHB

MOVB,X

CALLLCDP1

POPB

MOVA,B

ADDA,#30H

INCX

MOVB,X

CALLLCDP1

RET

以下是使LCD第二行显示

;A:

DIGX:

LCDXPOS

;SHOWONLCDLINE2

SHOW_DIG2:

MOVB,#10

DIVAB

ADDA,#30H

PUSHB

MOVB,X

CALLLCDP2

POPB

MOVA,B

ADDA,#30H

INCX

MOVB,X

CALLLCDP2

RET

以下是LCD的控制程序设计:

SET_LCD:

CLREN;启动失效

CALLINIT_LCD;初始化LCD

MOVR5,#10

CALLDELAY

MOVDPTR,#LMESS1

MOVA,#1;显示在第一行

CALLLCD_PRINT

MOVDPTR,#LMESS2

MOVA,#2;显示在第二行

CALLLCD_PRINT

RET

LCD控制指令初始化:

INIT_LCD1:

MOVA,#28H

CALLWCOM

MOVA,#0CH

CALLWCOM

MOVA,#0EH

CALLWCOM

MOVA,#01H

CALLWCOM

RET

清除LCD的第一行字符:

CLR_LINE1:

MOVA,#80H

CALLWCOM

MOVR0,#24

CLR1:

MOVA,#''

CALLWDATA

DJNZR0,CLR1

RET

在LCD的第一行或第二行显示字符:

LCD_PRINT:

CJNEA,#1,LINE2;判断是否为第一行

LINE1:

MOVA,#80H

CALLWCOM

CALLCLR_LINE

MOVA,#80H

CALLWCOM

JMPFILL

LINE2:

MOVA,#0C0H

CALLWCOM

CALLCLR_LINE

MOVA,#0C0H

CALLWCOM

FILL:

;填入字符

CLRA

MOVCA,@A+DPTR

CJNEA,#0,LC1

RET

LC1:

;写入数据

CALLWDATA

INCDPTR

JMPFILL

RET

CLR_LINE:

;清除该行的LCD字符

MOVR0,#24

CL1:

MOVA,#''

CALLWDATA

DJNZR0,CL1

RET

DE:

MOVR7,#5;短暂延时

DJNZR7,$

RET

EN1:

;短脉冲产生启用信号

SETBEN

CALLDE

CLREN

CALLDE

RET

INIT_LCD:

;4位I/O控制LCD接口初始化

MOVP0,#30H

CALLEN1

MOVP0,#30H

CALLEN1

MOVP0,#30H

CALLEN1

MOVP0,#20H

CALLE

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

当前位置:首页 > 法律文书 > 调解书

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

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