GND:
逻辑地;
SCL:
I2C总线时钟线;
SDA:
I2C总线数据线;
SQW/OUT:
方波/输出驱动器。
图2-2 DS1307引脚分布图
2.2.2 DS1307的内部结构
1.内部结构
DS1307芯片由晶体振荡器、电源控制器、I2C总线控制、分频处理、逻辑控制、RAM存储、多路选择器、时钟/日历寄存器、缓冲器组成,内部结构如图2-3所示。
图2-3 DS1307的内部结构
2.寄存器
DS1307有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81H~8DH,写时80H~8CH),存放的数据格式为BCD码形式,如表2-1所示。
表2-1 DS1307的日历、时间寄存器
地址
D7
D6
D5
D4
D3
D2
D1
D0
功能
取值范围
81H
CH
十位
个位
秒
00-59
83H
0
十位
个位
分
00-59
85H
0
12
十位
十位
个位
时
AM:
1-12
PM:
00-23
24
8B
0
0
0
0
0
星期
星期
01-07
87H
0
0
十位
个位
日
01-31
89H
0
0
0
十位
个位
月
01-12
8DH
十位
Year
年
00-99
8FH
OUT
0
0
SOWE
0
0
RS1
RS0
控制字
-
91H
RAM
56×8
00H-FFH
(1)小时寄存器(85H、84H)的位7用于定义DS1307是运行于12小时模式还是24小时模式。
当为高电平时,选择12小时模式。
在12小时模式时,位D5是
,当为1时,表示PM。
在24小时模式时,位5是第二个10小时位。
(2)秒寄存器(81H、80H)的位7定义为时钟暂停标志(CH)。
当该位置为1时,时钟振荡器停止,DS1307处于低功耗状态;当该位置为0时,时钟开始运行。
(3)控制寄存器(8FH、8EH)的位7是写保护位(WP),其它7位均置为0。
在任何的对时钟和RAM的写操作之前,WP位必须为0。
当WP位为1时,写保护位防止对任一寄存器的写操作。
2.2.3 DS1307的读写操作
DS1307是基于I2C总线接口的时钟芯片,软件上与I2C总线完全兼容。
1.I2C总线的驱动
I2C总线在传送数据时,必须确认传送数据的开始和结束。
而且每传送一个字节,要发送一个应答位(0);在一个周期发送结束后,要发送一个应答位
(1)。
具体如图2-4所示,三种信号的格式如下:
(1)启动信号:
当时钟总线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“启动”信号。
(2)停止信号:
当时钟总线SCL为高电平时,数据线SDA由低电平跳变为高电平定义为“结束”信号。
(3)应答位:
当主器件发送完一字节的数据后,后面必须跟一个应答位(ACK)。
在时钟高电平期间,如果数据线SDA为低电平代表一个字节的传送结束,并准备下一个要传送的字节;在时钟高电平期间,如果数据线SDA为低电平代表一个传送周期结束,准备下一个传送周期。
图2-4 I2C总线的数据传送格式
2.DS1307的写控制
图2-5是DS1307的写控制格式,首先发送启动信号,然后发送的第一个字节是用来控制芯片的地址以及读写控制位(D0:
0–写),之后是应答位,然后发送其它字节数据,在最后发送一个结束标志的应答位,紧跟着是停止信号。
S
1101000
0
A
XXXX
XXXX
A
XXXX
XXXX
A
XXXX
XXXX
A
XXXX
XXXX
A
P
图2-5 CPU写数据模式
3.DS1307的读控制
图2-6是DS1307的读控制格式,首先发送启动信号,然后发送的第一个字节是用来控制芯片的地址以及读写控制为(D0:
1–读),之后是应答位,然后发送其它字节数据,在最后发送一个结束标志的应答位,紧跟着是停止信号。
S
1101000
1
A
XXXX
XXXX
A
XXXX
XXXX
A
XXXX
XXXX
A
XXXX
XXXX
A
P
图2-6 CPU读数据模式
2.2.4 DS1307硬件电路设计
DS1307采用与CPU进行通信,电路连接简单。
DS1307的内部振荡电路结构如图2-7所示,在芯片内部连接有两个电容,目的是为了使晶振起振,所以在电路设计中就不需要另外再加电容了。
图2-7 DS1307的内部振荡电路
时钟模块电路如图2-8所示,其中晶振采用的是32.768kHz,经内部电路分频后可获得一个标准的秒脉冲信号;电阻R3、R4是I2C总线的上拉电阻。
图2-8 DS1307的电路连接
2.3 闹铃模块
系统采用蜂鸣器作为闹铃输出,电路连接如图2-9所示。
电路中采用PNP管Q1来控制蜂鸣器的开关,由图可以看出:
当P2.3引脚为高电平时,PNP管截止,蜂鸣器不工作;当P2.3引脚为低电平时,PNP管导通,蜂鸣器工作。
其中R9为限流电阻。
图2-9 闹铃电路
2.4 键盘模块
键盘模块设置了四个按键:
KEY1、KEY2、KEY3、KEY4。
其中KEY1为模式切换键,KEY2为设定值上升键,用KEY3为设定值减小键,KEY4是返回键。
电路连接如图2-10所示。
4个上拉电阻可以保证在没有按键输入时,进入单片机四个I/O口的按键状态均为高电平,防止干扰产生;当有按键按下时,相应的端口线状态转为低电平。
图2-10 键盘电路
2.5 LCD显示模块
LCD显示器分为字段显示和字符显示两种。
其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。
字符显示是根据需要显示基本字符。
本设计采用的是字符型显示。
系统中采用LCD1602作为显示器件输出信息,可以显示2行16个汉字。
与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富、不需要外加驱动电路等优点,是单片机应用设计中最常用的显示器件。
2.5.1 LCD1602的引脚功能
LCD1602模块的引脚如图2-11所示。
图2-11 LCD1602模块
其引脚功能如下:
RS:
数据和指令选择控制端,RS=0命令状态;RS=1数据;
R/W:
读写控制线,R/W=0写操作;R/W=1读操作;
A:
背光控制正电源;
K:
背光控制地;
E:
数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机间将进行一次数据交换;
DB0~DB7:
数据线,可用8位连接,也可只用高4位连接,节约单片机资源;
VDD:
电源端;
VEE:
亮度控制端(1-5V);
VSS:
接地端。
2.5.2 LCD1602的显示操作
1.四种基本操作
LCD有四种基本操作,具体如表2-2所示。
表2-2 LCD与单片机之间有四种基本操作
RS
R/W
操作
0
0
写命令操作(初始化,光标定位等)
0
1
读状态操作(读忙标志位)
1
0
写数据操作(要显示内容)
1
1
读数据操作(可以把显示存储区中的数据反读出来)
(1)读状态操作
执行读状态字操作,如表2-2所示须满足RS=0、R/W=1。
根据管脚功能,当为有效电平时,状态命令字可从LCD模块传输到数据总线。
同时可以保持一段时间,从而实现读状态字的功能。
如图2-12所示为读入状态字流程图。
图2-12 读入状态字流程图
(2)写命令操作
由表2-2可知当RS=0,R/W=0时,才可以通过单片机或用户指令把数据即命令,写到LCD模块,此时就对LCD进行调制。
可采用查询方式:
先读入状态字,再判断忙标志,最后写命令字。
1)命令字
表2-3所示为命令字,其主要介绍了指令名称、控制信号及控制代码。
其指令名称是指要实现的功能,控制代号是采用的十六进制的数值表示的。
a.清零操作是指输入某命令字后即能将整个屏幕显示的内容全部清除;
b.归home位:
将光标送到初始位;其中的*号为任意,高低电平均可;
c.输入方式:
设光标移动方向并指定整体显示,是否移动。
I/D=0:
减量方式,S=1:
移位,S=0:
不移位;
d.显示状态:
D指设置整体显示开关;C指设置光标显示开关;B指设置光标的字符闪耀;
e.光标画面滚动:
R/L指右移或左移;S/C指移动总体或光标;
f.功能设置:
DL接口数位,L指显示行数,F显示字型;
g.CGRAM地址设制:
相当于一个数据库,可以在其中选择所需要的符号;
h.DDRAM地址设制:
显示定位;
i.读BF和AC:
B为最高位忙的标志,F为标志位;
j.写数据:
将数据按要求写入到对应的单元;
k.读数据:
读相应单元内的数据。
表2-3 命令字
指令名称
控制信号
控制代码
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
清屏
0
0
0
0
0
0
0
0
0
1
归HOME位
0
0
0
0
0
0
0
0
1
*
输入方式设制
0
0
0
0
0
0
0
1
I/D
S
显示状态设制
0
0
0
0
0
0
1
D
C
B
无标画面滚动
0
0
0
0
0
1
S/C
RL
*
*
功能设置
0
0
0
0
1
DL
N
F
*
*
CGRAM地址设制
0
0
0
1
A5
A4
A3
A2
A1
A0
DDRAM地址设制
0
0
1
A6
A5
A4
A3
A2
A1
A0
读BF和AC
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
写数据
1
0
数据
读数据
1
1
数据
2)如图2-13为写命令字的流程图。
图2-13 写命令字流程图
3)定义光标位置
把显示数据要某个位置,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。
Set DDRAM address命令如表2-3所示。
光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式设置。
表2-4 SetDDRAMaddress命令
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
AC6
AC5
AC4
AC3
AC2
AC1
AC0
第1行DDRAM地址与第2行DDRAM地址并不连续。
如表2-4所示。
表2-5 DDRAM地址
row
1
2
3
4
5
…
14
15
16
line1
80H
81H
82H
83H
84H
…
8dH
8eH
8fH
line2
0c0H
0c1H
0c2H
0c3H
0c4H
…
0cdH
0ceH
0cfH
4)LCD初始化
从通电开始通过延时,先经过判忙后再进行功能设置,过一段时间后可以设制显示状态(如设置行、位或阵列)再经过延时后清屏后再可以设置输入方式,具体如图2-14所示。
图2-14 LCD初始化流程图
2.LCD显示程序设计
LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,LCD就可以按如图2-15显示。
图2-15 LCD显示程序流程图
2.6 电源模块
用220V市电经整流、滤波、稳压后,输出稳定的+5V的直流电为其供电。
+5V稳压器采用CW7805,其应用电路如图2-16所示。
图中,滤波电容C6和C8的值为1000uF,C7和C9为0.33uF。
发光二极管D6的作用是显示读写器的电源是否接通,若接通则D6灯亮,无接通则D6灯灭。
图2-16 电源电路图
第3章 软件设计
系统的软件设计可以分为几个部分,首先编写各个模块的底层驱动程序,而后是系统联机调试,编写上层系统程序。
本系统软件程序主要包括:
液晶LCD1602的底层驱动模块、时钟芯片DS1307的底层驱动模块、键盘扫描及键值处理模块、闹钟模块等。
3.1 系统流程图
系统的软件主流程图如图3-1所示。
图3-1 主程序流程图
3.2 液晶显示模块流程图
液晶显示模块包括了LCD初始化、光标的设定、确定显示字符、具体流程图如图2-15所示。
3.3 键盘处理模块流程图
系统设制了四个按键,分别是功能设置、定值上升、定值下降和返回键。
整个系统的软件设计均采用C语言开发,采用查询的方式对按键状态进行扫描,确保系统的实时性。
因此这些器件的底层程序均可以移植到其它系统中,这就是采用C语言开发的最大的优点。
键盘处理流程图分别如图3-2、3-3、3-4、3-5所示。
图3-2 时间设置模块
图3-3 日期设置流程图
图3-4 星期设置流程图
图3-5 闹钟设置流程图
第4章软件设计
4.1软件系统方框图
系统软件程序设计主要包括:
主程序设计,延时0.5S子程序,延时0.001S程序等等;软件框图如4-1所示
图4.1
4.2中断延时程序
彩灯延时闪烁的实现,延时子程序的调用实际上就是寄存器在MCS-51单片机中,从中断请求发生到被响应,从中断响应到转到执行中断服务程序,采样是中断出理的第一步他是针对外中断请求信号进行的。
如下图4-2所示
图4-2主程序调用子程序图
4.3仿真环境Professional仿真软件
图4-3-aProfessional仿真环境
第4章 系统测试
本设计的核心采用是AT89C51单片机,以时钟芯片DS1307和液晶LCD1602作为外围元件,构成了一个多功能的数字时钟系统。
本系统的仿真采用PROTEUS软件,在PROTEUS库中选取的元件,如表4-1所示。
表4-1 仿真元件表
序号
名称
属性
1
AT89C51
单片机
2
BUTTON
按键
3
CAP
电容
4
DS1307
时钟芯片
5
LM016L
液晶显示器
6
PNP
晶体三极管
7
RES
电阻
8
SPEAKER
蜂鸣器
9
SW-SPST
开关
10
CRYSTAL
晶体振荡器
仿真结果如图4-1所示。
分别可以实现实时显示、设置时间、设置日期、设置星期和设置闹钟。
a)实时显示
b)设置时间及相应的增/减设置
c)设置日期及相应的增/减设置
d)设置星期及相应的增/减设置
e)设置闹钟
图4-1 仿真结果
系统通过仿真调试后,可以稳定运行。
同时可以对时间、日期、星期和闹钟进行设置。
设计采用串行器件具有线路简单、体积小、价格低等优点。
同时该系统稍加改造,就可以作为工业实时采集中的一个模块。
总 结
本设计以功能齐全适用于大众为指导思想,选取AT89C51单片机为控制核心。
通过外围元件实时时钟芯片DS1307构成了一个具有实时时间与日历显示、按键调时、闹铃定时功能的数字时钟。
系统采用液晶LCD1602作为显示器,软件程序采用均采用C语言编写,便于移植与升级。
系统经组装、调试后,可以稳定运行。
同时可以对时间、日期、星期和闹钟进行设置。
系统采用串行器件具有线路简单、体积小、价格低等优点。
报告详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。
致 谢
在这三个多月的毕业设计中,我真诚地感谢胡老师和同学们的帮助,在他们的帮助下我顺利的完成了此次毕业设计。
首先我要衷心地感谢我的辅导老师胡得清,在本次设计过程中他始终给予了我无私的热情和帮助。
开始他细心指导我的选题工作,在做开题报告的过程中,又反复而耐心地给我指出问题的所在,并帮助我纠正了许多不妥之处。
在做系统设计这一过程中,也给我提出了许多意见和建议,并交给我许多解决问题的技巧和方法。
在写毕业设计论文的过程中,我也遇到了许多的困难,之所以能坚持完成,这都离不开我的导师和同学们的帮助。
通过短暂的毕业设计,从而提高了我的理论水平,真正做到学有所用,虽然在其过程中我也遇到一些困难,但是从中我也得到了很多的帮助,没有半途而废,没有灰心丧气,在胡老师的严格指导下,发现问题并加以改正,这些都是一种收获。
特别感谢胡老师的帮助,他对我的系统提出了很多改进的意见,对我的论文中的一些不足的地方也一一地指出。
没有他的帮助,我也不可能很好的完成这次毕业设计,我再次衷心地对胡老师表示感谢。
参考文献
[1] DS1307datasheethttp:
//www.maxim-
[2] 李建忠.单片机原理及应用.西安:
西安电子科技大学出版社,2002
[3] 朱宇光.单片机应用新技术教程.北京:
电子工业出版社,2000
[4] 刘守义.单片机应用技术.西安:
西安电子科技大学出版社,2002
[5] 房小翠.单片机实用系统设计技术.北京:
国防工业出版社,2003
[6] 李华.MCS-51系列单片机实用接口技术.北京:
电子工业出版社,2000
[7] 李华.MCS-51系列单片机实用接口技术.北京:
北京航空航天大学出版社,2003
[8] 杨忠煌.单芯片8051实务与应用.北京:
中国水利水电出版社,2001
[9] 何立名.单片机应用系统设计系统配置与接口技术.北京:
北京航空航天大学出版社,2004
附录1 系统仿真电路图
附录2 PCB板底图
电源电路
单片机主控的数字时钟
附录3 主要源程序
/***************************定义头文件开始***************************/
#include
#include
#include
#include
/****************************义头文件结束*****************************/
*****************************预定义变量******************************/
/*****