《基于STC89C52的电子时钟--课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于STC89C52的电子时钟--课程设计报告.docx(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中南大学嵌入式微控制器应用系统综合设计课程设计报告设计题目:基于STC89C52的电子时钟指导老师:设计者:专业班级:设计日期:2017.01.09摘要随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间,能够了解与人类密切相关的信息,比如星期、日期等,电子时钟诞生了,它集时间、日期、星期等功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。该电子时钟主要采用STC89C52RC单片机作为主控核心,由DS1302时钟芯片提供时钟、LCD1602显示屏显示。STC89C52RC单片机是由ATM
2、EL公司推出的,功耗小,电压可选用46V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LCD1602显示屏来显示,可以同时显示年、月、日、星期、时、分、秒和温度等信息。此外,该电子时钟还具有时间校准等功能。关键词:时钟电路; 时钟芯片DS1302;LCD1602显示屏; 单片机STC89C52RC;目录绪论1第1章 设计要求与方案论证3 1.1 引言3 1.2功能要求3 1.3方案论证4 1.3.1 技术可行性4 1
3、.3.2 单片机的选择4 1.3.3 显示模块的选择 5 1.3.4 键盘模块的选择5 1.3.5 键盘扫描控制方式的选择6 1.3.6 时钟芯片的选择7 1.3.7 总体方案论证与选择7第章 系统硬件电路设计9 2.1 系统硬件概述9 2.2 所用到芯片及其各自功能说明9 2.2.1 主控制器STC89C52RC9 2.2.2 时钟芯片DS130210 2.2.3 断电存储芯片AT24C0212 2.3硬件设计系统原理图及其说明13 2.3.1 主控制芯片STC89C52接口电路设计13 2.3.2 显示电路设计15 2.3.3 报警电路设计16 2.3.4 键盘接口电路设计17 2.3.5
4、 AT24C02断电存储电路设计18 2.3.6 DS18B20电路设计18 2.3.7 DS1302时钟电路设计19第3章 系统的软件设计21 3.1 I/O口资源分配21 3.2 主模块软件设计21 3.3 功能模块子程序软件设计22 3.3.1 时间调整模块22 3.3.2 LCD1602显示程序模块24 3.3.3 DS1302时钟程序模块25 3.3.4 DS18B20温度采集程序模块26第4章 系统调试28 4.1 调试所遇到的问题28 4.2 问题分析和解决问题的方法28 4.3 软件系统使用操作说明31第5章 结束语33参考文献34绪论 随着人们生活水平的提高和生活节奏的加快,
5、对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求
6、!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,温度报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子时钟的设计,使其更加的具有市场。本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。除了采用集成化的时钟芯片外,还采用了集成蜂鸣器模块、DS18B20温度检测模块,另外采用MCU的方案,利用STC89系列单片微机制成电子电路,采用软
7、件和硬件结合的方法,控制LCD1602显示屏输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。STC89C52RC是由ATMEL公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。 文介绍了基于STC89C52RC单片机设计的电子时钟。首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优势以及课题的开发意义;接着介绍了STC89C52RC单片机的硬件结构和本毕业设计所要外扩的LCD1602显示屏显示及其驱动方法,并在
8、此基础上实现了时钟基本电路的设计;然后使用单片机C语言在KEIL平台上进行时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。 第1章 设计要求与方案论证1.1 引言本文提出了一种基于STC89C52RC单片机的时钟设计方案,本方案以STC89C52RC单片机作为主控核心,与时钟芯片DS1302、4x1按键、LCD1602显示屏等模块组成硬件系统。在硬件系统中设有4x1独立按键和LCD1602显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,并提供了闹钟响铃和高低温响蜂鸣器报警。综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等
9、诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2功能要求 设计一个电子时钟,功能上类似现在流行的智能手环,既可以显示实时日历时钟、设置闹钟,又可以显示室温。功能需求:1. 用LCD1602显示器显示实时日历时钟的时、分、秒、年、月、日、星期,按秒更新,能通过按键调整,并具有开机响蜂鸣器提醒与整点蜂鸣器响三秒报时;2. 设置秒表计时功能;3. 倒计时功能,倒计时时间到响蜂鸣器提醒;4. 闹钟功能,设置闹钟时间到,蜂鸣器闹铃且可以设置两个闹钟;5. 断电保护,用备用电池在电池耗尽前维持DS1302的计时;6. DS18B20温度检测且高温、低温报警;7. 闹钟闹铃、温度高低温报警、
10、倒计时时间到、整点报时的蜂鸣器响声各不相同;8. 闹钟时间,高低温报警值断电保存。1.3方案论证1.3.1 技术可行性随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。
11、因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:1. 单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。2. 系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。3. 由于构成的应用系统是一个计算机系统,相当多的测、
12、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。4. 有优异的性能、价格比。1.3.2 单片机的选择方案一:采用传统的STC89C52RC作为电机的控制核心。单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。方案二:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点如下:8KB Flash ROM,可以擦除1000次以上,数据保存10年。由于本系统对CPU运算速度要求很高,需要执
13、行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高,性能好,所以两种方案都有可取之处。选用方案一作为主方案,方案二作为备用方案。1.3.3 显示模块的选择 方案一:使用液晶显示屏显示时间数字。 液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。采用LCD1602内部集成ASCII字符库,使编程工作量减小,控制器的资源占用较多,其成本也偏高。在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片,不易维护。静态显示,只要送了值就能保存,十分方便。方案二:使用传统的LED数码管显示。 数码管具
14、有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,称重轻,精确可靠,操作简单。数码管采用BCD编码显示数字,程序编译容易,资源占用较少。但是需要动态扫描,时间控制要求高。 根据以上的论述,采用方案一,程序控制方便。在本系统中,我们采用了LCD1602液晶显示屏。1.3.4 键盘模块的选择在对日期和时间进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。 方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单个按键电路。独立式按键电路配置灵活,软件结构简单。 方案二:使用矩阵式键盘。矩阵式键
15、盘是由行线和列线组成,按键位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。 根据以上的论述,因本系统需要的按键不多,从左到右分为,加键、减键、切换设置项键、模式键,要求简单。所以采用方案一独立式键盘。1.3.5键盘扫描控制方式的选择在单片机应用系统中,对键盘的处理工作仅是CPU工作内容的一部分,CPU还要进行数据处理、显示和其他输入输出操作,因此键盘处理工作既不能占用CPU太多时间,又需要CPU对键盘操作及时作出响应。CPU对键盘处理控制的工作方式有以下几种:方案一:程序控制扫描方式程序控制扫描方式是在CPU工作空余,调用键盘
16、扫描子程序,响应键输入信号要求。方案二:定时控制扫描方式定时控制扫描方式是利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描,并在有键闭合时转入该键的功能子程序。方案三: 中断控制扫描方式中断控制扫描方式是利用外部中断源,响应输入信号。当无按键按下时,CPU执行正常工作程序。当有按键按下时,CPU立即产生中断。在中断服务子程序中扫描键盘,判断是哪一个键被按下,然后执行该键的功能子程序。这种控制方式克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。 由于程序运行时间控制得比较好,为了节省宝
17、贵的中断资源,所以在我的设计中采用程序查询方式。1.3.6 时钟芯片的选择 方案一:DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源(2.55.5V电源,再2.5V时耗电小于300nA),而且DS1302可以编程选择多种充电电流来为后备电源进行慢速充电,可以保证后备电源基本不耗电。方案二:采用Dallas半导体公司推出的DS12887实时时钟芯片,该芯片有24个引脚,内部集成了石英晶体、锂电池和其他支持电路,在没有外部供电的情况下,可以正确走时10年;可以计数时分秒、年月日和星期等信息,而且润年补偿到2100年有效。DS1302接了32768Hz的晶
18、振后,在晶振两端并上610pF的电容后,误差在一天两至三秒,完全可以达到设计要求且成本与编程难度、所用IO口都低于DS12887。所以决定采用方案一。 1.3.7 总体方案论证与选择按照系统设计功能的要求,初步确定系统由主控模块、时控模块、及显示模块、断电存储模块、温度检测模块、蜂鸣器模块和4x1键盘接口模块共7个模块组成。主控芯片使用51系列STC89C52RC单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。温度检测模块采用美国DALLAS公司的DS18BB20温度检测传感器,精度达0.0625摄氏度,响应时间毫秒级。蜂鸣器模块采用有源蜂鸣器
19、。显示模块采用普通的LCD1602液晶显示屏。另外断电存储模块采用AT24C02型号的EEPROM,可以掉电存储设置的闹钟时间和温度上限报警值。第章 系统硬件电路设计2.1系统硬件概述 由于本电子时钟系统设计是建立在普中51开发板V2.0的基础上,所以硬件设计较为简单,只需增加DS1302、DS18B20、蜂鸣器三个外部模块即可。2.2所用到芯片及其各自功能说明2.2.1 主控制器STC89C52RC STC89C52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。 主要特性如下:1. 增强
20、型8051单片机,6时钟、机器周期和12时钟、机器周期可以任意选择,指令代码完全兼容传统8051单片机。2. 工作电压:5.5V3.3V3. 工作频率范围:044MHz。4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。7. ISP(在系统可编程)/IAP(再应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1 )直接下载用户程序,数秒即可完成一片。8. 具有看门狗功能9. 共3
21、个16位定时器/计数器。及定时器T0、T1、T210. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒11. 通用异步串行口(UART),还可用定时器实现多个UART12. 工作温度范围:-40+85度(工业级)/075度(商业级)13. PDIP封装2.2.2时钟芯片DS1302DS1302可以对年、月、日、星期、时、分、秒进行计时, 且具有闰年补偿功能, 工作电压宽达2.55.5V。采用三线接口与CPU进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个33x8的用于临时性存放数据的RAM寄存器
22、。DS1302是的DS1202升级产品, 与DS1202兼容, 但增加了主电源/后背电源双电源引脚, 同时提供了对后背电源进行涓细电流充电的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24时或带AM/PM的12小时格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。 DS1302的性能特性:l 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较
23、;l 用于高速数据暂存的31*8位RAM;l 最少引脚的串行I/O;l 2.55.5V电压工作范围;l 2.5V时耗小于300nA;l 用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;l 简单的三线接口;l 可选的慢速充电(至Vcc1)的能力。DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8字节数以上,最大可达248字节数。如果在传送
24、过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的控制字如表所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址寻址能力(地址/命令位15=逻辑1),可以把时钟/日历或RAM寄存器规定为
25、多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。表2.1 DS1302控制字 DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS13
26、02停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。 AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(2023h)。 DS1302的晶振选用32768Hz,电容推荐值为610pF。因为振荡频率较低,也可以不接电容,一天走时误差不超过7s,对计时精度影响不大。2.2.3断电存储芯片AT24C02AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,并含有一个8字节页写缓冲器。CATALYST公
27、司的先进CMOS技术实质上减少了器件的功率。1. 数据线上的看门狗定时器2. 可编程复位门栏电平3. 高数据传送速率为400KHz和IIC总线兼容4. 2.7V至7V的工作电压5. 低功耗CMOS工艺6. 8字节页写缓冲区7. 片内防误擦除写保护8. 高低电平复位信号输出9. 100万次擦写周期10. 数据保存可达100年AT24C02支持总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,由于A0
28、、A1和A2可以组成000111八种情况,即通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上,通过进行不同的配置进行选择器件。2.3硬件设计系统原理图及其说明2.3.1主控制芯片STC89C52接口电路设计 主控制芯片STC89C52接口电路设计包含了复位电路、USB电源电路以及下载电路、各IO口上拉电阻。STC89C52接口电路电路图如图2.1所示: 图 2.1 除P3.0、P3.1、P3.4为了不对外部中断和DS1302的数据传输引脚造成干扰没接上拉电阻外,其他引脚都接了上拉电阻来保护STC89C52并且确定输入、输出状态晶振和上拉电阻电路如图2.2所示:
29、图 2.2 晶振和上拉电阻电路 复位电路如图2.3所示,按下机械按键超过几十毫秒,RST引脚接收高电平复位。 图2.3 复位电路 图 2.4 USB电源电路以及下载电路2.3.2显示电路设计显示部分采用LCD1602液晶显示屏,1602型LCD可以显示2行16个字符,8位数据总线D0-D7接STC89C52的P0口和三个控制端口RS、R/W、EN分别接P26口、P25口、P27口,工作电压为5V,并且具有字符对比度调节和背光功能。液晶显示的电路图如图2.5所示: 图 2.52.3.3报警电路设计 报警电路由蜂鸣器构成,BZ直接与单片机P2.3连接。由图3.4可知,当P2.3输出为低电平时,三极
30、管导通,蜂鸣器响;输出高电平时,三极管截止,蜂鸣器停止鸣叫。通过控制输入信号端输出低电平的时间长短来控制蜂鸣器长叫或短叫。报警电路的电路图如图2.6所示: 图 2.62.3.4键盘接口电路设计弹起式按键开关存在抖动问题。按键开关在电路中的连接如图所示。按键未按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。A点电位就用于向CPU传递按键的开关状态。但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2.7所示,键盘的抖动时间一般为510ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。因此必须设法消除抖
31、动的不良后果。图2.7 按键操作和按键抖动 消除抖动的不良后果的方法有硬、软件两种。为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。根据抖动特性,在第一次检测到按键按下后,执行一段延时510ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。当检测到按键释放后,也要给510ms的延时,待后延抖动消失后才转入该键处理程序。由于普中开发板V2.0引脚共用过多,四个独立按键使用易出错,所以矩阵键盘的P1.6置低来将P1.0、P1.1、P1.2、P1.3接成四个独立按键。K1、K2、K3、K4的一端分别接P1.0、P1.1、P
32、1.2、P1.3,另一端接P1.6,P1.被置低。键盘接口电路的电路图如图2.8所示: 图 2.82.3.5 AT24C02断电存储电路设计 AT24C02的时钟引脚接STC89C52的P2.1口,地址线全部接地,片选引脚接地,保持一直选通,数据引脚接P2.0口。AT24C02的电路图如图2.9所示:图 2.92.3.6 DS18B20电路设计 DS18B20的电路十分简单,除电源和地外,数据口接STC89C52的P1.3口,DS18B20电路图如图2.10:图 2.102.3.7DS1302时钟电路设计DS1302有主电源/后备电源双电源引脚:VCC1在单电源与电池供电的系统中提供低电源,并
33、提供低功率的电磁备份;VCC1在双电池系统中提供主电源。在这种运行方式中,VCC1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较打大者供电。当VCC2(Vcc1+0.2V)时,VCC2给DS1302供电;当VCC2VCC1时,由VCC1供电图2.11 DS1302DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字
34、节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。VCC2接到开发板系统的电源,VCC1接到纽扣电池CR2032,X1、X2接32.768Hz的晶振,时钟引脚SCLK接STC89C52的P3.6口,数据引脚I/O接P3.0口,片选引脚CE接P3.5口。时钟电路的电路图如图2.12所示:图 2.12第3章 系统的软件设计3.1 I/O口资源分配电子时钟的程序主要包括3个方面的内容:一是DS1302从单片机中读取数
35、据进行计数,二是利用按键进行时间的调整,三是单片机中读取DS1302中的数据驱动LCD1602显示屏显示时间。STC89C52RC单片机主要I/O口的分配:P36、P30、P35分别接时钟芯片的SCLK、I/O、RST引脚,不过由于普中开发板V2.0引脚共用过多,四个独立按键使用易出错,所以矩阵键盘的P1.6置低来将P1.0、P1.1、P1.2、P1.3接成四个独立按键。 3.2 主模块软件设计 系统初始化各个子程序模块和变量后,开启定时器中断,进入while循环,刷新LCD1602的显示,不断查询是否有按键按下,有则执行相应的子程序如切换模式、调整时间、开启秒表等。如图3.1所示:图3.1
36、主程序流程图3.3 功能模块子程序软件设计3.3.1 时间调整模块 在时间调整模式下,通过按设置切换键可以按年月日时分的顺序切换要设置的项,按加键、减键可以对应增减被设值,按模式键退出该设置模式。如图3.2所示:图 3.2 时间调整程序流程图3.3.2 按键程序模块 在while的大循环中,一直用程序查询方式扫描有没有按键按下,有按下则执行相应的程序,如图3.3所示: 图3.3 按键程序流程图 3.3.3 LCD1602显示程序模块 分为六种显示模式,按模式切换键进入不同的模式,并分别执行不同的子程序。如图3.4所示:图3.4 LCD1602显示流程图3.3.4 DS1302时钟程序模块 读写
37、基本控制方式相同,只是写DS1302在写前要关写保护,写后要开写保护。读和写都是,先给复位口一个高电平,然后发地址,延时一段时间后读或写DS1302,最后将地址增加,完成读写任务后退出。如图3.5、3.6所示:图3.5 将数据写入DS1302 图3.6 将数据从DS1302读出3.3.5 DS18B20温度采集程序模块 初始化完成后,有读任务时发搜索ROM命令启动在线DS18B20数据转换,等待转换完成后发匹配ROM命令并发DS18B20序列号,最后读取DS18B20的温度值。如图3.7所示:图3.7 DS18B20温度采集流程图第4章 系统调试4.1 调试所遇到的问题 虽然已是有意选择了一个
38、比较简单的题目,程序开发过程中还是遇到了不少出乎意料的问题。主要有下面几个:1. 使用LCD12864做显示器不能显示,只有白屏;2. STC89C52无法开启定时器;3. 按键迟钝或一次按下跳动多次值;4. 温度传感器检测温度变化刷新数值缓慢;5. AT24C02无法存储部分值;6. DS1302读取分钟偶数值时会出错;7. 设置温度报警下限值时,显示报错提示总是和设置的温度值同时显示造成显示混乱;8. DS1302每天都慢了6到7s的时间误差;9. 调试闹钟和秒表时,闹钟和秒表的打开和关闭会互相干扰;10. 设想在一个文件中定义全局变量,在另一个文件中用extern声明却出错;4.2 问题
39、分析和解决问题的方法 针对各个问题一一陈述。1. 使用LCD12864做显示器不能显示,只有白屏;一开始设想是使用LCD12864做显示器,可是我自己写的程序,甚至是修改别人的程序使引脚的使用适合我的普中开发板都不能解决这个问题。后来对着LCD12864的使用手册和普中原理图和程序一句一句地看才发现,LCD12864的复位脚是低有效,而普中开发板的P3.4没有接上拉电阻一直是低电平,所以LCD12864一直白屏。自己给它接了个高电平就可以显示了。解决了这个完全意想不到的问题本该欢天喜地,可却发现接下来,读取DS1302的时间值的程序不对劲,DS1302的值不能刷新送到显示屏显示,一直不动。对着
40、DS1302的数据手册和程序再三检查才发现,将P3.4置高之后,DS1302的通信时序永远不对,DS1302的数值不能送到单片机。最终无奈,选择了LCD1602做显示器,开发工作才能继续进行。2、STC89C52无法开启定时器;这样的问题以前我也遇到过类似的,问题要么是中断号不对,要么是定时器未开启以及其他。而这一次凭借以前的经验,类似的错误我仔细检查都有避免。最终将除定时器外的所有程序都先屏蔽掉才发现原来只要使用了内部EEPROM,STC89C52的定时器就无法使用。最终使用了外接AT24C02外部EEPROM才解决了问题。3、按键迟钝或一次按下跳动多次值;有时候切换模式按下按键一定要等一定
41、的时间才能响应,检查了这个main函数,发现问题在while循环中使用的delay延时函数,由于按键使用的是程序查询方式,延时时间太长会使查询时间等待过长,将delay函数的时间减小就解决了问题。另外,秒表子程序中,一开始启动秒表会出现,只按下启动键(实际上的加键)一次,秒表却启动一下就停止了,问题明显在于没有等待等待按键释放的判断,还可以用延长延时消抖的时间来解决这个问题。4、温度传感器检测温度变化刷新数值缓慢;温度传感器DS18B20的响应时间应该是毫秒级别的,可是送到LCD1602的更新却是一分钟才下降一摄氏度。而且明明设了精确到0.1摄氏度的精度,却只显示个位的变化。猜测是标度变换的问
42、题,最后发现,果然如此。原本应该将DS18B20所测结果乘以10再进行类型转换,我却写成了先进行类型转换再乘以10,所以只能看到1摄氏度级的变化。调整后,温度的刷新可以在1S内完成,而且精确到0.1摄氏度。5、AT24C02无法存储部分值;用AT24C02存储闹钟时间和设置的温度上限,却发现分钟的值不是设置值,怀疑是刷新AT24C02过于频繁,最终在写分钟值到AT24C02前先短暂延时5ms,完美解决问题。另外,我还发现AT24C02的各个存储单元要先写过初值,否则会显示乱码或负值。6、DS1302读取分钟偶数值时会出错;外接了带纽扣电池的DS1302以便断电存储,可是读取出的值分钟却有问题,
43、其他时、秒、年月日等都没有问题。倍感奇怪,在网上查询资料,有人说是数据线太长,有人说是没接上拉电阻,有人说是控制时序没写好,众说纷纭。然而自己照着他们的说法都尝试过却任是有同样的问题,单独测试DS1302却没有问题。据此推测是普中开发板上已接的DS1302所造成的影响,果不其然,将数据口改为和普中开发板内置的DS1302不一样的P3.0就将问题解决了。这个P3.0也不好找,早前就测试过接不同的接口,可是却总是年月日时分秒等都读出85这样的错误值,最后顿悟那是都接到了高电平,查看普中原理图才发现,普中的51开发板只有几个接口没接上拉电阻。7、 设置温度报警下限值时,显示报错提示总是和设置的温度值
44、同时显示造成显示混乱;仔细想了一下,发现问题出在LCD1602是静态显示,送了值之后,除非更新和掉电否则都会显示同样的字符,而同时显示设置的温度值是设置的温度值是不断从AT24C02中读取更新,造成混乱。最终改成显示错误1.5秒后,调用设置函数显示设置状态。8、DS1302每天都慢了6到7s的时间误差;这个问题算是最舒服的了,网上也有不少人遇到这样的问题,原因是DS1302所接的晶振精度不高,用程序调整或在32.768kHz的晶振两端并联610pf的电容,并联了6pf的电容后,一天的走时误差只有2s,在接受范围内。9、 调试闹钟和秒表时,闹钟和秒表的打开和关闭会互相干扰;一开始是因为秒表和闹钟
45、的分和秒使用的是同一变量,定时器使用的是同一个定时器,极易造成混乱。最终改为,秒表和闹钟的分和秒使用不同的变量,定时器使用不同定时器。设置好开启和关闭的判断标志,问题解决。10、 设想在一个文件中定义全局变量,在头文件也声明了,在另一个文件 中用extern声明却报重复定义的错;不曾遇过这样的的问题,对比别人的用法才发现,只有STC89C52的资源,即在(或)中声明过的变量,才可以在头文件中做extern声明,普通的变量,正确的全局变量用法是在头文件或c文件中定义过这个变量后,在需要使用的文件中直接用extern声明就好,即定义的文件不用声明。 4.3 软件系统使用操作说明系统硬件由STC89C52控制器,DS1302时钟芯片,LCD1602液晶显示器,DS18B20温度传感器检测模块,有源蜂鸣器模块,4x1按键,以及备用纽扣电池组成。总共四个调节按键,从左到右分为,加键、减键、切换设置项键、模式键。分为五种工作模式,按下一次模式键切换一种模式,模式键可以分别进入显示万年历时钟模式、设置万年历时