使用DS12C887时钟芯片设计高精度时钟

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1电子设计竞赛报告题目:使用DS12C887时钟芯片设计高精度时钟学部信息科学与工程学部专业电气一类学号2009480102姓名田海茂2011年3月12日装订线河北大学工商学院2目录摘要…………………………………………………3一系统组成与功能说明………………………………3二硬件电路设计与分析…………………………………2三程序流程说明…………………………………………3四实物图…………………………………………6附录1……………………………………………………….73摘要本系统利用单片机(STC89C52)和DS12C887时钟芯片实现对时间的控制。在1602液晶上显示年,月,日,星期,时,分,秒,并且按秒实时更新显示;具有闹铃报警功能;并可任意更改时间;采用个性化的液晶显示,当开始供电时以屏幕的平移为起始,时间信息从右往左平移至中央;利用DS12C887自身掉电可继续走时的特性,实现断电后时间不停,再次上电时时间仍准确显示在液晶上的功能。以上各种功能依据一定的联系,组成一个比较完整的系统。一系统组成与功能说明系统可划分为几个功能模块,如图1所示。图1通过STC89C52单片机按键的扫描函数实现对更改时间功能的控制;在外部断电情况下DS12C887仍能继续走时,再次上电时将准确时间传给单片机,从而实现时间不停的功能;具有闹铃报警功能,通过蜂鸣器发出“滴滴”的闹铃声,当有任意键被按下时闹铃停止;采用个性化的液晶显示,当开始供电时以屏幕的平移为起始,时间信息从右往左平移至中央;每次按键均会发出“滴”的提示音;在1602液晶上显示年,月,日,星期,时,分,秒,并且按秒实时更新显示。单片机STC89C52DS12C887按键蜂鸣器液晶屏4二硬件电路设计与分析硬件电路原理图如下所示最小系统图51602液晶与单片机连接图1.液晶1,2端为电源,15,16为背光电源,为防止直接加5V电压烧坏背光灯,在15脚串联10欧电阻限流。2.液晶3端为液晶对比度调节端,通过一个10K欧电位器接地来调节液晶显示对比度。DS12C887与单片机连接图1.IRQ为DS12C887的中断申请端,必须和单片机的外部中断引脚相联。注:P0同时与液晶和DS12C887相联,这样复用并不会发生冲突,因为单片机在操作液晶的时候是不会操作DS12C887的,它们都有各自的片选信号。三程序流程说明RWDSCSASRSTIRQMODVccVssAD0AD2AD1AD4AD3AD5AD7AD6DS7DS8DS5DS6VccINTID0D1D2D3D4D5D6D7DS12C887初始化6图主程序流程图四实物图按键检查从DS12C887读取数据液晶显示数据7附件1#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitrs=P3^5;//液晶数据命令选择断sbitlcden=P3^4;//液晶使能端sbits1=P3^6;//功能键sbits2=P3^1;//增大键sbits3=P3^2;//减小键sbitbeep=P2^3;//蜂鸣器sbitdscs=P1^4;//芯片片选端sbitdsas=P1^5;//地址选通输入端sbitdsrw=P1^6;//写允许输入sbitdsds=P1^7;//读允许输入8sbitdsirq=P3^3;//终端请求输出ucharcount,s1num,flag;bitflag1;charmiao,shi,fen,nian,yue,ri,week;ucharcodetable[]=20--;//液晶固定显示ucharcodetable1[]=::;ucharcodetable2[]=Helloeveryone!;ucharcodetable3[]=Nicetomeetyou!;voidwrite_ds(uchar,uchar);voidset_alarm(uchar,uchar,uchar);ucharread_ds(uchar);voidset_time();ucharamiao,ashi,afen;voiddelay(uintz)//延时函数{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voiddi()//按键时蜂鸣器发音{beep=0;delay(100);9beep=1;}voiddidi()//闹钟时蜂鸣器发音{beep=0;delay(50);beep=1;delay(100);beep=0;delay(50);beep=1;}voidwrite_com(ucharcom)//写液晶命令函数{rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}10voidwrite_date(uchardate)//写液晶具体数据函数{rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}voidinit()//程序初始化{ucharnum;EA=1;//打开总中断EX1=1;//开外部中断1IT1=1;//设置负跳变沿触发方式lcden=0;week=1;//set_time();//给DS12C887设置时间函数11set_alarm(2,2,10);//设置闹铃函数write_ds(0x0B,0x26);//设置DS12C88724小时模式write_com(0x38);//1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//定位数据指针第一行第一列for(num=0;num16;num++)//写入液晶平移内容{write_date(table2[num]);delay(5);}write_com(0x80+0x40);for(num=0;num16;num++){write_date(table3[num]);delay(5);}write_com(0x80+0x10);//写入液晶固定内容for(num=0;num16;num++){write_date(table[num]);12delay(5);}write_com(0x80+0x50);for(num=0;num16;num++){write_date(table1[num]);delay(5);}}voidwrite_sfm(ucharadd,uchardate)//在液晶上写入时分秒{ucharshi,ge;shi=date/10;ge=date%10;write_com(0x80+0x50+add);write_date(0x30+shi);write_date(0x30+ge);}voidwrite_sfm1(ucharadd,uchardate)//在液晶上写入年月日{ucharshi,ge;13shi=date/10;ge=date%10;write_com(0x80+0x10+add);write_date(0x30+shi);write_date(0x30+ge);}voidwrite_week(ucharwe)//星期函数{write_com(0x80+0x10+13);switch(we){case1:write_date('M');delay(5);write_date('O');delay(5);write_date('N');break;case2:write_date('T');delay(5);write_date('U');delay(5);write_date('E');break;case3:14write_date('W');delay(5);write_date('E');delay(5);write_date('D');break;case4:write_date('T');delay(5);write_date('H');delay(5);write_date('U');break;case5:write_date('F');delay(5);write_date('R');delay(5);write_date('I');break;case6:write_date('S');delay(5);write_date('A');delay(5);write_date('T');break;case7:write_date('S');delay(5);write_date('U');delay(5);15write_date('N');break;}}voidkeyscan(){if(flag1==1)//闹铃响{if(s2==0){delay(5);if(s2==0){while(!s2);di();flag1=0;//中断闹铃}}if(s3==0){delay(5);16if(s3==0){while(!s3);di();flag1=0;//中断闹铃}}}if(s1==0){delay(5);if(s1==0){s1num++;flag=1;flag1=0;while(!s1);di();if(s1num==1){17write_com(0x80+0x50+10);write_com(0x0f);//光标停止位置不断闪烁}if(s1num==2){write_com(0x80+0x50+7);}if(s1num==3){write_com(0x80+0x50+4);}if(s1num==4){write_com(0x80+0x10+13);}if(s1num==5){write_com(0x80+0x10+10);}if(s1num==6){18write_com(0x80+0x10+7);}if(s1num==7){write_com(0x80+0x10+4);}if(s1num==8){s1num=0;write_com(0x0c);//光标停止闪烁write_ds(0,miao);//将此时时间信息写入DS12C887write_ds(2,fen);write_ds(4,shi);write_ds(6,week);write_ds(7,ri);write_ds(8,yue);write_ds(9,nian);flag=0;}}}19if(s1num!=0){if(s2==0){delay(1);if(s2==0){while(!s2);di();if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);//将变化后的时间写入液晶write_com(0x80+0x50+10);}if(s1num==2){fen++;20if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x50+7);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x50+4);}if(s1num==4){week++;if(week==8)week=1;write_week(week);write_com(0x80+0x10+13);}if(s1num==5)21{ri++;if(ri==32)ri=1;write_sfm1(10,ri);write_com(0x80+0x10+10);}if(s1num==6){yue++;if(yue==13)yue=1;write_sfm1(7,yue);write_com(0x80+0x10+7);}if(s1num==7){nian++;if(nian==100)nian=0;write_sfm1(4,nian);write_com(0x80+0x10+4);22}}}if(s3==0){delay(1);if(s3==0){while(!s3);di();if(s1num==1){

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功