单片机自动打铃系统设计资料.docx

上传人:b****5 文档编号:6650160 上传时间:2023-01-08 格式:DOCX 页数:26 大小:359.20KB
下载 相关 举报
单片机自动打铃系统设计资料.docx_第1页
第1页 / 共26页
单片机自动打铃系统设计资料.docx_第2页
第2页 / 共26页
单片机自动打铃系统设计资料.docx_第3页
第3页 / 共26页
单片机自动打铃系统设计资料.docx_第4页
第4页 / 共26页
单片机自动打铃系统设计资料.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

单片机自动打铃系统设计资料.docx

《单片机自动打铃系统设计资料.docx》由会员分享,可在线阅读,更多相关《单片机自动打铃系统设计资料.docx(26页珍藏版)》请在冰豆网上搜索。

单片机自动打铃系统设计资料.docx

单片机自动打铃系统设计资料

自动打铃系统

----学校上下课自动打铃设计

设计人:

 

要求:

(1)实现上下课的打铃,并通过语音提示上下课;

(2)按下开机键,显示当前年月日时间,在LCD液晶屏显示年,月,日,星期,时,分,秒,年-月-日-星期显示在第一行,格式xx-xx-xx-星期x;时分秒显示在第二行,格式xx-xx-xx(24小时格式);

(3)能够设置当前时间;

(4)使用语音芯片提示上下课,上课时提示:

“亲爱的同学们,上课了”,重复2遍,下课时提示:

“亲爱的同学们,下课了“,重复2遍。

(5)允许使用时钟芯片。

 

《摘要》

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

如果石英晶体振荡器的频率信号为6MHZ,设定定时器定时工作方式1下,定时器为3CBOH,则定时器每100ms产生1次中断,在定时器的中断定时处理程序中,每10次中断,则向秒计数器加1,秒计数器计数到60则向分计数器进位(并建立分进位标志),分计数器计数自动打铃系统,是以一片8位单片机为核心的实时时钟及控制系统。

我们知道到60,则向时计数器进位,如此周而复始的连续计数,便可获得时、分、秒的信号,建立一个实时时钟。

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

《关键词》

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

 

《引言》

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

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

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

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

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

第一章设计方案论证

1.1《设计要求》

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

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

可分为:

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

(以信息科学与技术学院的打铃情况设计

内容

时间

起床

8:

10

早自习

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

1.2《设计方案选择》

1.2.1方案一:

数字电路设计的自动打铃系统

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

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

1.2.2方案二:

基于单片机的自动打铃系统设计

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

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

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

1.2.3方案确定

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

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

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

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

1.3《基本方案》

1.3.1设计课题简要概述

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

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

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

1.3.2系统软硬件划分

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

1.3.3单片机选型

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

 

1.4总体设计框图

图一整体框图

 

第二章硬件电路设计

2.1基本原理概述

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

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

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

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

由于动态显示法需要数据所存等硬件,接口较复杂,考虑显示只有六位,且系统没有其他浮躁的处理程序,所有采用动态扫描LED的显示。

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

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

2.2.1主控器AT89C52

 

AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

2.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脚SOIC150mi

 

 

2.3单元电路的设计

2.3.1显示电路

显示部分采用1602采用标准的16脚接口,其中:

第1脚:

VSS为电源地

第2脚:

VCC接5V电源正极

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6脚:

E(或EN)端为使能(enable)端,高电平

(1)时读取信息,负跳变时执行指令

 

普通的LCD1602显示

2.3.2键盘接口电路设计

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

\

 

图五按键电路

 

2.3.3响铃电路设计

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

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

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

 电路原理图使用SH69P43为控制芯片,使用4MHz晶振作为主振荡器。

 

     PORTC.3/T0作为I/O口通过三极管Q2来驱动蜂鸣器LS1,而PORTC.2/PWM0则作为PWM输出口通过三极管Q1来驱动蜂鸣器LS2。

另外在PORTA.3和PORTA.2分别接了两个按键,一个是PWM按键,是用来控制PWM输出口驱动蜂鸣器使用的;另一个是PORT按键,是用来控制I/O口驱动蜂鸣器使用的。

连接按键的I/O口开内部上拉电阻。

 

     先分析一下蜂鸣器。

所使用的蜂鸣器的工作频率是2000Hz,也就是说蜂鸣器的驱动信号波形周期是500μs,由于是1/2duty的信号,所以一个周期内的高电平和低电平的时间宽度都为250μs。

软件设计上,将根据两种驱动方式来进行说明。

 

     a)蜂鸣器工作原理:

PWM输出口直接驱动蜂鸣器方式

 

     由于PWM只控制固定频率的蜂鸣器,所以可以在程序的系统初始化时就对PWM的输出波形进行设置。

 

     首先根据SH69P43的PWM输出的周期宽度是10位数据来选择PWM时钟。

系统使用4MHz的晶振作为主振荡器,一个tosc的时间就是0.25μs,若是将PWM的时钟设置为tosc的话,则蜂鸣器要求的波形周期500μs的计数值为500μs/0.25μs=(2000)10=(7D0)16,7D0H为11位的数据,而SH69P43的PWM

  输出周期宽度只是10位数据,所以选择PWM的时钟为tosc是不能实现蜂鸣器所要的驱动波形的。

 

     这里将PWM的时钟设置为4tosc,这样一个PWM的时钟周期就是1μs了,由此可以算出500μs对应的计数值为500μs/1μs=(500)10=(1F4)16,即分别在周期寄存器的高2位、中4位和低4位三个寄存器中填入1、F和4,就完成了对输出周期的设置。

再来设置占空比寄存器,在PWM输出中占空比的实现是

 

     通过设定一个周期内电平的宽度来实现的。

当输出模式选择为普通模式时,占空比寄存器是用来设置高电平的宽度。

250μs的宽度计数值为250μs/1μs=(250)10=(0FA)16。

只需要在占空比寄存器的高2位、中4位和低4位中分别填入0、F和A就可以完成对占空比的设置了,设置占空比为1/2duty。

 

     以后只需要打开PWM输出,PWM输出口自然就能输出频率为2000Hz、占空比为1/2duty的方波。

 

     b)蜂鸣器工作原理:

I/O口定时翻转电平驱动蜂鸣器方式

 

     使用I/O口定时翻转电平驱动蜂鸣器方式的设置比较简单,只需要对波形分析一下。

由于驱动的信号刚好为周期500μs,占空比为1/2duty的方波,只需要每250μs进行一次电平翻转,就可以得到驱动蜂鸣器的方波信号。

在程序上,可以使用TIMER0来定时,将TIMER0的预分频设置为/1,选择TIMER0的始终为系统时钟(主振荡器时钟/4),在TIMER0的载入/计数寄存器的高4位和低4位分别写入00H和06H,就能将TIMER0的中断设置为250μs。

当需要I/O口驱动的蜂鸣器鸣叫时,只需要在进入TIMER0中断的时候对该I/O口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O口的电平设置为低电平即可。

不鸣叫时将I/O口的输出电平设置为低电平是为了防止漏电。

 

 

2.4总体运行进程

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

23-59-59。

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

系统使用了4个按键,3只按键用来调整时间,另一只为强制打铃按钮。

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

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

 

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

3.1基本原理概述

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

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

3.1.1中断服务程序设计

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

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

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

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

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

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

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

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

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

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

3.2流程图

3.2.1系统主程序流程图

3.2.2系统定时中断流程图

第四章系统程序设计

4.1程序设计概要

程序名称:

51单片机自动扫铃机控制系统

说明:

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

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

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

P3.7。

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

系统使用4只按键,3只按键用来调整时间,另一只为闹钟按钮即定时扫铃。

键SET_KFY:

PI.0;通过选择键选择调整位,选中位闪烁。

增加键ADD_KEY:

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

减少键DEC_KEY:

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

1

如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁。

如果选中位是秒,则按增加键或减少键都是将秒清零。

定时扫铃键DALING_KEY:

P1.3;用来强制打铃或强制关闭铃声PO口输出数码管段选信号,P2口输出数码管位选信号。

晶振12M

 

4.2源程序清单

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

#include"ds1302.h"

#include"delay.h"

#include"1602.h"

#include"i2c.h"

//管脚定义

sbitSPEAK=P3^7;//蜂鸣器

sbitKEY_SET=P3^2;//设置返回

sbitKEY_ENTER=P3^3;//确认下一个参数

sbitKEY_UP=P3^4;//增加

sbitKEY_DOWN=P3^5;//减小

sbitKEY_SAVE=P3^6;//保存

//按键菜单的数据定义

bitbSet_Time_Flag=0;//进入设置时间的标志位

bitbShow_Time_Flag=1;//进入设置时间的标志位

unsignedcharucPage=0;//页面菜单

unsignedcharucMenu_Count=1;//菜单的数据

bitbSet_Model_Frash=0;

//数据保存相关

#defineFLAG_ADDR250

#defineFLAG_DAT41

#defineMAX_LIST15

#defineStart_Time_First0//第一个保存的时间

//设置的时间缓存

idataunsignedcharucSave_Time_Set[16][3]={

{10,0,0},

{10,45,0},

{10,55,0},

{11,40,0},

{12,10,0},

{12,55,0},

{13,5,0},

{13,50,0},

/////////

{16,0,0},

{16,45,0},

{16,55,0},

{17,40,0},

{18,10,0},

{18,55,0},

{19,5,0},

{19,50,0}

};

//voidWrite_Time_Dat(unsignedcharucAddr,unsignedchar*ucSet_Time)

//数据定义

bitbRead_Time_Flag=1;

bitbSave_Dat_Flag=0;//保存标志位

unsignedchartime_use_Set[8];

unsignedchartime_use_Set_Dis[16];

/*------------------------------------------------

主函数

------------------------------------------------*/

//读取时间

voidRead_Time_Once(void);

//定时器初始化

voidInit_Timer0(void);

///按键扫描函数

voidKey_Scan(void);

voidDel_Time(unsignedcharucPage,unsignedcharucPositon,unsignedcharucHang_Num,charucDel_Fun);

//主函数入口

voidmain(void)

{

unsignedcharucGlobal_Dat=0;//临时使用的变量

SPEAK=1;

LCD_Init();//初始化液晶

DelayMs(20);//延时有助于稳定

LCD_Clear();//清屏

//////////

Ds1302_Init();//ds1302初始化

Ds1302_Read_Time();//首次读取时间

LCD_Write_String(0,0,"OPENSYSETM");

//之前没有写入时间就要写入时间

if(FLAG_DAT!

=read_IIC(FLAG_ADDR))//标志位没有写入

{

Ds1302_Write_Time();

write_IIC(FLAG_ADDR,FLAG_DAT);

for(ucGlobal_Dat=Start_Time_First;ucGlobal_Dat

{

Write_Time_Dat(ucGlobal_Dat,ucSave_Time_Set[ucGlobal_Dat/3]);

DelayMs

(2);

}

}

else

{

for(ucGlobal_Dat=Start_Time_First;ucGlobal_Dat

{

Write_Read_Dat(ucGlobal_Dat,ucSave_Time_Set[ucGlobal_Dat/3]);

}

}

/////////////

while

(1)//主循环

{

Key_Scan();

Read_Time_Once();

}

}

//bitbSet_Time_Flag=0;//进入设置时间的标志位

//unsignedcharucPage=0;//页面菜单

//unsignedcharucMenu_Count=0;//菜单的数据

///按键扫描函数

voidKey_Scan(void)

{

charcI=0;

if(KEY_SET==0)//设置

{

DelayMs(10);

if(KEY_SET==0)

{

LCD_Clear();

ucMenu_Count=1;

if(bSet_Time_Flag)//退出设置

{

bSet_Time_Flag=0;

ucMenu_Count=0;

bShow_Time_Flag=1;//不显示时间

ucPage=0;

LCD_Write_Com(0x0c);//归位

bSave_Dat_Flag=0;

}

else//进入设置

{

bSet_Time_Flag=

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

当前位置:首页 > 法律文书 > 辩护词

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

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