一、课题名称

定时报警器

二、设计任务与要求

设计一个单片机控制的简易定时报警器。要求根据设定的初始值(1-59秒)进行倒计时,当计时到0时数码管闪烁“00”(以1Hz闪烁),按键功能如下:

(1)设定键:在倒计时模式时,按下此键后停止倒计时,进入设置状态;如果已经处于设置状态则此键无效。

(2)增一键:在设置状态时,每按一次递增键,初始值的数字增1。

(3)递一键:在设置状态时,每按一次递减键,初始值的数字减1。

(4)确认键:在设置状态时,按下此键后,单片机按照新的初始值进行倒计时及显示倒计时的数字。如果已经处于计时状态则此键无效。

三、设计方案

1.任务分析与整体设计思路

根据题目的要求,需要实现如下几个方面的功能:

计时功能:要实现计时功能则需要使用定时器来计时,通过设置定时器的初始值来控制溢出中断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时1秒中的功能。然后,当计时每到1秒钟后,倒计时的计数器减1。当倒计时计数器到0时,触发另一个标志变量,进入闪烁状态。

显示功能:显示倒计时的数字要采用动态扫描的方式将数字拆成“十位”和“个位”动态扫描显示。如果处于闪烁状态,则可以不需要动态扫描显示,只需要控制共阴极数码管的位控线,实现数码管的灭和亮。

键盘扫描和运行模式的切换:主程序在初始化一些变量和寄存器之后,需要不断循环地读取键盘的状态和动态扫描数码管显示相应的数字。根据键盘的按键值实现设置状态、计时状态的切换。

2.单片机型号及单片机硬件电路原理图

选用MCS-51系列单片机的AT89S51作为微控制器,因为它成本比较低,功能强,选择两个共阴极数码管组成2位显示模块,通电后系统会复位初始值,而我们的初始值设定为59秒 ,定时秒数可以通过按键来更改,所以我们配备了一个“增一”键和一个“减一”键,分别来调整时间,当时间倒计时结束时,数码显示管会闪烁,提醒倒计时已经结束。

因为键盘数量不多,所以选择独立式按键与P1口连接作为四个按键输入,没有键按下时P1.0-P1.3为高电平,当有键按下时,P1.0-P1.3相应管脚为低电平。单片机硬件电路原理图如下:

3.程序设计

采用单片机的P1口作为按键的输入,使用独立式按键与P1.0-P1.3连接,构成四个功能按键,分别为 设置键k1、增一键k2、减一键k3、确定键k4。在计时功能中,次数为count、倒计时为countdown,在显示功能中,定义一组数组DuanMa,值为0-9数字对应的数码管7段码。还需要定义一个状态变量state用来存储当前单片机工作在哪种状态,state=1表示为设置状态,默认为state=0 表示处于倒计时状态。程序代码如下:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0; // 设置键k1
sbit k2=P1^1; // 增一键k2
sbit k3=P1^2; // 减一键k3
sbit k4=P1^3; // 确定键k4
uchar code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 段码
uchar count,shi,ge,countdown,state;
void delay(uint ms) // 延时函数
{uchar i;while(ms--){for(i=0;i<120;i++);}
}
void init() // 初始化函数
{   P0=0x6d; // 十位显示5P2=0x6f; // 个位形式9P1=0xff; // P1口全部设置为高电平TMOD=0x01; // 设置定时器0的各种方式为1IE=0x82; // 中断允许寄存器D7置1,允许CPU中断;D1置1允许定时器0溢出中断TH0=(65536-50000)/256; // 设置初始值TL0=(65536-50000)%256; // 设置初始值TR0=1; // 启动定时器0countdown=59; // 设置倒计时为59秒state=0;
}
void keyboardScan()// 按键扫描函数
{if(k1==0)// 按下设置键k1{delay(5);TR0=0; // 定时器0停止state=1; // 设置状态}if(state==1)// 设置状态{delay(5);if(k2==0) // 按下增一键k2{delay(5);countdown++; // 倒计时+1if(countdown==100){countdown=0; // 如果倒计时大于99,重置倒计时为0}while(!k2)// 不断刷新数码管{shi=countdown/10;ge=countdown%10;P0=DuanMa[shi];P2=DuanMa[ge];}}if(k3==0)// 按下减一键k3{delay(5);countdown--; // 倒计时+1if(countdown==-1){countdown=99; // 如果倒计时小于-1,重置倒计时为99}while(!k3)// 不断刷新数码管{shi=countdown/10;ge=countdown%10;P0=DuanMa[shi];P2=DuanMa[ge];}}if(k4==0)// 按下确定键盘K4{delay(5);TR0=1;// 启动定时器state=0;}}
}
void refresh() interrupt 1 // T0中断函数
{TH0=(65536-50000)/256;// 初始化定时器0TL0=(65536-50000)%256;count++; // 计算器+1if(count==20){count=0;countdown--;}if(countdown==-1){TR0=0;// 停止定时器0while(k1!=0){P0=0x00;//十位显示0P2=0x00;//个位显示0delay(500);P0=0xff;//十位显示8P2=0xff;//个位显示8delay(500);}}shi=countdown/10;ge=countdown%10;P0=DuanMa[shi];P2=DuanMa[ge];
}
void main() // 主函数
{init();// 调用初始化函数while(1)// 死循环{keyboardScan();// 调用按键扫描函数}
}

四、结果

五、心得体会

单片机课程设计终于顺利完成了,其中包含着快乐,也有辛酸。我们选的设计题目是“定时报警器”,刚开始大家都觉得这个题目是比较简单的。实际做了之后,发现设计电路虽然简单,但程序设计是却漏洞百出,好在我们四人迅速分工去上网找一些相关资料,并且请教指导老师,透过不断努力,终于成功实现其功能。

这次设计让我们受益匪浅,理解到完成一个出色的作品,单靠一个人的力量是不行的,小组成员之间必须相互配合,相互支持,相互团结,所以这也是一次锻炼我们团队合作精神的机会。

六、参考文献

[1] 张毅刚.单片机原理及应用[M].4版.北京:教育出版社,2021

[2] 张毅刚.单片机原理及应用-C51编程 + Proteus 仿真[M].2版.北京:教育出版社,2016

[3] 王幸之.AT89系列单片机原理与接口技术[M].北京:北京航空航天大学出版社,2004

定时报警器课程设计(基于单片机)相关推荐

  1. c语言编写闹钟主程序流程图,课程设计基于单片机的定时闹钟.docx

    课程设计基于单片机的定时闹钟.docx 课程设计 设计题目:基于单片机的定时闹钟 院 系:电气工程 专 业:电子信息工程 年 级: 姓 名: 指导教师: 课程设计任务书 专业电子信息工程姓名学号 开题 ...

  2. 单片机课程设计数字心率计_课程设计-基于单片机的数字人体心率计设计.doc

    课程设计-基于单片机的数字人体心率计设计 中北大学 基于单片机的心率计设计 课 程 设 计 说 明 书 2017年 6月30日 课 程 设 计 任 务 书 1.设计目的:通过本课程设计的学习,学生将复 ...

  3. 单片机c语言数字频率计的课程设计,基于单片机的简易数字频率计设计报告(最终版)最新版...

    <基于单片机的简易数字频率计设计报告.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的简易数字频率计设计报告(最终版)>相关文档资源请在帮帮文库(www.woc88 ...

  4. 单片机课程设计-基于单片机直流电机控制器设计

    本科单片机课程设计,附Proteus仿真效果图 要求: 思路很简单,使用定时器0控制单片机IO口输出不同占空比的触发脉冲即可控制转速 代码参考: #include <reg52.h>#de ...

  5. 单片机c语言数字频率计课程设计,基于单片机的数字频率计设计开题报告.doc

    基于单片机的数字频率计设计开题报告.doc 皖西学院本科毕业设计(论文)开题报告学院信息工程学院专业通信工程学生姓名裴晓晴学号2010013513指导教师傅思勇职称助教毕业设计(论文)题目基于单片机的 ...

  6. dac单缓冲方式C语言设计,课程设计基于DAC0832单缓冲工作波形发生器.doc

    课程设计基于DAC0832单缓冲工作波形发生器.doc 成绩 课程论文 题 目:基于DAC0832单缓冲工作波形发生器 学生姓名: 学生学号: 系别:电子工程学院 专业:通信工程 年级:2014 任课 ...

  7. android大作业闹钟的功能,定时闹钟课程设计大作业.doc

    定时闹钟课程设计大作业 微型计算机控制 技术大作业 设计题目: 定时闹钟课程设计 院 系:计算机科学与信息工程学院 学生姓名: 曹紫莹 学 号: 201103010036 专业班级: 计算机科学与技术 ...

  8. 计算机组成原理认识fpga,计算机组成原理课程设计-基于EDA和FPGA技术的8位模型计算机的设计与实现_精品.doc...

    计算机组成原理课程设计-基于EDA和FPGA技术的8位模型计算机的设计与实现_精品 目录 前言2 第一章 课程设计内容2 1.1 实验要求2 1.2 实验目的2 第二章 实验原理及方案2 2.1 实验 ...

  9. Java课程设计基于ssm的微信小程序

    Java课程设计, 基于ssm的微信小程序 后端涉及技术spring.mysql等 效果查看请扫一扫 喜欢可以点赞哟

最新文章

  1. 16岁自闭少年被指黑掉英伟达微软,曾赚1400万美元,英国警方逮捕7人
  2. GitHub热榜第一,标星近万:这个用Python做交互式图形的项目火了
  3. 记住密码后input黄色背景处理
  4. Python之IO编程
  5. oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...
  6. Java对象序列化的本机C / C ++类似性能
  7. 网络光端机产品特点及实际应用范围详解
  8. python怎么发送邮件_在Python如何使用SMTP发送邮件
  9. 美团Android自动化之旅—适配渠道包
  10. Java动态代理全面分析
  11. Arcgis使用DEM数据计算坡度
  12. ubantu 终端屏幕查找字符串
  13. Android Beam 文件传输失败分析与解决
  14. 零基础学python这本书怎么样-怎样学 Python?
  15. 【uniapp】小程序添加通过卡号查找银行名并添加绑定等逻辑
  16. SOFARPC —— SPI 解析
  17. node-webkit:开发桌面+WEB混合型应用的神器
  18. CondaSSLError: OpenSSL appears to be unavailable on this machine
  19. 《月薪5千与月薪5万的文案区别》!如何用立体思维去解决问题
  20. 零基础入门金融风控-贷款违约预测

热门文章

  1. 东莞市重点培育上市后备科技企业名单(科技局)
  2. Github解除账号被封的方法
  3. mysql索引 b树_B树与MySQL数据库索引.ppt
  4. 实验4-1-12 黑洞数 (20 分)
  5. 什么是 java 序列化?什么情况下需要序列化?
  6. 如何看待快码编程这一款中文多平台编程工具
  7. ln -sf是永久生效的吗linux,ln -s 软连接介绍
  8. 【哈工大SCIR笔记】机器阅读理解简述
  9. html5在线显示word文档,JS实现获取word文档内容并输出显示到html页面示例
  10. JS 获取第一个和最后一个,子节点、子元素