![DS12C887电子芯片的应用本科毕业设计_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-7/11/791ead2d-cb87-4ca1-9437-bd8f5d0f2d92/791ead2d-cb87-4ca1-9437-bd8f5d0f2d921.gif)
![DS12C887电子芯片的应用本科毕业设计_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-7/11/791ead2d-cb87-4ca1-9437-bd8f5d0f2d92/791ead2d-cb87-4ca1-9437-bd8f5d0f2d922.gif)
![DS12C887电子芯片的应用本科毕业设计_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-7/11/791ead2d-cb87-4ca1-9437-bd8f5d0f2d92/791ead2d-cb87-4ca1-9437-bd8f5d0f2d923.gif)
![DS12C887电子芯片的应用本科毕业设计_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-7/11/791ead2d-cb87-4ca1-9437-bd8f5d0f2d92/791ead2d-cb87-4ca1-9437-bd8f5d0f2d924.gif)
![DS12C887电子芯片的应用本科毕业设计_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-7/11/791ead2d-cb87-4ca1-9437-bd8f5d0f2d92/791ead2d-cb87-4ca1-9437-bd8f5d0f2d925.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、福州职业技术学院毕业设计设计题目 ds12c887 时钟芯片的应用 系 别 技 术 工 程 系 年级专业 09应用电子技术(闽台) 学 号 姓 名 指导教师 倪 榕 生 职 称 讲 师 2012年3月30日目录内容摘要2关键词2一、ds12c887简介 2(一)器件特性 2(二)引脚功能 2(三)应用 5二、ds12c887时钟芯片在设计中的应用7(一)概述 7(二)系统硬件的设计 7(三)系统的软件设计 8(四)主要源程序代码如下 9结语 16参考文献 17附录 18ds12c887时钟芯片的应用内容摘要 电子万年历在家庭居室、学校 、车站和广场使用越来越广泛 ,给人们的生活 、学习、工作带
2、来极大的方便。针对 以往 的电子万年历断 电后需重新调整时间与 日期,且计时误差大的现象 。本系统设计采用实时钟芯片 (ds12c887)作为计时器件 ,该芯片 内部 自带晶体振荡器 ,这样就有效的保证 了计时的精确性 ,并且内部 自带锂 电池使得在断情况能继续更新时间信息。关键词 万年历 时钟芯片ds12c887一 ds12c887简介(一) 器件特性ds12c887 实时时钟芯片功能丰富,可以用来直接代替 ibm pc 上的时钟日历芯片 ds12887,同时,它的管脚也和 mc146818b、ds12887 相兼容。由于 ds12c887 能够自动产生世纪、 年、月、日、时、分、秒等时间信
3、息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;ds12c887 中自带有锂电 池,外部掉电时,其内部时间信息还能够保 持 10 年之久;对于一天内的时间记录,有12 小时制和 24 小时制两种模式。在 12 小时制模式中,用 am 和 pm 区分上午和下午;时间的表示方法也有两种,一种用二进制数 表示,一种是用 bcd 码表示;ds12c887 中带有 128 字节 ram,其中有 11 字节 ram 用来存储时间信息,4 字节 ram 用来存储ds12c887 的控制信息,称为控制寄存器,113 字节通用 ram 使用户使用;此外用户还 可对 ds12c887 进行编程以
4、实现多种方波输 出,并可对其内部的三路中断通过软件进行 屏蔽。(二)引脚功能ds12c887 的引脚排列如图 1 所示,各管脚的功能说明如下:gnd、vcc:直流电源,其中 vcc 接+5v 输入,gnd 接地,当 vcc 输入为+5v 时,用 户可以访问 ds12c887 内 ram 中的数据,并可对其进行读、写操作;当 vcc 的输入小于+4.25v 时,禁止用户对内部 ram 进行读、写操作,此时用户不能正确获取芯片内的时间信 息;当 vcc 的输入小于+3v 时,ds12c887 会自动将电源发换到内部自带的锂电池上,以保证 内部的电路能够正常工作。(1)mot:模式选择脚,ds12c
5、887 有两种工作模式,即 motorola 模式和 intel 模式,当 mot 接 vcc 时,选用的工作模式是 motorola 模式,当 mot 接 gnd 时,选用的是 intel 模式。本 文主要讨论 intel 模式。(23)sqw:方波输出脚,当供电电压 vcc 大于 4.25v 时,sqw 脚可进行方波输出,此时用 户可以通过对控制寄存器编程来得到 13 种方波信号的输出。ad0ad7:复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出 现在 ad0ad7 上的是地址信息,可用以选通 ds12c887 内的 ram,总线周期的后半部分出 现在 ad0ad7 上
6、的数据信息。(14)as:地址选通输入脚,在进行读写操作时,as 的上升沿将 ad0ad7 上出现的地址信 息锁存到 ds12c887 上,而下一个下降沿清除 ad0ad7 上的地址信息,不论是否有效, ds12c887 都将执行该操作。(17)ds/rd:数据选择或读输入脚,该引脚有两种工作模式,当 mot 接 vcc 时,选用 motorola 工作模式,在这种工作模式中,每个总线周期的后一部分的 ds 为高电平,被称为数 据选通。在读操作中,ds 的上升沿使 ds12c887 将内部数据送往总线 ad0ad7 上,以供外 部读取。在写操作中,ds 的下降沿将使总线 ad0ad7 上的数据
7、锁存在 ds12c887 中;当 mot 接 gnd 时,选用 intel 工作模式,在该模式中,该引脚是读允许输入脚,即 read enable。(15)r/w:读/写输入端,该管脚也有 2 种工作模式,当 mot 接 vcc 时,r/w 工作在 motorola 模式。此时,该引脚的作用是区分进行的是读操作还是写操作,当 r/w 为高电平时 为读操作,r/w 为低电平时为写操作;当 mot 接 gnd 时,该脚工作在 intel 模式,此时该作 为写允许输入,即 write enable。(13):片选输入,低电平有效。(19):中断请求输入,低电平有效,该脚有效对 ds12c887 内的
8、时钟、日历和 ram 中的 内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,reset 可以直接接 vcc,这样可以保证 ds12c887 在掉电时,其内部控制寄存器不受影响。在 ds12c887 内有 11 字节 ram 用来存储时间信息,4 字节用来存储控制信息,其具体垢 地址及取值如表 1 所列。(三) 应用在各种设备、家电、仪器、工业控制系统中,可以很容易地用 ds12c887 来组成时间获取 单元,以实现各种时间的获取。图 2 是用 8031 单片机和 ds12c887 构成的时间获取电路图, 其中 ds12c887 的基地址为 7f00h,相应的程序采用 c51 语言
9、编写(以 intel 工作模式为 例)。由 8031 单片机和 ds12c887 构 成的时间获取电路的初始化程序如 下:xbyte0x7f00+0x0b=0x82; xbyte0x7f00+0x0a=0xa0; xbyte0x7f00+0x0a=0x20; xbyte0x7f00+0x0b=0x02;/*所有的中断禁止,24 小时制,bcd 码模式*/以下均获取时间程序:unsigned char data t-century;unsigned char data t-yearunsigned char data t-month; unsigned char data t-date; uns
10、igned char data t-week; unsigned char data t-hour; unsigned char data t-minute;unsigned char data t-second;if(xbyte7f00+0x0a&0x80)!=0)t-century=xbyte0x7f00+0x32;/*读取世纪*/t-year=xbyteox7f00+0x09;/*读取年份*/t-month=xbyteox7f00+0x08;/*读取月份*/t-date=xbyteox7f00+0x07;/*读取日期*/t-week=xbyteox7f00+0x06;/*读取星期几*/t
11、-hour=xbyteox7f00+0x04;/*读取小时*/t-minute=xbyteds12887+0x02;/*读取分钟*/t-second=xbyteox7f00+0x00;/*读取秒二 ds12c887时钟芯片在设计电子万年历中的应用(一)概述电子万年历在家庭居室、学校 、车站和广场使用越来越广泛 ,给人们的生活 、学习、工作带来极大的方便。针对 以往 的电子万年历断 电后需重新调整时间与 日期,且计时误差大的现象 。本系统设计采用实时钟芯片 (ds12c887a)作为计时器件 ,该芯片 内部 自带晶体振荡器 ,这样就有效的保证 了计时的精确性 ,并且内部 自带锂 电池使得在断情况
12、能继续更新时间信息。本设计采用at89s52作为主控制器,为了提高电路的实用性加入温度测量 电路、报时和闹钟功能。系统 的工作原理是 :主控制器每隔一段 时间 (小于一秒钟 )读一次时钟芯片 的内部寄存器的值 ,将读出的日历、时间信息实时的显示在led数码显示器上。同时,主控制器不断的扫描按键 电路和温度测量电路,当有键按下时,识别出按键的值并调整相应的时间或日历的值再写入时钟芯片内部。温度数据由测量电路(ds1280)获得的温度值送入显示 电路显示。 (二) 系统硬件的设计 21电源电路 为了减少电路成本,本系统 电源 电路 由变压器变 压、三端集成稳压 (l7805)电路产生5v,具有简单
13、、 可靠、价格低廉等特点。 22主控制器 主控制器采用atmel公司的最新系列单片机产 品 at89s52。该单片机除了拥有mcs一51系列单片机的所有 ; 优点外,内部还具有8kb的在系统可编程flash存储器, ! 低功耗的空闲和掉电模式,极大的降低 了电路的功耗。 另外,还具有一个看 门狗电路,为电路的可靠工作提供 了更大的保证。 23数码管显示电路 显示电路采用具有 高亮度、使用寿命长、价格低 廉等特 点的led数码管。整个显示 电路由led数码管和 显示驱动 电路和译码 电路构成 。由于本系统 中显示 的 内容较 多,共需要 16个数码管,分别用八位显示年 、 月、日,四位显示时间,
14、二位 显示星期,二位显示温 度 。为了节省控制器的资源,在控制器和 显示器之间 加入一个译码 电路使本来需要 16根控制线的电路变成 只需 四根控制线 ,极大的节省了系统资源 。该译码器 由两个38译码器构成。 24按键与温度测量电路 本系统为了使 电路更简单,按键 电路只设计了个按键,分别是设置、+、一三个键用来调整 日历以及时钟。 本系统为 了提高 电路的实用 性,增加 了一个温度显示功能。该系统的温度测量电路采用dallas公司的ds1280。该器件 由于其具有价格低廉 电路简单 、测量精确等优点。 25音频信号产生及驱动电路 本电路的功能是接收控制 电路发送来 的整点报 时及定时信号,
15、根据系统设定产生不同频率的音频信号, 由驱动 电路加以放大驱动扬声器发 出声音,从而实现整点报时及闹钟的功能。 (三) 系统的软件设计 本系统程序 由主程序、中断服务函数和 多个子 函数构成。主 函数主要完成各子函数和 中断函数的初始化 。定时中断函数主要完成时钟 芯片的定时扫描 及键盘扫描。时钟芯片的读 写函数主要是将 时间、 日历信息读 出来,并把要修 改的具体值写入时钟芯片 内部。相关程序流程图如下:(四)主要源程序代码如下: #itic1ude #itic1ude #defitie int enab1e ea=1 #defitie urlsigned char uchar #defit
16、ie urlsigned int uint *函数声明* void read rtc(void):void businitialize(void): void di splay(void):*显示函数*/void di sca1endar(uchar bit shvoid dis t dt(uchar bit shiel void int initialize(void): void timero initialize(void): * static int data year=o: static uchar data month=o: static uchar data day=o: sta
17、tic uchar data weekday=o: static uchar data hour=o: static uchar data miflute=o: static uchar data counter=o: static uchar data a register=ostatic uchar data b register=o#defitie add data p1 sbit cs= p3 7: sbit as= p3 6: sbit r 71- p3 5; sbit ds= p3 4: sbit add 138= p2 4: sbit a 138= p2 7: sbit b 13
18、8= p2 6: sbit c 138= p2 5: sbit set= p2 3: sbit up= p2 2: sbit down= p2 1: sbit 1edour= p2 0: sbit do= p3 0: #defitie disp1ay data po #defitie a register oxoa #defitie b register oxob #def i tie century reg 0x32 #def i tie year reg ox09 #defitie month reg ox08 #defitie day reg oxo7 #defitie weekday
19、reg ox06 #defi tie hour reg ox04 #defitie minute reg ox02 #def i tie second reg oxo0 static uchar data register addstat ic uchar set c1ock=o: static bit bdata va1ue set=1: static bit bdata f set=o: static bit bdata f set corl=o: star ic uchar up clock=o: static bit bdata va1ue up=1:static bit bdata
20、f _ up=o:static bit bdata f _upcon=o; static uchar down _clock=o; static bit bdata value_down=1: static bit bdata f _down=o: static bit bdata f _down_con=o; uchar code tab _dis11=oxco,oxf9,oxa4,oxbo,0x99, 0x92,0x82,oxf8,ox80,ox90,oxff):*消隐信号* void main(void)主函数 uchar data verdict _set=oapart_year,ap
21、art _century;int _enable; 开总中断 timero _initialize 0:定时器0初始化 int _initialize0; 外部中断初始化whi1e(1) setif (f _con=1)set键处理 f _set _con=o: reg i ster _ add+: i f (register_add6) reg i ster _ add=o: ) if (f_up_con=1)up键处理 f _up _con=o;write _timing(b _register,ox8f): switch (register add) case 0:break: case
22、 1: year+: i f (year9999)year=o: apart_year=(yearl0): write_timing(year_ reg apart_year): write_timing(century_reg,apart_century): break: case 2: month+: i f (month12)month=l; write_timing(month_reg,month);break; case 3: day+: if (day31)day=l: write_timing(day_reg,day): break: case 4: hour+: i f (ho
23、ur23) hour=o: write_timing(hour_reg,hour): break: case 5: minute+: if (minute59)minute=o: write_timing(minute_reg,minute) break: case 6: weekday+; if (weekday7)weekday=1: write_timing(weekday_reg,weekday) break: ) write_timing(b_register,oxof); switch (register add) case 0:break: case 1: year一一: i f
24、 (yearo) year=9999: apart_century=(year10): apart_year=(yearlo); write_timing(year_reg ,apart_year) writ _timing(century_reg, apart_century) break: case 2: month一一: if (month1)month=l2: write_timing(month_reg,month); break; case 3: day一一: if (day1)day=31: write_timing(day_ reg,day): break: case 4: h
25、our一一: if (hour=255)hour=23: write_timing(hour_reg,hour): break: case 5: minute一一: if (minute=255)minute=59: write_timing(minute_reg,minute) break: case 6: weekday一一: if (weekday1)weekday=7; write_timing(weekday_reg,weekday);break; write_timing(b_register,oxof): display():调用显示函数 void read_rtc(void)读
26、时钟芯片函数 uchar verdict_uip,century, comp_month,comp_day, comp_hour,comp_minute, comp_weekday: int comp_year: do verdict_uip=read_timing(oxoa): verdict_uip=1: century=read_timing(century_reg): comp_year=lo*century+read_timing(year_reg) comp_month=read_timing(month_reg): comp_day=read_timing(day_reg): c
27、omp_weekday=read_timing(weekday_reg): comp_hour=read_timing(hour_reg): comp_minute=read_timing(minute_reg): if (comp_year-year!=0)year=comp_year: month; if (comp_ monthmonth!=0)month=comp_day: if (comp_day-day!=0)day=comp_day;if (comp_weekday!=0)weekday=comp_weekday;if(comp_hour-hour!=0)hour=comp_ho
28、ur;if(comp_minute-minute!=0)minute=comp_minute; 木木木定时器0中断函数木木木 void timero(void) interrupt 1 using 1 tro=o; tho=oxfd: tlo=oxo0: tro=1: counter+: if (counter=l50) read rtc 0: counter=o: 结语 这次的毕业设计是对我大学三年里所学知识的考核和总结,考察了我对所学基础知识和专业知识的一种综合应用能力,在这几个月里通过我自己的努力以及倪榕生老师的悉心指导,本着严谨求实,开拓创新的精神完成了这次毕业设计。在这次毕业设计中让
29、我学会了把书本上的知识应用到了实际中来,在实践中加深了对所学知识理解,真正的理解了理论可以指导实践,实践可以加深对理论的理解这句话。虽然在这毕业设计中有遇到过不少的问题,但是在我自己的努力之下,在老师的悉心帮助之下都一一的解决了,在解决问题的同时也提高了自己分析问题的能力,增加了不少宝贵的经验,学习到了书本上没有的东西。在此要感谢倪榕生老师对我悉心的指导,感谢老师们给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,
30、相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。参考文献1、刘守义.单片机应用技术.西安电子科技大学出版社.2007.82、白延敏.51单片机典型系统开发实例.电子工业出版社.2009.1附录 时钟芯片ds12c887的驱动程序#include /* 命令常量定义 */ #define cmd_start_ds12c887 0x20 /* 开启时钟芯片 */ #define cmd_start_oscillator 0x
31、70 /* 开启振荡器, 处于抑制状态 */ #define cmd_close_ds12c887 0x30 /* 关掉时钟芯片 */ /* 所有的置位使用或操作,清除使用与操作 */ #define mask_setb_set 0x80 /* 禁止刷新 */ #define mask_clr_set 0x7f /* 使能刷新 */ #define mask_setb_dm 0x04 /* 使用hex格式 */ #define mask_clr_dm 0xfb /* 使 用bcd码格式 */ #define mask_setb_2412 0x02 /* 使 用24小时模式 */ #define
32、 mask_clr_2412 0xfd /* 使用12小时模 式 */ #define mask_setb_dse 0x01 /* 使用夏令时 */ #define mask_clr_dse 0xfe /* 不使用夏令时 */ /* 寄存器地址通道定义 */ xdata char chsecondschannel _at_ 0xdf00; xdata char chminuteschannel _at_ 0xdf02; xdata char chhourschannel _at_ 0xdf04; xdata char chdofwchannel _at_ 0xdf06; xdata char
33、chdatechannel _at_ 0xdf07; xdata char chmonthchannel _at_ 0xdf08; xdata char chyearchannel _at_ 0xdf09; xdata char chcenturychannel _at_ 0xdf32; xdata char chrega _at_ 0xdf0a; xdata char chregb _at_ 0xdf0b; xdata char chregc _at_ 0xdf0c; xdata char chregd _at_ 0xdf0d; /* 函数声明部分 */ void startds12c887
34、(void); void closeds12c887(void); void initds12c887(void); unsigned char getseconds(void); unsigned char getminutes(void); unsigned char gethours(void); unsigned char getdate(void); unsigned char getmonth(void); unsigned char getyear(void); unsigned char getcentury(void); void settime(unsigned char
35、chseconds,unsigned char chminutes,unsigned char chhours); void setdate(unsigned char chdate,unsigned char chmonth,unsigned char chyear); /* 函数功能:该函数用来启动时钟芯片工作 应用范围:仅在时钟芯片首次使用时用到一次 入口参数: 出口参数: */ void startds12c887(void) chrega = cmd_start_ds12c887; /* 函数功能:该函数用来关闭时钟芯片 应用范围:一般用不到 入口参数: 出口参数: */ void
36、closeds12c887(void) chrega = cmd_close_ds12c887; void initds12c887() startds12c887(); chregb = chregb | mask_setb_set; /* 禁止刷新 */ chregb = chregb & mask_clr_dm | mask_setb_2412 & mask_clr_dse; /* 使用bcd码格式、24小时模式、不使用 夏令时 */ chcenturychannel = 0x21; /* 设置为21世纪 */ chregb = chregb & mask_clr_set; /* 使能刷
37、新 */ /* 函数功能:该函数用来从时钟芯片读取秒字节 应用范围: 入口参数: 出口参数: */ unsigned char getseconds(void) return(chsecondschannel); /* 函数功能:该函数用来从时钟芯片读取分字节 应用范围: 入口参数: 出口参数: */ unsigned char getminutes(void) return(chminuteschannel); /* 函数功能:该函数用来从时钟芯片读取小时字节 应用范围: 入口参数: 出口参数: */ unsigned char gethours(void) return(chhoursch
38、annel); /* 函数功能:该函数用来从时钟芯片读取日字节 应用范围: 入口参数: 出口参数: */ unsigned char getdate(void) return(chdatechannel); /* 函数功能:该函数用来从时钟芯片读取月字节 应用范围: 入口参数: 出口参数: */ unsigned char getmonth(void) return(chmonthchannel); /* 函数功能:该函数用来从时钟芯片读取年字节 应用范围: 入口参数: 出口参数: */ unsigned char getyear(void) return(chyearchannel); /* 函数功能:该函数用来从时钟芯片读取世纪字节 应用范围: 入口参数: 出口参数: */ unsigned char getcentury(void) return(chcenturychannel); /* 函数功能:该函数用来设置时钟芯片的时间 应用范围: 入口参数:chseconds、chminutes、chhours是设定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年高效浅层气浮系统项目投资价值分析报告
- 2025至2030年真空墙挂式加氯机项目投资价值分析报告
- 2025至2030年自动封箱打钉机项目投资价值分析报告
- 2025至2030年新青杯项目投资价值分析报告
- 2025至2030年捆扎带项目投资价值分析报告
- 2025年中国迈克尔逊干涉仪市场调查研究报告
- 2025至2030年家用台钳项目投资价值分析报告
- 2025年中国空气导管快装接头市场调查研究报告
- 2025年高延伸性特胶发泡片材项目可行性研究报告
- 2025至2030年分散红项目投资价值分析报告
- 精密配电列头柜介绍讲义
- 技能大师工作室建设PPT幻灯片课件(PPT 66页)
- 统编版四年级道德与法治下册第8课《这些东西哪里来》教学课件(含视频)
- 广东部分地区的暴雨强度公式
- 钢琴基础教程1教案
- 上海科技版(沪科版)初中数学八年级下册全册教案
- 装修工程竣工验收报告模板
- 泥水盾构简介
- 简单娱乐yy频道设计模板
- 防止机组非计划停运措施(锅炉专业)
- 最常用汉字个
评论
0/150
提交评论