基于单片机及DS1302的LED电子钟设计软件部分文档格式.docx
- 文档编号:22663626
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:47
- 大小:338.86KB
基于单片机及DS1302的LED电子钟设计软件部分文档格式.docx
《基于单片机及DS1302的LED电子钟设计软件部分文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机及DS1302的LED电子钟设计软件部分文档格式.docx(47页珍藏版)》请在冰豆网上搜索。
要紧特点是采纳串行数据传输,可方便地与单片机接口,可为掉电爱护电源提供可编程的充电功能,同时能够关闭充电功能。
本设计要求利用51单片机和DS1302设计制作一个LED电子钟,用8个LED显示时刻,当按下相应按键时,修改当前时刻或闹铃时刻,若当前时刻与闹铃时刻相同,蜂鸣器发音1分钟。
2.系统核心芯片介绍
2.1单片机AT89S2简介
2.1.1芯片要紧性能
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序储备器,器件采纳ATMEL公司的高密度、非易失性储备技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash储备单元,功能强大的微型运算机的AT89S52可为许多嵌入式操纵应用系统提供高性价比的解决方案。
AT89S52具有如下特点:
40个引脚,8kBytesFlash片内程序储备器,256bytes的随机存取数据储备器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
闲暇模式下,CPU停止工作,承诺RAM、定时器/计数器、串口、中断连续工作。
掉电爱护方式下,RAM内容被储存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.1.2芯片引脚功能
AT89S52芯片DIP双列直插式封装引脚如图2-1所示。
图2-1AT89S52引脚排列
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据储备器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,现在能够作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的缘故,将输出电流(IIL)。
引脚口第二功能如下:
P1.0/T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1/T2EX(定时器/计数器T2的捕捉/重载触发信号和方向操纵)
P1.5/MOSI(在系统编程用)
P1.6/MISO(在系统编程用)
P1.7/SCK(在系统编程用)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,现在能够作为输入口使用。
在访问外部程序储备器或用16位地址读取外部数据储备器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用专门强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据储备器时,P2口输出P2锁存器的内容。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,现在能够作为输入口使用。
P3口亦作为AT89S52专门功能(第二功能)使用。
P3.0/RXD(串行输入口)
P3.1/TXD(串行输出口)
P3.2/INTO(外中断0)
P3.3/INT1(外中断1)
P3.4/TO(定时/计数器0)
P3.5/T1(定时/计数器1)
P3.6/WR(外部数据储备器写选通)
P3.7/RD(外部数据储备器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的操纵信号。
RST——复位输入。
当振荡器工作时,RST引脚显现两个机器周期以上高电平将是单片机复位。
ALE/PROG——当访问外部程序储备器或数据储备器时,ALE(地址锁存承诺)输出脉冲用于锁存地址的低8位字节。
一样情形下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据储备器时将跃过一个ALE脉冲。
如有必要,可通过对专门功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被柔弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN——程序储存承诺(PSEN)输出是外部程序储备器的读选通信号,当AT89C52由外部程序储备器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据储备器,将跃过两次PSEN信号。
EA/VPP——外部访问承诺,欲使CPU仅访问外部程序储备器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
假如加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序储备器的指令。
2.2时钟芯片DS1302简介
2.2.1要紧功能
DS1302芯片是美国DALLAS公司推出的低功耗实时时钟芯片,它工作电压为2.5V~5.5V,采纳串行通信方式,只需3条线便能够和单片机进行同步通信,并可采纳突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
可增加系统的RAM。
DS1302的时钟校准比较容易,若采纳专用的晶体振荡器,几乎无须调整即能够达到国家要求的时钟误差标准。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力,如此幸免了由于突然停电而造成时钟停止,因此它专门适合于长时刻无人职守的监测操纵系统或需经常记录某些具有专门意义的数据及对应时刻的场合。
DS1302提供秒、分、时、日、星期、月、年的信息,每月的天数和闰年的天数可自动调整,并可通过AM/PM指示决定采纳24或12小时格式。
2.2.2内部结构及引脚功能
DS1302内部要紧包括实时时钟(realtimeclock)、输入移位寄存器(inputshiftregisters)、31字节静态RAM、电源操纵部分(powercontrol)、命令操纵逻辑(commandandcontrollogic)、振荡器和分频器(oscillatoranddivider)等部分。
DS1302内部结构如图2-2所示。
图2-2DS1302内部结构
DS1302具有8脚DIP引脚排列如图2-3所示。
图2-3DS1302引脚排列
Vcc1:
后备电源,在主电源关闭的情形下,也能保持时钟的连续运行;
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
Vcc2:
主电源,当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1、X2:
振荡源,外接32.768kHz晶振。
GND:
接地端
SCLK:
串行时钟输入端
I/O:
串行数据输入输出端(双向)。
RST:
复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
第一,RST接通操纵逻辑,承诺地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
2.2.3工作原理
DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。
数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址。
命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输入数据。
时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下最多可达8+248。
2.2.4操纵字节及寄存器
DS1302的一次数据传送是从发送操纵字节开始的。
操纵字节的最高有效位(位7)必须是逻辑1,假如该位为0,则无法把数据写入到DS1302中;
位6表示要读写的数据类型,为0表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1指示要操作单元的地址;
最低有效位(位0)表示命令类型,为0表示要进行写操作,为1表示要进行读操作。
操纵字节总是从最低位开始输出。
其操纵字节格式如图2-4所示。
图2-4操纵字节格式
对DS1302的操作确实是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟有关,存放的数据位为BCD码形式。
表2-1DS1302的日历时钟寄存器及操纵字
此外,还有操纵寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令操纵字为C0H~FDH,其中奇数为读操作,偶数为写操作;
另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令操纵字为FEH(写)、(读)。
2.2.5数据的传送
向DS1302写入数据时,数据在操纵字节输入后的下一个SCLK周期的上升沿被写入,余外的SCLK将被忽略。
数据写入时从低位(位0)开始;
同样,从DS1302读取数据时,数据在紧跟操纵字节后的下一个SCLK的下降沿读出,读出数据时也是从低位(0位)到高位(7位),只要RST保持高电平,额外的SCLK将导致数据字节的连续读出,那个特性用于实现该芯片的突发读模式。
对DS1302的每一次读写需16个时钟脉冲,前8个脉冲输入操作地址和读写命令,后8个脉冲写入或读出数据。
数据传送时序如图2-5。
图2-5数据读写时序图
3.电子钟软件设计
3.1系统结构图及总流程图
依照软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构:
时钟显示是一个循环过程,系统以单片机AT89S52为主操纵器,不断读取实时时钟芯片DS1302提供的时刻送LED显示,时刻采纳24小时模式;
当达到闹钟所设定时刻时,操纵蜂鸣器发声一分钟;
当需要调整时刻或闹钟时,按下相应按键进入中断处理。
整个系统的电源可由电池提供或者用USB电源线由电脑提供。
系统总体结构如图3-1所示。
图3-1系统总体结构
由于汇编语言产生的目标程序简短,占用储备空间小,执行快,能充分发挥运算机的硬件功能,因此依照系统总体结构确定总流程图后,用汇编语言编写程序实现各模块功能。
总流程图如图3-2所示。
图3-2系统总流程图
3.2主程序模块
主程序模块包括初始化模块、DS1302读写模块、显示模块和蜂鸣模块。
3.2.1初始化模块
初始化模块包括了储备资源的分配、各标志位的赋值、中断的状态设置以及跳转语句。
当使用机器汇编时,必须为汇编程序提供一些信息,这些操纵汇编的指令称为伪指令,也包括在初始化模块里。
初始化模块流程图如3-3所示。
图3-3初始化模块流程图
在此模块,须定义好单片机与DS1302的串行通信接口以及调整时刻或闹钟时的按键端口,如下:
P0数码管段码输入
P2数码管位数选择
P1.0DS时钟操纵总线SLCK
P1.1DS数据传送总线I/O
P1.2DS复位总线RST
P1.3位选择键,按下选择要调整的位置
P1.4UP,按此键调整时参数加
P1.5DW,按此键调整时参数减
P1.6OK,按此键完成调整,退出中断
P1.7NO,按此键退出中断,取消调整
P3.2TIME,按下时进入时刻设置模式
P3.3CLC,按下时进入闹钟设置模式
由于DS1302第一次初始化写入数据后在主电源关闭的情形下也能保持时钟的连续运行,写入程序要紧在调整时刻或闹钟时用到,因此在下一个DS读写模块才详细介绍。
3.2.2DS1302读写模块
DS1302内有2类寄存器,一类用于存放时钟/日历数据,另一类是静态RAM。
与外界数据的交换可分为单字节传送和多字节传送2种方式。
图3-4为DS实时时刻读写流程图。
多字节模式可用于时钟/日历或有31个十进制地址(地址/命令位1~5设为1)的RAM寄存器。
时钟/日历寄存器的9~31及RAM的31寄存地址中许多据储备能力。
连续模式的读或写从0地址的0位开始。
当在连续模式向时钟寄存器写数据时,前8个寄存器必须按传送数据顺序写。
然而,此方式写入RAM时,不需要把传送数据的31B都写入。
写入的每一个字节将传送到RAM不管是否所有的31B都写入。
当时刻能连续运行时,在时钟脉冲读的开始,当前时刻被传送到另外一组寄存器,时刻信息从这些从寄存器读出。
这免去了在读取期间为刷新主寄存器而重读寄存器的需求。
图3-4实时时刻读写流程图
要注意的是,操纵寄存器的第7位是写爱护位。
在对时钟或RAM读操作之前,第7位必须是0。
当为1时,写爱护位阻止对任何其他寄存器的写操作。
初始的上电状态未被设置,因此,写爱护位应该在试图写入器件之前清零。
下面分别给出单字节和多字节两种传送方式下向DS写入命令字节和显示数据的程序例子:
Write_Enable:
MOVCommand,#8Eh;
命令字节为8E
MOVByteCnt,#1;
单字节传送模式
MOVR0,#XmtDat;
数据地址覆给R0
MOVXmtDat,#00h;
数据内容为0写入承诺
ACALLSend_Byte;
用写入数据子程序
RET;
返回调用本子程序处
Write_Multiplebyte:
MOVCommand,#0BEh;
命令字节为BEh
MOVByteCnt,#8;
多字节写入模式此模块为8个
MOVXmtDat,#59h;
秒单元内容为59h
MOVXmtDat+1,#59h;
分单元内容为59h
MOVXmtDat+2,#13h;
时单元内容为13h
MOVXmtDat+3,#21h;
日期单元内容为21h
MOVXmtDat+4,#06h;
月单元内容为06h
MOVXmtDat+5,#03h;
星期单元内容为03h
MOVXmtDat+6,#0;
年单元内容为00h
MOVXmtDat+7,#0;
写爱护单元内容为00h
调用写入数据子程序
3.2.3显示模块
数码管的接口有静态接口和动态接口两种方式。
静态接口问固定显示方式,无闪耀。
位选线同时选通,每位的段选线分别与一个8位锁存器输出相连,各位互相独立。
各位显示一经输出,则相应显示将坚持不变,直至显示下一位字符为止。
静态显示方式有较高的亮度和简单的软件编程,缺点是占用口线资源太多。
为幸免那个缺点,本设计采纳动态显示方式,将所有位的相应段选线并在一起,用一个接口完成字形码的输出(字形选择),位选线则分时轮番选通,即另一个接口完成各数码管的循环轮番点亮(数位选择),利用人眼视觉的暂留现象获得稳固的视觉成效。
显示程序流程图如图3-5所示。
图3-5显示流程图
设定8位数码管的显示格式为“XX-XX-XX”(时-分-秒),第六位和第三位的横杠固定正常显示,在修改时刻或闹钟时,要调整的部分每两位(十位和个位)一起闪耀显示,因此设置了两个标志位MARK和WINK。
MARK:
闪耀标志,为1时承诺闪耀,为0时禁止闪耀。
WINK:
位闪耀标志,为8时“时”闪耀,为5时“分”闪耀,为2时“秒”闪耀。
要实现闪耀显示,则在选择的那位数码管选通又熄灭后延时一小段时刻,才指向下一位数码管。
3.2.4蜂鸣模块
考虑到已使用了两个中断来实现调整部分,蜂鸣模块要紧用查询比较的方式实现,流程图如图3-6所示。
所用标志位如下:
BEEF:
蜂鸣标志
图3-6蜂鸣模块流程图
要令蜂鸣器蜂鸣一分钟,若用定时器TO来关心计时,设单片机的晶振为12MHz,16位定时最大为216×
1μs=65.536ms,运算初值令T0每50ms计满溢出回零,另设两个标志位记录对50ms计数1200次。
但同时,由于在蜂鸣的时候LED要同步显示当前时刻,需要调用显示程序,在计数1200次时,执行调用的指令也占用了时刻,如此使得蜂鸣时刻变长以及较难运算出准确的定时器运算初值,因此在程序中用“分”加1的方法通过比较来实现一分钟的蜂鸣。
3.2.5主程序流程图
图3-7主程序流程图
结合以上各模块流程图,设计主程序流程图如图3-7所示。
3.3中断调整模块
本设计要处理的按键较多,要紧是考虑到调整时刻或闹钟时更人性化,方便人们的操作,因此设置了位选择键、加减键、确认键和取消键。
假如都以查询方式来检测,则程序会变得繁琐,而且显现误判定的机会较大,因此为了减少检测的苦恼,同时也为了区别时刻和闹钟两个不同的调整任务,设计采纳了外部中断方式来处理。
该模块流程图如图3-8所示。
3.3.1时刻中断模块
当外部中断口P3.2收到下降沿信号,即时刻调整键time按下时,程序进入时刻调整中断,默认从“时”开始进行修改。
时刻调整模块的重点在按键处理部分,本设计采纳了查询方式检测是否有键按下,并消抖延时来确认按下的是哪一个键。
假如按下的是位选择键、加键或减键,进入相应程序处理,子程序终止后需连续检测下一次是否有键按下;
假如按下的是确认键或取消键,则终止中断。
位选择键处理:
选择要调整“时”、“分”或“秒”。
初始设置从“时”开始选择,每按下一次标志位WINK改变。
按下位选择键后,第一检测WINK是否为2,是则重新赋值WINK为5,修改位置从“时”变为“分”;
再按下一次,WINK赋值为8,修改位置从“分”变为“秒”;
第三次按下时重新赋值WINK使闪耀位为“时”。
加键处理:
要调整的部分加1。
由于采纳24小时模式,若修改“时”,则先检测是否为23,是则重新赋值为0,否则直截了当加1;
若修改“分”或“秒”,先检测是否为59,是则重新赋值为0,否则直截了当加1。
减键处理:
要调整的部分减1。
由于采纳24小时模式,若修改“时”,则先检测是否为0,是则重新赋值为23,否则直截了当减1;
若修改“分”或“秒”,先检测是否为0,是则重新赋值为59,否则直截了当减1。
确认键处理:
表示修改完成。
把修改后的数据从暂存区送到发送数据缓冲区,调用DS读写程序修改DS实时数据并显示,终止中断,返回主程序。
取消键处理:
表示取消修改。
由于修改的数据储存在暂存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 DS1302 LED 电子钟 设计 软件 部分