《课程设计(论文)基于单片机的电子闹钟的设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于单片机的电子闹钟的设计.doc(24页珍藏版)》请在三一办公上搜索。
1、基于单片机的电子闹钟的设计作者: 指导老师: (安徽农业大学工学院 07级农业机械化及其自动化专业 合肥 230036)摘要:本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃功能的电子闹钟。当前电子钟开发手段采用了较多的分立元器件,不仅占用很大空间而且利用率比较低。单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。 它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。本设计应用单片机STC12C5A16AD芯片作为核心,由LCD1602液晶屏显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种实现方法的优点是电路简单,性能可靠,实时性好,
2、时间精度高,操作简单,编程容易。 关键词:电子闹钟,单片机,C语言编程1 绪论单片机是微型机的一个主要分支,就其组成和功能而言,一块单片机芯片就是一台计算机。单片机具有如下特点:1 集成度高、体积小、有很高的可靠性;有优异的性能价格比;2 控制功能强;3 低功耗、低电压,便于生产便携式产品;4 外部总线增加了I2C、SPI等串行总线方式,进一步缩小了体积,简化了结构;5 单片机的系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统。所以单片机的应用非常广泛,在智能仪表、机电一体化、实时控制、分布式多机系统以及人们的生活中均有用武之地。单片机应用的重要意义还在于,它从根本上改变了传统的控制
3、系统设计思路和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种用软件代替硬件的控制技术,是对生产控制技术的一次革命。利用单片机的智能性,可方便地实现具有智能的电子钟设计。单片机均具有时钟振荡系统,利用系统时钟借助微处理器的定时器/计数器可实现电子钟功能。然而系统时钟误差较大,电子钟的积累误差也可能较大,所以可以通过误差修正软件加以修正,或者在设计中加入高精度时钟日历芯片,以精确时间。另外很多功能不同的单片机是兼容的,这就更便于实现产品的多功能性。由于单片机具有货源充足、价格低廉,可软硬件结合使用,能够较方便的实现系统的多功能性,性价比高等诸多优
4、点,故采用单片机作为本设计的硬件基础。2 基于单片机的电子闹钟硬件设计2.1 IC芯片选择2.1.1微处理器选择STC12 系列单片机简要介绍:1. STC12系列单片机为增强型 8051 芯片,1T,单时钟/ 机器周期,指令代码完全兼容传统8051单片机。2. 工作电压:STC12C5410AD 系列工作电压:5.5V - 3.8V(5V 单片机)/3.8V - 2.4V(3V 单片机)STC12C2052AD 系列工作电压:5.5V - 3.4V(5V 单片机)/3.8V - 2.4V(3V 单片机,可到2V)3. 工作频率范围:0 - 35 MHz,相当于普通8051 的 0420MHz
5、.实际工作频率可达48MHz4. 用户应用程序空间12K / 10K / 8K / 6K / 4K / 2K / 1K 字节5. 片上集成 512 字节 RAM(STC12C5410AD 系列), STC12C2052AD 系列单片机为256 字节RAM6. 通用I/O 口(27/23/15 个),复位后为: 准双向口/ 弱上拉(普通8051 传统I/O 口)可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/ 高阻,开漏每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过55mA7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串
6、口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片8. EEPROM 功能9. 看门狗10.内部集成MAX810 专用复位电路(外部晶体20M 以下时,可省外部复位电路)11. 时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟常温下内部R/C 振荡器频率为:5.2MHz 6.8MHz精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,应认为是4MHz 8MHz12. 共2 个16 位定时器/ 计数器,但可用PCA 模块再产生4 个定时器(2052 系列只有两路PCA)13. 外部中断2 路,下降沿中断或低
7、电平触发中断,Power Down 模式可由外部中断唤醒14. PWM(4 路)/PCA(可编程计数器阵列,4 路),5410 系列是4 路,2052 系列只有两路- 也可用来当4 路D/A 使用- 也可用来再实现4 个定时器- 也可用来再实现4 个外部中断(上升沿中断/ 下降沿中断均可分别或同时支持)15. A/D 转换, 10 位精度ADC,共8 路。STC12C2052AD 系列只有8 位精度16. 通用全双工异步串行口(UART),由于STC12 系列是高速的8051,也可再用定时器软件实现多串口17. SPI 同步通信口,主模式/ 从模式18. 工作温度范围: 0 - 75 / -4
8、0 - +8519. 封装:PLCC-32, PDIP-28,SOP-28,PDIP-20,SOP-20,TSSOP-20(超小封状6.4mm 6.4mm,定货)PLCC-32 有27 个I/O 口,PDIP28/SOP28 有23 个I/O 口,PDIP20/SOP20/TSSOP20 有15 个I/O 口,I/O 口不够时,可用74HC595 / 74HC165 串行扩展I/O 口,或用双CPU,三线通信,还多了串口。STC12C5410AD 系列及STC12C2052AD 系列单片机是宏晶科技生产的单时钟/ 机器周期(1T)的单片机,是高速/ 低功耗/ 超强抗干扰的新一代8051 单片机
9、,指令代码完全兼容传统8051,但速度快8-12 倍,内部集成MAX810 专用复位电路。4 路PWM,8 路高速10 位A/D 转换,针对电机控制,强干扰场合。STC12C2052AD 系列只有2 路PWM,8 路高速8 位A/D 转换。图2.1 STC12C5A16AD芯片PDIP封装引脚图2.1.2 常用时钟日历芯片比较在电子闹钟设计中,常用的实时时钟芯片有DS12887、DS1216、DS1643、DS1302。每种芯片的主要时钟功能基本相同,只是在引脚数量、备用电池的安装方式、计时精度和扩展功能等方面略有不同。DS12887与DS1216芯片都有内嵌式锂电池作为备用电池; X1203
10、引脚少,没有嵌入式锂电池,跟DS1302芯片功能相似,只是相比较之下,X1203与AT89S51搭配使用时占用I/O口较多。DS1643为带有全功能实时时钟的8K8非易失性SRAM,集成了非易失性SRAM、实时时钟、晶振、电源掉电控制电路和锂电池电源,BCD码表示的年、月、日、星期、时、分、秒,带闰年补偿。同样,DS1643拥有28只管脚,硬件连接起来占用微处理器I/O口较多,不方便系统功能拓展和维护。故而从性价比和货源上考虑,本设计采用实时时钟日历芯片DS1302。2.1.3 DS1302简介DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM
11、,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。有主电源和备份电源双引脚,而且备份电源可由大容量电容(1F)来替代。此外,DS1302需要使用32.768KHz的晶振。2.1.4 DS1302引脚说明DS1302引脚图参照图2.2。图2.2 DS1302芯片引脚图其引脚功能参照表2.1。表2.1 DS1302引脚功能说明引脚
12、号名称功能1VCC1备份电源输入2X132.768KHz晶振输入3X232.768KHz晶振输出4GND地5RST控制移位寄存器/复位6I/O数据输入/输出7SCLK串行时钟8VCC2主电源输入2.1.5 DS1302控制字说明在编程过程中要注意DS1302的读写时序。DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如表2.2。表2.2 DS1302控制字(即地址及命令字节)BIT7BIT6BIT5BIT4BIT 3BIT 2BIT 1BIT 01RAMA4A3A2A1A0R
13、D控制字的作用是设定DS1302的工作方式、传送字节数等。每次数据的传输都是由控制字开始。控制字各位的含义和作用如下:BIT7:控制字的最高有效位,必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。BIT 6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;BIT 5至BIT 1(A4A0):用A4A0表示,定义片内寄存器和RAM的地址。定义如下:当BIT 6位=0时,定义时钟和其他寄存器的地址。A4A0=06,顺序为秒、分、时、日、月、星期、年的寄存器。当A4A0=7,为芯片写保护寄存器地址。当A4A0=8,为慢速充电参数选择寄存器。当A4A0=31,为时钟多字节方式选择
14、寄存器。当BIT 6=1时,定义RAM的地址,A4A0=030,对应各子地址的RAM,地址31对应的是RAM多字节方式选择寄存器。4BIT 0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。2.2 电子闹钟硬件电路设计电子闹钟至少要包括秒信号发生器、时间显示电路、按键电路、供电电源、闹铃指示电路等几部分。硬件电路框图参照图2.3。该系统使用STC12C5A16AD单片机作为核心,通过读取时钟日历芯片DS1302的数据,完成此电子闹钟的主要功能时钟/日历。使用LCD1602液晶屏显示。 STC12C5A16AD显示键盘时钟日历芯片DS1302+5V电源闹铃电路图2.3 电子闹钟硬件
15、系统框图键盘是为了完成时钟/日历的校对和显示功能。由于此电子闹钟要求具有闹铃功能,所以设计有闹铃电路,进行声音响铃。闹铃电路中的闹铃音乐可以直接采用蜂鸣器闹铃,如当前时刻与闹铃时间相同,单片机向蜂鸣器送出高电平,蜂鸣器发声。采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。也可以在编程的时候编写一段音乐程序,待闹铃时间到时,调用该音乐程序给扬声器,便响起音乐。不过该方法只能做一些简单音乐,并且音乐程序会占用很多单片机存储资源。但闹铃的音乐不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O口。整个电路只使用了一种电源,+5V电源将为整个电路供电。DS1302没有备用电源。当+5
16、V电源被切断后, DS1302不能继续工作。当+5V电源恢复供电,因为断电使系统复位到初始化时间,需要重新校时。具体电路图如下: 3 基于单片机的电子闹钟软件设计单片机可以应用汇编语言和C语言进行编程。,汇编语言与机器指令一一对应所以用汇编语言编写的程序在单片机里运行起来效率较高。C语言程序可读性高,更便于理解。本设计使用C语言编程。3.1 主程序设计第一次上电,系统先进行初始化, LCD显示初始时间并开始走时。单片机依次开始调用键盘扫描子程序、DS1302子程序、闹铃子程序,经过延时,返回程序开头循环运行。主程序流程图如图3.1。图3.1 多功能电子钟主程序流程图3.2子程序设计3.2.1实
17、时时钟日历子程序设计该程序主要实现对DS1302写保护、充电,对年、月、日、时、分、秒等寄存器的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用I/O口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断。其流程图如图3.2。图3.2 实时时钟日历子程序流程图DS1302每次上电时自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果DS1302一直没有掉电,则不存在此问题。在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作时,必须写够8字节。3.2.2显示子程序设计在单片机系统中应用晶液显
18、示器作为输出器件有以下几个优点:显示质量高;数字式接口;体积小、重量轻;功耗低。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。LCD1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它由32个5*8点阵字符位组成,每一个点阵字符位都可以显示一个字符,但是它不能显示图形。模块内部自带有160个5*8点阵字型的字符发生器CHROM和8个可由用户自定义的5*8的字符发生器CGRAM。
19、图3.4 显示子程序流程图3.2.3键盘扫描子程序单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。在随机扫描方式中,CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。在执行键盘按键规定的功能中不理睬键盘输入。定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。前两种扫描方式均会占用CPU大量时间。不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的。单片机扫描完键
20、盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。如果没有按键按下,则程序扫描到Key=FFH,将键值Key清零,返回主程序。程序流程如图3.5。图3.5键盘扫描子程序3.2.4闹铃子程序设计闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,响铃启动一段时间,并根据外部按键执行相应任务。该程序流程图参见图3.6。图3.6 闹铃子程序流程图4 系统调试调试工作分硬件调试和软件调试两部分,调试方法介绍如下:首先,硬件调试主要是先搭建硬件平台,然后利用
21、万用表等工具对电路检查,最后应用程序进行功能调试。硬件调试比较费时,需要细心和耐心,也需要熟练掌握电路原理。然后,软件调试可以直接应用一些编辑或仿真软件进行,比如单片机C51编辑软件Keil。该软件提供了一个集成开发环境uVision,它包括C编辑器、宏编辑器、连接器、库管理和一个功能强大的仿真调试器。通过编译、运行,可以检查程序错误。但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。在软件调试过程中要仔细耐心,即便是多写或少些一两个字符,都无法编译成功。还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试。如果电路出错,可以在计算机上方便的修改电路,程序出错
22、可以重新编辑程序,这种方法节时、省力,经济、方便。总之,调试过程是一个软硬件相结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键。4.1 硬件调试计4.1.1单片机基础电路调试单片机基础电路包括电源、单片机、外部时钟震荡电路、复位电路和外部接口电路。调试过程需要注意以下几点:1. 检查电源是否完好。2. 单片机电源要连接正确,并且保证AT89C51的31号引脚接高电平。AT89C51的31号引脚是外部程序存储器选择信号端,当该引脚为高电平时,单片机会一直从片内程序存储器内取指令。3. 如果使用P0口做I/O口,要接上拉电阻。4. 使用万用表排查电路中是否存在断路或者短路情况。
23、笔者在制作外部接口电路时使用的是排针,焊接时容易出现管脚之间短路,所以在上电以前必须先排查电路。5. 对LCD1602显示屏的调试,旋动与芯片第三管脚相连的变阻器到显示屏出现欲显示的内容,并将其调清晰即可。4.1.2 DS1302电路调试该电路包含DS1302芯片、主电源、备用电源、晶振等部分。在与单片机连接的过程中需要注意以下几点:清楚DS1302与单片机连接的管脚。本设计定义为:DS1302的SCLK连接P1.5,I/O连接P1.6,RST连接P1.7。注意电源正负极连接。DS1302接32.768KHz的晶振。该晶振体型比较小,在焊接时要小心,注意不要将晶振引脚弄断。同时也要尽量使晶振离
24、DS1302的X1、X2引脚近距离焊接。编写DS1302的时钟/日历程序,只要求能够正确显示时间。烧录进单片机,检查电路电源正负极连接是否正确,检查P1.0和P1.1引脚接线是否正确。检查无误后可以上电检查。4.2 软件调试在硬件调试完毕的基础上,需要进一步完善程序,也就是进入软件调试阶段。在本设计中,软件调试主要分两大部分:实时时钟日历子程序调试、按键子程序调试。将这两部分调试成功,那么整个设计的软件部分也就基本完成了。关于这两部分的调试只需要在主程序中分别调用这两部分程序即可,此处不再赘述。结论基于单片机实现电子闹钟,仅仅是众多方法之一。并且市场上的实时时钟日历芯片品类繁多,IC化的传感器
25、各种各样,显示方式也愈趋于人性化。所以多功能电子闹钟有多种实现方案,能够实现的功能也很多,笔者已经通过仿真和调试,实现了时间日历显示和校对、闹铃等功能。本文采用51单片机C语言进行编程,当然也可以应用汇编语言编程。由于笔者能力有限,提供的程序还可以进一步优化,并且还可以根据需求为电子闹钟增设新功能。致谢本课题在选题及研究过程是在孙磊老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,孙老师都始终给予我细心的指导和不懈的支持。孙老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向
26、孙老师致以诚挚的谢意和崇高的敬意。还要感谢帮助过我的同学们,他们的陪伴让这将近半载的时光充满色彩!参考文献1. 王东峰等.单片机C语言应用100例M.电子工业出版社,2009。2. 周仲. 国产集成电路应用500例M. 北京:电子工业出版社, 1992.104-108。3. 夏继强. 单片机实验与实践教程M. 北京:北京航空航天大学出版社,2001.78-83。4. Daniel J Pack andSteven F Barrett Microcontroller Theory and Applications: HC12 and S12M Prentice Hall 2007.5. Doga
27、n Ibrahim Microcontroller Based Apllied digital controlM John Wiley and Sons Australia 2003.6. Steven F. Barrett, Daniel Pack Atmel AVR Microcontroller PrimerM Morgan & Claypool Publishers 2007-12-15.Title The design of the electric clock based on single chipAbstractThis design is mainly for realizi
28、ng a electronic clock with regular alarm function that can display properly clock/calendar. The current digital electronic clock with a greater amount of discrete components, not only occupied large space and low utilization ratio. Microcontroller is a CPU, RAM, ROM, timer / counter and a variety of
29、 interfaces in one of the micro-controller. Its small size, low cost, powerful, widely used in smart products and industrial automation. This design apply STC12C5A16AD chip microcontroller as the core,use LCD1602 to display,employ DS1302 chip to achieve clock/calendar function. The advantages of thi
30、s method is simple, reliable performance, circuit good real-time performance, high precision time, the operation is simple, programming easier.Keywords electronic clock, microcontroller, C programming language部分重要程序函 数 申 明void delay_us(uchar x); /延时 2 * x + 5 usvoid delay_ms(uint z); /延时任意Msvoid DS1
31、302_writebyte(uchar writebyte); /往DS1302写一个字节uchar DS1302_readbyte(); /往DS1302读一个字节uchar DS1302_read(uchar DS1302_add); /往DS1302指定地址读数据void DS1302_write(uchar DS1302_add,uchar DS1302_data); /往DS1302指定地址写数据void DS1302_init(); /DS1302初始化函数void DS1302_set_time(); /设置时间 void DS1302_read_time(); /读取时间voi
32、d LCD1602_send_byte(uchar LCD1602_data); /往LCD1602发送一个字节void LCD1602_write_com(uchar LCD1602_data); /往LCD1602写命令void LCD1602_write_data(uchar LCD1602_data); /往LCD1602写数据void week(uchar week); /星期代码void LCD1602_init(); /液晶初始化函数void keyscan() ; /键盘扫描void keyscan_waibu(); /进入外部中断的键盘扫描,用于设定时间void keysca
33、n_nz(); /进入闹钟扫描按键,用于闹钟设置void LCD1602_write_time(); /往液晶写入时间参数void nz_jc(); /闹钟检测函数外 部 中 断 0 程 序/功能:按键触发,对时间进行调节void int0() interrupt 0 /外部中断0程序EX0=0; /进入中断后关外部中断开关wbzd=0; /循环控制变量DS1302_read_time();DS1302_write(0x8e,0x00); /关写保护DS1302_write(0x80,0x80); /关时间DS1302_write(0x8e,0x80); /开写保护LCD1602_write_
34、com(0x01); /清除显示LCD1602_write_time();/将时间参数写入液晶while(!wbzd)keyscan_waibu(); /进入外部中断的键盘扫描,用于设定时间EX0=1;/中断函数结束时再开外部中断开关定 时 器 0 程 序/功能:,用于判断按键被按下的时间,时间按键的多功能void time0() interrupt 1 /定时器0程序TH0+=0xd8;TL0+=0xf0;/10ms溢出进入中断t0定时器 1 程序/功能:闹钟到了,蜂鸣器响一分钟void time1() interrupt 3TH1+=0x3c;TL1+=0xb0;t1if(t1=1200)
35、t1=0;TR1=0;TH1=0x3c;TL1=0xb0;fm=0;us 级 延 时 函 数 /功能:延时任意微秒,理论上7515usvoid delay_us(uchar x) /延时 2 * x + 5 uswhile(-x);/实现精准延时,us级别ms 级 延 时 函 数 /功能:延时任意毫秒,理论上165535msvoid delay_ms(uint z)/延时任意Msuint x,y;for(x=z;x0;x-)for(y=123;y0;y-);闹 钟 检 测 函 数/功能:检测闹钟设的参数是否是此时时间参数相同的,相同的话驱动蜂鸣器响1分钟void nz_jc()if(naozh
36、ong=1)&(nz_xingqi=xingqi)&(nz_shi=shi)&(nz_fen=fen)&(nz_miao=miao)fm=1; TR1=1;DS1302 的 初 始 化 /功能:上电时对时钟芯片DS1302里面的数据全部清零void DS1302_init() /DS1302 的 初 始 化,将所有参数全清零DS1302_write(0x8e,0x00); /关写保护DS1302_write(0x80,0x80); /关时间DS1302_write(0x80,0x00);DS1302_write(0x82,0x00);DS1302_write(0x84,0x00);DS1302
37、_write(0x86,0x00);DS1302_write(0x88,0x00);DS1302_write(0x8a,0x00); DS1302_write(0x8c,0x00);DS1302_write(0x80,0x00); /开时间DS1302_write(0x8e,0x80); /开写保护LCD1602 液 晶 初 始 化 函 数 /功能:初始化液晶void LCD1602_init() /LCD1602液晶初始化函数LCD1602_write_com(0x01); /清除显示LCD1602_write_com(0x02); /地址位归零LCD1602_write_com(0x0c)
38、; /开显关游标LCD1602_write_com(0x06); /光标移动方向LCD1602_write_com(0x30); /基本功能设定DS1302 读 取 时 间/功能:读取时钟芯片DS1302的时间参数void DS1302_read_time() /读取时间miao =DS1302_read(0x81);fen =DS1302_read(0x83);shi =DS1302_read(0x85);ri =DS1302_read(0x87);yue =DS1302_read(0x89);xingqi=DS1302_read(0x8b);nian =DS1302_read(0x8d);
39、LCD1602 显 示 时 间 参 数 /功能:将DS1302读取回来的时间参数送到液晶上显示void LCD1602_write_time()LCD1602_write_com(0x80);LCD1602_write_data(2);LCD1602_write_data(0);LCD1602_write_data(nian4)+0x30);LCD1602_write_data(nian&0x0f)+0x30);LCD1602_write_data(0xc4);LCD1602_write_data(0xea); /“年”LCD1602_write_data(yue4)+0x30);LCD160
40、2_write_data(yue&0x0f)+0x30);LCD1602_write_data(0xd4);LCD1602_write_data(0xc2); /“月”LCD1602_write_data(ri4)+0x30);LCD1602_write_data(ri&0x0f)+0x30);LCD1602_write_data(0xc8);LCD1602_write_data(0xd5); /“日”LCD1602_write_data( );LCD1602_write_data( );LCD1602_write_com(0x90);week(xingqi);if(naozhong=0)LC
41、D1602_write_data( );LCD1602_write_data( );elseLCD1602_write_data(0x06);LCD1602_write_data( );LCD1602_write_data(shi4)+0x30);LCD1602_write_data(shi&0x0f)+0x30);LCD1602_write_data(0xa1);LCD1602_write_data(0xc3);LCD1602_write_data(fen4)+0x30);LCD1602_write_data(fen&0x0f)+0x30);LCD1602_write_data(0xa1);
42、LCD1602_write_data(0xc3);LCD1602_write_data(miao4)+0x30);LCD1602_write_data(miao&0x0f)+0x30);LCD1602_write_data( );LCD1602_write_data( );进 入 闹 钟 设 置 后 的 键 盘 扫 描 /功能:主程序的键盘扫描进入到闹钟设置选项后,对闹钟的参数进行调节设置void keyscan_nz() /进入闹钟扫描按键,用于闹钟设置uchar j;P3=0xff;if(P3!=0xff)delay_ms(10);EX0=0;if(KEY0=0)delay_ms(10);
43、while(KEY0=0);delay_ms(10);nz=1;j=0;EX0=1;if(KEY1=0)delay_ms(10);while(KEY1=0);delay_ms(10);switch(j)case 1:naozhong=naozhong; if(naozhong=1)LCD1602_write_data(0xbf);LCD1602_write_data(0xaa); elseLCD1602_write_data(0xb9);LCD1602_write_data(0xd8);LCD1602_write_com(0x85);break; case 2:nz_xingqi-; if(nz_xingqi6) nz_xingqi=0; week(nz_xingqi); LCD1602_write_com(0x90); break;