基于单片机实时钟设计毕业设计Word文档格式.docx

上传人:b****4 文档编号:17845698 上传时间:2022-12-11 格式:DOCX 页数:39 大小:161.64KB
下载 相关 举报
基于单片机实时钟设计毕业设计Word文档格式.docx_第1页
第1页 / 共39页
基于单片机实时钟设计毕业设计Word文档格式.docx_第2页
第2页 / 共39页
基于单片机实时钟设计毕业设计Word文档格式.docx_第3页
第3页 / 共39页
基于单片机实时钟设计毕业设计Word文档格式.docx_第4页
第4页 / 共39页
基于单片机实时钟设计毕业设计Word文档格式.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

基于单片机实时钟设计毕业设计Word文档格式.docx

《基于单片机实时钟设计毕业设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机实时钟设计毕业设计Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。

基于单片机实时钟设计毕业设计Word文档格式.docx

能以3V的超低压工作;

同时也与MCS-51系列单片机完全兼容。

该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。

所以选择采用AT89S52作为主控制系统.

2.3.3显示模块的选择方案

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

所以采用了LED数码管作为显示。

I2C串行接口,提供键盘中断信号,方便与处理器接口。

可驱动8位共阴数码管或64只独立LED和64个按键。

可控扫描位数,可控任一数码管闪烁。

8个功能键,可检测任一键的连击次数。

无需外接元件即直接驱LED,可扩展驱动电流和驱动电压。

2.3.4时钟芯片的选择方案

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。

2.4系统设计的具体实现

本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作。

时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。

可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。

在每个显示刷新周,ZLG7290按照扫描位数寄存器(ScanNum)指定的显示位数N,把显示缓存DpRam0~DpRamN的内容按先后循序送入LED驱动器实现动态显示,减少N值可提高每位显示扫描时间的占空比,以提高LED亮度,显示缓存中的内容不受影响。

2.4.1单片机主控制模块的设计

AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。

如图-1所示

图-1最小系统原理

2.4.2时钟电路模块的设计

图-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768KHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。

SCLK始终是输入端。

图-2DS1302的引脚图

2.4.3显示模块的设计

图-3示出ZLG7290的引脚排列,Dig7~Dig0为输入/输出端,由LED显示位驱动及键盘扫描线。

SegH~SegA为输入/输出端,由LED显示段驱动及键盘扫描线。

SDA为输入/输出端,是I2C总线接口数据/地址线。

SCL为输入端,是I2C总线接口时钟线。

/INT是中断输出端,低电平有效。

/RES是复位输入端,低电平有效。

OSC1、OSC2是连接晶体以产生内部时钟。

11引脚为接地端,16引脚为电源端。

图-3ZLG7290的引脚图

2.4.4DS1302电路原理及说明

(1)、时钟芯片DS1302的工作原理:

串行时钟芯片主要由寄存器、控制寄存器、振荡器、实时时钟以及RAM组成。

为了对任何数据传送进行初始化,需要将/RST置为高电平且将8位地址和命令信息装入移位寄存器。

数据在SCLK的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输入数据。

时钟脉冲的个数在单字节方式下为8加8(8位地址加8位数据),在多字节方式下为8加最多可达248的数据。

(2)、DS1302的控制命令字节与寄存器

a、控制命令字节

控制命令字节结构如下:

RAMRD

1/CKA4A3A2A1A0/WR

表1

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中;

位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;

位5至位1指示操作单元的地址;

最低有效位(位0)为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

b、日历、时钟寄存器

DS1302共有12个寄存器,其中有7个寄存器与日历、时钟有关,存放的数据位为BCD码形式。

其日历、时间寄存器及控制字如以下表所示。

寄存器的选择根据命令字而定,其中日历、时钟各个寄存器与控制字对照表如表2所示。

寄存器名称

7

6

5

4

3

2

1

RAW/CK

A4

A3

A2

A1

A0

RW//W

秒寄存器

分寄存器

小时寄存器

日寄存器

月寄存器

星期寄存器

年寄存器

写保护寄存器

慢充电寄存器

时间突发寄存器

表2

最后一位RD//W为0表示要进行写操作,为1表示进行读操作。

表3为主要寄存器命令字、取值范围以及各位内容对照表。

 

寄存器名

命令字

取值范围

各位内容

写操作

读操作

3~0

80H

81H

00~59

CH

10SEC

SEC

82H

83H

10MIN

MIN

时寄存器

84H

85H

01~12或00~23

12、24

10÷

A/P

HR

86H

87H

01~28,29,30,31

10DATE

DATE

88H

89H

01~12

10M

MONTH

周寄存器

8AH

8BH

01~07

DAY

8CH

8DH

01~99

10YEAR

YEAR

8EH

8FH

 

WP

90H

91H

TCS

DS

RS

时钟突发寄存器

BEH

BFH

表3

其中有些特殊位需要特别指出:

CH:

时钟暂停位,当此位设置为1时,振荡器停止,DS1302处于低功率的备份方式;

当此位变为0时,时钟开始启动。

12/24:

12或24小时方式选择位,为1时选择12小时方式。

在12小时方式下,位5是AM/PM选择位,此位为1时表示PM。

在24小时方式下,位5是第2个小时位(20-23时)。

WP:

写保护位,写保护寄存器的开始7位(0~6)置为0,在读操作时总是读出0。

在对时钟或RAM进行写操作之前,位7(WP)必须为0,当它为高电平时,写保护位防止对任何其他寄存器进行写操作。

TCS:

控制慢充电的选择,为了防止偶然因素始DS1302工作,只有1010模式才能使慢速充电工作。

DS:

二极管选择位。

如果DS为01,那么选择一个二极管;

如果DS为10,则选择两个二极管。

如果DS为11或00,那么充电器被禁止,与TS无关。

RS:

选择连接在Vcc2与Vcc1之间的电阻,如果RS为00,那么充电器被禁止,与TS无关。

选择的电阻如表4所示。

RS位

电阻器

典型值

00

01

R1

2k欧

10

R2

4k欧

11

R3

8k欧

表4

c、RAM寄存器

DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字位C0H~FDH,其中奇数为读操作,偶数为写操作;

另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31字节,命令控制字为FEH(写)、FFH(读)。

RAM区寄存器与控制字对照表如表5所示。

RAM//CK

RD//W

RAM0

RAM1

………

RAM30

RAM突发

表5

(3)、复位和时钟控制

通过将、/RST输入驱动置高电平来启动所有的数据传送。

/RST输入有两种功能:

首先,/RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

其次,/RST提供了终止单字节或多字节数据的传送手段。

当/RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中置/RST为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。

上电运行时,在Vcc大于等于2.5V之前,/RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

(4)、数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

如下图-4所示

图-4DS1302读/写时序图

2.4.5动态扫描芯片ZLG7290的工作原理

(1)、键盘部分

ZLG7290可采样64个按键或传感器,可检测每个按键的连击次数。

其基本功能如下:

a、键盘去抖动处理

当键被按下和放开时,可能会出现电平状态反复变化,称作键盘抖动。

若不作处理会引起按键盘命令错误,所以要进行去抖动处理,以读取稳定的键盘状态为准。

b、双键互锁处理

当有两个以上按键被同时按下时,ZLG7290只采样优先级高的按键(优先顺序为S1>

S2>

…>

S64,如同时按下S2和S18采样到S2)。

c、连击键处理

当某个按键按下时,输出一次键值后,如果该按键还未释放,该键值连续有效,就像连续压按该键一样,这种功能称为连击。

连击次数计数器(RepeatCnt)可区别出单击(某些功能不允许连击,如开/关)或连击。

判断连击次数可以检测被按时间,以防止某些功能误操作(如连续按5秒经入参数设置状态)。

d、功能键处理

功能键能实现2个以上按键同时按下来扩展按键数目或实现特殊功能。

如PC机

的“Shift”“Ctrl”、“Alt”键。

(2)、显示部分

ZLG7290提供两种控制方式:

寄存器映象控制和命令解释控制,如上述对显示部分的控制,寄存器映象控制是指直接访问底层寄存器,实现基本控制功能,这些寄存器须字节操作。

命令解释控制是指通过解释命令缓冲区(CmdBuf0~CmdBuf1)中的指令,间接访问底层寄存器实现扩展控制功能。

如实现寄存器的位操作;

对显示缓存循环,移位;

对操作数译码等操作。

(3)、寄存器详解

系统状态部分:

系统寄存器(SystemReg):

地址00H,复位值11110000B。

系统寄存器保存ZLG7290系统状态,并可对系统运行状态进行配置,其功能分位描述如下:

KeyAvi(Systemeg.0):

置1时表示有效的按键动作(普通键的单击,连击,和功能键状态变化),/INT引脚信号有效(变为低电平);

清0表示无按键动作,/INT引脚信号无效(变为高阻态)。

有效的按键动作消失后或读Key后,KeyAvi位自动清0。

键盘部分:

a、键值寄存器(Key):

地址01H,复位值00H。

Key表示被压按键的键值。

当Key=0时,表示没有键被压按。

b、连击次数计数器(RepeatCnt):

地址02H,复位值00H。

RepeatCnt=0时,表示单击键。

RepeatCnt大于0时,表示键的连击次数。

用于区别出单击键或连击键,判断连击次数可以检测被按时间。

c、功能键寄存器(FunctionKey):

地址03H,复位值0FFH。

FunctionKey对应位的值=0表示对应功能键被压按(FunctionKey.7FunctionKey.0对应S64~S57)。

命令接口部分:

命令缓冲区(CmdBuf0~CmdBuf1):

地址07H~08H,复位值00H~00H。

用于传输指令。

显示部分:

a、闪烁控制寄存器(FlashOnOff):

地址0CH,复位值0111B/0111B。

高4位表示闪烁时亮的时间,低4位表示闪烁时灭的时间,改变其值同时也改变了闪烁频率,也能改变亮和灭的占空比。

FlashOnOff的1个单位相当于150~250ms(亮和灭的时间范围为:

1~16,0000B相当1个时间单位),所有象素的闪烁频率和占空比相同。

b、扫描位数寄存器(ScanNum):

地址0DH,复位值7。

用于控制最大的扫描显示位数(有效范围为:

0~7,对应的显示位数为:

1~8),减少扫描位数可提高每位显示扫描时间的占空比,以提高LED亮度。

不扫描显示的显示缓存寄存器则保持不变。

如ScanNum=3时,只显示DpRam0~DpRam3的内容。

c、显示缓存寄存器(DpRam0~DpRam7):

地址10H~17H,复位值00H~00H。

缓存中一位置1表示该像素亮,DpRam7~DpRam0的显示内容对应Dig7~Dig0引脚。

三、软件设计

3.1程序流程框图

3.2ZLG7290如何与单片机进行通信

通过I2C总线进行通信。

在数据传输期间,时钟(SCL)为高电平时,数据(SDA)必须保持不变。

在SCL为高电平时,数据(SDA)从高电平跳变到低电平,为开始数据传输(START)的条件,开始数据传输条件后所有的命令有效;

SCL为高电平时,数据(SDA)从低电平跳变到高电平,为停止数据传输(STOP)的条件,停止数据传输条件后所有的操作结束。

开始数据传输START后、停止数据传输STOP前,SCL高电平期间,SDA上为有效数据。

字节写入时,每写完一个字节,送一个应答信号ACK,直至STOP;

读出时,每读完一个字节,送一位应答信号ACK,但STOP前一位结束时不送ACK信号。

对不带I2C接口的单片机用软件模拟I2C时序使用I2C器件。

起动总线函数

voidStart_I2c()

{

SDA=1;

/*发送起始条件的数据信号*/

_Nop();

SCL=1;

/*起始条件建立时间大于4.7us,延时*/

SDA=0;

/*发送起始信号*/

/*起始条件锁定时间大于4μs*/

SCL=0;

/*钳住I2C总线,准备发送或接收数据*/

}

结束总线函数

voidStop_I2c()

/*发送结束条件的数据信号*/

/*发送结束条件的时钟信号*/

/*结束条件建立时间大于4μs*/

/*发送I2C总线结束信号*/

字节数据传送函数

voidSendByte(ucharc)

ucharBitCnt;

for(BitCnt=0;

BitCnt<

8;

BitCnt++)/*要传送的数据长度为8位*/

{

if((c<

<

BitCnt)&

0x80)SDA=1;

/*判断发送位*/

elseSDA=0;

/*置时钟线为高,通知被控器开始接收数据位*/

/*保证时钟高电平周期大于4μs*/

}

/*8位发送完后释放数据线,准备接收应答位*/

if(SDA==1)ack=0;

elseack=1;

/*判断是否接收到应答信号*/

ucharRcvByte()

ucharretc;

retc=0;

/*置数据线为输入方式*/

BitCnt++)

/*置时钟线为低,准备接收数据位*/

/*时钟低电平周期大于4.7μs*/

/*置时钟线为高使数据线上数据有效*/

retc=retc<

1;

if(SDA==1)retc=retc+1;

/*读数据位,接收的数据位放入retc中*/

return(retc);

应答子函数

voidAck_I2c(bita)

if(a==0)SDA=0;

/*在此发出应答或非应答信号*/

elseSDA=1;

/*时钟低电平周期大于4μs*/

/*清时钟线,钳住I2C总线以便继续接收*/

向无子地址器件发送字节数据函数

bitISendByte(ucharsla,ucharc)

Start_I2c();

/*启动总线*/

SendByte(sla);

/*发送器件地址*/

if(ack==0)return(0);

SendByte(c);

/*发送数据*/

Stop_I2c();

/*结束总线*/

return

(1);

向有子地址器件发送多字节数据函数

bitISendStr(uchar

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

当前位置:首页 > PPT模板 > 节日庆典

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

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