基于单片机的作息时间控制器系统设计.docx

上传人:b****6 文档编号:7420808 上传时间:2023-01-23 格式:DOCX 页数:24 大小:619.60KB
下载 相关 举报
基于单片机的作息时间控制器系统设计.docx_第1页
第1页 / 共24页
基于单片机的作息时间控制器系统设计.docx_第2页
第2页 / 共24页
基于单片机的作息时间控制器系统设计.docx_第3页
第3页 / 共24页
基于单片机的作息时间控制器系统设计.docx_第4页
第4页 / 共24页
基于单片机的作息时间控制器系统设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于单片机的作息时间控制器系统设计.docx

《基于单片机的作息时间控制器系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的作息时间控制器系统设计.docx(24页珍藏版)》请在冰豆网上搜索。

基于单片机的作息时间控制器系统设计.docx

基于单片机的作息时间控制器系统设计

重庆三峡学院

《基于单片机的作息时间控制器系统设计》

 

学院(系):

电子与信息工程学院

年级专业:

2011级电信(仪器仪表)

学号:

**********

*********

******

教师职称:

教授

成绩:

 

制作日期2014年10月29日

基于单片机的作息时间控制器系统设计

重庆三峡学院电子与信息工程学院文静

摘要

基于单片机的作息时间器系统,是以一片8位单片机为核心的实时时钟及控制系统。

我们知道单片机的外接石英晶体振荡器能提供稳定、准确的基准频率,并经12分频后向内部定时器提供实时基准频率信号,设定定时器工作在中断方式下,连续对此频率信号进行分频计数,便可得秒信号,再对秒信号进行计数便可得到分、时等实时时钟信息。

如果石英晶体振荡器的频率信号为6MHZ,设定定时器定时工作方式1下,定时器为3CBOH,则定时器每100ms产生1次中断,在定时器的中断定时处理程序中,每10次中断,则向秒计数器加1,秒计数器计数到60则向分计数器进位(并建立分进位标志),分计数器计数到60,则向时计数器进位,如此周而复始的连续计数,便可获得时、分、秒的信号,建立一个实时时钟。

接下来便可以进行定时处理和打铃输出,当主程序检测到有分进位标志时,便开始比较当前时间(小时与分、存放在RAM中)与信息时间表上的作息时间(小时与分,存放在ROM)是否相同,如有相同者,则进行报时处理并控制打铃,如有不相同则返回主程序,如此便实现了报时控制的要求。

关键词

单片机、时间设置电路、计时电路、显示电路、定时打铃控制电路

第一章引言

1.1课题背景

1.1.1选题背景

随着科技的不断发展,各种芯片都得到了很好的发展,80C51同样如此,从开始的无人问津到现在的随处可见,红绿灯,记分牌,电子秒表,遥控器,电饭煲,电视等只要是电子产品,都会和芯片有关,其实芯片并不是什么神秘的高科技,它只是里面装了一些己编好的程序而己.而这里要介绍的是用汇编语言来编程的一个系统,它能够让一个学校或企业集团实现打铃自动化,总之,一个需要时间系统的机构实现自动提醒功能。

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

而本文是用STC89C52单片机设计的一个自动打铃系统。

第二章设计方案论证

2.1设计要求

它可以作为时钟电路来显示时间,进行设置,定时打铃。

按照自顶向下设计方法划分自动打铃系统的功能。

可分为:

时间设置电路,计时电路,显示电路和定时打铃控制电路等。

以江苏信息职业技术学院的打铃情况设计

内容

时间

起床

6:

30

早自习

7:

30-8:

10

第一节课

8:

20-9:

00

第二节课

9:

10-9:

50

第三节课

10:

00-10:

40

第四节课

10:

50-11:

30

第五节课

13:

30-14:

10

第六节课

14:

20-15:

00

第七节课

15:

20-16:

00

第八节课

16:

10-16:

50

晚自习

19:

00-20:

30

熄灯

22:

30

2.2设计方案选择

2.2.1方案一:

数字电路设计的作息时间控制器系统

利用函数信号发生器来进行脉冲信号输出,利用74160N来设置十进制和六进制的进位输出。

利用数码显示器来显示时间,利用或门、与门、非门、与非门、等电路元件进行组合实现打铃的控制。

2.2.2方案二:

基于单片机的作息时间控制器系统设计

单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,没产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。

建立完一个实时时钟后接下来进行定时处理和打铃输出,当主程序检测到有分进位标志时,便开始比较当前时间与信息时间表上的作息时间是否相同,相同者,则进行报时处理并控制打铃,不相同则返回主程序。

2.2.3方案确定

方案一的设计只能事先设定打铃时间不能完全自动打铃,且在修改打铃时间上存在一定的困难。

而方案二中的设计能完全实现自动化,诠释了我们这次毕业设计的主题。

并在修改打铃时间上有了很大的方便,只需修改一部分程序便能实现不同的需要。

因此我选择方案二进行设计。

2.3基本方案

2.3.1设计课题简要概述

作息时间控制器系统装置用于工厂、学校等地的时间控制,本设计是按照学校作息时问设定的,模拟了电了钟显示时、分、秒。

还根据学校的作息时间按时打铃,本系统有4个按钮,分别用来调时、调分、秒和强制打铃及强制关铃,以保证始终与标准时间相吻合。

首先设计出本系统的硬件基本框图,根据框图设计电气原理图,简要概述基本原理,按照设计技术参数设计出各部分程序。

2.3.2系统软硬件划分

由于需要最小系统设计,因此,极大地介于系统的硬件成本,所有能用软件实现的功能都用软件完成,如按键的去抖,采用延时,显示部分用动态显示等,这样硬件部分的设计可以采用单片机最小系统,所谓最小系统时仅有程序存储器和时钟及复位电路的单片机系统。

2.3.3单片机选型

根据课题的具体内容,任务要求,计时、校时、定时、键盘显示等功能,经多方面考虑,所选系统选项用.与MSC-51单片机完全兼容的STC89C52低功耗单片机。

2.4总体设计框图

图一整体框图

第三章硬件电路设计

3.1基本原理概述

本系统主要由主控模块,时钟模块,显示模块,键盘接口模块等4部分构成。

通过内部定时产生中断,从而使驱动电铃打铃。

设定51单片机工作在定时器工作方式1,每100ms产生一次中断,利用软件将基准100ms单元进行累加,当定时器产生10次中断就产生lS信号,这是秒单元加1。

同理,对分单元和时单元计数从而产生秒,分,时的值,通过六位七段显示器进行显示。

由于动态显示法需要数据所存等硬件,接口较复杂,考虑显示只有六位,且系统没有其他浮躁的处理程序,所有采用动态扫描LED的显示,但为了能更好的区分,年月日,时分秒,在时间间隔中间加入间隔符号,因此采用8位数码管。

本系统采用四个按键,当时钟时间和设置时间一直时,驱动程序动作,进行打铃,每次打铃30S

3.2主要原件参数及功能简介

3.2.1主控器STC89C52

STC89C52公司生产的STC89C52单片机用高性能的静态89C51设计,由先进工艺制造,并带有非易失性FLASH程序存储器,它是·种高性能、低功耗的8位CMOS微处理芯片,市场应用最多,主要特点有:

有4K的FLASH程序存储器

256字节内部RAM

电源控制模式:

时钟可停止和恢复,空闲模式,掉电模式

6个中断源

4个中断优先级

4个8位I/O口

全双工增强型UART

2个16位定时、计数器

图二STC89C52

3.2.2DS1302

1)性能特性

DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:

1.RSE复位,2.I/O数据线,3.SCLK串行时钟。

时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。

DS1302工作时功耗很低,保持数据和时钟信息时功率小十1mW。

提供秒分时日日期。

月年的信息,每月的天数和闰年的天数可自动调整时钟,操作可通过AM/PM指示决定采用24或12小时格式。

2)管脚描述

XIXZ32.768KHz晶振管脚

GND接地

RST复位脚

I/O数据输入/输出引脚

SCLK串行时钟

Vcc1,Vcc2电源供电管脚

DS1302串行时钟芯片8脚DIP

DS1302S串行时钟芯片8脚SOIC200mil

DS1302Z串行时钟芯片8脚SOIC150mil

图三DS1302

3.3单元电路的设计

3.3.1显示电路设计

显示部分采用普通的STC89C52显示

图四显示电路

 

显示部分采用2块4位数码管,即8位共阳数码显示,由STC89C52芯片对该数码管传送数据。

而在P2口接入8个三极管对数码管的位控进行控制。

该显示采用的是动态显示,段控和位控都经过反相器,显示的字形代码是共阳的显示代码,位控信号输出时是高电平有效,在校时时,采用的是点亮小数点信位调节器标志,哪位小数点亮表示调整的是该位的值。

3.3.2键盘接口电路设计

由于键盘只有四个,采用独立式按钮,用查询法完成读健功能。

图五按键电路

各键功能已写入程序,在使用按键的时候,根据有无按键否,一一进行判断,软件中采用if嵌套模式,因此使各按键的功能具有多样性和课重复使用性。

因本次实训的课题,为实现,年月日,时分秒等时间的调试,系统使用5只按键,4只按键用来调整时间,且其中一只在不设置时间的情况下可为强制打铃,另一只单独连接,可实行复位和强制结束打铃。

通过选择键选择调整位,选中位闪烁,按增加键为选中位加1,按减少键为选中位减1。

按强制打铃按钮是实现强制打铃或者强制关闭打铃。

3.3.3响铃电路设计

响铃电路用到了蜂鸣器、三极管、1K电阻。

蜂鸣器两端分别接地和三极管。

三极管一段电源另一端与电阻相连并接入STC89C52的P3.7接口。

图六响铃电路

3.4总体运行进程

首先实现24小时制电子钟,在8位数码管显示,显示为时分秒,实现的格式为:

23-59-59。

到达预定时间启动蜂鸣器开始打铃,打铃的方式分为起床、熄灯和上下课铃两种。

系统使用5只按键,4只按键用来调整时间,且其中一只在不设置时间的情况下可为强制打铃,另一只单独连接,可实行复位和强制结束打铃。

通过选择键选择调整位,选中位闪烁,按增加键为选中位加1,按减少键为选中位减1。

按强制打铃按钮是实现强制打铃或者强制关闭打铃。

第四章软件电路设计及流程图

4.1基本原理概述

主程序首先是初始化部分,主要是计时单元清零,中断初始化,堆栈指针初始化,启动定时器工作,然后是调用显示子程序。

主程序的起始存储地址是0000H单元,但由于本系统用了定时器T0的中断,中断服务程序入口地址为000BH,因此从0000H单元起存放一条短调转指令AJMP,使真正的主程序从0300H单元开始存放。

4.1.1中断服务程序设计

单片机内部的定时/计数器T0定时100ms,即0.1s,10次中断即为1秒,60秒为1分,60分为1小时,24小时为一天,如此循环,从而实现计时功能。

编写中断服务程序关键要注意:

1.现场保护,本系统中是累加器A和程序状态字PSW值的保护。

2.计时处理时采用的确十进制,因此时,分,秒单元加1后要进行十进制调整,即要执行DAA指令,还要注意的是时计到24就回零,分和秒计到60就回零。

3.中断返回前的现场恢复。

4.1.2显示程序设计和按键判断与按键处理程序设计

显示采用的是动态显示,段控和位控都经过反相器,显示的字形代码是共阳的显示代码,位控信号输出时是高电平有效,在校时时,采用的是点亮小数点信位调节器标志,哪位小数点亮表示调整的是该位的值。

显示子程序的第一部分是拆字,显示缓冲区是2FH—2AH;第二部分是查字型码,输出段控和位控信号,由于采用的是动态显示,所以每出输出一位的段控和位控信号要延时一定的时间,使LED显示器显示的字符时稳定的。

按键判断程序有编写时应注意按键的去抖动,该系统采用的是延时去抖动的方法,延时是通过调用子程序来实现的,每个按键按下后都要等待释放后再返回。

按键处理程序中的按键式校时的,所以进入按键处理程序后就关闭定时中断,对于动能键注意设置显示标志。

4.2流程图

4.2.1系统主程序流程图

图7主程序流程图

4.2.2系统定时中断流程图

图8中断流程图

第五章系统程序设计

5.1程序设计概要

程序名称:

基于单片机的作息时间器系统设计

说明:

实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:

23-59-59(小时十位如果为0则不显示)。

到预定时问启动蜂鸣器模拟打铃,蜂鸣器BEEP:

P3.7。

打铃方式分起床、熄幻铃和上、下课铃两种。

系统使用5只按键,4只按键用来调整时间,且其中一只在不设置时间的情况下可为强制打铃,另一只单独连接,可实行复位和强制结束打铃。

键SET_KFY:

PI.0;通过选择键选择要调的时间,选中位闪烁。

可调整年月日,时分秒,周期和预设闹钟时间。

键SET_KFY:

PI.1;通过选择键选择调整位,选中位闪烁,且在1键选择到设置闹钟时间时可跳出预设闹钟时间。

增加键ADD_KEY:

PI.2;按一次使选中位加1。

减少键DEC_KEY:

PI.3;按一次使选中位位。

1,且具有强制打铃效果

5.2源程序清单

#include//调用单片机头文件

#defineucharunsignedchar//无符号字符型宏定义变量范围0~255

#defineuintunsignedint//无符号整型宏定义变量范围0~65535

#include"eeprom52.h"

 

//数码管段选定义0123456789

ucharcodesmg_du[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa,0x20,0x28,

0x30,0x25,0xe4,0x23,0x64,0x74,0xff};//断码

 

//数码管位选定义

ucharcodesmg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选定义

uchardis_smg[8]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xBa};

ucharsmg_i=8;//显示数码管的个位数

bitflag_200ms;

bitflag_100ms;

bitflag_500ms;//500ms标志位

sbitbeep=P3^7;//蜂鸣器定义

bitflag_beep_en;

uintclock_value;//用作闹钟用的

ucharflag_s=0x03;//控制数码管闪烁的变量

ucharflag_nl;//农历阳历显示标志位

ucharmenu_1,menu_2,menu_i;

 

sbitdat0=B^0;

sbitdat1=B^1;

sbitdat2=B^2;

sbitdat3=B^3;

sbitdat4=B^4;

sbitdat5=B^5;

sbitdat6=B^6;

sbitdat7=B^7;

uchardaling_geshu=0;

ucharfen1,shi1;//第1个打铃的时间起床

ucharfen2,shi2;//第2个打铃的时间早自习

ucharfen3,shi3;//第3个打铃的时间早自习下

ucharfen4,shi4;//第4个打铃的时间第一节上课

ucharfen5,shi5;//第5个打铃的时间第一节下课

ucharfen6,shi6;//第6个打铃的时间第二节上课

ucharfen7,shi7;//第7个打铃的时间第二节下课

ucharfen8,shi8;//第8个打铃的时间第三节上课

ucharfen9,shi9;//第9个打铃的时间第三节下课

ucharfen10,shi10;//第10个打铃的时间第四节上课

ucharfen11,shi11;//第11个打铃的时间第四节下课

ucharfen12,shi12;//第12个打铃的时间第五节上课

ucharfen13,shi13;//第13个打铃的时间第五节下课

ucharfen14,shi14;//第14个打铃的时间第六节上课

ucharfen15,shi15;//第15个打铃的时间第六节下课

ucharfen16,shi16;//第16个打铃的时间第七节上课

ucharfen17,shi17;//第17个打铃的时间第七节下课

ucharfen18,shi18;//第18个打铃的时间第八节上课

ucharfen19,shi19;//第19个打铃的时间第八节下课

ucharfen20,shi20;//第20个打铃的时间晚自习上课

ucharfen21,shi21;//第21个打铃的时间晚自习下课

ucharfen22,shi22;//第22个打铃的时间熄灯

ucharfen23,shi23;//第23个打铃的时间

ucharfen24,shi24;//第24个打铃的时间

ucharfen25,shi25;//第25个打铃的时间

ucharfen26,shi26;//第26个打铃的时间

#include"ds1302.h"

/******************把数据保存到单片机内部eeprom中******************/

voidwrite_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000,fen1);//第1个打铃的时间

byte_write(0x2001,shi1);

byte_write(0x2002,fen2);//第2个打铃的时间

byte_write(0x2003,shi2);

byte_write(0x2004,fen3);//第3个打铃的时间

byte_write(0x2005,shi3);

byte_write(0x2006,fen4);//第4个打铃的时间

byte_write(0x2007,shi4);

byte_write(0x2008,fen5);//第5个打铃的时间

byte_write(0x2009,shi5);

byte_write(0x2010,fen6);//第6个打铃的时间

byte_write(0x2011,shi6);

byte_write(0x2012,fen7);//第7个打铃的时间

byte_write(0x2013,shi7);

byte_write(0x2014,fen8);//第8个打铃的时间

byte_write(0x2015,shi8);

byte_write(0x2016,fen9);//第9个打铃的时间

byte_write(0x2017,shi9);

byte_write(0x2018,fen10);//第10个打铃的时间

byte_write(0x2019,shi10);

byte_write(0x2020,fen11);//第11个打铃的时间

byte_write(0x2021,shi11);

byte_write(0x2022,fen12);//第12个打铃的时间

byte_write(0x2023,shi12);

byte_write(0x2024,fen13);//第13个打铃的时间

byte_write(0x2025,shi13);

byte_write(0x2026,fen14);//第14个打铃的时间

byte_write(0x2027,shi14);

byte_write(0x2028,fen15);//第15个打铃的时间

byte_write(0x2029,shi15);

byte_write(0x2030,fen16);//第16个打铃的时间

byte_write(0x2031,shi16);

byte_write(0x2032,fen17);//第17个打铃的时间

byte_write(0x2033,shi17);

byte_write(0x2034,fen18);//第18个打铃的时间

byte_write(0x2035,shi18);

byte_write(0x2036,fen19);//第19个打铃的时间

byte_write(0x2037,shi19);

byte_write(0x2038,fen20);//第20个打铃的时间

byte_write(0x2039,shi20);

byte_write(0x2040,fen21);//第21个打铃的时间

byte_write(0x2041,shi21);

byte_write(0x2042,fen22);//第22个打铃的时间

byte_write(0x2043,shi22);

byte_write(0x2044,fen23);//第23个打铃的时间

byte_write(0x2045,shi23);

byte_write(0x2046,fen24);//第24个打铃的时间

byte_write(0x2047,shi24);

byte_write(0x2048,fen25);//第25个打铃的时间

byte_write(0x2049,shi25);

byte_write(0x2050,fen26);//第26个打铃的时间

byte_write(0x2051,shi26);

byte_write(0x2058,a_a);

}

/******************把数据从单片机内部eeprom中读出来*****************/

voidread_eeprom()

{

fen1=byte_read(0x2000);//第1个打铃的时间

shi1=byte_read(0x2001);

fen2=byte_read(0x2002);//第2个打铃的时间

shi2=byte_read(0x2003);

fen3=byte_read(0x2004);//第3个打铃的时间

shi3=byte_read(0x2005);

fen4=byte_read(0x2006);//第4个打铃的时间

shi4=byte_read(0x2007);

fen5=byte_read(0x2008);//第5个打铃的时间

shi5=byte_read(0x2009);

fen6=byte_read(0x2010);//第6个打铃的时间

shi6=byte_read(0x2011);

fen7=byte_read(0x2012);//第7个打铃的时间

shi7=byte_read(0x2013);

fen8=byte_read(0x2014);//第8个打铃的时间

shi8=byte_read(0x2015);

fen9=

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

当前位置:首页 > 高等教育 > 理学

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

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