基于单片机音乐倒数计时器与流水灯的课程设计Word下载.docx
《基于单片机音乐倒数计时器与流水灯的课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机音乐倒数计时器与流水灯的课程设计Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
通过学生独立完成课题来实现对学生的综合性训练,培养学生运用课程中所学到的理论与实践紧密结合,独立解决实际问题的能力,同时也是对知识技能的巩固和深化
3、主要人员:
完成期限:
2013年12月23号
指导教师签名:
课程负责人签名:
2013年12月23日
基于单片机音乐倒数计时器与流水灯的设计
一、设计功能描述
用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。
K1—可调整倒计数的时间1~60分钟。
K2—设置倒计数的时间为5分钟,显示“0500”。
K3—设置倒计数的时间为10分钟,显示“1000”。
K4—设置倒计数的时间为20分钟,显示“2000”。
复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键,则在LCD上显示出设置画面。
此时,若:
a.按操作键K2—增加倒计数的时间1分钟。
b.按操作键K3—减少倒计数的时间1分钟。
c.按操作键K4—设置完成。
二、系统分析与设计
1.原理图
图为音乐倒数计时器与流水灯的设计原理图,由复位电路,晶振电路,显示电路,输入电路组成,K1,K2,K3为设置时间开关,K4为确认开关,上电LED灯亮,进行设置,确认后倒计时开始,LED灯灭,时间到后发出音乐提醒,按k1键后音乐停止,流水灯亮。
2.单片机应用系统说明
51系列单片机由CPU、存储器、并行I/O口、定时/计数器、串行口及中断系统等组成,其各组成部分通过内部三总线相连。
(1)中央处理器(CPU)中央处理器是整个单片机的核心部件,是8位数据处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单片机系统协调工作,完成运算和控制功能等操作。
(2)数据存储器(内部RAM)89C51/89S51内部有256BRAM,其中包含128B用户数据存储单元(地址为00H~7FH)和128B特殊功能寄存器单元(地址0H~FFH),它们是统一编址的。
特殊功能寄存器只能用于存放控制指令数据,而不能用于存放用户数据。
所以用户能使用的RAM只有128B,可存放读写的数据和运算的中间结果等。
(3)程序存储器,程序存储器用于存放用户程序和原始数据等。
(4)定时/计数器89C51/89S51有2个16位的可编程定时/计数器T0和T1,实现定时或计数功能。
(5)并行输入/输出(I/O)口51系列单片机有4个8位并行I/O口(P0、P1、P2和P3),用于单片机与外部设备之间的数据并行输入/输出。
(6)串行口51系列单片机内置一个全双工异步串行通信口,用于单片机与其他具有相应接口的设备之间的异步串行数据传送。
对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统.但是一般我们在设计中总是喜欢把按键输入、显示输出等加到上述电路中,成为小系统。
应用89C51(52)单片机设计并制作一个单片机最小系统,达到如下基本要求:
(1)具有上电复位和手动复位功能。
(2)使用单片机片内程序存储器。
(3)具有基本的人机交互接口。
按键输入、LED显示功能。
(4)具有一定的可扩展性,单片机I/O口可方便地与其他电路板连接。
主程序
ORG0000H
LJMPSTART;
跳转到主程序
ORG0003H
LJMPJIA1FEN;
跳转到外部中断0
ORG000BH
LJMPTIME0;
跳转到计数器中断0
ORG0013H
LJMPJIAN1FEN;
跳转到外部中断1
ORG0001BH
LJMPTIME2;
跳转到计数器中断1
START:
MOVP0,#00H
MOVIE,#0FH;
打开外部中断01口和计数器中断01口
MOVTCON,#05H;
让外部中断判别下降沿为信号
MOVTMOD,#11H;
让计数器中断0和1实行方式1
MOVTH0,#3CH;
T0赋1S初值
MOVTL0,#0B0H
MOVR0,#00H;
秒钟赋初值
MOVR1,#00H;
分钟赋初值
MOVR2,#20;
T01S次数赋初值
MOV40H,#00H
;
*******************初始时间的调试*******************
K1:
CLRP3.5;
开启LED灯
MOVA,R0;
两位动态显示的主程序
MOVB,#10
DIVAB
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP2,#04H
MOVP1,A
LCALLTIME1
MOVA,B
MOVP2,#08H
K2:
MOVA,R1
MOVP2,#01H
MOVP2,#02H
JBP3.1,K3;
按下K1按钮确定时间
JNBP3.1,$
SETBEA;
开启EA,外部中断和计数器中断开启
LJMPX1;
跳转到时间微调子程序
K3:
JBP3.2,K4;
按下K2按钮给予5分钟定时
JNBP3.2,$
MOVR1,#5
K4:
JBP3.3,K5;
按下K3按钮给予10分钟定时
JNBP3.3,$
MOVR1,#10
K5:
JBP3.4,K1;
按下K4按钮给予20分钟定时
JNBP3.4,$
MOVR1,#20
LJMPK1
*******************初始时间微调的子程序*******************
X1:
MOVA,R0
X2:
JBP3.4,NEXT1;
按下K4按钮时间确定
SETBTR0;
开启计数器T0
CLREX0;
关闭外部中断0(即K2开关)
CLREX1;
关闭外部中断1(即K1开关)
LJMPX1
*******************歌曲主程序************************
NEXT1:
CJNER0,#0,X1;
比较秒钟是否已经为0,若为0则下一步,如不为则继续运行
CJNER1,#0,X1;
比较分钟是否已经为0,若为0则下一步,如不为则继续运行
CLRTR0
SETBP3.5
KAISI:
MOVA,40H;
蜂鸣器播放音乐的主程序
MOVDPTR,#TABLE
CJNEA,#00H,PLAY
LJMPKAISI
PLAY:
MOVR3,A
ANLA,#0FH
MOVR5,A
MOVA,R3
ANLA,#0F0H
CJNEA,#00H,MUSIC
CLRTR1
LJMPDEL
MUSIC:
SWAPA
DECA
MOV22H,A
ADDA,22H
MOVDPTR,#TABLE1
MOVTH1,A
MOV21H,A
MOVA,R5
INCA
MOVTL1,A
MOV20H,A
SETBTR1
DEL:
LCALLDELAY1
INC40H
JBP3.1,HUIQU;
按下按钮关闭音乐,并重新赋值,待再次开启
关闭外部中断1(即K3开关)
LJMPDENG
HUIQU:
LJMPKAISI
*******************所有程序的子程序*******************
DELAY1:
MOVR7,#0EH;
音乐程序的延时子程序
L11:
MOVR6,#125
L22:
MOVR5,#248
DJNZR5,$
DJNZR6,L22
DJNZR7,L11
RET
JIA1FEN:
CLREA;
外部中断0,分钟微调加1分钟
INCR1
CJNER1,#60,Q1;
比较分钟是否到60
MOVR1,#1;
分钟到60重新赋值
Q1:
SETBEA
RETI
JIAN1FEN:
外部中断1,分钟微调减1分钟
CJNER1,#1,Q2;
比较分钟是否到1
MOVR1,#60;
分钟到1重新赋值
Q2:
DECR1
TIME0:
DJNZR2,NEXT;
计数器中断0,T0溢出20次即1秒
R2重新赋值
CJNER0,#0,Q4;
比较秒钟是否为0
CJNER1,#0,Q3;
比较分钟是否为0
SETBTR1;
开启计数器中断1
Q3:
MOVR0,#60;
秒钟重新赋值
DECR1;
减少1分钟
DECR0;
减少1秒钟
LJMPNEXT
Q4:
NEXT:
T0重新赋初值
*******************流水灯主程序*******************
DENG:
MOVP0,#0FFH
LCALLTIM3
MOVP0,#0FFH