定时计数器实现时钟功能.docx
《定时计数器实现时钟功能.docx》由会员分享,可在线阅读,更多相关《定时计数器实现时钟功能.docx(19页珍藏版)》请在冰豆网上搜索。
定时计数器实现时钟功能
1.绪论
2.系统方案选择和论证
2.1设计要求
随着人们生活水平的提高,对家用电器开关的要求也越来越高,使用无线方式控制家电更加方便,而且安全性能高,因此,设计一种智能开关控制器,要求具有定时控制功能,实时显示时分秒,建议使用时钟芯片;具有无线控制功能,方便人们生活,真正实现智能家居。
2.2方案选择和论证
根据设计要求,初步设计方案主要分为遥控模块和开关模块两个部分,遥控模块具体分为主控芯片、时钟模块、显示模块、按键模块、无线模块这五个部分,开关模块又具体分为主控芯片、继电器模块、无线模块这三个部分,系统框图如图所示:
图2.1遥控模块系统框图
图2.2开关模块系统框图
2.2.1主控芯片的选择说明
AT系列和STC系列的选择:
AT89C系列的单片机不能进行在线编程,AT89S系列和STC系列都可以ISP在线编程,而STC可通过串口在线编程,而AT系列采用并口编程方式,相对来说,STC的编程方式更为简单也较普遍,基于这一点,我选择STC系列。
51和52系列的选择:
51系列具有4KROM存储空间,而52系列有8KROM存储空间,容量较51来说更大一些。
根据以上分析,拟采用STC89C52芯片,STC89C52是一款低功耗,高性能的8位CMOS微控制器,具有8K可编程Flash存储器,方便下载程序,性价比高,能较好的适应本实验要求。
2.2.2时钟芯片的选择说明
方案一:
采用单片机内部定时计数器实现时钟功能,通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。
方法较为简单,节约芯片,但在时间精度上必然与实际时间有差距,不符合设计中对实时显示的要求,故不采用此方案。
方案二:
采用DS1302实时时钟芯片,DS1302可提供精准的秒、分、时、日、星期、月、年信息,耗电低,工作电压宽,有内部寄存器用于存放定时信息,可实现对开关的定时要求。
2.2.3显示模块的选择说明
方案一:
采用LED数码管显示。
LED数码管具有亮度大,接口电路简单,价格便宜等优点,但它只能显示数字和简单字母,而设计中要求显示时、分、秒、年、月、日等多个信息,使用数码管的话会使电路庞杂,而且连线复杂,单片机接口也不够使用,故不采用此方案。
方案二:
采用LCD1602液晶屏显示。
LCD1602是使用非常普遍的液晶显示屏,显示内容多,功能强大,主要用来显示数字,字母,专用字符和图形,具有显示质量高、功耗低、体积小等优点,此外,LCD1602采用数字式接口,与单片机连线简单,故采用LCD1602来显示时钟。
2.2.4无线模块选择说明
方案一:
采用红外
方案二:
采用AS13-TTL串口无线模块。
AS13-TTL串口无线模块是一款中心频率为433MHz的无线通信模块,具有TTL电平的串口通信接口,采用目前较新的射频芯片,传输距离远,具有控制模式和传输模式两种工作方式,可以随时进行参数配置,采用串口通信方式,因此无需配置程序,使用简单,功能强大,故采用方案二来实现无线传输。
2.2.5继电器模块的选择说明
2.3最佳主体方案
本次设计的智能开关控制器主要由遥控部分和开关部分构成,遥控部分由STC89C52作为硬件核心,实现对各个模块的控制,通过读取DS1302时钟芯片上的时钟信息,再控制LCD1602对时间进行显示,把定时时间写进DS1302寄存器,通过与实时时间进行对比,当闹钟时间与实时时间相等时,单片机控制无线模块发送信号给另一个无线模块,接收到信号后,控制开关部分的继电器吸合或张开,此外,按键电路可以调时和设定闹钟,同时可以手动控制电路,从而满足自动和手动两种需求。
3.硬件设计及实现
本次设计的智能开关控制器硬件部分主要由主控芯片(STC89C51)、时钟部分DS1302、显示部分LCD1602、按键电路、无线串口模块、和继电器开关部分组成。
各部分相互协作,构成有机统一的整体,从而实现无线定时控制开关的功能。
3.1单片机外围电路设计
STC89C52是由深圳宏晶科技公司生产的与工业标准MCS-51指令集和输出管脚相兼容的单片机。
最小系统是指能进行正常工作的最简单电路。
3.1.1复位电路
单片机外围需要一个复位电路,复位电路的功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
下图为复位电路图:
3.1单片机复位电路图
3.1.2时钟电路
时钟电路单片机引脚18和引脚19外接晶振及电容,STC89C52芯片的工作频率可在2~33MHz范围之间选,单片机工作频率取决于晶振XT的频率,通常选用11.0592MHz晶振。
两个小电容通常取值3pF,以保证振荡器电路的稳定性及快速性。
下图位时钟电路图:
图3.2单片机时钟电路图
此设计中P0口做为输出口用来驱动LCD显示,而P0口内部又没有上拉电阻,所以加上10K上拉电阻。
下图为最小系统电路图:
图3.3单片机最小系统
3.2遥控部分
遥控部分主要由单片机控制DS1302、LCD1602、和串口无线模块实现实时显示和定时控制,控制五个独立按键实现手动控制开关,各模块硬件电路设计如下:
3.2.1DS1302外围电路设计
1)DS1302简介
DS1302是美国DALLAS公司推出的一种低功耗,高性能的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天可以自动调整,工作电压宽达2.5-5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力,DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,基于这一点,DS1302可以实现定时功能,通过记录的定时时间与实时时间比对,实现定时时间到后,发出信号,下图为DS1302内部结构和引脚图:
引脚号
名称
功能
1
VCC1
备份电源输入
2
X1
32.768KHz晶振输入
3
X2
32.768KHz晶振输出
4
GND
地
5
RST
控制移位寄存器/复位
6
I/O
数据输入/输出
7
SCLK
串行时钟
8
VCC2
主电源输入
2)DS1302读写和控制说明
DS1302的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。
每次仅写入或读出一个字节数据称为单字节操作,每次对时钟/日历的8字节或31字节RAM进行全体写入或读出的操作,称其为多字节操作方式。
当以多字节方式写时钟寄存器时,必须按数据传送的次序依次写入8个寄存器。
但是,当以多字节方式写RAM时,不必写所有31字节。
不管是否写了全部31字节,所写的每一个字节都将传送至RAM。
为了启动数据的传输,CE引脚信号应由低变高,当把CE驱动至逻辑1的状态时,SCLK必须为逻辑0,数据在SCLK的上升沿串行输入。
无论是读周期还是写周期,也无论送方式是单字节传送还是多字节传送,都要通过控制字指定40字节中的哪个将被访问。
在开始8个时钟周期把命令字(具有地址和控制信息的8位数据)装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据,所有的数据在时钟的下降沿变化。
所有写入或读出操作都是先向芯片发送一个命令字节。
对于单字节操作,包括命令字节在内,每次为2个字节,需要16个时钟;对于时钟/日历多字节模式操作,每次为7个字节,需要72个时钟;而对于RAM多字节模式操作,每次则为32字节,需要多达256个时钟。
控制字节最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6为0,表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始传输。
下表为DS1302的控制字:
表3.1DS1302控制字
1
RAM
A4
A3
A2
A1
A0
RD
CK
WR
3)DS1302寄存器
DS1302中与时间、日期有关的寄存器共有12个,其中7个存放数据的格式为BCD码格式,其读写地址如下表所示
表3.2DS1302寄存器读写地址
读寄存器
写寄存器
Bit7
Bit7
Bit7
Bit7
Bit7
Bit7
Bit7
Bit7
范围
81H
80H
CH
10秒
秒
00--59
83H
82H
10分
分
00--59
85H
84H
12
0
10
时
时
0--23
24
AM/PM
1--12
87H
86H
10日
日
1--31
89H
88H
10月
月
1--12
8BH
8AH
0
0
0
0
0
周
1--7
8DH
8CH
10年
年
00--99
8FH
8EH
WP
0
0
0
0
0
0
0
――
表2.3DS1302时钟寄存器
第一行秒寄存器,CH为时钟暂停标志位,该位为1时时钟停止,该位为0时时钟运行
第二行分寄存器,bit0~bit6表示分钟数,因采用BCD编码,所以低四位最大能表示的数字为9,计数满向高三位进1。
第三行时寄存器,12/24用来定义DS1302小时的运行模式,12小时模式下bit5为1表示PM下午,bit5为0表示AM上午
第八行控制寄存器,bit7是写保护位WP,当WP为1时,写保护位可防止对任一寄存器的写操作,在任何的对时钟和RAM的写操作之前,WP位必须为0
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
4)DS1302与单片机的接口电路
DS1302分别有SCLK、I\O、RST与单片机连接,X1与X2之间接32.768KHz晶振,具体电路如下图所示:
图3.4DS1302与单片机的接口电路
3.2.2LCD1602外围电路设计
1)LCD1602简介
工业字符型液晶,1602是指显示的内容为16*2,能同时显示两行,每行16个字符。
常见的1602字符液晶有两种,一种显示绿色背光黑色字体,另一种显示蓝色背光白色字体,目前市面上绝大多数基于HD44780液晶芯片控制,原理是完全相同的。
本课题所用1602液晶模块,显示屏是绿色背光黑色字体。
如图2.5所示
图3.51602字符液晶
2)LCD1602与单片机的接口设计
液晶显示器LCD1602与单片机STC89C52的接口由一组8位数据传输线和3跟控制线完成。
LCD1602的RS、RW、E分别由单片机的P1.2、P1.1、P1.0来控制,数据输入口DB0~DB7由P0.0~P0.7传输数据,因为是接在P0口,所以要接上拉电阻。
LCD1602与单片机的接口电路如图:
图3.6LCD1602与单片机的接口电路
3.2.3按键电路设计
本次设计的智能开关控制器共用到5个按键S1、S2、S3、S4、S5,分别与P1.4、P1.5、P1.6、P1.7、P3.4相接,S1为设置键,S2为数字加键、S3为确定键、S4为定时键,S5为手动控制键,具体按键电路如图:
图3.7按键电路
3.3开关部分
开关部分主要由STC89C52单片机、继电器和无线串口模块组成,受主控部分控制,从而实现对开关的智能和手动控制。
3.3.1继电器概述
3.3.2继电器外围电路
图3.8继电器外围电路
3.4无线模块外围电路
3.4.1AS13-TTL串口无线模块概述
AS13-TTL模块是泽耀科技有限公司推出的一款中心频率为433MHz的无线通信模块。
它具有TTL电平的串口通信接口,支持波特率为1200-115200多达7种波特率。
AS13-TTL采用目前较新的无线射频芯片,以及低功耗高性能单片机构成。
可与单片机直接相连,采用串口通信方式。
供电电压宽达3.0-5.2V,单次连续传输256字节。
下图为AS13-TTL模块的引脚图:
图3.9AS13-TTL模块的引脚图
3.4.2AS13-TTL模块工作模式介绍
AS13-TTL模块有两种工作模式,即控制模式和透传模式。
1)控制模式
当SET=0时,模块进入控制模式,在控制模式下,用户可以设置模块工作参数。
这些参数可以掉电保存。
AS13-TTL模块的设置步骤如下:
第一步:
将主机串口设置为9600、8、N、1;
第二步:
将SET引脚拉低,使SET=0;
第三步:
等待模块返回“START“字符;
第四步:
通过串口发送6字节设置数据到模块;
第五步:
若命令正确,模块返回“OK“,表示设置成功,否则模块返回”ERROR“,表示设置失败,参数未得到改变。
第六步:
发送读取命令,模块会将用户设置的参数返回。
根据433M频段的物理特性,其优点是距离远,穿透能力强,但当空中速率增大时,其通信可靠性和距离,穿透能力急剧下降,所以在修改参数的时候应该注意这一点。
2)透传模式
当SET=1时,模块工作于透明传输模式。
当向串口输入数据时,模块会自动转为发射状态,将这些数据通过无线发射出去。
发射完毕后,自动转为接收状态。
对方模块收到无线数据后,通过串口将这些数据发到主机。
模块串口、无线接口工作方式按照控制模式下所设置的参数。
此外,无线模块在带来极大便利的同时,也将带来数据延迟。
具体延时取决于参数设置。
3.4.3AS13-TTL模块与单片机连接
AS13-TTL模块可以与单片机UART串口进行连接,模块具有极大的电平适应性,5V和3.3V单片机均可使用,连接示意图如下:
图3.10AS13-TTL模块与单片机接口电路
P3为无线模块,AUX引脚用于连接单片机INT引脚,唤醒单片机接收串口数据,INT应该被设置为高电平触发。
SET引脚由单片机控制,透传模式下可将其悬空。
模块RXD、TXD与单片机RXD、TXD交叉连接。
4软件设计
4.1.主程序设计
智能开关控制器软件设计中分别定义了串口子程序、DS1302子程序、显示子程序、键盘扫描子程序、延时子程序、定时开关子程序,主程序通过调用这几个子程序实现设计要求的功能,延时子程序穿插于各个子程序之间频繁调用,故流程图中不再画出,具体流程图如图所示:
图4.1主程序流程图
4.2.串口传输子程序
串口子程又包括串口初始化,串口发送,串口中断三个子函数,当时钟时间到达定时时间时,调用串口发送子程序,当有数据传输过来的时候,系统调用串口中断函数,处理接收到的信息,控制开关。
串口初始化子程序:
voidUSART_Init(void)
{
TMOD=0x20;//将定时器1设置为方式2,8位自动重装模式
SCON=0x50;//串口控制寄存器,使串口工作在方式1,并且接受使能
PCON=0x00;//该寄存器第一位为串口波特率倍速控制位,这里不倍速
TH1=0xfd;//11.0592M晶振,波特率9600
TL1=0xfd;
TR1=1;//开启定时器1
ES=1;//开启串口中断
EA=1;//开启总中断
REN=1;
}
串口发送子程序:
voidSend_Dat(uintdat)
{
SBUF=dat;
while(TI==0);
TI=0;}
串口中断函数:
voidUSART_INTR()interrupt4//串口中断
{
if(RI)
{
RI=0;
P1=SBUF;
FS=SBUF;
K=SBUF;
FS=P1;
}
}
4.3DS1302子程序设计
单片机STC89C52对时钟芯片DS1302的控制需要通过程序驱动来实现,程序主要完成两个方面的任务:
①利用单片机实现对DS1302寄存器的地址定义和控制字的写入,②实现对DS1302的数据读取。
初始化DS1302要求
为低电平,SCLK为低电平。
被设置为高电平就启动了一个数据传送的过程。
SCLK的16个方波完成一次数据传送,前8个方波用于输入命令字节,后8个方波用于数据的输出或数据的输入。
在SCLK的上升沿,I/O线上的数据被送入DS1302;在SCLK的下降沿,DS1302输出数据在I/O线上。
DS1302程序流程图如图所示:
图4.2DS1302流程图
4.4LCD1602子程序设计
程序主要实现对信息的显示,包括年、月、日、星期和时间等信息,具体流程如图:
图4.3LCD1602程序流程图
4.5.按键扫描子程序
此次设计的智能开关控制器中共有5个按键,通过扫描各按键执行相应动作,具体流程如图:
图4.4按键扫描子程序流程图
4.6定时子程序
通过不断比对实时时间与定时时间,使其在两者时、分相等,秒为0时向串口发送数据,通过无线模块控制开关状态。
具体流程如下:
图4.6定时子程序流程图
5系统调试
系统调试主要分为软件调试和硬件调试两部分,在程序设计和硬件搭建好之后就可以进行系统调试了,软件调试主要是用Keil软件对程序进行编译和调试,该软件提供了一个集成开发环境uVision,它包括C编辑器、宏编辑器、连接器、库管理和一个功能强大的仿真调试器。
通过编译、运行,可以检查程序错误。
但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。
在软件调试过程中要仔细耐心,即便是多写或少些一两个字符,都无法编译成功。
而有时往往在Keil中编译、运行无错,但烧录到单片机中运行起来就会出错,很可能是编程时管脚或时序编辑得不对。
在编译之后,将程序导入proteus中,在事先画好的电路图中进行仿真。
软件调试完成之后,并不代表硬件就能成功,由于仿真软件中元件时序与实物并不是完全相符的,它们之间存在的时序的差异,因此,软件调试只是可以作为判断程序逻辑正确性的一个参考,具体时序上的问题,还得在硬件调试中进一步修改。
5.1、软件仿真调试
软件调试首先要在仿真软件平台上设计电路图,然后利用Keil软件编写程序,再进行编译,调试,导入proteus中进行调试,这种方法较为方便,在不用改变硬件电路的情况下就能实现,省时省力,大大提高了毕设效率。
无线串口模块无法进行仿真,因此,在软件调试中,我用了两个单片机进行双机通信,这样可以测试出串口的程序是否正确以及是否工作,下图为软件仿真电路图:
图5.1软件仿真电路图
5.2、硬件电路调试
单片机基础电路包括电源、单片机、外部时钟震荡电路、复位电路和外部接口电路。
调试过程需要注意以下几点:
(1).检查电源是否完好。
(2).单片机电源要连接正确,并且保证AT89C51的31号引脚接高电平。
AT89C51的31号引脚是外部程序存储器选择信号端,当该引脚为高电平时,单片机会一直从片内程序存储器内取指令。
(3).如果使用P0口做I/O口,要接上拉电阻。
(4).使用万用表排查电路中是否存在断路或者短路情况。
笔者在制作外部接口电路时使用的是排针,焊接时容易出现管脚之间短路,所以在上电以前必须先排查电路。
(5).编辑一个简单程序,上电运行,检查单片机是否正常工作,复位电路是否正确。
5.2.1LCD1602显示部分调试
显示部分电路硬件调试时应特别注意3管脚滑动变阻器的接法,2和15管脚之间接有一个10
的保护电阻,在和电源相接。
我们可以先下载一个简单的显示程序,对这一部分进行调试。
5.2.2DS1302时钟部分调试
该电路包含DS1302芯片、主电源、备用电源、晶振等部分。
在与单片机连接的过程中需要注意以下几点:
(1)清楚DS1302与单片机连接的管脚。
本设计定义为:
DS1302的SCLK连接P1.5,I/O连接P1.6,RST连接P1.7。
(2)注意电源正负极连接。
(3)DS1302接32.768KHz的晶振。
该晶振体型比较小,在焊接时要小心,注意不要将晶振引脚弄断。
同时也要尽量使晶振离DS1302的X1、X2引脚近距离焊接。
(4)编写DS1302的时钟/日历程序,只要求能够正确显示时间。
烧录进单片机,检查电路电源正负极连接是否正确,检查无误后可以上电检查。
5.2.3按键电路调试
按键电路一般来说不会出什么问题,我们可以用电压表测和各个开关相接的端口的电平,看其在工作时是否变化,也可用一个简单的按键程序来进行调试。
保证各个按键正常工作。
5.2.4无线通信调试
无线通信调试主要包括串口调试和无线模块的调试。
(1)先用导线将两个单片机的串口连接(注意是RXD和TXD交叉连接);
(2)编写简单串口子程序,上电运行,让两个单片机进行串口通信;
(3)对无线串口模块进行参数设置;
(4)再将无线串口模块与单片机相连,使单片机之间进行无线通信;
欢迎您的下载,资料仅供参考!