基于DS1302多功能数字钟电子电工课程设计.doc_第1页
基于DS1302多功能数字钟电子电工课程设计.doc_第2页
基于DS1302多功能数字钟电子电工课程设计.doc_第3页
基于DS1302多功能数字钟电子电工课程设计.doc_第4页
基于DS1302多功能数字钟电子电工课程设计.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

物理与电子科学学院电子电工实验基于ds1302多功能数字时钟-万年历实验报告 实验名称: 基于ds1302多功能数字钟 试验日期: 2014年 01 月 05 日 专 业: 电子信息工程 姓 名: 刘 斌 班 级: 物电 1105 班 学 号: 2011112030560 1、 设计理念:电子万年历是一个应用非常广泛的实用日常计时工具,带有显示温度,显示世纪,年,月,日,星期,时,分,秒和按键可调时间及其按键设置闹钟的功能,同时具有月末自动更新,闰年补偿功能,整点报时等多种功能。环境温度检测系统在日常生活和工业应用非常广泛,能实时采集周围的温度信息进行显示。此系统是基于stc89c52单片机设计的,包含液晶显示模块,ds1302实时时钟模块,ds18b20温度采集模块,键盘扫描模块,蜂鸣器报警模块。stc89c52作为控制核心,具有功耗低,功能强等特点,电压可选3到5v电源供电。显示模块采用1602液晶动态显示,相对数码管而言经济实用,占用空间小,对于显示数字、字母最为合适,而且与单片机连线简单,占用io口相对较少。实时时钟芯片ds1302是一款经济实惠功能强大的较新型产品,该器件提供rtc/日历,可外加器件实现定时闹钟等功能,如果检测到主电源故障,该器件可自动切换到备用电源供电,可以保证在断电情况下精准走时,计时。温度检测显示模块采用数字式温度传感器ds18b20,该芯片具有精度高,测量范围广等优点,易与单片机连接,模块电路组成简单并同时具有温度报警功能。关键词:stc89c52,ds1302,ds18b20,1602液晶显示,电子万年历,采集设备周围环境温度、整点报时,闹钟时分通过按键设置,时、分、秒、年、月、日、星期通过按键进行调节校准2、 设计思路:核心控制体:stc89c52单片机实时时钟芯片:ds1302数字式温度传感器:ds18b20总共设有四个按键,为节约资源考虑,每个按键都有多种功能。四个按键分别标号为key1,key2,key3,key4。第一次按下key2,key3,key4都没有反应,首先按下key1键可选择指针位置,key2键为加键,key3为减键,key4键为闹钟设置清零键。操作简单,按键灵活。整点报时功能,可以按下key4键终止报警。主控模块 时钟模块温度检测显示1602显示模块键盘扫描模块闹钟模块系统设计框图: 系统硬件需求介绍:stc89c52单片机一片,ds1302实时时钟芯片一个,ds18b20数字式温度传感器一个,+5v无源蜂鸣器一个,12mhz、32khz晶振各一个,多个按键和开关,常用电容电阻,连接线,三极管,二极管若干,滑动变阻器一个,+3v纽扣电池一个。3、 实施方案: 1、单片机核心控制模块:核心控制器件选用stc89c52单片机。stc89c52单片机为40管脚双列直插芯片,它是一种高性能,低功耗的8位cmos微处理器芯片,市场应用最多。而且价格便宜,控制方便,便于应用有4个i/o口分别为p1,p2,p3,p4。其中每一个管脚都能做独立的输入输出管脚,它的第9脚位复位管脚,接上电容和上拉电阻再带个开关构成复位电路。18,19管脚接外部晶振和两个微调电容构成外部晶振电路。单片机,复位电路,晶振,5v电源构成单片机最小系统。其中与at89c52单片机管脚连接如下图: 2、实时时钟电路模块:ds1302引脚排列:如下图引脚说明:1)1脚,vcc2:后备电源,此设计中接+3v纽扣电池;8脚,vcc1:主电源,接+5v。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302由vcc1或vcc2两者中的较大者供电。当vcc2大于vcc10.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。2)x1、x2即2脚3脚:振荡源,外接32.768khz晶振。3)4脚end,接地端。4)5脚rst:复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种功能:首先,rst接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.0v之前,rst必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。5)i/o为串行数据输入输出端(双向)。6)sclk为时钟输入端。*特别注意:5,6,7脚在硬件电路实现中,必须接上拉电阻,接+5v. 3、ds18b20 工作模块: ds18b20 的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。ds18b20 的主要特征: 全数字温度转换及输出。 先进的单总线数据通信。 最高 12 位分辨率,精度可达土 0.5摄氏度。 12 位分辨率时的最大工作周期为 750 毫秒。 可选择寄生工作方式。 检测温度范围为55c +125c (67f +257f) 内置 eeprom,限温报警功能。 64 位光刻 rom,内置产品序列号,方便多机挂接。 多样封装形式,适应不同硬件系统。 4、液晶显示模块: 1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式lcd,本设计采用16列*2行的字符型lcd1602带背光的液晶显示屏。引脚接口说明:第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端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。 5、蜂鸣器电路模块本实验设计中蜂鸣器用cs8050三极管驱动,蜂鸣器用5v的无源蜂鸣器,并接一个发光二极管作为指示灯,同时在负极串接一个限流电阻,数据端口接p37. 4、 proteus仿真原理总框图:5、 硬件电路实现: 6、 源程序:shuzizhong.c#include #includeds18b20.h#define uchar unsigned char #define uint unsigned intuchar shi,fen,miao,ringshi,ringfen,nian,yue,ri,week,temp,count,m;sbit rs=p22;sbit rw=p23;sbit en=p24;sbit key1=p34; /设置键sbit key2=p35; /加键sbit key3=p36;sbit key4=p37;sbit io=p11;/ ds1302数据线sbit sclk=p12;/ds1302时钟线sbit rst=p10; /ds1302复位线sbit beep=p14;sbit acc0=acc0;sbit acc7=acc7;uchar codetable=20 - - ;uchar codetable1= : : ;uchar codetone=212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0;uchar codelon=9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0; void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=120;y0;y-);void yinyue()uint i,j,k=0,l;for(l=0;l26;l+) for(i=0;icodelonk*20;i+) if(key4=0)beep=0;break;beep=beep;for(j=0;jcodetonek/3;j+);delay(10); k+; void write_lcd_com(uchar com)rs=0; rw=0; p0=com; delay(5); en=1; delay(5); en=0; void write_lcd_da(uchar data1)rs=1; rw=0; p0=data1; delay(5); en=1; delay(5); en=0; void init_lcd()uchar num; write_lcd_com(0x38); delay(1); write_lcd_com(0x01); delay(1); write_lcd_com(0x06); delay(1); write_lcd_com(0x0c); delay(1); write_lcd_com(0x80); for(num=0;num10;num+) write_lcd_da(codetablenum); delay(1); write_lcd_com(0x80+0x40); for(num=0;num0;i-) io=acc0;sclk=0;sclk=1;acc=acc1; uchar ds1302_read_byte()uchar j; rst=1;for(j=8;j0;j-) acc7=io;sclk=1;sclk=0;acc=acc1; return(acc); void ds1302_write_date(uchar addr,uchar dat)/写数据rst=0; sclk=0; rst=1; ds1302_write_byte(addr); ds1302_write_byte(dat); sclk=1; rst=0; uchar ds1302_read_date(uchar addr)uchar dat1,b; rst=0; sclk=0; rst=1; ds1302_write_byte(addr); dat1=ds1302_read_byte(); sclk=1; rst=0; b=dat1/16*10+dat1%16; return(b);void ds1302_init()sclk=0; rst=0; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x8e,0x80); void keyscan() if(key1=0) if(key1=0) while(!key1); count+; if(count=11) count=1; switch(count) case 1:tr0=0; write_lcd_com(0x80+0x40+0x0f); write_lcd_da(m); m=miao/10*16+miao%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x80,0x80|m); ds1302_write_date(0x8e,0x80); break; case 2:write_lcd_com(0x80+0x40+0x0f); write_lcd_da(f); break; case 3:write_lcd_com(0x80+0x40+0x0f); write_lcd_da(s); break; case 4:write_lcd_com(0x80+0x40+0x0f); write_lcd_da(w); break; case 5:write_lcd_com(0x80+0x40+0x0f); write_lcd_da(r); break; case 6:write_lcd_com(0x80+0x40+0x0f); write_lcd_da(y); break; case 7:write_lcd_com(0x80+0x40+0x0f); write_lcd_da(n); break; case 8:write_lcd_com(0x80+0x40+0x0e); write_lcd_da(r); delay(3); write_lcd_com(0x80+0x40+0x0f); write_lcd_da(f); delay(3); write_lcd_com(0x80+0x40+0x04); break; case 9:write_lcd_com(0x80+0x40+0x0e); write_lcd_da(r); delay(3); write_lcd_com(0x80+0x40+0x0f); write_lcd_da(s); delay(3); write_lcd_com(0x80+0x40+0x01); break; case 10:write_lcd_com(0x80+0x40+0x0e); write_lcd_da(0); delay(3); write_lcd_com(0x80+0x40+0x0f); write_lcd_da(0); delay(3); delay(3); write_lcd_com(0x0c); tr0=1; m=(miao)/10*16+(miao)%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x80,0x00|m); ds1302_write_date(0x8e,0x80); break; if(count!=0)if(key2=0)delay(10); if(key2=0) while(!key2); switch (count) case 1:miao+; if(miao=60) miao=0; write_lcdsfm(0x06,miao); m=miao/10*16+miao%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x80,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x40+0x07); break; case 2:fen+; if(fen=60) fen=0; write_lcdsfm(0x03,fen); m=fen/10*16+fen%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x82,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x40+0x04); break; case 3:shi+; if(shi=24) shi=0; write_lcdsfm(0x00,shi); m=shi/10*16+shi%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x84,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x40+0x01); break;case 4:week+; if(week=8) week=0; write_lcdweek(week); m=week/10*16+week%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x8a,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x0d); break;case 5:ri+; if(ri=32) ri=0; write_lcdnyr(0x08,ri); m=ri/10*16+ri%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x86,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x09); break; case 6:yue+; if(yue=13) yue=1; write_lcdnyr(0x05,yue); m=yue/10*16+yue%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x88,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x06); break; case 7:nian+; if(nian=51) nian=0; write_lcdnyr(0x02,nian); m=nian/10*16+nian%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x8c,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x03); break; case 8:ringfen+; if(ringfen=60) ringfen=0; write_lcdsfm(0x03,ringfen); write_lcd_com(0x80+0x40+0x04); break; case 9:ringshi+; if(ringshi=24) ringshi=0; write_lcdsfm(0x00,ringshi); write_lcd_com(0x80+0x40+0x01); break; if(key3=0) delay(10); if(key3=0) while(!key3); switch (count) case 1:miao-; if(miao=-1) miao=59; write_lcdsfm(0x06,miao); m=miao/10*16+miao%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x80,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x40+0x07); break; case 2:fen-; if(fen=-1) fen=59; write_lcdsfm(0x03,fen); m=fen/10*16+fen%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x82,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x40+0x04); break; case 3:shi-; if(shi=-1) shi=23; write_lcdsfm(0x00,shi); m=shi/10*16+shi%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x84,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x40+0x01); break;case 4:week-; if(week=0) week=7; write_lcdweek(week); m=week/10*16+week%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x8a,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x0d); break;case 5:ri-; if(ri=0) ri=31; write_lcdnyr(0x08,ri); m=ri/10*16+ri%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x86,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x09); break; case 6:yue-; if(yue=0) yue=12; write_lcdnyr(0x05,yue); m=yue/10*16+yue%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x88,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x06); break; case 7:nian-; if(nian=-1) nian=50; write_lcdnyr(0x02,nian); m=nian/10*16+nian%10; ds1302_write_date(0x8e,0x00); ds1302_write_date(0x8c,m); ds1302_write_date(0x8e,0x80); write_lcd_com(0x80+0x03); break; case 8:ringfen-; if(ringfen=-1) ringfen=59; write_lcdsfm(0x03,ringfen); write_lcd_com(0x80+0x40+0x04); break; case 9:ringshi-; if(ringshi=-1) ringshi=23; write_lcdsfm(0x00,ringshi); write_lcd_com(0x80+0x40+0x01); break;void set_dingshiqi()tmod=0x01; th0=64536/256; tl0=64536%256; ea=1; et0=1; tr0=1; void gettime() beep=0; temp=read_temperature(); miao=ds1302_read_date(0x81); fen=ds1302_read_date(0x83); shi=ds1302_read_date(0x85); week=ds1302_read_date(0x8b); ri=ds1302_read_date(0x87); yue=ds1302_read_date(0x89); nian=ds1302_read_date(0x8d); write_lcdsfm(0x00,shi); write_lcdsfm(0x03,fen); write_lcdsfm(0x06,miao); if(miao=0&fen=0&shi8&shi21) yinyue(); if(fen=ringfen&shi=ringshi) yinyue();if(key4=0)ringshi=0;ringfen=0; write_lcdweek(week); write_lcdnyr(

温馨提示

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

评论

0/150

提交评论