




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告题 目: 万年历时钟的设计 课 程: 单片机原理及应用课程设计 专 业: 电气工程及其自动化 班 级: 姓 名: 学 号: 第 一 部 分任务书单片机原理及应用课程设计任务书一、课题名称万年历时钟的设计,利用单片机周立功实验箱进行设计并调试。二、课程设计目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。单片机原理及应用是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是让学生在理论
2、学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。三、课程设计内容设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
3、1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。四、课程设计要求1. 学习PCF8563T功能与使用方法;2. 通过按键切换LED上日期与时间的显示;3. 具有日期与时间的预置功能;4. 设计硬
4、件原理图;5. 编写程序。五、进度安排序号内容天数1布置任务,熟悉课题要求0.52总体方案确定,硬件电路设计1.53软件编程1.54Proteus仿真,或在周立功实验箱上调试25总结,撰写课程设计报告1.5七、课程设计报告内容:总结设计过程,写出设计报告,设计报告具体内容要求如下:1课程设计的目和设计的内容。2课程设计的要求。3控制系统总框图及系统工作原理。4控制系统的硬件电路连接图,电路的原理。 5软件设计流程图及其说明。6电路设计,软件编程、调试中遇到的问题及分析解决方法。7实验结果及其分析。8体会。第 二 部 分课程设计报告目 录1 课题简介61.1 设计目的61.2 设计要求62 万年
5、历时钟方案设计62.1芯片介绍62.2 AT89C51单片机简介102.3 系统工作原理113 万年历时钟硬件电路设计113.1 整体原理图123.2 分块介绍123.3 器件地址及存放单元134 万年历时钟软件编程设计144.1 程序介绍144.2 系统控制流程图155 实验与结果分析165.1 调试方法165.2 调试过程175.3 调试结果分析176 小结与体会18附录20正文1 课题简介1.1 设计目的熟练掌握I2C总线的控制,深刻理解实时时钟PCF8563T、ZLG7290键盘LED控制的各种功能,并能把它们相结合,组成具有实际功能的万年历时钟。1.2 设计要求1. 学习PCF856
6、3T功能与使用方法;2. 通过按键切换LED上日期与时间的显示;3. 具有日期与时间的预置功能;4. 设计硬件原理图;5. 编写程序。2 万年历时钟方案设计2.1芯片介绍2.1.1 PCF8563 I2C 实时时钟日历芯片1.概述PCF8563 是低功耗的 CMOS 实时时钟日历芯片,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过 I2C 总线接口串行传递。最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动产生增量。2特性*低工作电流:典型值为 0.25A(VDD=3.0V,Tamb=25时)。*世纪标志*大工作电压范围:1.05.5*低休眠
7、电流;典型值为 0.25A(VDD=3.0V,Tamb=25)*400KHz 的 I2C 总线接口(VDD=1.85.5V 时)。*可编程时钟输出频率为:32.768KHz,1024Hz,32Hz,1Hz。*报警和定时器。*掉电检测器。*内部集成的振荡器电容。*片内电源复位功能。*I2C 总线从地址:读,0A3H;写,0A2H。*开漏中断引脚。3内部结构3管脚排列PCF8563 的管脚排列及描述如下图及表所示:4. 功能描述PCF8563 有 16 个8位寄存器:一个可自动增量的地址寄存器,一个内置 32.768KHz 的 振荡器(带有一个内部集成的电容),一个分频器(用于给实时时钟 RTC
8、提供源时钟),一个可编程时钟输出,一个定时器, 一个报警器, 一个掉电检测器和一个 400KHz I2C总线接口。所有 16 个寄存器设计成可寻址的 8 位并行寄存器,但不是所有位都有用。前两个寄存 器(内存地址 00H,01H)用于控制寄存器和状态寄存器,内存地址 02H08H 用于时钟计 数器(秒年计数器),地址 09H0CH 用于报警寄存器(定义报警条件),地址 0DH 控制 CLKOUT 管脚的输出频率,地址 0EH 和 0FH 分别用于定时器控制寄存器和定时器寄存器。 秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为 BCD, 星期和星期报警寄存器不以 BCD
9、 格式编码。当一个 RTC 寄存器被读时,所有计数器的内容被锁存,因此,在传送条件下, 可以禁 止对时钟日历芯片的错读。2.1.2 ZLG7290 I2C 接口键盘及 LED 驱动器(1)特点*I2C 串行接口,提供键盘中断信号,方便与处理器接口。*可驱动 8 位共阴数码管或 64 只独立 LED 和 64 个按键*可控扫描位数,可控任一数码管闪烁*提供数据译码和循环、移位、段寻址等控制*8 个功能键,可检测任一键的连击次数*无需外接元件即直接驱 LED,可扩展驱动电流和驱动电压*提供工业级器件,多种封装形式 PDIP24、SO24(2)引脚及说明采用 24 引脚封装,引脚图见下,其引脚功能分
10、述如下(3)功能描述1)键盘部分ZLG7290 可采样 64 个按键或传感器,可检测每个按键的连击次数, 其基本功能如下:(1)键盘去抖动处理当键被按下和放开时,可能会出现电平状态反复变化,称作键盘抖动,若不作处理会引起按键盘命令 错误,所以要进行去抖动处理,以读取稳定的键盘状态为准。(2)双键互锁处理当有两个以上按键被同时按下时,ZLG7290 只采样优先级高的按键优先顺序为 S1S2S64(如同时按下 S2 和 S18 时采样到 S2)(3)连击键处理当某个按键按下时,输出一次键值后,如果该按键还未释放,该键值连续有效,就像连续压按该键一样,这种功能称为连击。连击次数计数器(RepeatC
11、nt)可区别出单击(某些功能不允许连击如开关) 或连击,判断连击次数可以检测被按时间以防止某些功能误操作(如连续按 5 秒经入参数设置状态)。(4)功能键处理功能键能实现 2 个以上按键同时按下来扩展按键数目或实现特殊功能 如 PC 机上的 Shift、Ctrl、Alt键。2)显示部分在每个显示刷新周期,ZLG7290 按照扫描位数寄存器(ScanNum)指定的显示位数 N把显示缓存 DpRam0。DpRamN 的内容按先后循序送入 LED 驱动器实现动态显示。减少 N 值可提高每位显示扫描时间的占空比,以提高 LED 亮度,显示缓存中的内容不受影响。修改闪烁控制寄存器FlashOnOff可改
12、变闪烁频率和占空比(亮和灭的时间)。ZLG7290 提供两种控制方式:寄存器映象控制和命令解释控制。如上述对显示部分的控制寄存器映象控制是指直接访问底层寄存器,实现基本控制功能。这些寄存器须字节操作命令解释控制是指通过解释命令缓冲区(CmdBuf0 CmdBuf1)中的指令,间接访问底层寄存器实现扩展控制功能。如实现寄存器的位操作对显示缓存循环、移位、对操作数译码等操作。2.2 AT89C51单片机简介AT89C51单片机是一种低功耗,高性能的片内含有4KB可编程/擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的8
13、位COMS微控制器,使用高密度,非易失存储技术制造,并且与AT89C51引脚和指令系统完全兼容。芯片上的FPEROM允许在线编程或采用通用的非易失存储编程器对存储器重复编程。引脚说明 AT89C51单片机采用40条引脚双列直插式器件,引脚除5V(Vcc 40脚)和电源地(Vss 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图所示AT89C51单片机的内部硬件结构中除了程序存储器由FPEROM取代了87C51单片机的EPROM外,其余部分完全相同,其管脚说明如下:(1)VCC:供电电压(2)GND:接地(3)时钟电路XTAL1(19脚)芯片内部振荡电路(单
14、级反相放大器)输入端。XTAL2(18脚)芯片内部振荡电路(单级反相放大器)输出端。 (4)控制信号RST(9脚)复位信号:ALE(30脚)地址锁存信号/PSEN(29脚)片外程序存储器读选通: /EA/Vpp(30脚)(5)I/O接口P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收
15、输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功
16、能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /
17、RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。2.3 系统工作原理开始上电时,系统开始工作,在系统里面预设的时间日期存入PCF8563,再由ZLG7290送LED显示,由于一开始CLR swich_date,所以先显示的时间,当按下键时,经过查询得到按下的是哪个键,然后跳转到相应的程序执行,得到相应的结果。若按下的KEY1切换键,跳转到切换程序,显示切换到日期显示,再次按下KEY1键,则切换到时间显示,如此循环显示。若按下的是KEY2设置键,切换到设置程序,日期的年位闪烁显示,当再次按下设置键时,闪烁位变为月位,继续按下,则在年月日时分秒循环闪烁显示。在设置键按下
18、时,按下KEY1切换键是无效的。在切换键按下后,即有位在闪烁显示时,按下KEY3加一键则跳转到加一程序,此时进行加一操作,按下Key4减一减则跳转到减一程序,此时进行减一操作。当设置完成后,按下Key5确定键,跳转到确定程序,此时将设置的时间送到PCF8563时间芯片里面,再由ZLG7290送LED显示。3 万年历时钟硬件电路设计3.1 整体原理图该电路由以下几个部分组成:AT89C51单片机,PCF8563T时钟芯片,ZLG7290 I2C 接口键盘及 LED 驱动器. 其中,AT89C51单片机是总控制器,负责启动控制PCF8563、将得到的时钟数据进行码制转;PCF8563负责读取时间写
19、入芯片,在送ZLG7290;ZLG7290可驱动8位共阴数码管并让数码管显示。3.2 分块介绍3.2.1 AT89C51SDA接P1.7;SCL接P1.6;RST接P1.0;INT_KEY接P3.23.2.2 LED与PCF85633.2.3 按键与ZLG72903.3 器件地址及存放单元MTD EQU 40H ;发送数据缓冲器MRD EQU 49H ;接收数据缓冲区ZLG7290 EQU 70H ;ZLG7290的器件地址PCF8563 EQU 0A2H;PCF8563的器件地址ACK BIT10H ;应答标志位SLA DATA50H ;器件的从地址SUBA DATA51H ;器件的子地址N
20、UMBYTE DATA52H ;读/写的字节数变量disp_buf EQU 60H set_date_buf EQU 30H ;设置的时间7字节30H36H秒分时日月年set_date EQU 5AH ;B 从低到高依次代表秒分时日月年闪烁控制位,最高两位不可用swich_date BIT1AH ;时间日期显示标志位4 万年历时钟软件编程设计4.1 程序介绍4.1.1 主程序MAIN主程序实现的功能有:(1) 初始化时间日期(2) 把时间日期数据写入PCF8563通过CLR swich_date使LED先显示的是时间4.1.2主循环MAINLOOP主循环实现的功能有:(1) 时间日期的显示DI
21、SPLAY(2) PCF8563的数据送ZLG7290使得LED每一秒刷新一次。4.1.3时间日期显示程序display_date与display_timedisplay_date与display_time的显示过程相似,实现的功能主要如下(1) 判断是否在设置程序里(2) 若在设置程序里面则通过8563读取设置的时间进行显示(3) 若不在则直接读取8563的时间进行显示4.1.4按键处理子程序KEY_HANDLE按键处理子程序实现的功能有:(1)当按键按下时,通过查询方式判断按下的是哪个按键,再执行相应的程序(2)切换键若按下KEY1,swich_date会发生变化,则时间日期会切换显示。如
22、果在有位闪烁时按下,则无效。(3)设置键KEY_SET当按下此键,年位进入闪烁状态,此时可以进行加一减一操作再次按下则可以进行移位闪烁,即可加一减一的位变化。(4)加一键KEY_ADD与减一键KEY_SUB在设置键按下,即有位闪烁显示时,按这两个键可分别进行加一减一操作。在此段程序中有设置每年的月数,每月的天数,每天的小时数,没小时的分钟数,每分钟的秒数。这样时间设置时才能正常进位。(5)确定键 KEY_OK当设置完毕后,按下此键,结束闪烁显示,将时间写入8563时钟芯片,并送LED显示。4.2 系统控制流程图送ZLG7290驱动数码管显示日期与时间显示的切换设置结果送PCF8563T设置时间
23、按键按下读取PCF8563T内的时间日期初始化日期时间数据主程序流程图开始切换键S1按下设置键S2按下设置时间显示设置的时间判断设置键是否按下显示设置的时间判断设置键是否按下显示设置的时间显示设置的时间显示PCF8563T的时间设置键按下显示设置的时间显示PCF8563T的时间设置键未按下判断设置键是否按下时间日期显示程序流程图开始显示设置的时间显示PCF8563T的时间查询判断按的是哪个键加减按键S3、S4按下查询判断按的是哪个键加减按键S3、S4按下按下按键查询判断按的是哪个键查询判断按的是哪个键按下按键查询判断按的是哪个键按下加减按键减一键S4按下加一键S3按下进行减一操作进行加一操作切
24、换键S1按下查询判断按的是哪个键查询判断按的是哪个键按下按键查询判断按的是哪个键按下按键开始按键流程图设置键S2按下日期与时间显示的切换年位闪烁按需求对该位进行加一减一操作确定键S5按下设置键S2按下保存设置的时间到8563闪烁位向后进一位结束5 实验与结果分析5.1 调试方法5.1.1 Keil调试启动KEIL软件,对每个写好的主程序和子程序进行单步调试,直到程序没有错误为止。5.1.2 试验箱调试根据程序的设计在试验箱上分别连接好各个端口的连接线,用串口线把计算机和试验箱的仿真头连接好,打开试验箱,根据要求完成接线。如下所示:1. 系统各跳线器处在初始设置状态,SDA接P1.7;SCL接P
25、1.6;RST接P1.0; INT_KEY接P3.2。2. 启动PC机,打开Keil uVision2软件,加载程序,编译,下载,运行。3. 单击Keil软件上的“Start/Stop Debug Session”按钮,再单击“RUN”按钮,运行程序。观察试验箱上出现的效果,分析程序的对错,直到调试出正确的结果。5.2 调试过程5.2.1 Keil调试在编程的过程中,我有个小插曲,本来在单片机的学习上,我的成绩就是不太理想的,所以就去网上与图书馆找了许多的资料,但是资料上面的都是与我的题目有很大出入的,所以最后还是选择了自己编程。在编程中,遇到的难题也蛮多的,通过向老师请教与跟同学讨论,我确定
26、了我的大体思路:用查询的方法判断按下的按键,然后再执行相应的程序。这样的思路给我的编程也减轻了不少的负担,像加一减一这样的程序,我只要编好加一的程序,减一的程序稍微改动就可以了;显示时间跟显示日期这样的程序,也是只要编好一个,另一个就差不多完成了。当然,在编程时,我也犯了许多的小错误,导致我在Keil调试阶段耽误了许多的时间。比如没有添加LED显示程序,还有就是指令的一些小错误,或者标点符号的错误。最后,通过自己的努力和老师同学的指导,我还是顺利的完成了编程的工作。紧接着就开始了试验箱上的调试。5.2.2 试验箱调试当我把接线接好,程序运行后,LED并没有显示,经过检查,我发现了错误所在,我把
27、程序的入口地址写成了8000H,修改后,显示顺利。当我按下KEY1键后,LED的显示实现了切换。但是当按下KEY2后,并没有实现闪烁显示,而且显示也变成了乱码,我就开始进行对程序的检查,600多行的程序,我找了很久都没有找到问题所在,之后我发现LLOOP:LJMPMAINLOOP被我写成LLOOP:LJMP lp;修改后设置键有效,继续按下也循环切换显示。按下加一减一键也能实现操作,但是每月的天数都是31天,这我才想到我的并没有设置每月的天数。这时我又开始了变成的工作,这段程序,我采用了取月数,然后设置每月应该是多少天,其中2月我统一设置成了28天。这样也省了我的一些时间。再次进行试验箱调试,
28、运行后突然都不亮了,我检查程序也没有发现错误,于是我开始怀疑是不是试验箱有问题,当我换了一个试验箱后,LED是正常显示的。这时候我继续一个一个调试,当我调试到秒位加一减一时,发现秒位的显示是有问题的,但是在正常时间显示中是没有问题的,而且秒的这段程序与时分等的程序都是一样类似的,别的程序都没有问题,只有这个问题。这时候我找来了老师,老师告诉我,秒位可以不用设置,因为在我设置的过程中,8563中已经不知道走了多少秒了。但在之后的调试过程中,秒位也不知道为什么又好了,所以我还是把秒位的设置留了下来。这样,我的调试过程也就完成了。5.3 调试结果分析实验的结果实现了预期的效果1. 上电时显示的是时间
29、,当按下KEY1键时,切换到日期显示,再按下时,切换到时间显示。2. 当按下KEY2键时,日期的年位闪烁显示,此时按KEY3键进行加一操作,按KEY键进行减一操作。再按一次KEY2键,则变为月位闪烁显示,这样在年月日时分秒中循环切换闪烁,当闪烁时可以进行加一减一操作。3. 当按下KEY2设置键后,再按下KEY1切换键则无作用。4. 当设置完毕后,可以通过KEY5确认键进入显示。5. 能够在断电的情况下,通过时钟芯片中的锂电池提供电源,保证时钟能够继续计时而不丢失原来的数据。各个时标的进位和周期频率都很没有出现错误。6 小结与体会通过一周半的努力,在老师同学的指导与帮助下,我顺利完成了万年历时钟
30、的设计。一开始,在刚刚拿到题目的时候,我看到的是一个完全没有接触过的芯片,本来我这门课的学习就不是特别好,多汇编语言的变成也不是很熟练,所以我觉得这个题目可能我做不起来。但是当我看到大家的题目大多数都是用没有接触过的芯片完成课程设计,我的信心也强了起来。由于之前使用ZLG7290做过实验,所以对于ZLG7290的原理和应用还是蛮熟悉的。但是 对于PCF8563,我一点都没有接触过,所以中午我就开始在图书馆和网上查找关于PCF8563的有关资料。了解了PCF8563的工作原理后便开始了设计的工作。本次的设计基于AT89C51单片机的LED显示系统主要由89C51单片机处理器控制、位扫描控制电路、
31、端码显示驱动电路及与计算机的接口电路组成。此外还包括一些基本的电路如电源电路,晶振电路,及接口电路。我通过了四天的时间完成了程序的设计。在设计过程中,我们通过网络和相关图书学到了很多知识,并通过无数遍的调试,我们完成了主程序,初始化程序,读写显示程序,设置程序,按键查询程序等等。之后又花了两天的时间进行了实验箱上的调试,最后在自己的努力和老师的帮组下顺利完成了课程设计。通过这一周半的课程设计,我认识到了许多东西,我自己也发现了许多的不足,首先,我最先想到的是去网上找现成的而不是自己做,这样的想法是不对的,这样的学习态度,不管做什么事都不会有好的成果。这一点在之后的学习生活中,我一定要改正。然后
32、,我也发现了我粗心大意的缺点,比如入口地址写成了8000H,程序里面标点、指令也出现了好多错误。这个缺点我也需要多加改正。在此次课程设计中,我一开始没有写注释,我后面去看花了好长时间去重新理解,这样让我养成了编程过程中写注释的习惯。在软件设计的过程中,利用了Keil这个软件在程序录入和调试的时候的优越性,让我能够在编写软件的时候很方便的发现软件中的错误,现在已经能够使用Keil对所设计的程序进行调试。这也让我了解到,借助一些专业的软件是多么的重要,在以后的日子里面我还要学习更多的专业软件,并且熟练应用,以便更好的完成学习任务和以后工作里面的任务。最后,我要感谢老师对我的指导和同学对我的帮助。没
33、有他们的帮助我是不太可能顺利完成这次课程设计的。在以后的学习生活中我会时时敦促自己更加努力,不辜负师长、亲人、朋友对我的期望。参 考 文 献1 张毅刚主编,单片机原理及应用,北京:高等教育出版社,20042 陈涛编著,单片机应用及C51程序设计,北京:机械工业出版社,20083 周润景主编,PROTEUS入门实用教程,北京:机械工业出版社,20074 皮大能主编,单片机课程设计指导书,北京:北京理工大学出版社,20105 楼然苗主编,单片机实验与课程设计(Proteus仿真版),浙江:浙江大学出版社, 2010 6 王法能主编,单片机原理及应用 科学出版社 20047 控制、电子技术类杂志、报
34、刊8 广州周立功单片机发展有限公司提供的PCF8563 I2C 实时时钟日历芯片与ZLG7290 I2C 接口键盘及 LED 驱动器讲解文件附录 SDA BIT P1.7 ;I2C总线引脚定义SCL BIT P1.6 ;I2C时钟引脚定义RST BIT P1.0 ;I2C复位引脚定义KEY_INT BIT P3.2 MTD EQU40H ;发送数据缓冲器MRD EQU49H ;接收数据缓冲区;定义器件地址ZLG7290 EQU70H ;ZLG7290的器件地址PCF8563 EQU 0A2H;PCF8563的器件地址ACK BIT 10H ;应答标志位SLA DATA50H ;器件的从地址SU
35、BA DATA51H ;器件的子地址NUMBYTEDATA52H ;读/写的字节数变量 ;00 01 02 03 04 05 06 07 ;秒 秒 分 分 时 时 ;08 09 10 11 12 13 14 15 ;日 日 月 月 年 年disp_buf EQU 60H set_date_buf EQU 30H ;设置的时间7字节30H36H秒分时日月年 set_date EQU 5AH ;B 从低到高依次代表秒分时日月年闪烁控制位swich_date BIT1AH;主程序ORG0000HLJMPMAINORG0100HMAIN: MOV set_date,#0x00MOV SP,#70HCL
36、R RST ;复位I2CLCALL DELAYSETB RST ;置位I2CLCALL DELAY;初始化日期时间数据MOVMTD,#00H ;PCF8563T的控制REG1MOVMTD+1,#12H ;PCF8563T的控制REG2 MOVMTD+2,#00H ;PCF8563T的秒regMOVMTD+3,#30H ;PCF8563T的分regMOVMTD+4,#15H ;PCF8563T的时regMOVSLA,#PCF8563 ;指定器件地址MOVSUBA,#00H ;指定子地址MOVNUMBYTE,#05H ;发送5字节数据 两个控制寄存器 和秒分时LCALLIWRNBYTE ;调用写5
37、字节数据程序LCALL DELAYMOVMTD,#30H ;日的首地址MOVMTD+1,#04H ;周的首地址MOVMTD+2,#05H ;月的首地址MOVMTD+3,#14H ;年的首地址MOVSLA,#PCF8563 ;指定器件地址MOVSUBA,#05H ;指定子地址 日的地址MOVNUMBYTE,#04H ;发送4字节数据LCALLIWRNBYTE ;调用写4字节数据程序LCALL DELAYCLR swich_date ;先显示时间;主循环开始MAINLOOP: MOV A,set_date JNZ lp ;判断是否设置时间,设置就不读PCF中数据MOVSLA,#PCF8563 ;指
38、定器件地址MOVSUBA,#02H ;指定子地址 读取时间数据 首地址02HMOVNUMBYTE,#07H ;发送7字节数据LCALLIRDNBYTE ;调用读取7个字节数据程序 LCALL DELAYlp: JB swich_date,display_date LJMP display_time ;显示日期display_date: MOV A,set_date JZ disp_normal MOV A,set_date_buf+3 MOV MRD+3,A MOV A,set_date_buf+5 MOV MRD+5,A MOV A,set_date_buf+6 MOV MRD+6,Adis
39、p_normal:MOVA,MRD+3 ANL A,#0x3fMOVMRD+3,AMOVA,MRD+5 ANL A,#0x1fMOVMRD+5,A MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x08 MOV b,#0x00 JZ ss6 ;闪烁标志位为0则转移 MOV b,#0x40ss6:MOVA,MRD+3ANL A,#0X0F ADD a,bMOVdisp_buf+0,A ;日的低位送显示 MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x08 MOV b,#0x00 JZ ss7 ;闪烁标志位为0则转移 MOV b,#0x40ss7:MOVA
40、,MRD+3SWAPA ANL A,#0X0F ADD a,bMOVdisp_buf+1,A ;日的高位送显示 MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x10 MOV b,#0x00 JZ ss8 ;闪烁标志位为0则转移MOV b,#0x40ss8:MOVA,MRD+5ANL A,#0X0F ADD a,bMOVdisp_buf+3,A ;月的低位送显示 MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x10 MOV b,#0x00 JZ ss9 ;闪烁标志位为0则转移 MOV b,#0x40ss9:MOVA,MRD+5SWAPA ;半字节取反A
41、NL A,#0X0F ADD a,bMOVdisp_buf+4,A;月的高位送显示 MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x20 MOV b,#0x00 JZ ss10 ;闪烁标志位为0则转移MOV b,#0x40ss10:MOVA,MRD+6 ANL A,#0X0F ADD a,bMOVdisp_buf+6,A ;年的低位 MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x20 MOV b,#0x00 JZ ss11 ;闪烁标志位为0则转移 MOV b,#0x40ss11:MOVA,MRD+6SWAPAANL A,#0X0F ADD A,BM
42、OVdisp_buf+7,A;年的高位MOVdisp_buf+2,#1FHMOVdisp_buf+5,#1FH ;这两位数码管不显示LJMPDISPLAY;显示时间display_time: MOV A,set_date JZ disp_normal0 MOV A,set_date_buf MOV MRD+0,A MOV A,set_date_buf+1 MOV MRD+1,A MOV A,set_date_buf+2 MOV MRD+2,Adisp_normal0:MOVA,MRDANL A,#0x7fMOVMRD,AMOVA,MRD+1ANL A,#0x7fMOVMRD+1,AMOVA,M
43、RD+2ANL A,#0x3fMOVMRD+2,A MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x01 MOV b,#0x00 JZ ss0 ;闪烁标志位为0则转移 MOV b,#0x40ss0:MOVA,MRDANL A,#0X0F ADD A,B ;闪烁显示MOVdisp_buf,A MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x01 MOV b,#0x00 JZ ss1 ;闪烁标志位为0则转移 MOV b,#0x40ss1:MOVA,MRDSWAPAANL A,#0X0F ADD A,B ;闪烁显示MOVdisp_buf+1,A MOV a
44、,set_date ;判断是否要闪烁显示 ANL a,#0x02 MOV b,#0x00 JZ ss2 ;闪烁标志位为0则转移 MOV b,#0x40ss2:MOVA,MRD+1ANL A,#0X0F ADD a,bMOVdisp_buf+3,A MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x02 MOV b,#0x00 JZ ss3 ;闪烁标志位为0则转移 MOV b,#0x40ss3:MOVA,MRD+1SWAPAANL A,#0X0F ADD a,bMOVdisp_buf+4,A MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x04 MOV
45、b,#0x00 JZ ss4 ;闪烁标志位为0则转移 MOV b,#0x40ss4:MOVA,MRD+2ANL A,#0X0F ADD a,bMOVdisp_buf+6,A MOV a,set_date ;判断是否要闪烁显示 ANL a,#0x04 MOV b,#0x00 JZ ss5 ;闪烁标志位为0则转移 MOV b,#0x40ss5:MOVA,MRD+2SWAPAANL A,#0X0F ADD a,bMOVdisp_buf+7,AMOVdisp_buf+2,#1FHMOVdisp_buf+5,#1FH;显示程序DISPLAY:MOVR7,#0X08MOVR1,#disp_bufMOVA,
46、#0X60DISLOOP:MOVMTD,APUSHACCMOV21H,R1MOV20H,R7MOVMTD+1,R1MOVSLA,#ZLG7290;指定器件地址MOVSUBA,#07H;指定子地址MOVNUMBYTE,#02H;发送2字节数据LCALLIWRNBYTE;调用写2字节数据程序LCALL DELAYMOVR1,21HMOVR7,20HPOP ACCINC R1INC ADJNZR7,DISLOOPLOOP1:JNBKEY_INT,KEY_HANDLE ;判断按键 按键按下则转移KEY_HANDLELJMPMAINLOOP;主循环结束;按键处理子程序KEY_HANDLE: MOVSLA
47、,#ZLG7290;指定器件地址MOVSUBA,#01H ;指定子地址MOVNUMBYTE,#01H;发送1字节数据LCALLIRDNBYTE;调用读1字节数据程序LCALLDELAYMOVA, MRDCJNE A,#01H,TO_SET;键值=1 取反键 MOV A,set_date JNZ LPP ;若设置键按下 则切换显示无用CPL swich_date ;否则,按键按下,swich_date取反LPP:LJMP MAINLOOPTO_SET:CJNE A,#02H,TO_ADD LCALL KEY_SET LJMP MAINLOOPTO_ADD:CJNE A,#03H,TO_SUB LCALL KEY_ADD LJMP MAINLOOPTO_SUB:CJNE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保行业废弃物处理风险协议
- 高级化妆品行业售后免责协议
- 建设工程施工协议(32篇)
- 上海手房买卖协议
- 临时租车协议书
- 班班通设备管理和使用协议
- 物流配送中心建设委托代理合同
- 建筑工地安全施工责任与免责合同
- 房地产项目销售居间合同
- 教练与学员合同协议
- 光伏电站小EPC规定合同范本
- 2024年01月江苏2024年昆山鹿城村镇银行第三期校园招考笔试历年参考题库附带答案详解
- 中国人口研究专题报告-中国2025-2100年人口预测与政策建议-西南财经大学x清华大学-202501
- 建筑工程安全与管理
- 2025年内蒙古机电职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年05月齐鲁银行总行2024年社会招考笔试历年参考题库附带答案详解
- 浙江省绍兴市2024-2025学年高一上学期期末调测英语试题(无答案)
- 幼儿园开学教师安全知识培训
- 2024年医疗器械经营质量管理规范培训课件
- 中华人民共和国学前教育法-知识培训
- 2023年新高考(新课标)全国2卷数学试题真题(含答案解析)
评论
0/150
提交评论