收藏 分销(赏)

基于51系列单片机及DS1302时钟芯片的电子时钟-C语言-Proteus仿真-报告.doc

上传人:二*** 文档编号:4495952 上传时间:2024-09-25 格式:DOC 页数:26 大小:264KB 下载积分:5 金币
下载 相关 举报
基于51系列单片机及DS1302时钟芯片的电子时钟-C语言-Proteus仿真-报告.doc_第1页
第1页 / 共26页
本文档共26页,全文阅读请下载到手机保存,查看更方便
资源描述
陕西理工学院课设报告 实时时钟DS1302应用设计 高也 (陕西理工学院 物理与电信工程学院电子信息工程专业,2011级3班,陕西 汉中 723000) 指导教师:王文洋 [摘要] 本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。本设计应用AT89C52芯片作为核心,LM016L液晶屏显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。 [关键词] AT89C52;DS1302;LM016L 目 录 1、基于单片机的电子时钟硬件选择分析 3 1.1主要IC芯片选择 3 1.1.1微处理器选择 3 1.1.2 DS1302简介 4 2、电子时钟硬件电路设计 5 2.1.主控部分(单片机MCS-51) 5 2.2时钟电路设计 6 2.3整点报时功能 7 2.4 LED显示电路 8 3、proteus软件仿真及调试 10 3.1电路板的仿真 10 3.2软件调试 11 4、硬件调试与功能说明 12 4.1 硬盘调试 12 4.2 系统性能测试与功能说明 12 4.3 系统时钟误差分析 12 5、课设心得 13 参考文献 14 附录A 硬件电路原理图 15 附录B源程序 16 附录C 元器件清单 26 1、基于单片机的电子时钟硬件选择分析 考虑单片机货源充足、价格低廉,可软硬件结合使用,能够较方便的实现系统的多功能性,故采用单片机作为本设计的硬件基础。 1.1主要IC芯片选择 1.1.1微处理器选择 目前在单片机系统中,应用比较广泛的微处理器芯片主要为8XC5X系列单片机。该系列单片机均采用标准MCS-52内核,硬件资源相互兼容,品类齐全,功能完善,性能稳定,体积小,价格低廉,货源充足,调试和编程方便,所以应用极为广泛。 例如比较常用的AT89C2052单片机,带有2KB Flash可编程、可擦除只读存储器(E2PROM)的低压、高性能8位CMOS微型计算机。拥有15条可编程I/O引脚,2个16位定时器/计数器,6个中断源,可编程串行UART通道,并能直接驱动LED输出[1]。 仅仅是为了完成时钟设计或者是环境温度采集设计,应用AT89C2052单片机完全可以实现。但是将两种功能结合在一片单片机上,就需要更多的I/O引脚,故本设计采用具有32根I/O引脚的AT89C52单片机。 AT89C52单片机是一款低功耗,低电压,高性能CMOS 8位单片机,片内含4KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器(EPROM),器件采用CMOS工艺和ATMEI公司的高密度、非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-52兼容。片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。因此,AT89C52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域。 AT89C52具有以下主要性能: 1. 4KB可改编程序Flash存储器; 2. 全静态工作:0——24Hz; 3. 128×8字节内部RAM; 4. 32个外部双向输入/输出(I/O)口; 5. 6个中断优先级; 2个16位可编程定时计数器; 6. 可编程串行通道; 7. 片内时钟振荡器。 此外,AT89C52是用静态逻辑来设计的,其工作频率可下降到0Hz,并提供两种可用软件来选择的省电方式——空闲方式(Idle Mode)和掉电方式(Power Down Mode)。在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保存片内RAM中的内容,直到下一次硬件复位为止。AT89C51为适应不 同的产品需求,采用PDIP、TQFP、PLCC三种封装形式,本系统采用双列直插PDIP封装形式。 1.1.2 DS1302简介 DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)来替代。需要强调的是,DS1302需要使用32.768KHz的晶振[2]。 2、电子时钟硬件电路设计 电子闹钟至少要包括秒信号发生器、时间显示电路、按键电路、供电电源、闹铃指示电路等几部分。硬件电路框图参照图2.3。 该系统使用AT89C52单片机作为核心,通过读取时钟日历芯片DS1302数据,完成此电子时钟的主要功能——时钟。使用LM016L液晶屏显示年、月、日、时、分、秒。 AT89C52 显示 模块 键 盘 蜂鸣器 闹 铃 DS1302 时钟模块 图2.1多功能电子时钟硬件系统框图 键盘是为了完成时钟/日历的校对和日历/温度的显示功能。由于此电子时钟要求具有闹铃功能,所以设计有闹铃电路,进行声音响铃。 整个电路使用了两种电源,+5V电源将为整个电路供电。而+3V电源仅作为DS1302的备用电源。当+5V电源被切断后,DS1302启用+3V电源,可以保持DS1302继续工作。当+5V电源恢复供电,LED依旧显示当前时间,而不会因为断电使系统复位到初始化时间,避免了重新校时的麻烦。 2.1.主控部分(单片机MCS-52) MCS-52单片机作为主控芯片,控制整个电路的运行。其外围电路主要有两部分:复位电路和晶体振荡器。 复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。 晶体振荡电路:MCS-52单片机中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该反向放大器的输入端和输出端。这个反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。 图2.2 主控部分电路图 2.2时钟电路设计 系统时钟应用了实时时钟日历芯片DS1302,其连接如图2.3。该硬件电路设计简单,抗干扰能力强。 如图,AT89C52单片机P1.5直接接DS1302的RST端,上电后,AT89C51的P1.5脚自动输出高电平。P1.6作为串行时钟接口,P1.7作为时钟数据的I/O。DS1302采用双电源供电,平时由+5V电源供电,当+5V掉电之后,由图中BT1(+3V备用电池)供电。 特别需要注意X1和X2两端连接的晶振Y1,该晶振频率为32.768KHz。 图2.3系统时钟电路 2.3整点报时功能 采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。也可以在编程的时候编写一段音乐程序,待闹铃时间到时,调用该音乐程序给扬声器,便响起音乐。不过该方法只能做一些简单音乐,并且音乐程序会占用很多单片机存储资源。 还有一种方法是采用录音放音芯片1420做闹铃,先对录放音设备录入一段音乐,当到设定时间时,单片机控制录放音设备放音。采用录放音电路,铃声可以是预先设定的一段自己喜欢的音乐,符合电器设备人性化的要求。且1420芯片可以分段录音,还具有语音报时功能。 另外,也可以购置一块音乐集成电路,加置在单片机和蜂鸣器之间,当单片机连接闹铃电路的管脚送出高电平时,音乐集成电路会给蜂鸣器特定脉冲,使蜂鸣器发声。此类集成电路体积较小,使用方便,不足的是音乐简单、单一[4]。 闹铃的闹钟不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O口P3.7,当响铃标志位为“1”时,P3.7送一定频率脉冲,使蜂鸣器U11发出声音。如图2.4 图2.4 闹铃电路 2.4 LCD LM016L液晶屏显示电路 LM016L液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)[3]。 1、LM1602显示屏的设计 硬件接线图如下: 图2.5 LM016L电路 2、LM1602L采用标准的16 脚接口说明如下: 第1脚:VSS为地电源。  第2脚:VDD接5V正电源。  第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。  第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。  第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。  第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。  第7~14脚:D0~D7为8位双向数据线。  第15脚:背光源正极。  第16脚:背光源负极。 3、proteus软件仿真及调试 3.1电路板的仿真 利用keil软件编写源程序。在protues中画好其电路图如下图3.1所示。 软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。软件调试可以采取离线调试和在线调试两种方式。前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。本次课题,Keil软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。 图3.1 实时时钟仿真图 仿真部分采用protus 6 professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。 首先打开protus 6 professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求。 3.2软件调试 在硬件调试完毕的基础上,需要进一步完善程序,也就是进入软件调试阶段。在本设计中,软件调试主要分两大部分:实时时钟日历子程序调试、按键子程序调试。将这两部分调试成功,那么整个设计的软件部分也就基本完成了。 4、硬件调试与功能说明 单片机应用系统的调试包括硬件和软件两部分,但是他们并不能完全分开。一般的方法是排除明显的硬件故障,再进行综合调试,排除可能的软/硬件故障。 4.1 硬盘调试 拿到电路板后,首先要检查加工质量,并确保没有任何方面的错误,如短路和断路,尤其要避免电源短路;元器件在安装前要逐一检查,用万用表测其数值,看是否与所用相同;完成焊接后,应先空载上电(芯片座上不插芯片),并检查各引脚的电位是否正确。若一切正常,方可在断电的情况下将芯片插入,再次检查各引脚的电位及其逻辑关系。将万用表的探针放到单片机接电源的引脚上检测一下,看是否符合要求。 4.2 系统性能测试与功能说明 走时:默认为走时状态,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化。 走时调整:按ksec对秒进行调整,按一下加一秒;按kmin对分进行调整,按一下加一分;按khour对时进行调整,按一下加一小时,从而达到快速设定时间的目的。 4.3 系统时钟误差分析 时间是一个基本物理量,具有连续、自动流逝、不重复等特性。我国时间基准来自国家授时中心,人们日常使用的时钟就是以一定的精度与该基准保持同步的。结合时间概念和误差理论,可以定义电子钟的走时误差S=S1-S2,S1表示程序实际运行计算所得的秒;S2表示客观时间的标准秒。S>0时表示电子钟秒单元数值刷新滞后,即走时误差为“慢”;反之,S<0表示秒单元数值的刷新超前,即走时误差为“快”。 本次设计的单片机电子钟系统中,其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。 5、课设心得 本设计利用单片机AT89C52控制串行实时时钟芯DS1302构成数字时钟电路,实现计时功能。该电路使用简单的三线接口,为单片机节省大量的接口资源,时钟芯片带有后备电池。该时钟功能强大,性能优越,能为很多领域,特别是对时钟工作的准确性和可靠性有较高要求。 软件完成后,把伟福编译后的文件通过烧录器下载到AT89S52芯片,加上电源就可以进行调试。 各程序模块具有一定的独立性,因此可以先调试模块,在模块功能都能实现的前提下,再调试总程序,这样能快捷地检查判断硬件或软件上的问题。调试结果及解决办法如下: 测试显示模块时,液晶屏显示乱码。利用Proteus软件仿真,发现仿真时显示正常,再检查硬件,发现电源键接线错误。按原理图重新焊接后,能正常显示。 测试DS读写模块时,从LCD显示表明能正确写入与读取当前时间,但DS1302的工作情况不太理想,主要表现在实时时间稍微偏快。 DS1302 时钟的产生基于外接的晶体振荡器,振荡器的频率为32.768KHZ,该晶振通过引脚X1、X2 直接连接至DS1302,即DS1302 是依靠外部晶振与其内部的电容配合来产生时钟脉冲,由于DS1302 在芯片本身已经集成了6pF的电容。所以,为了获得稳定的可靠的时钟,必须选用具有6pF 负载电容的晶振。然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容,所以即使在使用中选用了符合32768Hz 的晶振,但如果该晶振的负载电容与DS1302 提供的6pF不一致时,就会影响晶振的起振或导致振荡频率的偏移。 当所选的晶振负载电容不是6pF 时,可以采用增加辅助电容的方法提高或降低DS1302 振荡器的电容性负载,使之与晶体所需的电容值匹配,如果已知晶体的负载电容为CI,若CI 小于6pF,则可以增加一个并联电容CS 以产生所需要的总负载电容CI,即CI=6pF+CS;若CI 大于6pF,则可以在晶体的一端增加一个串联电容CS,以产生所需要的负载电容CI,即1/CI=1/6pF+1/CS,通过计算即可得出应增加的辅助电容大小 通过本次课程设计的全过程使我更加地对单片机系统内部资源的理解与运用,并较好地实现了DS1302芯片与单片机的融合与工作。单片机的外围设备就是 通过这一周的学习,我感觉有很大的收获:首先,通过这次课程设计使自己对课本上的知识可以应用于实际,使理论与实际相结合,加深自己对课本知识的更好理解,同时也段练了自己的动手能力:能够充分利用电脑去查阅资料,增加了许多课本以外的知识。更加了解了单片机原理及应用。增加了对DS1302和AT89C52芯片引脚结构和功能的理解及运用,在设计电路过程中,要考虑到整体的美观性,连接电路时对各线路的连接要细致。在验证面电路效果时,出现了很多问题,其主要问题各个接线点之间错接没接上等。在这个过程中,锻炼了我的细心和耐性。 参考文献 [1]李全利,仲伟峰,徐军著.单片机原理及应用[M]..北京:清华大学社,2006 [2]DS1302中文手册 [3]倪晓军 章韵等.单片机原理与接口技术教程.北京:清华大学出版社.2009 [4]王守忠 聂元铭.51单片机开发入门与典型实例.北京:人民邮电出版社,2009 附录A 硬件电路原理图 25 附录B源程序 /**************DS1302及1602时钟设计 **********/ #include <reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define SECOND 0x81 #define MINUTE 0x83 #define HOUR 0x85 sbit rs=P2^0; sbit rw=P2^1; sbit ep=P2^2; sbit DS1302_IO= P1^7; sbit DS1302_SCLK = P1^6; sbit DS1302_RST = P1^5; sbit M=P3^1; //选择 sbit U=P3^2; // 加 sbit D=P3^3; // 减 sbit W=P3^4; //确定 sbit SPK=P3^7; //蜂鸣器 uchar sel=0; uchar code DIS1[]={"10 ji ying "}; uchar code DIS2[]={"ke cheng she ji"}; /******************延时****************/ void delay(uint ms) { unsigned int a,b; for(a=0;a<ms;a++) for(b=0;b<124;b++); } /***************DS1302驱动******************/ void DS1302_Write(uchar D) { uchar i; for(i=0;i<8;i++) { DS1302_IO =D&0x01; DS1302_SCLK=1; DS1302_SCLK=0; D=D>>1; } } uchar DS1302_Read() { uchar TempDat=0,i; for(i=0;i<8;i++) { TempDat>>=1; if(DS1302_IO) TempDat=TempDat|0x80; DS1302_SCLK=1; DS1302_SCLK=0; } return TempDat; } void WDS1302(uchar ucAddr, uchar ucDat) { DS1302_RST = 0; DS1302_SCLK = 0; DS1302_RST = 1; DS1302_Write(ucAddr); DS1302_Write(ucDat); DS1302_SCLK = 1; DS1302_RST = 0; } uchar RDS1302(uchar ucAddr) { uchar ucDat; DS1302_RST = 0; DS1302_SCLK = 0; DS1302_RST = 1; DS1302_Write(ucAddr); ucDat=DS1302_Read(); DS1302_SCLK = 1; DS1302_RST = 0; return ucDat; } /****************DS1302的初始状态的时间设定****************/ void init_1302() { WDS1302(0x8e,0x00);//开保护寄存器 WDS1302(0x80,0x50);//秒 WDS1302(0x82,0x01);//分 WDS1302(0x84,0x14);//时 WDS1302(0x8A,0x03);//星期 WDS1302(0x86,0x06);//日 WDS1302(0x88,0x06);//月 WDS1302(0x8C,0x12);//年 WDS1302(0x90,0xab);//卷电流充电 WDS1302(0x8e,0x80);//关保护寄存器 } /************************1602驱动************************/ bit lcd_bz() { bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0 & 0x80); ep = 0; return result; } void lcd_wcmd(uchar cmd) { while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep= 0; } void lcd_pos(unsigned char pos) { lcd_wcmd(pos | 0x80); } void lcd_wdat(unsigned char dat) { while(lcd_bz()); rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_init() { lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); } /*********************调时函数*************************/ void set_time() { signed char address,item; signed char max,mini; if(M==0) { sel++; delay(300); //if(sel==7) sel=0; if(sel==2) {address=0x82; max=59;mini=0; } //分 if(sel==1) {address=0x84; max=23;mini=0; } //时 if(sel==6) {address=0x8c; max=99;mini=9;} //年 if(sel==4) {address=0x88; max=12;mini=1; } //月 if(sel==5) {address=0x86; max=31;mini=1; } //日 if(sel==3) {address=0x8A; max=07;mini=1;} //星期 M=1; } item=((RDS1302(address+1))/16)*10 + (RDS1302(address+1))%16; if(U == 0) { delay(200); U=1; item++; } if(D == 0) { delay(200); D=1; item--; } if(W == 0) { delay(200); sel=0; W=1; } if(item>max) item=mini; if(item<mini) item=max; WDS1302(0x8e,0x00);//允许写操作 WDS1302(address,(item/10)*16+item%10); //写入DS1302 //转成BCD码 WDS1302(0x8e,0x80);//写保护,禁止写操作 } /*********************显示子函数************************/ void lcdshow_u(uchar i,uchar y) { lcd_wcmd(0x80+i); lcd_wdat(y); } void lcdshow_d(uchar i,uchar y) { lcd_wcmd(0xC0+i); lcd_wdat(y); } /*******************显示函数****************************/ void display(void) { uchar x,y; x=RDS1302(HOUR);//时 y=x; x=x>>4; lcdshow_u(6,0x30+x); y=y&0x0f; lcdshow_u(7,0x30+y); lcdshow_u(8,':'); x=RDS1302(MINUTE);//分 y=x; x=x>>4; lcdshow_u(9,0x30+x); y=y&0x0f; lcdshow_u(0x0a,0x30+y); lcdshow_u(0x0b,':'); x=RDS1302(SECOND);//秒 y=x; x=x>>4; lcdshow_u(0x0c,0x30+x); y=y&0x0f; lcdshow_u(0x0d,0x30+y); x=RDS1302(0x8b); y=x; x=x>>4; lcdshow_u(0x0e,0x30+x); y=y&0x0f; lcdshow_u(0x0f,0x30+y); x=RDS1302(0x8d); y=x; x=x>>4; lcdshow_d(8,0x30+x); y=y&0x0f; lcdshow_d(9,0x30+y); lcdshow_d(0x0a,'-'); x=RDS1302(0x89); y=x; x=x>>4; lcdshow_d(0x0b,0x30+x); y=y&0x0f; lcdshow_d(0x0c,0x30+y); lcdshow_d(0x0d,'-'); x=RDS1302(0x87); y=x; x=x>>4; lcdshow_d(0x0e,0x30+x); y=y&0x0f; lcdshow_d(0x0f,0x30+y); /****************下面的if实现每到8:10和14:10的提醒功能****************/ if((RDS1302(HOUR)==0x14 & RDS1302(MINUTE)==0x10)| ( RDS1302(HOUR)==0x08 & RDS1302(MINUTE)==0x10)) { SPK = 0; delay(200); SPK = 1; } for(x=45;x>0;x--) { set_time(); delay(10); } } /**************************主函数******************************/ void main() { uchar i; lcd_init(); delay(10); lcd_pos(0x03); i = 0; while(DIS1[i] != '\0') { lcd_wdat(DIS1[i]); i++; delay(200); } lcd_pos(0x41); i = 0; while(DIS2[i] != '\0') { lcd_wdat(DIS2[i]); delay(200); i++; } init_1302(); delay(1000); for(i=0;i<17;i++) { lcdshow_u(i,'>'); delay(150) ; } for(i=0;i<17;i++) { lcdshow_d(i,'<'); delay(150) ; } lcd_init(); delay(10); lcdshow_u(0,'T'); lcdshow_u(1,'i'); lcdshow_u(2,'m'); lcdshow_u(3,'e'); lcdshow_u(14,' '); lcdshow_d(0,'D'); lcdshow_d(1,'a'); lcdshow_d(2,'t'); lcdshow_d(3,'a'); lcdshow_d(6,'2'); lcdshow_d(7,'0'); //LCD框架描绘 while(1) { set_time(); if(sel==2){lcdshow_u(0X09,' ');lcdshow_u(0x0a,' ');delay(500); } if(sel==1){lcdshow_u(0X06, ' ');lcdshow_u(0X07,' ');delay(500); } if(sel==3) {lcdshow_u(0X0E,' ');lcdshow_u(0X0F,' ');delay(500); } if(sel==4){lcdshow_d(0x0b,' ');lcdshow_d(0x0c,' ');delay(500); } if(sel==5){lcdshow_d(0x0e,' ');lcdshow_d(0x0f,' ');delay(500); } if(sel==6) {lcdshow_d(0x08,' ');lcdshow_d(0x09,' ');delay(500); } if(sel==8) display(); //调时LCD闪烁显示 display(); } } 附录C 元器件清单 元器件名称 型号 数量 单片机 STC89C52 1 液晶显示屏 LCD1602 1 时钟芯片 DS1302 1 蜂鸣器 5V 1 晶体振荡器 32.768K 1 晶体振荡器 12M 1 排阻 A103J 1 按键开关 常开 3
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服