电子设计大赛作品--51单片机的实时时钟制作_第1页
电子设计大赛作品--51单片机的实时时钟制作_第2页
电子设计大赛作品--51单片机的实时时钟制作_第3页
电子设计大赛作品--51单片机的实时时钟制作_第4页
电子设计大赛作品--51单片机的实时时钟制作_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、HI河北大学工商学院电子设计竞赛报告题目:使用DS12C887时钟芯片设计高精度时钟学 专 学 姓部业口,号名信息科学与工程学部电气一类2009480102田海茂2011年3月12日目录摘要系统组成与功能说明硬件电路设计与分析四程序流程说明附录1摘要本系统利用单片机(STC89C52和DS12C887时钟芯片实现对时间的控制。在1602液晶上显示年,月,日,星期,时,分,秒,并且按秒实时更新显示;具有闹铃报警功能;具 有更改功能,能任意更改时间;利用DS12C887自身掉电可继续走时的特性,实现断电时间不停,再次上电时时间仍准确显示在液晶上的功能。以上各种功能依据一定的联系,组成一个比较完整的

2、系统。系统组成与功能说明系统可划分为几个功能模块,如图1所示。DS12C8874液晶屏STC89C52通过STC89C52单片机按键的扫描函数实现对更改时间功能的控制。在外部断电情况下DS12C887仍能继续走时,再次上电时将准确时间传给单片机,从而实现时间不停的功能,当闹钟时间到时,DS12C887发出中断申请,单片机控制液晶停止走时,通过蜂鸣器发出 闹铃声,并且按键与蜂鸣器相连,按下按键的同时蜂鸣器会发出响声。采用个性化的液晶 显示,当开始供电时以屏幕的平移为起始,时间信息从右往左平移至中央。硬件电路设计与分析硬件电路原理图如下所示A最小系统图P1:PUP12P13PHPI 5JWGF5

3、H御閔; 时gi回和ID1.JK1 幅囲? Jicz 咛 呻歼JIE5KS yCiMS ;AC*K"心才 iiissmGSDc:!;匸帕劭卫 11一ip晾"M'l”r;vu;-h .-OJPCHIObF的平:1 P;班刃EA7?»KI丸 ISTG:*3"应卿側討IJAI11F15 dU如I 财P” LUe:l r'AEiTf:?u1:辭e® 珂no LL JtLlKDG,JJ"5?1602液晶与单片机连接图煜一 R RIm團9iLCD1maiSLfi,M】泊Hm 題龙.S:25*S2SMALIXTAL:M M阿P 口

4、EAX2POJA&JtSTZMtP 口卩叮恨"fseTIMPZifAlDFJ4/A13EAPSiAflPinPSjtfAUPlJfXt*旳AR刈pi.iFiimslT1rajiHTDPinfSillrnPl 4amri5忖电口iMfipifiiiFIJFl.TFeU1FB P D,益眾益一益一武DS12C887与单片机连接图FPl 3Pl 3PI4PBP16 n?r?m IKTOT110 ft03l tt/VP1112 ftEsn?朗 FOI poi FEB P斟 PMPOT yifl rsi FSi PM !*34 m p” MT UD TIDST莎IXiZXLR押mtiJ

5、- ABC 闻 h ADI 啸fiT T 可TF心IfM AMAM ADJHCNCPS8-JPinALEVk 15lotnCCHDDS12C3ST以STC89C52为核心制作出单片机最小系统。1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,符合本作品需要。DS12C887具有闹铃以及外部掉电自身继续走时功能,为理想的时钟芯片。选择蜂鸣器,通过用三极管对其放大,实现所想要的功能。选择RS232,使得计算机的9.6V的电压能够与该系统 5V得以匹配,与此同时也实现了我 们直接用电脑直接对其系统直接拷贝程序。程序流程说明初始化I按键检查从DS12C887读取数据液晶显示数据图主程序流

6、程图附件1#in clude<reg52.h> #defi ne uchar un sig ned char #defi ne uint un sig ned intsbit rs=P 3八5;sbit Icde n=P 3八4;sbit s1= P3八6;/功能键sbit s2二P 3八1;/增大键sbit s3二P 3八2;/减小键sbit beep二P 2八3;/蜂鸣器sbit dscs=PIM;sbit dsas=P1八5;sbit dsrw =P 1八6;sbit dsds=P1八7;sbit dsirq 二P 3八3;uchar coun t,s1 nu mflag;b

7、it flag1;char miao,shi,fe n,n ia n,yue,ri,week;液晶固定显示uchar code table=" 20 - -"/ uchar code table2=" Hello every on e!"uchar code table1="Huchar code table3="Nice to meet you!"void write_ds(uchar,uchar);void set_alarm(uchar,uchar,uchar);uchar read_ds(uchar);void se

8、t_time();uchar amiao,ashi,afe n;void delay(ui nt z)/延时函数uint x,y;for(x二z;x>O;x-)for(y=110;y>0;y-);void di()/按键时蜂鸣器发音bee p=0;delay(IOO);beep=1;void didi() /闹钟时蜂鸣器发音bee p=O;delay(50);beep=1;delay(100);bee p=0;delay(50);beep=1;void ini t()/程序初始化rs=O;Icde n=0;PO 二com;delay(5);Icde n=1;delay(5);写液晶

9、具体数据函数Icde n=0;void write_date(uchar date)/rs=1;lcde n=0;P0=date;delay(5);lcde n=1;delay(5);lcde n=0;uchar num;EA=1;/打开总中断EX1 = 1;/开外部中断1IT1 = 1;/设置负跳变沿触发方式Icde n=0;week=1;/ set_time();/给 DS12C887设置时间函数set_alarm(2,2,10);/ 设置闹铃函数write_ds(0x0B,0x26);/ 设置 DS12C887 24小时模式write_com(0x38);/1602 液晶初始化write

10、_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<16;num+)/ 写入液晶平移内容write_date(table2 nu m);delay(5);write_com(0x80+0x40);for(num=0; num <16; nu m+)write_date(table3 nu m);delay(5);wnte_com(0x80+0x10);/写入液晶固定内容for(num=0; num <16; nu m+)write_date(table nu m);delay(5);

11、write_com(0x80+0x50);for(num=0; num <16; nu m+)write_date(table1 nu m);在液晶上写入时分秒delay(5);void write_sfm(uchar add,uchar date)/uchar shi,ge;shi二date/10;ge=date%10;write_com(0x80+0x50+add);write_date(0x30+shi);在液晶上写入年月日write_date(0x30+ge);void write_sfm1(uchar add,uchar date)/uchar shi,ge;shi=date/

12、10;ge=date%10;write_com(0x80+0x10+add);write_date(0x30+shi);write_date(0x30+ge);void write_week(uchar we)/星期函数write_com(0x80+0x10+13);switch(we)case 1:write_date('M');delay(5);write_date('0');delay(5);write_date('N');break;case 2:write_date('T');delay(5);write_date(&#

13、39;U');delay(5);write_date('E');break;case 3:write_date('W);delay(5);write_date('E');delay(5);write_date(D);break;case 4:write_date('T');delay(5);write_date('H');delay(5);write_date('U');break;case 5:write_date('F');delay(5);write_date('R&#

14、39;);delay(5);write_date(T);break;case 6:write_date('S');delay(5);write_date('A');delay(5);write_date('T');break;case 7:write_date('S');delay(5);write_date('U');delay(5);write_date('N');break;void keysca n()if(flag1=1)/ 闹铃响delay(5);if(s2=0)if(s2=0)whil

15、e(!s2);di();flag1=0;/中断闹铃if(s3=0)delay(5);if(s3=0)while(!s3);di();flag1=0;/中断闹铃if(s1=0)delay(5);if(s1=0) s1nu m+;flag=1;flag1=0;while(!s1);di();if(s1 num=1)write_com(0x80+0x50+10);write_com(0x0f);/光标停止位置不断闪烁if(s1 num=2)write_com(0x80+0x50+7);if(s1 num=3)write_com(0x80+0x50+4);if(s1 num=4)wnte_com(0x

16、80+0x10+13);if(s1 num=5)write_com(0x80+0x10+10);if(s1 num=6)write_com(0x80+0x10+7);if(s1 num=7)write_com(0x80+0x10+4);if(s1 num=8)s1num=0;write_ds(0,miao);/ 将此时时间信息写入DS12C887write_ds(2,fe n);write_com(0x0c);/ 光标停止闪烁wnte_ds(4,shi);write_ds(6,week);write_ds(7,ri);write_ds(8,yue);write_ds(9 ,nian);flag

17、=O;if(s1 num!=O)if(s2=0)delay(1);if(s2=0)while(!s2);di();miao+;if(s1 num=1)if(miao=60)miao=0;write_sfm(10,miao);/将变化后的时间写入液晶wnte_com(0x80+0x50+10);if(s1 num=2)fen+;if(fen=60)fen=0;write_sfm(7,fe n);write_com(0x80+0x50+7);if(s1 num=3)shi+;shi=0;wnte_com(0x80+0x50+4);if(shi=24)write_sfm(4,shi);if(s1 n

18、um=4)week+;if(week=8)week=1;wnte_week(week);wnte_com(0x80+0x10+13);if(s1 num=5)ri+;if(ri=32)ri=1;write_sfm1(10,ri);write_com(0x80+0x10+10);if(s1 num=6)yue+;yue=1;if(yue=13)write_sfm1(7,yue);write_com(0x80+0x10+7);if(s1 num=7)nian+;if(n ia n=100)nian=0;write_sfm1(4, nian);write_com(0x80+0x10+4);if(s3

19、=0)delay(1);if(s3=0) di();if(s1 num=1)while(!s3);miao-;if(miao=-1)miao=59;write_sfm(10,miao);wnte_com(0x80+0x50+10);if(s1 num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fe n);write_com(0x80+0x50+7);if(s1 num=3)shi-;if(shi=-1)shi=23;wnte_com(0x80+0x50+4);write_sfm(4,shi);if(s1 num=4)week-;if(week=O)week=7;w

20、nte_week(week);wnte_com(0x80+0x10+13);if(s1 num=5)ri-;if(ri=0)ri=31;write_sfm1(10,ri);write_com(0x80+0x10+10);if(s1 num=6)yue-;yue=12;if(yue=0)write_sfm1(7,yue);write_com(0x80+0x10+7);if(s1 num=7)nia n-;if(nian=-1)yue=99;write_sfm1(4, nian);写入程序函数write_com(0x80+0x10+4);void write_ds(uchar add,uchar

21、date)/ DS12C887dscs=0;dsas=1;dsds=1;dsrw=1;PO二add;dsas=O;dsrw=0;PO二date;dsrw=1;dsas=1;dscs=1;uchar read_ds(uchar add)/ 从 DS12C88冲读取数据uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=O;PO=add;dsas=O;dsds=O;PO=Oxff;ds_date=PO;dsds=1;dsas=1;dscs=1;retur n ds_date;void set_time()/ 设置时间write_ds(4,1);write_ds(2,2);write_ds(6,3);write_ds(7,4);write_ds(8,5);write_ds(9,6);设置闹铃void set_alarm(uchar ashi,uchar afen, uchar amiao)/write_ds(1,amiao);write_ds(3,afe n);write_ds(5,ashi);void mai n()uchar nu m,bo=0;ini t();delay(4000);fo

温馨提示

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

评论

0/150

提交评论