毕业设计-基于STC89C52单片机的可调式电子日历设计_第1页
毕业设计-基于STC89C52单片机的可调式电子日历设计_第2页
毕业设计-基于STC89C52单片机的可调式电子日历设计_第3页
毕业设计-基于STC89C52单片机的可调式电子日历设计_第4页
毕业设计-基于STC89C52单片机的可调式电子日历设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

基于STC89C52单片机的可调式电子日历设计摘要本论文主要讲述了可调式电子日历的设计过程,主要包括硬件设计和程序设计。硬件主要包括以STC89C52单片机为主要控制电路、时钟电路DS1302、显示模块和按键模块电路等。程序设计主要包括:主程序流程图、按键扫描子程序、液晶初始化子程序等。相比于老师要求我们做的“简易数字钟〞的设计要求:1、开机时,显示12:00:00的时间开始计时;2、P0.0控制“秒〞的调整,每按一次加1秒;3、P0.1控制“分〞的调整,每按一次加1分;4、P0.2控制“时〞的调整,每按一次加1个小时。我们进行了如下拓展:实现日历和时钟的显示并且能够对年月日时分秒进行调试。关键词:STC89C52单片机、DS1302、LCD1602目录HYPERLINK目录 1HYPERLINK设计要求与方案论证 2HYPERLINK1.1设计要求: 2HYPERLINK1.2系统根本方案选择和论证 2HYPERLINK1.2.1单片机芯片的选择方案和论证 2HYPERLINK1.2.2显示模块选择方案和论证 2HYPERLINK1.2.3时钟芯片的选择方案和论证 3HYPERLINK1.3电路设计最终方案决定 3HYPERLINK系统的硬件设计与实现 3HYPERLINK2.1电路设计框图 3HYPERLINK2.2系统硬件概述 3HYPERLINK2.3主要单元电路的设计 4HYPERLINK2.3.1单片机主控制模块的设计 4HYPERLINK2.3.2时钟电路DS1302 5HYPERLINK2.3.3显示模块的设计 6HYPERLINK2.3.4按键模块的设计 7HYPERLINK系统的软件设计 8HYPERLINK3.1主程序流程图 8HYPERLINK3.2按键扫描子程序 9HYPERLINK3.3液晶初始化子程序 12HYPERLINK3.4软件测试 12HYPERLINK3.5数据计算处理与性能分析: 13HYPERLINK加减键对时间日期改变处理算法: 13HYPERLINK性能分析: 13HYPERLINK实验结论以及实验心得总结 13HYPERLINK4.1实验结论: 13HYPERLINK4.2实验心得总结: 14HYPERLINK致谢词 15HYPERLINK参考文献 15HYPERLINK附录一系统电路图 16HYPERLINK附录二Proteus仿真图 17HYPERLINK附录三系统程序 17设计要求与方案论证1.1设计要求:具有年、月、日、时、分、秒等显示功能;具备年、月、日、时、分、秒校准功能;1.2系统根本方案选择和论证单片机芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的屡次拔插会对芯片造成一定的损坏。方案二:采用STC89C52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全兼容该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,对所下载的程序能够加密,比拟平安。当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片屡次拔插,所以不会对芯片造成损坏。所以选择采用STC89C52作为主控制系统。显示模块选择方案和论证方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比拟适合,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示。方案二:采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,所以也不用此种作为显示。方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,与普通数码管相比功耗较小,硬件连接简单。所以显示局部采用1602液晶显示。时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约本钱,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、周、月、年一级闰年补偿的年进行计数,而且精度高,RAM作为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.1.3电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用STC89C52作为主控制系统;DS1302提供时钟;LCD1602液晶作为显示系统的硬件设计与实现2.1电路设计框图图1电路设计框图2.2系统硬件概述本电路是由STC89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM存放器。可产生年、月、日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能,本电路采用DS1302单字节传送方式实现与主控机之间数据的传送;显示局部由1602构成。2.3主要单元电路的设计单片机主控制模块的设计STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口〔P0、P1、P2、P3〕,每一条I/O线都能独立地作输出或输入。单片机的最小系统如下列图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,如图-2图2主控制系统时钟电路DS13021.DS1302的性能特性图3示出DS1302的引脚排列图,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位存放器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,那么会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端〔双向〕。SCLK始终是输入端。图3DS1302的引脚图2.DS1302数据操作原理DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0〞,接着把RST端置“1〞,最后才给予SCLK脉冲。DS1302的控制字,此控制字的位7必须置1,假设为0那么不能把对DS1302进行读写数据。对于位6,假设对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0那么表示进行的是写操作。控制字节总是从最低位开始输入/输出的。DS1302的日历、时间存放器内容:“CH〞是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP〞是写保护位,在任何的对时钟和RAM的写操作之前,“WP〞必须为0。当“WP〞为1时,写保护位防止对任一存放器的写操作。显示模块的设计1.1602介绍字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子的1602字符型液晶显示器为例,介绍其用法。2.1602LCD的根本参数及引脚功能1602LCD分为背光和不带背光两种,基控制大局部为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差异,引脚功能说明1602LCD采用标准的14脚〔无背光〕或16脚〔带背光〕接口,各引脚接口说明如表1所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表1:引脚接口说明表第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脚:背光源负极。1602LCD的一般初始化〔复位〕过程延时15mS写指令38H〔不检测忙信号〕延时5mS写指令38H〔不检测忙信号〕延时5mS写指令38H〔不检测忙信号〕以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置3.LCD1602液晶显示如图5所示:图5LCD液晶显示按键模块的设计根据设计要求需要选择四个独立按键分别为选择、加、减、确定,按键模块如图6所示:图6按键模块设计系统的软件设计3.1主程序流程图图-A主程序流程图主程序:voidmain() { init(); write_setds(0x80,0x50); write_setds(0x82,0x59); write_setds(0x84,0x10); write_setds(0x86,0x17); write_setds(0x88,0x03); write_setds(0x8a,0x03); write_setds(0x8c,0x10); write_setds(0x90,0xa4); while(1) { keyscan(); } display(); }3.2按键扫描子程序调整时间用4个调整按钮,1个作为选择控制用,另外3个分别作为加调整,减调整和确定用。时间调整程序流程图如图-B所示:图-B时间调整程序流程图voidSET_DS1302(){uchari;Write_DS1302(0x8e,0x00);for(i=0;i<7;i++){ Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10)));}Write_DS1302(0x8e,0x80);}/* 读取当前时期时间*/voidGetTime(){ uchari; for(i=0;i<7;i++) { DateTime[i]=Read_Data(0x81+2*i); }}/*时间和日期转换成数字字符*/voidFormat_DateTime(uchard,uchar*a){ a[0]=d/10+'0';a[1]=d%10+'0';}/*判断是否为闰年*/ucharisLeapYear(uinty){return(y%4==0&&y%100!=0)||(y%400==0);}voidRefreshWeekDay(){ uinti,d,w=5; for(i=2000;i<2000+DateTime[6];i++) { d=isLeapYear(i)?366:365; w=(w+d)%7; } d=0; for(i=1;i<DateTime[4];i++)d+=MonthsDays[i]; d+=DateTime[3]; DateTime[5]=(w+d)%7+1;}/*年月日时分秒++/*/voidDateTime_Adjust(charx){switch(Adjust_Index){ case6: //年 if(x==1&&DateTime[6]<99)DateTime[6]++; if(x==-1&&DateTime[6]>0)DateTime[6]--; MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>MonthsDays[DateTime[4]]) DateTime[3]=MonthsDays[DateTime[4]]; RefreshWeekDay(); break; case4: //月 if(x==1&&DateTime[4]<12)DateTime[4]++; if(x==-1&&DateTime[4]>1)DateTime[4]--; MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>MonthsDays[DateTime[4]]) DateTime[3]=MonthsDays[DateTime[4]]; RefreshWeekDay(); break;case3: //日 MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(x==1&&DateTime[3]<MonthsDays[DateTime[4]])DateTime[3]++; if(x==-1&&DateTime[3]>0)DateTime[3]--; RefreshWeekDay(); break;case2: //时 if(x==1&&DateTime[2]<23)DateTime[2]++; if(x==-1&&DateTime[2]>0)DateTime[2]--; break;case1: //秒 if(x==1&&DateTime[1]<59)DateTime[1]++; if(x==-1&&DateTime[1]>0)DateTime[1]--; break; }}3.3液晶初始化子程序/*************初始化*************/voidT0_INT()interrupt1{ TH0=-50000/256; TL0=-50000%256; if(++tCount!=2)return; tCount=0; Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8); Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]); Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8); Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11); Display_LCD_String(0x00,LCD_DSY_BUFFER1); Display_LCD_String(0x40,LCD_DSY_BUFFER2); }3.4软件测试可调电子日历是多功能的数字型,可以看当前日期,时间。在编写程序和调试时出现了较多的问题。最后经过屡次的模块子程序的修改,一步一步的完成,最终解决了软件。3.5数据计算处理与性能分析:加减键对时间日期改变处理算法:对于年月日,时分秒来说,每个变量的最大值和最小值都不一样,所以当年月份时分秒改变时,进行处理的算法也不一样,年没有最大值,所以不用采取“封顶〞措施,每次年加一处理时,直接自加,而对于月份来说,月份是不能超过13的,所以当月份自加到13时要重新置1,具体处理见程序,在每个语句后,我都有分析注释出来。1.3时分秒进位算法当秒,分到达60时,向分进位,且秒数置零,从新开始计数。当时到达24时,也一样处理。1.4年月日进位算法因为每个月份的天数都不同,所以事先先设定一数组:dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31}用以判定12个月的最大值,接着判断天数,当超过本月最大天数时,月份加一,且天数要置1。月份判断比拟简单,只要超过12,年份就加1,月份置1。性能分析:首先,lcd能够正确的显示1302芯片上面的时间和日期。其次,可以通过三个按键:K1,K2和K3键对电子钟进行时间和日期的调整。按K1键进行校时,可以分别对时及分进行单独校时,使其校正到标准时间,校时时需要校正哪一位哪一位就闪烁。按K2键是对闪烁位进行加一的操作。按K3键是对闪烁位进行减一的操作。屡次按K1键,当全部闪烁位全闪烁完毕时,就可以退出调整模式。实验结论以及实验心得总结4.1实验结论:1、在该电子钟的设计中修改定时或调整时间时采用了闪烁,在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。其次,时,分,秒显示用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。最后,用查询方式对按键进行判断,假设有键按下,那么进行软件延时消抖,防止了抖动引起的干扰,执行相应的定时,选时或调时程序段。对当前时间或定时时间修改后又返回到最初的显示程序段,如此循环下去。2、在硬件上,选用DS1302,LCD1602相结合,首先DS1302内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作,这样读取数据简单。其次,选用LCD1602进行显示时,数据位串行输入,接口连线少,低功耗,显示清晰。并且本实验的电子钟即要实现时间的现实,还要实现日期的现实,所以假设是运用数码管进行显示的话,就算运用动态显示,所占用的IO口多,并且所需的数码管个数多,硬件复杂。3、proteus是一个非常好用的仿真软件,其具有强大的电路原理图绘制功能,且可以实现模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、键盘、LCD系统仿真等多种功能;和keil联合使用时可以检测所编写的程序的正确与否。将keil和proteus联合起来使用是实现电子设计制作的初步阶段,可防止在实际的硬件操作中因为电路原理图或向单片机烧录的程序有误而造成的难以修改的为题。4.2实验心得总结:1、通过本次单片机实训,我们不仅再次稳固复习了去年暑假里参加电子设计赛时学到的知识,还在老师同学的帮助下,进一步了解熟悉了DS1302,LCD1602的使用,及单片机的组成及其强大和缺乏。尽管由于忙于考研中间需要熬夜来完成各种过程,但整个过程是快乐而兴奋的!2、其次,再次稳固了KeilC51工程文件的建立,程序编写以及编译的掌握程度。最重要的是,因为只是水平有限,要自己编写一整个C程序还是很难必须查阅相关资料,但是最终wemakeit!我们很快乐!3、更加熟悉掌握了Proteus的使用方法,再次从实际操作中认识到Proteus在仿真方面的优越性,激发了自己学习Proteus的兴趣;4、因为自己要修改程序,所以单单花费在程序分析的时间就很多,为了更好的理解程序,我把每句主要程序的后面都注释了该语句的意思,详情可以见程序清单,发现注释语义的工作量也是非常大的。写实验报告时,每个模块的流程图都是自己画的,用WORD文档画图真的很麻烦,而且不是很美观。因为时间比拟仓促,流程图写的条理性不够,不过相信以后多多练习,就可以做得更好。5、尽管有参加电子设计大赛的经历了,但是可能由于近一年时间没有接触单片机,编程,看程序的原因了,在整个过程中还是遇到了很多故障,不过通过各种渠道〔比方网络,请教同学,老师等等〕解决了一些故障,虽然没有全部解决,但能在短短一周内通过此次作业,实现电子钟的功能,还是有点成就感的。在解决这些问题的过程中发现网络确实是一个很好的学习平台,利用前人的经验可以提高自己的解决实际问题的能力。通过这一个多礼拜的学习实践,使我们对所学的知识进行了系统的复习和稳固,在以前学习中不够清晰的概念得到了更好的理解。致谢词感谢学院,感谢王春梅老师再次给我们提供了一个展现自己的舞台,给我们一次难得煅炼的时机,使得我们的动手能力和专业技能都有了很大的提高。在设计和制作的过程中,我们深切的体会到,实践是理论运用的最好检验和团队合作的重要性,这一次的设计是对我们所学知识的一次综合性检测,无论是动手能力还是理论知识运用能力都得到了提高,同时加深了我们对网络资源的认识,大大提高了查阅资料的效率,使我们有充足的时间投入到电路设计当中。在做作品的日子里得到了王春梅老师的悉心指导,在此向我们的王春梅师致以诚挚的谢意。参考文献1:张毅刚,彭喜元,姜守达,乔立言.?新编MCS-51单片机应用设计?哈尔滨工业大学出版社,20212:马忠梅.?单片机的C语言应用设计?北京航空航天大学出版社20213:王静霞.?单片机应用技术?,电子工业出版社,2021.4::张道德.?单片机接口技术?,中国水利水电出版社20075:石生.?电路根本分析?,高等教育出版社20216:谭浩强.?C语言程序设计?〔第2版〕,清华大学出版社.7:胡宴如,耿苏燕.?模拟电子技术?高等教育出版社20008:谭永红,雷跃,莫振栋?电子线路实验进阶教程?北京航空航天大学出版20219:刘国巍,周晓萍,周莉?数字电子技术根底?,国防科技大学出版社202110:张永枫,?单片机应用实训教程?北京:清华大学出版社,2021.11:刘守义,?单片机应用技术?〔第2版〕西安电子科技大学出版社,200712:先锋工作室?单片机程序设计实例?北京:清华大学出版社,200313:广州周立功单片机开展,KeilC51使用技巧及实战,200314:李群芳,?单片机微型计算机与接口技术?〔第2版〕北京:电子工业出版15:徐玮,?C51单片机高效入门?,北京:机械工业出版社,2006.附录一系统电路图附图1系统电路图附录二Proteus仿真图附图2Proteus仿真图附录三系统程序源程序如下:#include<reg52.h>#include<string.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitSDA=P1^0; //DS1302数据线sbitCLK=P1^1; //DS1302时钟线sbitRST=P1^2;//DS1302复位线sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^2;sbitK1=P3^4;//选择sbitK2=P3^5;//加sbitK3=P3^6;//减sbitK4=P3^7;//确定voidDisplay_LCD_String(ucharp,uchar*s);uchartCount=0;//一年中每个月的天数,2月的天数由年份决定ucharMonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};uchar*WEEK[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"};//周日,周一到周六ucharLCD_DSY_BUFFER1[]={"Date00-00-00"};//LCD显示缓冲ucharLCD_DSY_BUFFER2[]={"Time00-00-00"};ucharDateTime[7];//所读取的日期时间charAdjust_Index=-1;//当前调节的时间:秒,分,时,日,ucharChange_Flag[]="-MHDM-Y";ucharRead_LCD_State();voidLCD_Busy_Wait();voidWrite_LCD_Data(uchardat);voidWrite_LCD_Command(ucharcmd);voidInit_LCD();voidSet_LCD_POS(ucharp);voidDelayMS(uintx){ uchari; while(x--)for(i=0;i<120;i++);}ucharRead_LCD_State(){ ucharstate; RS=0; RW=1; EN=1; DelayMS(1); state=P0; EN=0; DelayMS(1); returnstate;}voidLCD_Busy_Wait(){ while((Read_LCD_State()&0x08)==0x80); DelayMS(5);}voidWrite_LCD_Data(uchardat)//写数据{ LCD_Busy_Wait(); RS=1; RW=0; EN=0; P0=dat; EN=1; DelayMS(1); EN=0;}voidWrite_LCD_Command(ucharcmd)//写命令{ LCD_Busy_Wait(); RS=0; RW=0; EN=0; P0=cmd; EN=1; DelayMS(1); EN=0;}voidInit_LCD() //LCD初始化{ Write_LCD_Command(0x38);DelayMS(1); Write_LCD_Command(0x01);DelayMS(1); Write_LCD_Command(0x06);DelayMS(1); Write_LCD_Command(0x0C);DelayMS(1); Display_LCD_String(0x00,"zhongzhoudaxue");// DelayMS(1000); Display_LCD_String(0x40,"dianzirili"); DelayMS(2000); }voidSet_LCD_POS(ucharp){ Write_LCD_Command(p|0x80);}voidDisplay_LCD_String(ucharp,uchar*s){ uchari; Set_LCD_POS(p); for(i=0;i<16;i++) { Write_LCD_Data(s[i]); DelayMS(1); }}/*向DS1302写入一字节*/voidDS1302_Write_Byte(ucharx) { uchari; for(i=0;i<8;i++) { SDA=x&1; CLK=1; CLK=0; x>>=1; }}/*从DS1302读取一字节*/ucharDS1302_Read_Byte(){uchari,b,t;for(i=0;i<8;i++){ b>>=1; t=SDA; b|=t<<7; CLK=1; CLK=0;}returnb/16*10+b%16;}/*从DS1302指定位置数据*/ucharRead_Data(ucharaddr){ uchardat; RST=0; CLK=0; RST=1; DS1302_Write_Byte(addr); dat=DS1302_Read_Byte(); CLK=1; RST=0; returndat; }/*向DS1302某地址写入数据*/voidWrite_DS1302(ucharaddr,uchardat){ CLK=0; RST=1; DS1302_Write_Byte(addr); DS1302_Write_Byte(dat); CLK=0; RST=0; }/* 设置时间*/voidSET_DS1302(){uchari;Write_DS1302(0x8e,0x00);for(i=0;i<7;i++){ Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10)));}Write_DS1302(0x8e,0x80);}/* 读取当前时期时间*/voidGetTime(){ uchari; for(i=0;i<7;i++) { DateTime[i]=Read_Data(0x81+2*i); }}/*时间和日期转换成数字字符*/voidFormat_DateTime(uchard,uchar*a){ a[0]=d/10+'0';a[1]=d%10+'0';}/*判断是否为闰年*/ucharisLeapYear(uinty){return(y%4==0&&y%100!=0)||(y%400==0);}voidRefreshWeekDay(){ uinti,d,w=5; for(i=2000;i<2000+DateTime[6];i++) { d=isLeapYear(i)?366:365; w=(w+d)%7; } d=0; for(i=1;i<DateTime[4];i++)d+=MonthsDays[i]; d+=DateTime[3]; DateTime[5]=(w+d)%7+1;}/*年月日时分秒++/*/voidDateTime_Adjust(charx){switch(Adjust_Index){ case6: //年 if(x==1&&DateTime[6]<99)DateTime[6]++; if(x==-1&&DateTime[6]>0)DateTime[6]--; MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>MonthsDays[DateTime[4]]) DateTime[3]=MonthsDays[DateTime[4]]; RefreshWeekDay(); break; case4: //月 if(x==1&&DateTime[4]<12)DateTime[4]++; if(x==-1&&DateTime[4]>1)DateTime[4]--; MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(DateTime[3]>MonthsDays[DateTime[4]]) DateTime[3]=MonthsDays[DateTime[4]]; RefreshWeekDay(); break;case3: //日 MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; if(x==1&&DateTime[3]<MonthsDays[DateTime[4]])DateTime[3]++; if(x==-1&&DateTime[3]>0)DateTime[3]--; RefreshWeekDay(); break;case2: //时 if(x==1&&DateTime[2]<23)DateTime[2]++; if(x==-1&&DateTime[2]>0)DateTime[2]--; break;case1: //秒 if(x==1&&DateTime[1]<59)DateTime[1]++; if(x==-1&&DateTime[1]>0)DateTime[1]--; break; }}/*定时器每秒刷新LCD显示*/voidT0_INT()interrupt1{ TH0=-50000/256; TL0=-50000%256; if(++tCount!=2)return; tCount=0; Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8); Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]); Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8); Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11); Display_LCD_String(0x00,LCD_DSY_BUFFER1); Display_LCD_String(0x40,LCD_DSY_BUFFER2); }/*键盘中断*/voidEX_INT0()interrupt0{ if(K1==0) //选择调整对象:年,月,日,时,分,秒 { while(K1==0); if(Adjust_Index==-1||Adjust_Index==1)Adjust_Index=7; Adjust_Index--; if(Adjust_Index==5)Adjust_Index=4; LCD_DSY_BUFFER2[13]='['; LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index]; LCD_DSY_BUFFER2[15]=']'; } else if(K2==0)//加 { while(K2==0);DateTime_Adjust(1); } else if(K3==0)//减 { while(K3==0);DateTime_Adjust(-1); } else if(K4==0)//确定 { while(K4==0); SET_DS1302(); //调整后的时间写入DS1302 LCD_DSY_BUFFER2[13]=''; LCD_DSY_BUFFER2[14]=''; LCD_DSY_BUFFER2[15]=''; Adjust_Index=-1; }}/*主程序*/voidmain(){ Init_LCD(); //LCD初始化 IE=0x83;//允许INT0,T0中断 IP=0x01; IT0=0x01; TMOD=0x01; TH0=-50000/256; TL0=-50000%256; TR0=1; while(1) { if(Adjust_Index==-1)GetTime(); }}ganemploymenttribunalclaiEmploymenttribunalssortoutdisagreementsbetweenemployersandemployees.Youmayneedtomakeaclaimtoanemploymenttribunalif:youdon'tagreewiththedisciplinaryactionyouremployerhastakenagainstyouyouremployerdismissesyouandyouthinkthatyouhavebeendismissedunfairly.Formoreinformationaboutdismissalandunfairdismissal,see

Dismissal.Youcanmakeaclaimtoanemploymenttribunal,evenifyouhaven't

appealed

againstthedisciplinaryactionyouremployerhastakenagainstyou.However,ifyouwinyourcase,thetribunalmayreduceanycompensationawardedtoyouasaresultofyourfailuretoappeal.Rememberthatinmostcasesyoumustmakeanapplicationtoanemploymenttribunalwithinthreemonthsofthedatewhentheeventyouarecomplainingabouthappened.Ifyourapplicationisreceivedafterthistimelimit,thetribunalwillnotusuallyaccepti.Ifyouareworriedabouthowthetimelimitsapplytoyou,takeadvicefromoneoftheorganisationslistedunder

Furtherhelp.Employmenttribunalsarelessformalthansomeothercourts,butitisstillalegalprocessandyouwillneedtogiveevidenceunderanoathoraffirmation.Mostpeoplefindmakingaclaimtoanemploymenttribunalchallenging.Ifyouarethinkingaboutmakingaclaimtoanemploymenttribunal,youshouldgethelpstraightawayfromoneoftheorganisationslistedunder

Furtherhelp.Ifyouarebeingrepresentedbyasolicitoratthetribunal,theymayaskyoutosignanagreementwhereyoupaytheirfeeoutofyourcompensationifyouwinthecase.Thisisknownasa

damages-basedagreement.InEnglandandWales,yoursolicitorcan'tchargeyoumorethan35%ofyourcompensation

ifyouwinthecase.Ifyouarethinkingaboutsigningupfor

adamages-basedagreement,youshouldmakesureyou'reclearaboutthetermsoftheagreement.Itmightbebesttogetadvicefromanexperiencedadviser,forexample,ataCitizensAdviceBureau.

TofindyournearestCAB,includingthosethatgiveadvicebye-mail,clickon

nearestCAB.Formoreinformationaboutmakingaclaimtoanemploymenttribunal,see

Employmenttribunals.The(lackof)airupthereWatchmCaymanIslands-basedWebb,theheadofFifa'santi-racismtaskforce,isinLondonfortheFootballAssociation's150thanniversarycelebrationsandwillattendCity'sPremierLeaguematchatChelseaonSunday."IamgoingtobeatthematchtomorrowandIhaveaskedtomeetYayaToure,"hetoldBBCSport."Formeit'sabouthowhefeltandIwouldliketospeaktohimfirsttofindoutwhathisexperiencewas."Uefahas

openeddisciplinaryproceedingsagainstCSKA

forthe"racistbehaviouroftheirfans"during

City's2-1win.MichelPlatini,presidentofEuropeanfootball'sgoverningbody,hasalsoorderedanimmediateinvestigationintothereferee'sactions.CSKAsaidtheywere"surprisedanddisappointed"byToure'scomplaint.InastatementtheRussiansideadded:"WefoundnoracistinsultsfromfansofCSKA."Agehasreachedtheendofthebeginningofaword.Maybeguiltyinhisseemstopassingalotofdifferentlifebecametheappearanceofthesameday;Maybebackinthepast,tooneselftheparanoidweirdbeliefdisillusionment,thesedays,mymindhasbeenverymessy,inmymindconstantly.Alwaysfeeloneselfshouldgotodosomething,orwritesomething.Twentyyearsoflifetrajectorydeeplyshallow,suddenlyfeelsomething,doit.一字开头的年龄已经到了尾声。或许是愧疚于自己似乎把转瞬即逝的很多个不同的日子过成了同一天的样子;或许是追溯过去,对自己那些近乎偏执的怪异信念的醒悟,这些天以来,思绪一直很凌乱,在脑海中不断纠缠。总觉得自己自己似乎应该去做点什么,或者写点什么。二十年的人生轨迹深深浅浅,突然就感觉到有些事情,非做不可了。Theendofourlife,andcanmeetmanythingsreallydo?而穷尽我们的一生,又能遇到多少事情是真正地非做不可?Duringmychildhood,thinkluckymoneyandnewclothesarenecessaryforNewYear,butastheadvanceoftheage,willbemoreandmorefoundthatthosethingsareoptional;Juniorhighschool,thoughttohaveacrushonjustmeansthattherealgrowth,butoverthepastthreeyearslater,hiswritingofalumniinpeace,suddenlyfoundthatisn'treallygrowup,itseemsisnotsoimportant;Theninhighschool,thinkdon'twanttogiveventtooutyourinnervoicecanbeinthehighschoolchildrenofthefeelingsinaperiod,butwaseventuallyinfarctionwhengraduationpartyinthethroat,lateragainstoodonthepitchhehassweatprofusely,lookedathisthrownabasketballhoops,suddenlyfoundhimselfhasalreadycan'trememberhisappearance.童年时,觉得压岁钱和新衣服是过年必备,但是随着年龄的推进,会越来越发现,那些东西根本就可有可无;初中时,以为要有一场暗恋才意味着真正的成长,但三年过去后,自己心平气和的写同学录的时候,突然就发现是不是真正的成长了,好似并没有那么重要了;然后到了高中,觉得非要吐露出自己的心声才能为高中生涯里的懵懂情愫划上一个句点,但毕业晚会的时候最终还是被堵塞在了咽喉,后来再次站在他曾经挥汗如雨的球场,看着他投过篮球的球框时,突然间发现自己已经想不起他的容颜。Originally,thisworld,canproduceachemicalreactiontoanevent,inadditiontoresolutely,havetodo,andtime.原来,这个世界上,对某个事件能产生化学反响的,除了非做不可的坚决,还有,时间。Aperson'stime,yourideasarealwaysspecialtoclear.Want,want,lineisclear,asifnothingcouldshakehis.Alsoonceseemedtobedeterminedtodosomething,butmoreoftenishebackedoutatlast.Dislikehiscowardice,finallyfoundthattherearealotoflove,therearealotofmiss,likeshadowreallyhavebeendoomed.Thosewhodo,justgreenyearsoneselfgiveoneselfanarminjection,orisaself-righteousspiritual.一个人的时候,自己的想法总是特别地清晰。想要的,不想要的,界限明确,好似没有什么可以撼动自己。也曾经好似已经下定了决心去做某件事,但更多的时候是最后又打起了退堂鼓。嫌恶过自己的怯懦,最终却发现有很多缘分,有很多错过,好似冥冥之中真的已经注定。那些曾经所谓的非做不可,只是青葱年华里自己给自己注射的一支强心剂,或者说,是自以为是的精神寄托罢了。Atthemoment,theskyisdark,theairisfreshfactorafterjustrained.Suddenlythoughtofblueplaidshirt;Thosewerebrokenintovariousshapesofstationery

温馨提示

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

评论

0/150

提交评论