ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:541.49KB ,
资源ID:6659787      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6659787.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子钟的设计与实现0.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电子钟的设计与实现0.docx

1、电子钟的设计与实现0实时电子时钟钟的设计与实现(4个按键功能与作用简介)(程序流程图)实时电子时钟的设计与实现是通过用单片机AT89S52与实时时钟芯片DS1302设计电路制作成用数码管显示实时时间与日期的电子钟。一:实时电子时钟功能特点:采用2个4位数码管作为显示时间与日期,显示亮度高,无视角,按钮k调节时间与日期交换显示。采用专业的时钟芯片DS1302和充电电容使时钟断电依然走时。去功能菜单操作,4个按键操作,可加减调时,操作方便。(4个按键功能与作用简介) 二:实时电子时钟制作元件清单:品名型号数量品名型号数量共阳数码管FJ5461BH2电阻4.7k8电阻4707单片机AT89S521晶

2、振12M1晶振23.768KHZ1微动开关5*5*6mm4极性电容220uF1极性电容10uF1电容30PF1三极管85508时钟ICDS13021三:主要元器件芯片简介3.1)单片机AT89S52功能介绍:AT89S52是一种低功耗、高性能COMS8位微控制器,具有8K在系统可编程Flash存储器。使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8K可编程Flash存储器,256K RAM,32位I/O可编程口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。AT89S5

3、2可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保护,振荡器被冻结,单片机一切工作停止,直至下一个中断或硬件复位为止。AT89S52引脚图如下如所示:AT89S52内部方框图如下:AT89S52各引脚功能介绍:P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节

4、;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能P1.0T2(定时器/计数器的外部计数输入),时钟输出P1.1T2EX(定

5、时器/计数器的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存

6、储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0(外部中断0)P3.3INT1(外部中断1

7、)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S

8、52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。特殊功能寄存器AT89S52 特殊寄存器映象及复位值表一:AT89S52特殊寄存器映像及复位值表定时器2 寄存器:寄存器T2CON 和T2MOD 包含定时器2 的控制位和状态位(如表

9、二和表三所示),寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。双数据指针寄存器:为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:位于SFR中82H83H和位于DP0中84H85。特殊寄存器AUXR1中DPS0 选择DP0;DPS=1 选择DP1。用户应该在访问数据指针寄存器前先初始化DSP至合理的值。掉电标志位:掉电标志位(POF)位于特殊寄存器PCON的第四位(PCON.4)。上电期间POF置“1”。POF可以软件控制使用与否,但不受复位影响。看门狗定时器WDT是一

10、种需要软件控制的复位方式。WDT 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。WDT 在默认情况下无法工作;为了激活WDT,必须往WDTRST 寄存器(地址:0A6H)中依次写入01EH 和0E1H。当WDT激活后,晶振工作,WDT在每个机器周期都会增加。WDT计时周期依赖于外部时钟频率。除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。当WDT溢出,它将驱动RSR引脚一个高个电平输出。WDT的使用为了激活WDT,必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H和0E1H。当WDT激活后,必须向WDTRST写入01EH和0E1H喂

11、狗来避免WDT溢出。当计数达到8191(1FFFH)时,13 位计数器将会溢出,这将会复位器件。晶振正常工作、WDT激活后,每一个机器周期WDT 都会增加。为了复位WDT,必须向WDTRST 写入01EH 和0E1H(WDTRST 是只读寄存器)。WDT 计数器不能读或写。当WDT 计数器溢出时,将给RST 引脚产生一个复位脉冲输出,这个复位脉冲持续96个晶振周期(TOSC),其中TOSC=1/FOSC。为了很好地使用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。3.2)时钟芯片DS1302功能介绍: DS1302时钟芯片主要组成部分包括实时时钟/日历、31字节的静态RAM、

12、移位寄存器、控制逻辑和振荡器,它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息,对于小于31天的月,月末的日期自动进行调整,包括了闰年校正的功能,可以采用24小时或带AM/PM的12小时格式。使用同步串行通信,简化与微处理器的通信。数据可以以每次一个字节或多达31字节的多字节形式传送至时钟/RAM或从其中送出。DS1302能在非常低的功耗下工作,消耗小于1微瓦的功率便能保持数据和时钟信息。 DS1302的命令字 命令字节如图所示:每一数据传送由命令字节初始化。最高有效位MSB(位7)必须为逻辑1,如果它是零,禁止写DS1302。位6为逻辑0指定时钟/日

13、历数据;逻辑1指定RAM数据。位1至5指定进行输入或输出的特定寄存器。最低有效位LSB(位0)为逻辑0指定进行写操作;逻辑1指定进行读操作。DS1302引脚图如下如所示引脚说明引脚名称功能2/3X1/X232.768KHZ晶振引脚1/8VCC2/VCC1电源引脚4GND地5RST复位6I/O数据输入/输出7SCLK串行时钟DS1302时钟芯片时序图如下:3.3):4位7段数码管4位7段数码管各引脚对应关系如下图所示:四:实时时钟设计电路图 运用Protel99se搭建好实时电子时钟电路图如下五:实时电子时钟程序实现:(程序流程图);4位7段数码管显示;P0 为段码口、P2 为位码口;晶振 12

14、M;时钟芯片:DS1302;* DS1302 端口位定义 * IO_DATA BIT P1.1 ; 数据传送总线 SCLK BIT P1.0 ; 时钟控制总线 RST BIT P1.2 ; 复位总线 K1 EQU P1.4 ;独立键 K2 EQU P1.5 K3 EQU P1.6 K4 EQU P1.7 BEEP EQU P3.7 ;蜂鸣器 RELAY EQU P1.3 ;继电器 T_CONU EQU 22H ;中断计数 TIME_L EQU 23H ;定时初值 TIME_H EQU 24H TIME_DATA EQU 50H ;显示时间单元首地址 DATE_DATA EQU 60H ;显示日

15、期单元首地址 DS_DATA EQU 58H ;显示定时时间单元首地址;- ORG 0000H AJMP MAIN ORG 000BH AJMP INT_T0 ORG 0100H;-MAIN: MOV TMOD,#01H ;T0,方式1 MOV TIME_L,#00H ;50MS定时值 MOV TIME_H,#4CH MOV T_CONU,#00H ;中断次数 MOV IE,#82H ;EA=1,ET0=1 MOV A,#00H MOV R0,#40H ;从40H单元开始 MOV R1,#40H ;清64个单元M_CLEAR: MOV R0,A INC R0 DJNZ R1,M_CLEAR M

16、OV 7FH,#0AH ;送熄灭符 SETB BEEP LCALL TIME_DELAY ;调显示延时 LCALL PROSET ;DS1302初始化MAIN1: LCALL GET_TIME ;从DS1302读数据程序 LCALL CHULI ;实时时间数据处理 MOV R0,#TIME_DATA ;显示时、分、秒 LCALL DISP MOV R0,#TIME_DATA LCALL TIME_DISPLAY LCALL SET_KEY ;键功能程序 LCALL COMP ;实时时间与定时时间比较 JB K1,MAIN1 CALL BEEP_BLMAIN2: LCALL CHULI ;日期数

17、据处理 MOV R0,#DATE_DATA LCALL DISP ;显示年、月、日 MOV R0,#DATE_DATA LCALL TIME_DISPLAY JB K1,MAIN2 CALL BEEP_BLMAIN3: LCALL DS_CHULI ;定时时间数据处理 MOV R0,#DS_DATA LCALL DS_SP ;显示定时时间 MOV R0,#DS_DATA LCALL DS_DISPLAY JB K1,MAIN3 CALL BEEP_BL AJMP MAIN1;-;中断服务子程序;300MS对闪动标记取反一次;-INT_T0: PUSH ACC PUSH PSW MOV TL0,

18、TIME_L MOV TH0,TIME_H INC T_CONU MOV A,T_CONU CJNE A,#06H,INT_END MOV T_CONU,#00H CPL 0AHINT_END: POP PSW POP ACC RETI;-;DS1302 初始化子程序; (R0)=数据 (R1)=地址;-PROSET: CLR RST ;DS1302复位 CLR SCLK NOP NOP SETB RST ;MOV R1,#80H ;写秒寄存器 ;MOV R0,#00H ;启动振荡器 ;LCALL WRITE ;MOV R1,#82H ;写分寄存器 ;MOV R0,#58H ;LCALL WR

19、ITE ;MOV R1,#84H ;写时寄存器 ;MOV R0,#80H ;LCALL WRITE MOV R1,#90H ;写充电寄存器 MOV R0,#0ABH LCALL WRITE RET;=;读时间、日期数据子程序;存放单元 40H - 46H;=GET_TIME: MOV R1,#81H ;读秒 LCALL READ MOV 40H,R0 MOV R1,#83H ;读分 LCALL READ MOV 41H,R0 MOV R1,#85H ;读时 LCALL READ MOV 42H,R0 MOV R1,#87H ;读出日期 LCALL READ MOV 43H,R0 MOV R1,

20、#89H ;读出月份 LCALL READ MOV 44H,R0 MOV R1,#8BH ;读出星期 LCALL READ MOV 46H,R0 MOV R1,#8DH ;读出年 LCALL READ MOV 45H,R0 RET;=;写 DS1302 子程序;=WRITE: CLR SCLK NOP NOP SETB RST NOP MOV A,R1 MOV R2,#08HWRI_01: RRC A ;传输地址到DS1302 NOP NOP CLR SCLK NOP NOP MOV IO_DATA,C NOP NOP SETB SCLK NOP NOP DJNZ R2,WRI_01 CLR

21、SCLK NOP NOP MOV A,R0 MOV R2,#08HWRI_02: RRC A ;传输数据到DS1302 NOP CLR SCLK NOP NOP MOV IO_DATA,C NOP NOP SETB SCLK NOP NOP DJNZ R2,WRI_02 CLR SCLK NOP NOP CLR RST NOP NOP RET;=;读 DS1302 子程序;=READ: CLR SCLK NOP NOP SETB RST NOP NOP MOV A,R1 MOV R2,#08HREAD_01: RRC A NOP ;先传输地址到DS1302 MOV IO_DATA,C NOP

22、NOP SETB SCLK NOP NOP CLR SCLK NOP NOP DJNZ R2,READ_01 NOP NOP SETB IO_DATA CLR A CLR C MOV R2,#08HREAD_02: CLR SCLK NOP NOP MOV C,IO_DATA NOP NOP RRC A ;再从DS1302接收数据 NOP NOP SETB SCLK NOP NOP DJNZ R2,READ_02 MOV R0,A CLR RST RET;=;实时时间、日期数据处理子程序;= CHULI: MOV A,40H ;处理秒数据 ANL A,#0FH MOV 50H,A MOV 70

23、H,A MOV A,40H ANL A,#11110000B SWAP A MOV 51H,A MOV 71H,A;- MOV A,41H ;处理分数据 ANL A,#0FH MOV 52H,A MOV 72H,A MOV A,41H ANL A,#11110000B SWAP A MOV 53H,A MOV 73H,A;- MOV A,42H ;处理时数据 ANL A,#0FH MOV 54H,A MOV 74H,A MOV A,42H ANL A,#11110000B SWAP A MOV 55H,A MOV 75H,A;- MOV A,43H ;处理日数据 ANL A,#0FH MOV

24、60H,A MOV 76H,A MOV A,43H ANL A,#11110000B SWAP A MOV 61H,A MOV 77H,A;- MOV A,44H ;处理月数据 ANL A,#0FH MOV 62H,A MOV 78H,A MOV A,44H ANL A,#11110000B SWAP A MOV 63H,A MOV 79H,A;- MOV A,45H ;处理年数据 ANL A,#0FH MOV 64H,A MOV 7AH,A MOV A,45H ANL A,#11110000B SWAP A MOV 65H,A MOV 7BH,A;- MOV A,46H ;处理周数据 MOV

25、 66H,A MOV 7CH,A RET;=;实时时间、日期查表取数子程序;=DISP: ;MOV R0,#TIME_DATA MOV R3,#06HDISP1: MOV A,R0 MOV DPTR,#TAB_NU MOVC A,A+DPTR MOV R0,A INC R0 DJNZ R3,DISP1 RET;=;时间、日期显示子程序;=TIME_DISPLAY: ;MOV R0,#TIME_DATA ;取得显示单元首地址 MOV R1,#07FH ;从第一个数码管开始 MOV R2,#08H ;共8个数码管DISLP: MOV P0,R0 ;获得当前单元数据 MOV A,R1 MOV P2,

26、A ;数码显示 JB ACC.5,DISLP1 ;第三位数码管显示 MOV P0,#0BFH JMP DISLP3DISLP1: JB ACC.2,DISLP2 ;第六位数码管显示 MOV P0,#0BFH JMP DISLP3DISLP2: INC R0DISLP3: MOV A,R1 ;为下一个数准备 RR A ;下一个单元 MOV R1,A ;保存 LCALL DELAY ;为了保证数码管亮度,延时 DJNZ R2,DISLP ;重复显示,直到全部数据刷新过 RET ;返回DELAY: MOV R4,#0AH L15: MOV R5,#64H L16: DJNZ R5,L16 DJNZ R4,L15 RET;*

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

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