标准化考场日历时钟显示器的设计与实现_第1页
标准化考场日历时钟显示器的设计与实现_第2页
标准化考场日历时钟显示器的设计与实现_第3页
标准化考场日历时钟显示器的设计与实现_第4页
标准化考场日历时钟显示器的设计与实现_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

标准化考场日历时钟显示器的设计与实现

任务背景:当今大学标准化考场内使用的时钟大多为石英钟,而石英钟功能单一、误差大、价格较高、不便于修理。标准化考场时钟的主要作用就是为学校师生及其他工作人员提供准确的时间同步,同时也为计算机系统及其他弱电子系统提供标准的时间源,使各系统的时间集中同步,在整个学校系统中使用相同的授时标准。器材准备:AT89S51一片+40PDIP插座、12M晶振、30pF瓷片电容、LCD1602液晶显示模块、+10K1/8W上拉排电阻、+0.1uF瓷片电容1个、6x6mm按钮、DS1302一片、晶振32768Hz、CR2032电池及其电池座、5V直流电源一套一、了解日历时钟单片机日历时钟是一个直观把日期和时间呈现出来的计时装置。随着科技的发展,人们希望可以更加方便精确的提供我们所需要的信息因此在电子时钟的基础上进一步的提高其方便性和准确性就尤为重要。在单片机电子时钟中,需要一个实时的时钟和日历,以便对一些实时发生事件记录时给予时标,实时时钟芯片便可满足。如:MC146818,DS12887等。他们也能完全满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂,占用地址,数据总线接线多,芯片体积大占用空间多,近年来串行接口的各种芯片在单片机系统中应用越来越多,串行接口的实时时钟芯片也出现了不少DS1302是一个综合性能较好且价格便宜的串行接口实时时钟芯片。二、利用proteus设计原理图三、具体步骤第一步:理论知识积累,2-3周时间掌握,由老师安排讲解,组长和成员都需掌握;通过网络和相关书籍了解有关时钟的相关知识,熟悉桌面时钟的运转规则和其主要算法,以及如何设置闹钟,添加背景。第二步:下载相关资料并且在最短的时间内学会一些基本知识。第三步:程序的调试,在proteus中设计原理图Keil编写代码进行烧录。第四步:实施计划总结,成员配合,老师指导。示例程序:LCD程序#include<reg51.h>#include"LCD1602.h"#include"DS1302.h"#defineucharunsignedchar#defineuintunsignedintbitkey_flag1=0,key_flag2=0;SYSTEMTIMEadjusted;ucharsec_add=0,min_add=0,hou_add=0,day_add=0,yea_add=0;uchardata_alarm[7]={0};intkey_scan(){inti=0;uinttemp;P1=0xf0;temp=P1;if(temp!=0xf0){i=1;}else{i=0;}returni;}ucharkey_value(){uintm=0,n=0,temp;ucharvalue;ucharv[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'};P1=0xfe;temp=P1;if(temp!=0xfe)m=0;P1=0xfd;temp=P1;if(temp!=0xfd)m=1;P1=0xfb;temp=P1;if(temp!=0xfb)m=2;P1=0xf7;temp=P1;if(temp!=0xf7)m=3;P1=0xef;temp=P1;if(temp!=0xef)n=0;P1=0xdf;temp=P1;if(temp!=0xdf)n=1;P1=0xbf;temp=P1;if(temp!=0xbf)n=2;value=v[m][n];returnvalue;}voidadjust(void){if(key_scan()&&key_flag1)switch(key_valud()){case'0':sec_add++;break;case'1':min_add++;break;case'2':hou_add++;break;case'3':day_add++;break;case'4':mon_add++;break;case'5':yea_add++;break;default:break;}adjusted.second+=sec_add;adjusted.Minute+=min.add;adjusted.Hour+=hou.add;adjusted.Day+=day.add;adjusted.Month+=mon.add;adjusted.Year+=yea.add;if(adjusted.Second>59){adjusted.Second=adjusted.Second%60;adjusted.Minute++;}if(adjusted.Minute>59){adjusted.Minute=adjusted.Minute%60;adjusted.Hour++;}if(adjusted.Hour>23){adjusted.Hour>adjusted.Hour%24;adjusted.Day++;}if(adjusted.Day>31)adjusted.Day=adjusted.Day%31;if(adjusted.Month>12)adjusted.Month=adjusted.Month%12;if(adjusted.Year>100)adjusted.Year=adjusted.Year%100;}voidchanging(void)interrupt0using0{if(key_flag1)key_flag1=0;elsekey_flag1=1;}main(){uinti;ucharp1[]="D:",p2[]="T:";SYSTEMTIMET;EA=1;EX0=1;IT0=1;EA=1;EX1=1;IT1=1;Init1602();Initial_DS1302;while(1){write_com(0x80);write_string(p1,2);write_com(0xc0);write_string(p2,2);DS1302_GetTime(&T);adjusted.Second=T.Second;adjusted.Minute=T.Minute;adjusted.Hour=T.Hour;adjusted.Week=T.Week;adjusted.Day=T.Day;adjusted.Month=T.Month;adjusted.Year=T.Year;for(i=0;i<9;i++){adjusted.DateString[i]=T.DateString;adjusted.TimeString[i]=T.TimeString;}adjust();DateToStr(&adjusted);TimeToStr(&adjusted);write_com(0x82);write_string(adjusted.DateString,8);write_com(0xc2);write_string(adjusted.TimeString,8);delay(10);}}TIMER_DS1302#ifndefTIMER_DS1302#defineTIMER_DS1302sbitDS1302_CLK=P2^6;sbitDS1302_IO=P2^7;sbitDS1302_RST=P2^5;sbitACC0=ACC^0;sbitACC7=ACC^7;typedefstructSYSTEM_TIME{unsignedcharSecond;unsignedcharMinute;unsignedcharHour;unsignedcharWeek;unsignedcharDay;unsignedcharMonth;unsignedcharYear;unsignedcharDateString[9];unsignedcharTimeString[9];}SYSTEMTIME;#defineAM(X)X#define PM(X)(X+12)#define DS1302_SECOND0x80#define DS1302_MINUTE0x82#define DS1302_HOUR0x84#define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C#define DS1302_RAM(X)(0xC0+(X)*2)voidDS1302InputByte(unsignedchard){unsignedchari;ACC=d;for(i=8;i>0;i--){DS1302_IO=ACC0;DS1302_CLK=1;DS1302_CLK=0;ACC=ACC>>1;DS1302_IO=ACC0;}}unsignedcharDS1302OutputByte(void){unsignedchari;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}voidWrite1302(unsignedcharucAddr,unsignedcharucDa){DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr);DS1302InputByte(ucDa);DS1302_CLK=1;DS1302_RST=0;}unsignedcharRead1302(unsignedcharucAddr){unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr|0x01);ucData=DS1302OutputByte();DS1302_CLK=1;DS1302_RST=0;return(ucData);}voidDS1302_SetProtect(bitflag){if(flag)Write1302(0x8E,0x10);elseWrite1302(0x8E,0x00);}voidDS1302_SetTime(unsignedcharAddress,unsignedcharValue){DS1302_SetProtect(0);Write1302(Address,((Value/10)<<4|(Value%10)));}voidDS1302_GetTime(SYSTEMTIME*Time){unsignedcharReadValue;ReadValue=Read1302(DS1302_SECOND);Time->Second=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);ReadValue=Read1302(DS1302_SECOND);Time->Minute=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);ReadValue=Read1302(DS1302_SECOND);Time->Hour=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);ReadValue=Read1302(DS1302_SECOND);Time->Day=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);ReadValue=Read1302(DS1302_SECOND);Time->Week=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);ReadValue=Read1302(DS1302_SECOND);Time->Month=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);ReadValue=Read1302(DS1302_SECOND);Time->Year=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);}unsignedchar*DataToBCD(SYSTEMTIME*Time){unsignedcharD[8];D[0]=Time->Second/10<<4+Time->Second%10;D[1]=Time->Minute/10<<4+Time->Minute%10;D[2]=Time->Hour/10<<4+Time->Hour%10;D[3]=Time->Day/10<<4+Time->Day%10;D[4]=Time->Month/10<<4+Time->Month%10;D[5]=Time->Week/10<<4+Time->Week%10;D[6]=Time->Year/10<<4+Time->Year%10;returnD;}voidDateToStr(SYSTEMTIME*Time){Time->DateString[0]=Time->Year/10+'0';Time->DateString[1]=Time->Year%10+'0';Time->DateString[2]='-';Time->DateString[3]=Time->Month/10+'0';Time->DateString[4]=Time->Month%10+'0';Time->DateString[5]='-';Time->DateString[6]=Time->Day/10+'0';Time->DateString[7]=Time->Day%10+'0';Time->DateString[8]='\0';}voidTimeToStr(SYSTEMTIME*Time){Time->TimeString[0]=Time->Hour/10+'0';Time->TimeString[1]=Time->Hour%10+'0';Time->TimeString[2]=':';Time->TimeString[3]=Time->Minute/10+'0';Time->TimeString[4]=Time->Minute%10+'0';Time->TimeString[5]=':';Time->TimeString[6]=Time->Second/10+'0';Time->TimeString[7]=Time->Second%10+'0';Time->TimeString[8]='\0';}/*uchar*WeekToStr(SYSTEMTIMETime){uinti;uchar*z;i=Time.Week;switch(i){case1:z="sun";break;case2:z="sun";break;case3:z="sun";break;case4:z="sun";break;case5:z="sun";break;case6:z="sun";break;case7:z="sun";break;}returnz;}*/voidInitial_DS1302(void){unsignedcharSecond;Second=Read1302(DS1302_SECOND);if(Second&0x80){DS1302_SetTime(DS1302_SECOND,0);}} voidDS1302_TimeStop(bitflag){unsignedcharData;Data=Read1302(DS1302_SECOND);DS1302_SetProtect(0);if(flag)Write1302(DS1302_SECOND,Data|0x80);elseWrite1302(DS1302_SECOND,Data&0x7F);}LCD_CHAR#ifndefLCD_CHAR_1602_2005_4_9#defineLCD_CHAR_1

温馨提示

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

评论

0/150

提交评论