用DS1302与1602LCD设计的可调式电子日历时钟的设计与实现毕业论文_第1页
用DS1302与1602LCD设计的可调式电子日历时钟的设计与实现毕业论文_第2页
用DS1302与1602LCD设计的可调式电子日历时钟的设计与实现毕业论文_第3页
用DS1302与1602LCD设计的可调式电子日历时钟的设计与实现毕业论文_第4页
用DS1302与1602LCD设计的可调式电子日历时钟的设计与实现毕业论文_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、核准通过,归档资料。未经允许,请勿外传!9JWKffwvG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ!djs#XuyUP2kNXpRWXmA&UE9aQGn8xp$R# DS1302提供时钟;1602液晶作为显示。第二章、系统的硬件设计与实现2.1 电路设计框图 SKIPIF 1 0 2.2 系统硬件概述本电路是由STC89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为

2、2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM存放器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能,本电路采用DS1302单字节传送方式实现与主控机之间数据的传送;显示部份由1602构成。2.3 主要单元电路的设计.1单片机主控制模块的设计STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口P0、P1、P2、P3,每一条I/O线都能独立地作输出或输入

3、。单片机的最小系统如下列图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-1 图-1 主控制系统时钟电路DS13021. DS1302的性能特性图-2示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2

4、给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位存放器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,那么会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串

5、行数据输入端双向。SCLK始终是输入端。图-2 DS1302的引脚图2. DS1302数据操作原理(1) 时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下列图3所示。表1为DS1302的控制字,此控制字的位7必须置1,假设为0那么不能把对DS1302进行读写数据。对于位6,假设对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0那么表示进行的是写操作。控制字节总是从最低位开始输入/输出的

6、。表6为DS1302的日历、时间存放器内容:“CH是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP为1时,写保护位防止对任一存放器的写操作。(2) DS1302的控制字节DS1302的控制字如表-1所示。控制字节的高有效位位7必须是逻辑1,如果它为0,那么不能把数据写入DS1302中,位6如果0,那么表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位位0如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 R

7、AM RD 1 A4 A3 A2 A1 A0 / CK /WR 表-1 DS1302的控制字格式(3) 数据输入输出I/O在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下列图-3所示图-3 DS1302单字节读/写时序图(4) DS1302的存放器DS1302有12个存放器,其中有7个存放器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间存放器及其控制字见表-2。表-2 DS1302的日历、时间存放器此外,DS1302

8、 还有年份存放器、控制存放器、充电存放器、时钟突发存放器及与RAM相关的存放器等。时钟突发存放器可一次性顺序读写除充电存放器外的所有存放器内容。 DS1302与RAM相关的存放器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM存放器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。显示模块的设计1. 1602介绍 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙

9、太阳人电子的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图- 4:图- 4 1602字符型液晶显示器实物图2. 1602LCD的根本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大局部为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差异,两者尺寸差异如下列图-5所示:图-5 1602LCD尺寸图1602LCD主要技术参数:显示容量:162个字符工作电流:2.0mA(5.0V)字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚无背光或16脚带背光接口,各引脚接口说明如表-3所示:编号符号引脚说明编号符

10、号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表-3:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器比照度调整端,接正电源时比照度最弱,接地时比照度最高,比照度过高时会产生“鬼影,使用时可以通过一个10K的电位器调整比照度。第4脚:RS为存放器选择,高电平时选择数据存放器、低电平时选择指令存放器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作

11、。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。3. 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表-4所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位00000

12、1S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表-4:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。说明:1为高电平、0为低电平指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 屏幕上所有文字是否左移或者右移。高电平表示有效

13、,低电平那么无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收

14、命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表-5:根本操作时序表读写操作时序如图- 6和图-7所示:图-6 读操作时序图-7 写操作时序4 .1602LCD的RAM地址映射及标准字库表 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模 块的忙标志为低电平,表示不忙,否那

15、么此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图-8是1602的内部显示地址。图-8 1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B40H+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器CGROM

16、已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母“A的代码是01000001B41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A图-9字符代码与图形对应图5. 1602LCD的一般初始化复位过程延时15mS写指令38H不检测忙信号延时5mS写指令38H不检测忙信号延时5mS写指令38H不检测忙信号以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指

17、令0CH:显示开及光标设置硬件图:图-10 LCD液晶驱动电路第三章、系统的软件设计 SKIPIF 1 0 图-A 主程序流程图主程序:void main() init(); write_setds(0 x80,0 x50); write_setds(0 x82,0 x59); write_setds(0 x84,0 x10); write_setds(0 x86,0 x17); write_setds(0 x88,0 x03);write_setds(0 x8a,0 x03); write_setds(0 x8c,0 x10);write_setds(0 x90,0 xa4);while(1

18、) keyscan(); display(); 3.2 按键扫描子程序调整时间用3个调整按钮,1个作为移位、控制用,另外2个分别作为加调整和减调整用。在调整时间过程中,要调整的位与其他位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位示值给该位。时间调整程序流程图如图-B所示。判断是否有键按下Y计时停止N判断功能键按下次数对应位闪烁加键按下减键按下对应位时间加1对应位时间减1显示子程序返回,进入主循环8次7次图-B 时间调整程序流程图调时程序如下: void keyscan( ) uchar aa,bb; if(set=0) delay(3); if(set=0) aa+;

19、 while(!set); if(aa=1) flag=1; write_ds(0 x8e,0 x80); write_com(0 x80+0 x40+10); write_com(0 x0f); write_ds(0 x8e,0 x00); bb=read_ds(0 x81); miao=(bb/16)*10+bb%16; bb=read_ds(0 x83); fen=(bb/16)*10+bb%16; bb=read_ds(0 x85); shi=(bb/16)*10+bb%16; bb=read_ds(0 x87); ri=(bb/16)*10+bb%16; bb=read_ds(0 x

20、89); yue=(bb/16)*10+bb%16; bb=read_ds(0 x8b); zhou=(bb/16)*10+bb%16; bb=read_ds(0 x8d); nian=(bb/16)*10+bb%16; if(aa=2) write_com(0 x80+0 x40+7); if(aa=3) write_com(0 x80+0 x40+4); if(aa=4) write_com(0 x80+0 x0d); if(aa=5) write_com(0 x80+0 x09); if(aa=6) write_com(0 x80+6); if(aa=7) write_com(0 x80

21、+3); if(aa=8) aa=0; write_com(0 x0c); write_ds(0 x8e,0 x80); flag=0; if(aa!=0) if(up=0) delay(5) ; if(up=0) while(!up); if(aa=1) miao+; if(miao=61) miao=1 ; write_sfm(8,miao); write_com(0 x80+0 x4a); if(aa=2) fen+; if(fen=60) fen=0; write_sfm(5,fen); write_com(0 x80+0 x48); if(aa=3) shi+; if(shi=24)

22、 shi=0; write_sfm(2,shi); write_com(0 x80+0 x40+5); if(aa=4) zhou+; if(zhou=8) zhou=1; write_nyr(12,zhou); write_com(0 x80+0 x0d); if(aa=5) ri+; if(ri=32) ri=1; write_nyr(8,ri); write_com(0 x80+0 x0a); if(aa=6) yue+; if(yue=13) yue=1; write_nyr(5,yue); write_com(0 x80+7); if(aa=7) nian+; write_nyr(2

23、,nian); write_com(0 x80+4); if(down=0) delay(5) ; if(down=0) while(!down); if(aa=1) miao-; if(miao=-1) miao=59; write_sfm(8,miao); write_com(0 x80+0 x4a); if(aa=2) fen-; if(fen=-1) fen=59; write_sfm(5,fen); write_com(0 x80+0 x48); if(aa=3) shi-; if(shi=-1) shi=23; write_sfm(2,shi); write_com(0 x80+0

24、 x45); if(aa=4) zhou-; if(zhou=0) zhou=7; write_nyr(12,zhou); write_com(0 x80+0 x0d); if(aa=5) ri-; if(ri=-1) ri=1; write_nyr(8,ri); write_com(0 x80+0 x0a); if(aa=6) yue-; if(yue=0) yue=12; write_nyr(5,yue); write_com(0 x87); if(aa=7) nian-; write_nyr(2,nian); write_com(0 x84); write_ds(0 x80,(miao/

25、10)*16+miao%10); write_ds(0 x82,(fen/10)*16+fen%10); write_ds(0 x84,(shi/10)*16+shi%10); write_ds(0 x86,(ri/10)*16+ri%10); write_ds(0 x88,(yue/10)*16+yue%10);write_ds(0 x8a,(zhou/10)*16+zhou%10); write_ds(0 x8c,(nian/10)*16+nian%10); display(); 液晶初始化子程序 /*初始化*/ void init() /uchar i; lcden=0; write_c

26、om(0 x38); write_com(0 x0c); write_com(0 x06); write_com(0 x01); delay(5);write_com(0 x80+0 x01);write_date(0 x32); delay(2);write_com(0 x80+0 x02);write_date(0 x30); delay(2);write_com(0 x80+0 x05); write_date(0 x2d); delay(2); write_com(0 x80+0 x08); write_date(0 x2d); delay(2); write_com(0 x80+0

27、x46); write_date(0 x3a); delay(2); write_com(0 x80+0 x49); write_date(0 x3a); delay(2); 4.1 测试仪器第四章、 指标测试序号名称型号1PC机Hp5412双路直流稳压电源CA17303D3单片机仿真软件Proteus、keil C4数字万用表DT9205B5ISP在线下载线电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,那么会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否那么会刺被带有包皮的导线,那么会对电路造成短路现象。在本成电子万年历的

28、设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以防止的,以下为主要的问题:1串口下载芯片232发烫,单片机晶振不起振21602在显示时间时出现黑格子,遮挡了时间3对万年历修改时间或日期时,有时时间改变2次。解决:根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振,复位正常,程序能够下载。1602出现黑格子是由于在其第三引脚没加电阻分压导致,加上5K电阻后正常。按键延时较短致使按键次数多加。电子成年历是多功能的数字型,可以看当前日期,时间。电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过屡次的模块子程序的修改,一步一步的完成

29、,最终解决了软件。在软件的调试过程中主要遇到的问题如下:1:1602显示的时间不完整,最后在液晶初始化程序中给加上该显示的数字即可。2:在调整时间时光标闪烁不规律,原因的由于错用DS1302停振指令所致,最后加上一个变量进行控制即可。 4.测试结果分析与结论4.4.1 测试结果分析1在测试中遇到单片机晶振不起振、232芯片发烫,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.21602液晶有黑色背景出现,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。查看烧写的程序是否正确无误,对程序进行认真修改。 测试结论经过屡次的反复测试与分析,可以对电路的原理及功能更加熟悉,

30、同时提高了设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与稳固.作品总结在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品。到达了预期的目的。完了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。反而到达事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,理清了思路,反而得心应手。在此

31、次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次电子制作中学到了很多很多东西,这是最重要的。总之,参加这次电子制作我的能力得到了全方位的提高。致谢词感谢学院给我提供了一个展现自己的舞台,给我一次难得煅炼的时机,使得我的动手能力和专业技能都有了很大的提高。在做作品的日子里得到了指导教师的悉心指导,在此向我的指导教师致以诚挚的谢意。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我对这次的作品完成有了信心和动力,也给了我很多无私的帮助和支持,我在此深表谢意。参考文献1:张毅刚,彭喜元,姜守达,乔立言, ?新编MCS-51单片机应用

32、设计?。哈尔滨工业大学出版社 ,20212:马忠梅,?单片机的C语言应用设计? 北京航空航天大学出版社 。20213:王静霞,?单片机应用技术?,电子工业出版社, 2021附录一:系统电路图附录二:生成的PCB板附录三:系统程序清单 #include#define uchar unsigned char#define uint unsigned intuchar code table1=2021-00-00 sat ; uchar code table2= 20:00:00;sbit lcdrs=P27;sbit lcdrw=P26;sbit lcden=P25;sbit ACC0=ACC0;

33、sbit ACC7=ACC7;sbit dsio=P23; sbit dsclk=P22; sbit dsrst=P24; sbit set=P16; sbit up=P15 ; sbit down=P14; void keyscan();void write_sfm(uchar add,uchar shu);uchar shi,fen,miao,ri,yue,nian,zhou,flag;void delay(uchar z) uchar x,y; for(x=z;x0;x-) for(y=110;y0;y-);/*往DS1302写入一字节*/void inputbyte(uchar add

34、) uchar i; ACC=add; for(i=8;i0;i-) dsio=ACC0; dsclk=1; dsclk=0; ACC=ACC1; /*ds1302输出一字节*/uchar outputbyte(void) uchar i; for(i=8;i0;i-) ACC=ACC1; ACC7=dsio; dsclk=1; dsclk=0; return ACC;/*往ds1302写入数据*/void write_ds(uchar add,uchar ucda) dsrst=0; dsclk=0; dsrst=1; inputbyte(add); inputbyte(ucda); dsc

35、lk=1; dsrst=0;/*从DS1302读出数据*/uchar read_ds(uchar add) uchar ucda; dsrst=0; dsclk=0; dsrst=1; inputbyte(add); ucda=outputbyte(); dsclk=1; dsrst=0; return (ucda);/*往1602液晶写入指令*/void write_com(uchar com) lcdrs=0; lcdrw=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;/*往1602液晶写入数据*/void write_date(uchar

36、 date1) lcdrs=1; lcdrw=0; P0=date1; delay(5); lcden=1; delay(5); lcden=0;/*设置DS1302*/void write_setds(uchar addr,uchar date) write_ds(0 x8e,0 x00); write_ds(addr,date); write_ds(0 x8e,0 x80);/*初始化*/ void init() /uchar i; lcden=0; write_com(0 x38); write_com(0 x0c); write_com(0 x06); write_com(0 x01)

37、; delay(5);write_com(0 x80+0 x01);write_date(0 x32); delay(2);write_com(0 x80+0 x02);write_date(0 x30); delay(2);write_com(0 x80+0 x05); write_date(0 x2d); delay(2); write_com(0 x80+0 x08); write_date(0 x2d); delay(2); write_com(0 x80+0 x46); write_date(0 x3a); delay(2); write_com(0 x80+0 x49); writ

38、e_date(0 x3a); delay(2); /*往1602写入日期*/void write_nyr(uchar add,uchar date) uchar shi,ge ; shi=date/10; ge=date%10; write_com(0 x80+0 x01+add); write_date(0 x30+shi); write_date(0 x30+ge);/*显示函数*/void display()if(flag!=1) uchar d; d=read_ds(0 x81); miao=(d/16)*10+(d%16); write_sfm(8,miao); d=read_ds(

39、0 x83); fen=(d/16)*10+(d%16); write_sfm(5,fen); d=read_ds(0 x85); shi=(d/16)*10+(d%16); write_sfm(2,shi); d=read_ds(0 x87); ri=(d/16)*10+(d%16); write_nyr(8,ri); d=read_ds(0 x89); yue=(d/16)*10+(d%16); write_nyr(5,yue); d=read_ds(0 x8b); zhou=d%16; write_nyr(12,zhou); d=read_ds(0 x8d); nian=(d/16)*1

40、0+(d%16); write_nyr(2,nian); /*往1602写入时间*/ void write_sfm(uchar add,uchar date) uchar shi,ge; shi=date/10; ge=date%10; write_com(0 x80+0 x42+add); write_date(0 x30+shi); write_date(0 x30+ge); void main() init(); write_setds(0 x80,0 x50); write_setds(0 x82,0 x59); write_setds(0 x84,0 x10); write_setd

41、s(0 x86,0 x17); write_setds(0 x88,0 x03);write_setds(0 x8a,0 x03); write_setds(0 x8c,0 x10);write_setds(0 x90,0 xa4);while(1) keyscan(); display(); void keyscan() uchar aa,bb; if(set=0) delay(3); if(set=0) aa+; while(!set); if(aa=1) flag=1; write_ds(0 x8e,0 x80); write_com(0 x80+0 x40+10); write_com

42、(0 x0f); write_ds(0 x8e,0 x00); bb=read_ds(0 x81); miao=(bb/16)*10+bb%16; bb=read_ds(0 x83); fen=(bb/16)*10+bb%16; bb=read_ds(0 x85); shi=(bb/16)*10+bb%16; bb=read_ds(0 x87); ri=(bb/16)*10+bb%16; bb=read_ds(0 x89); yue=(bb/16)*10+bb%16; bb=read_ds(0 x8b); zhou=(bb/16)*10+bb%16; bb=read_ds(0 x8d); nian=(bb/16)*10+bb%16; if(aa=2) write_com(0 x80+0 x40+7); if(aa=3) write_com(0 x80+0 x40+4); if(aa=4) write_com(0 x80+0 x0d); if(aa=5) write_com(0 x80+0 x09); if(aa=6) write_com(0 x80+6); if(aa=7) write_com(0 x80+3); if(aa=8) aa=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论