倒数计时器.docx

上传人:b****2 文档编号:25872382 上传时间:2023-06-16 格式:DOCX 页数:12 大小:657.97KB
下载 相关 举报
倒数计时器.docx_第1页
第1页 / 共12页
倒数计时器.docx_第2页
第2页 / 共12页
倒数计时器.docx_第3页
第3页 / 共12页
倒数计时器.docx_第4页
第4页 / 共12页
倒数计时器.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

倒数计时器.docx

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

倒数计时器.docx

倒数计时器

一、系统概述

1.内容摘要

(1)引言

随着社会发展的不断进步,人们对智能化仪器的需求也越来越明显,作为即将毕业于福建师范大学闽南科技学院计算机系的我来说,必须将自己课堂上的所学与社会对人才的需求量做一个理智的分析,并且充分利用所学,好好定位自己的实践能力,团队协作能力,正好这份期末的课程设计让我达到了强化自身能力的目的,实际开发过程中,发现日常看起来很普通的一件物品,原来各个都凝聚了人类智慧的结晶,即使只是一个普普通通的倒数计时器,在开发过程中自身学到了很多东西,也充分的认识了自己,以前常认为做事要求的是个人能力,在这次开发过程中,我真正认识到了团队的概念,原来明确的分工,带来的将是意想不到的效果,

这里,也谢谢我的组员:

XXXXX还有我的指导老师:

XXX。

 

(2)关键字

可调音乐倒数计时器

Protuse仿真

51单片机

定时/计数器中断

LCD显示技术

2.需求分析

(1)系统简介

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

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

(2)系统要求

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

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

程序执行后工作指示灯LED闪动,按下操作键K0~K5

分别实现:

+10s、+1min、+5min、+10min、+20min、+60min;B0~B4分别实现:

-10s、-1min、-5min、-20min、-60min;其余2个操作键(开始/暂停、停止)根据其具体标式实现各自工作

 

二、系统硬件

1.电路设计

(1)概述

系统的电路设计由组员(XXX,XXX完成),由11个功能键来完成对时间的设置,由两个功能键来完成系统的运行与结束操作,最后由一个喇叭发出一段音乐提示用户,各引脚的连接如图所示。

(2)电路图

现给出系统的总电路图如下:

三、系统软件设计

1.总体设计

(1)设计思想:

程序开始时使用一个while(true)循环扫描11个功能键,若有键按下,则执行相应功能,(例如:

若按下K1,则相应将LCD上的显示时间数加10s),当按下开始/暂停时,程序开始倒计时,倒计时过程中,当再一次按下开始/暂停时,程序暂停,此时可根据用户需求重新设定倒数时间,当重新按下开始时,程序重新进入计时,若按下停止键,系统重新置位,显示00:

00。

(2)系统流程图

(附:

各模块对应代码

main.c:

主程序模块

LCD1602.c:

LCD显示模块及功能键定义

DATA.h:

歌曲乐谱

SoundPlay.h:

喇叭的初始化及音乐输出)

2.关键模块设计

(1)说明

程序分为LCD显示模块、主程序模块、音乐提示模块、我负责的是功能键主程序模块,说明:

程序的各功能键采用循环扫描方式判断是否有键按下,LCD显示以及音乐提示部分采用T1工作模式1的中断方式。

(2)程序算法

功能键定:

sbitK0=P1^0;

sbitK1=P1^2;

sbitK2=P1^3;

sbitK3=P1^4;

sbitK4=P1^5;

sbitK5=P1^1;

sbitstart=P1^6;

sbitstop=P1^7;

sbitB0=P3^0;

sbitB1=P3^1;

sbitB2=P3^2;

sbitB3=P3^4;

sbitB4=P3^5;

定时/计数器器初值:

TH1=0xcf;

TL1=0x2c;

当计数器计数个数达到400时,既过了1s,相应的LCD显示值改变

有了如上的定义,在主函数中,使用while循环判断是否有功能键按下,代码如下:

While(true){

if(!

B0){

while(!

B0);

if(DAT>=10)

DAT-=10;

}

//当B0按下,意味着减10秒,首先判断当前的时间数是否大于10秒,若大于,则将时间减少10秒,若小于,则不进行该操作。

}

if(!

start)

{

while(!

start);

if(flg==0){flg=1;TR1=1;

//flg=1,代表程序开始,并选通T1

}

else{

flg=2;

}

}

if(flg==1&&time>400)

{

DAT--;

disp(DAT);

time=0;

if(!

DAT){InitialSound();Play(tab[1],0,3,360);flg=0;}//如果时间到,将响起一首音乐//0-2首歌可选

}

以下为主程序调用LCD显示的算法:

LCD_Write(0,0x80);//显示在第一行

for(i=0;i<12;i++){LCD_Write(1,*ch++);}//显示字符于第一行

DAT=0;

LCD_Write(0,0xCD);

LCD_Write(1,0x3A);//显示:

冒号

 

四、附录

1.参考文献

(1)微型计算机控制计数第二版(潘新民、王艳芳编著)

(2)单片机原理及应用教程第二版(赵全利、肖兴达主编)

2.感想与体会

(1)感想

实际开发中,遇到了诸多的问题,由于硬件及汇编的基础知识并不牢固,导致设计过程中处处碰壁,后安排组员花了近一个月的时间仔细专研单片机计数的原理及应用,才渐渐的掌握了该课程设计的初步思想。

(2)收获

整个程序设计过程中,让我慢慢掌握了各硬件接口的作用,也让我领悟到中断在实际设计中的应用之广泛。

程序设计的每个步骤都需要细细揣摩,我们也出现过诸多问题,在一次又一次的意见交流中,我们最终克服了困难。

课程的设计结束了,不过未来的时间里,我们会近一步的完善它的功能。

 

(3)程序缺陷

由于设计之初未认真考虑复位键(停止键)的问题,只是简单的将其清零,所以程序在运行过程中,需先暂停,然后再按下停止键进行复位,LCD上的显示才会清0;若在计时过程中,未先按下暂停,直接按停止键,LCD的显示上会出现问题。

(4)主程序清单(main.c)

/*

*/

#include

#include

#include

 

charflg=0;

inttime=0;

intDAT;

voiddisp(intdat)//显示数据部分

{

LCD_Write(0,0xCB);//显示地址,显示在第二行,从第B开始

LCD_Write(1,0x30+(dat/60)/10);

LCD_Write(1,0x30+(dat/60)%10);//获得并显示分钟数

LCD_Write(0,0xCE);

LCD_Write(1,0x30+(dat%60)/10);

LCD_Write(1,0x30+(dat%60)%10);//获得并显示秒钟数

}

 

voidmain(void)

{

chari;char*ch="mnkjxy";//第一行要显示的信息

LCD_Initial();//1602初始化

Init();//掉定时器子函数,要定时1s

//InitialSound();//播放音乐初始化

LCD_Write(0,0x80);//显示在第一行

for(i=0;i<12;i++){LCD_Write(1,*ch++);}//显示字符于第一行

DAT=0;

LCD_Write(0,0xCD);

LCD_Write(1,0x3A);//显示:

冒号

while

(1)

{

if(!

B0){

while(!

B0);

if(DAT>=10)

DAT-=10;flg=0;

}

if(!

B1){

while(!

B1);

if(DAT>=60)

DAT-=60;flg=0;

}

if(!

B2){

while(!

B2);

if(DAT>=300)

DAT-=300;flg=0;

}

if(!

B3){

while(!

B3);

if(DAT>=1200)

DAT-=1200;flg=0;

}

if(!

K0){

while(!

K0);

DAT+=10;flg=0;

}

if(!

K1)//按下K1,加上1分钟

{

while(!

K1);

DAT+=60;flg=0;

}

if(!

K2)//按下K2加上5分钟,即加上300min

{

while(!

K2);

DAT+=300;flg=0;

}

if(!

K3)//按下K2加上10分钟,即加上600min

{

while(!

K3);

DAT+=600;flg=0;

}

if(!

K4)//按下K2加上20分钟,即加上1200min

{

while(!

K4);

DAT+=1200;flg=0;

}

if(!

start)

{

while(!

start);

if(flg==0){flg=1;TR1=1;

}

else{

flg=2;

}

}

if(flg==2){TR1=0;flg=0;}

if(!

stop)

{

while(!

stop);

DAT=0;

}

if(flg==1&&time>400)//最小单位为second

{

DAT--;

disp(DAT);

time=0;

if(!

DAT){InitialSound();Play(tab[1],0,3,360);flg=0;}//如果时间到,将响起一首音乐//0-2首歌可选

}

disp(DAT);

}

}

 

voidtimer()interrupt3using0//T1定时

{

TH1=0xcf;

TL1=0x2c;

time++;

}

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

当前位置:首页 > 工程科技 > 环境科学食品科学

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

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