单片机课程设计之万年历、闹钟与温度显示设计_第1页
单片机课程设计之万年历、闹钟与温度显示设计_第2页
单片机课程设计之万年历、闹钟与温度显示设计_第3页
单片机课程设计之万年历、闹钟与温度显示设计_第4页
单片机课程设计之万年历、闹钟与温度显示设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、 摘 要我们设计的数码管时钟温度显示系统是一个可以记录时间及温度的系统,该系统是由中央控制器、温度检测器、时钟系统、显示器及键盘部分组成。控制器采用单片机STC89C52,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用数码管作为显示器。单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器采用DS18B20采集温度信号送给单片机处理,单片机把时间数据和温度数据送到数码管进行显示,键盘可以调时和温度查询。闹钟功能是通过按键设置闹钟的时间使蜂鸣器响。关键词:51单片机,ds1302,ds18b20,闹钟,万年历目 录 TOC t 一级标题you,

2、1,二级标题you,2 h u HYPERLINK l _Toc6933 摘 要 PAGEREF _Toc6933 1 HYPERLINK l _Toc16777 一、任务分析与设计思路 PAGEREF _Toc16777 3 HYPERLINK l _Toc19520 二、整体设计方案 PAGEREF _Toc19520 3 HYPERLINK l _Toc13144 1、单片机的选择 PAGEREF _Toc13144 3 HYPERLINK l _Toc9230 2、单片机的基本结构 PAGEREF _Toc9230 4 HYPERLINK l _Toc27872 三、数字钟的硬件设计

3、PAGEREF _Toc27872 4 HYPERLINK l _Toc23229 1、总体电路设计 PAGEREF _Toc23229 4 HYPERLINK l _Toc11423 2、晶振电路设计 PAGEREF _Toc11423 5 HYPERLINK l _Toc18237 3、时钟芯片 PAGEREF _Toc18237 5 HYPERLINK l _Toc24196 4、温度传感器 PAGEREF _Toc24196 5 HYPERLINK l _Toc23422 5、复位电路设计 PAGEREF _Toc23422 6 HYPERLINK l _Toc29585 6、数码管显

4、示电路设计 PAGEREF _Toc29585 7 HYPERLINK l _Toc14337 7、按键控制电路设计 PAGEREF _Toc14337 7 HYPERLINK l _Toc22441 8、制作电路板 PAGEREF _Toc22441 8 HYPERLINK l _Toc14584 9、元件清单 PAGEREF _Toc14584 9 HYPERLINK l _Toc12679 四、软件设计 PAGEREF _Toc12679 10 HYPERLINK l _Toc2842 1、系统软件设计流程图 PAGEREF _Toc2842 10 HYPERLINK l _Toc281

5、25 2、 按键控制子程序 PAGEREF _Toc28125 11 HYPERLINK l _Toc25742 3、主程序 PAGEREF _Toc25742 12 HYPERLINK l _Toc6974 4、 时钟设置子程序 PAGEREF _Toc6974 12 HYPERLINK l _Toc32729 5、定时器中断子程序与数码管显示程序 PAGEREF _Toc32729 13 HYPERLINK l _Toc27958 7、温度传感器DS18B20主程序 PAGEREF _Toc27958 13 HYPERLINK l _Toc29703 五、调试与功能说明 PAGEREF _

6、Toc29703 14 HYPERLINK l _Toc20875 1、系统性能测试与功能说明 PAGEREF _Toc20875 14 HYPERLINK l _Toc1797 2、系统时钟误差分析 PAGEREF _Toc1797 15 HYPERLINK l _Toc20657 3、硬件调试 PAGEREF _Toc20657 15 HYPERLINK l _Toc30928 4、软件调试问题及解决 PAGEREF _Toc30928 16 HYPERLINK l _Toc26303 六、心得体会 PAGEREF _Toc26303 16 HYPERLINK l _Toc18689 参考

7、文献 PAGEREF _Toc18689 17一、任务分析与设计思路设计一个具有报时功能、停电正常运行(来电无需校时)、带有年月日、时分秒以及温度显示、闹钟提醒功能的电子日历。电子万年历是日常生活中常见的小型电子产品,其形式多种多样,小到带有日期的电子腕表,大到公共场所悬挂的大型电子日历,此外,眼下我们还常能在宾馆、饭店等场所见到一种带有年、月、日、时、分、秒、星期甚至节气等信息的电子日历牌。电子日历的主要功能是给人们提供时间和日期信息,无论其形式如何,从外部都可分为显示和校准两部分。为使电子日历协调工作,整个系统从功能上可分为实时时钟、显示和键盘三个模块,分别完成时间和日期的计算以及人机交互

8、的管理等。二、整体设计方案1、单片机的选择单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调试电路电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。特性方面:STC89C52RCHYPERLINK /view/1012.htm t _blank 单片机,8K字节程序 HYPERLINK /view/1375172.htm t _blank 存储空间,512字节数据存储空间内带4K字节EEPROM存储空

9、间,可直接使用串口下载。AT89S52单片机,8K字节程序存储空间,256字节数据存储空间,没有内带EEPROM存储空间。综合考虑选择STC89C52单片机作为本系统的单片机。2、单片机的基本结构STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、非常有效的解决方案。具有晶振电路,复位电路,定时器等结构。三、数字钟的硬件设计1、总体电路设计按键数码管显示STC89按键数码管显示STC89C52图3-1 总体电路设计图3-1 总体

10、电路设计根据方案的选择,数码管时钟温度系统由51单片机、时钟芯片DS1302、测温芯片DS1802、数码管显示电路、键盘电路组成,如图3-1所示。本系统采用C语言编写,控制器采用单片机STC89C52,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用八位数码管作为显示器。单片机通过时钟芯片DS1302获取时间数据;通过温度传感器DS18B20采集温度信号送给单片机处理,并在数码管中显示出来,键盘可以切换界面,调时和温度查询与设置闹钟的功能。2、晶振电路设计 单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和

11、射频使用不同的晶振,而通过电子调整频率的方法保持同步。我们的数码管时钟温度显示系统采用的是12MHz的晶振,如图3-2所示。 图3-图3-3 时钟芯片与单片机连接图3-2 单片机晶振图3-2 单片机晶振 3、时钟芯片我们采用DS1302作为主要计时芯片,主要为了提高计时精度,更重要的就是DS1302可以在很小的后备电源下继续计时,并可编程选择充电电流来对后备电源进行充电,可以保证后备电源基本不耗电。我们设计硬件电路时,采用一个纽扣电池进行对时钟芯片供电,达到断电后,时钟继续运行的目的。时钟芯片与单片机的连接如图3-3所示。4、温度传感器采用DS18B20作为温度检测的芯片,DS18B20温度传

12、感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对STC89C52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是

13、将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。电路图如图34所示。 图3-4 DS18B20图3-4 DS18B20图3-5 复位电路5、复位电路设计 由电容串联电阻构成,由图并结合电容电压不能突变的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C取10u,R取8.2

14、K.当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。如图3-5所示。6、数码管显示电路设计数码管内部是由7个条形发光二极管与一个小圆点发光二极管组成,根据这八个二极管的亮暗组成不同的字符。本系统采用八位数码管作为显示模块,数码管相对其他LCD类的显示器来说,成本比较低廉,省电。两个四位共阴0.56英寸的数码管作为显示屏。如图3-6所示。 图 3-7图 3-7 按键电路图3-6四位共阴数码管7、按键控制电路设计本系统采用四个按键作为键盘控制实现界面切换的功能,如图3-7所示。能够实现界面切换、时间校正、闹钟设置等功能。机械式按键再按下或释放时,由于机械弹性作

15、用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图3-8所示。抖动时间的长短与开关的机械特性有关,一般为5-10 ms。故软件编程时需要注意消除抖动。图3-8 按键抖动过程图3-8 按键抖动过程8、制作电路板制作电路板的过程如下:打印底稿 (喷墨激光打印胶片,或使用光绘菲林) 曝光 (太阳光30-180秒;紫外线灯4-5分钟) 显影 (专用显像剂) 蚀刻 (用热水化开的三氯化铁液体) 钻孔 (小电钻),焊接。如图3-9所示。图图3-9 腐蚀与钻孔9、元件清单我们设计的这个系统主要用到STC89C52单片机作为主控芯片,还有时钟芯片作为计算时间的芯片,温度测量的温度

16、传感器DS18B20,并用数码管来显示,所以本系统用到的主要元件如表3-1.元器件数量元器件数量单片机1块电阻若干个DS13021块纽扣电池1个DS18B201块电容若干个74LS5731块蜂鸣器1个晶振(12M、32.768K)按键若干个数码管2块表3-1 元件清单表3-1 元件清单四、软件设计1、系统软件设计流程图系统主程序首先对系统进行初始化,包括设置定时器、中断和端口;然后数码管显示省电模式。由于单片机没有停止指令,所以可以设计系统程序不断地循环执行上述显示效果。下图是系统的流程图。 开始 开始 初始化 初始化温度转换一次 温度转换一次 初始化时钟初始化时钟1302时钟DS1302的运

17、行时钟DS1302的运行按键控制程序按键控制程序省电模式省电模式否是否有按键否是否有按键按下是是执行按键程序执行按键程序 结束按键控制子程序本系统按键可以实现的数码管界面切换,系统时钟的校正、闹钟的设定,按键的程序需要进行软件的消抖。按键功能如下图4-2所示。3、主程序主程序是系统运行的主要程序,包括时钟芯片、温度传感器的读取以及数码管显示的程序。主程序开始时要对定时计数器进行初始化以及一些变量的初始化。其流程图如图4-2所示。省电模式省电模式图3-2 主程序流程图时钟设置子程序时钟设置子程序主要是由时钟芯片DS1302计算时间并用数码管显示时间。时钟设计主要函数如下:void read_rt

18、c() unsigned char i;for(i=0;i7;i+)time_datai=read_ds1302_byte(read_addi);_nop_();read_ds1302_byte(read_add0); _nop_(); tdi=time_datai/16*10+time_datai%16; 5、定时器中断子程序与数码管显示程序定时器的开启需要五个步骤:首先是设置定时计数器的工作模式与工作方式,这里设置为定时器模式0工作模式1。然后给定时器设置初值。接着是把总中断打开(EA=1);再接着是ET0=1;最后是把定时器打开(TR0=1)。其程序如下程序所示:void init()T

19、MOD=0 x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;EA=1;ET0=1;TR0=1;7、温度传感器DS18B20主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次,流程图如图44。读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。如图4-5所示。图44 DS18B20主程序流程图 图45读出温度子程序流程图五、调试与功能说明1、系统性能测试与功能说明先检查印制板及焊接的质量是否符合要求,有无虚焊点及线路间有无短路、断路。然后用万用

20、表测试,通电检测,检查个芯片电压是否正常,检查无误后,可通电检查数码管亮度情况,一般情况下取背光电压为45.5V即可得到满意的效果。数码管时钟温度系统能够实现预想的功能:用DS1302进行时钟的运行;能够实现界面的切换;能够实现温度检测与显示功能;能够实现设置闹钟与关闭闹钟的功能;能够实现断电后时间继续运行的目的。2、系统时钟误差分析 数码管时钟温度系统存在一定的时间误差,但误差非常小,可以忽略;即使由于时间的累计会照成较大的误差,我们可以通过按键去校正时间。3、硬件调试子程序调试包括:DS1302的计时和读写程序、显示程序;DS18B20读出温度子程序、温度转换命令子程序、计算温度子程序、显

21、示数据刷新子程序。根据程序各部份子程序先进行独立调试。由于采用了DS1302作为计时器使用,其计时精度相对来说比较高。用制作的成品与万年历计时比较,基本没有误差。3.根据实验要求记录并显示某些时间的温度值及一天当中的最高、最低温度。硬件测试与方案设计一样,具有一定的稳定性,快速性与准确性。4、软件调试问题及解决 由于硬件设计按键太少,调整时间时只能加、不能减; 某些芯片不是焊固定在电路板上的,故可能会出现接触不良的问题; 若两处电源都断开,则出现“死机”现象;此时要将P16接低电平六、心得体会通过本次的课程设计,我们完成了本课程设计方案设计的要求,能够实现了数码管时钟温度显示系统的基本功能,达

22、到了完成一个小作品,小产品的目的。数码管时钟温度显示系统的实现让我们学会了编程与使用51单片机,时钟芯片ds1302的控制与温度传感器ds18b20的读取与在数码管上显示。完成了以下功能:1、数码管显示“时分秒”;2、数码管显示“年月日”;3、数码管显示“时分 温度”;4、设置以及校正时间;5、设置闹钟功能;6、来电无需校正。本系统的开发我们是从方案论证开始,在硬件方面:用protel 99画电路板,制作电路板,焊接电路板,基本调试。在软件方面:用keil软件进行编程与用STC_ISP软件烧入测试,编程调试等步骤。最后时钟的最终测试与误差分析;得出精确的时间。在完成这个课程设计的过程中,我们遇

23、到了不少问题,然后通过问老师、师兄、同学最终完成了课程设计。问题如下:问题解决方案1、数码管亮度不够驱动电路,用74LS573驱动2、P0口没有上拉电阻在P0口接上上拉电阻3、数码管显示有闪烁的情况把数码管显示时间减少4、温度显示出现乱码读取温度时,先把定时器关了,读完后马上开了定时器5、C语言编程.c文件不能包含.c文件;可以包含.h文件6、两个电源都断了,会出现“死机”现象上电后,把P16拉低,然后设置时间7、设置时,参数只能加、不能减预想时没想好,下次实验一定要先想好再制作硬件8、蜂鸣器种类有两种:有源与无源两种参考文献1谭浩强著.C程序设计(第二版).北京:清华大学出版社,20052丁

24、元杰著.单片微机原理及应用.北京:机械工业出版社,20053郭天祥著.新概念51单片机C语言教程:入门、提高、开发、拓展全攻略.北京:电子工业出版社,2009附程序:#include#includejianpan.h#includeds1302.h#includeds18b20.hsbit key16=P16;sbit buzz=P17;/蜂鸣器定义unsigned char smg_weigao=0 xfe,0 xfd,0 xfb,0 x7f;/,0 xf7,0 xef,0 xdf,0 xbfunsigned char smg_weidi=0 xf7,0 xef,0 xdf,0 xbf; /

25、 0 xfe,0 xfd,0 xfb,0 x7f,unsigned char smg_duangao=0 xeb,0 x88,0 xb3,0 xba,0 xd8,0 x7a,0 x7b,0 xa8,0 xfb,0 xfa,0 x10,0 x00,0 xff;unsigned char smg_duandi=0 xfa,0 x22,0 xb9,0 xab,0 x63,0 xcb,0 xdb,0 xa2,0 xfb,0 xeb,0 x01,0 x00,0 xff;unsigned char disp8;unsigned char aclock8;unsigned char tt;bit ttfla

26、g; /18b20标志位定义unsigned char key16num=0;void shifenzhen();void nianyueri();void aclockset(); void init()TMOD=0 x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;EA=1;ET0=1;TR0=1;void main()init();/set_rtc(); /若有则读取全部年月日时分秒;若无则直接是保存的(年月日时分秒)ds18b20(); /第一次读取温度 ,显示时不会出现一开始乱码的情况while(1)/*遇到死机时,P16口接地,则可以继续*

27、/if(key16=0)delay(100);if(key16=0)key16num+;while(!key16);if(key16num=1)ds1302();write_ds1302(0 x8e,0 x00); /关写保护write_ds1302(write_add0,0 x14);/把数据写入相应的地址中,比如:write_ds1302(write_add1,0 x03);write_ds1302(write_add2,0 x01);/把数据写入相应的地址中,比如:write_ds1302(write_add3,0 x15);write_ds1302(write_add4,0 x22);

28、/把数据写入相应的地址中,比如:write_ds1302(write_add5,0 x22);write_ds1302(write_add6,0 x22);/把数据写入相应的地址中,比如:write_ds1302(0 x8e,0 x80);/开写保护if(key16num=2)key16num=0;jianpan(); ds1302();/*一般是省电模式*/if(kn1flag=0)disp0=11;disp1=11;disp2=11;disp3=11;disp4=11;disp5=11;disp6=11;disp7=11;/*第一次按下按键1显示“时分秒”*/ if(kn1flag=1)d

29、isp0=td4/10;/time_data4/16;disp1=td4%10;/time_data4%16;disp2=10;disp3=td5/10;/time_data5/16;disp4=td5%10;/time_data5%16;disp5=10;disp6=td6/10;/time_data6/16;disp7=td6%10;/time_data6%16;/*第二次按下按键1切换到年月日*/if(kn1flag=2)disp0=td0/10;disp1=td0%10;disp2=10;disp3=td2/10;disp4=td2%10;disp5=10;disp6=td3/10;d

30、isp7=td3%10;/*第三次按下按键1切换到温度显示的界面*/if(kn1flag=3) if(ttflag=1) TR0=0; /关闭定时器0;以免影响温度18b20的读取ttflag=0; ds18b20(); /读取温度TR0=1; /读取完毕后打开定时器0disp0=td4/10;disp1=td4%10;disp2=10;disp3=td5/10;disp4=td5%10;disp5=11;disp6=shu/100;disp7=shu%100/10; /*第四次按下按键1进入时间设置,设置正确的“时分”时间*/if(kn1flag=4)shifenzhen(); /设置正常的

31、时分时间disp0=td4/10;disp1=td4%10;disp2=10;disp3=td5/10;disp4=td5%10;disp5=10;disp6=10;disp7=10;/*第五次按下按键1进入时间设置,设置正确的“月日”时间*/if(kn1flag=5)nianyueri(); /设置正常的年月时间disp0=10;disp1=10;disp2=10;disp3=td2/10;disp4=td2%10;disp5=10;disp6=td3/10;disp7=td3%10;/*第六次按下按键1回到正常显示,显示时分秒*/if(kn1flag=6)kn1flag=0; /返回正常界

32、面/*第一次按下按键2,进入闹钟设置界面*/if(kn2flag=1)kn1flag=0;/进入界面“省电” /设置闹钟的响应的时间disp0=10;disp1=10;disp2=10;disp3=aclock4/10;disp4=aclock4%10;disp5=10;disp6=aclock5/10;disp7=aclock5%10;aclockset(); /闹钟设置程序/*第二次按下按键2*/if(kn2flag=2)kn1flag=1;/界面显示时分秒 kn2flag=0; /*闹钟响应函数*/if(td4=aclock4)&(td5=aclock5)&(aclock4!=0)&(t

33、d630) / buzz=0; /有缘蜂鸣器只需要低电平delay(1);/当闹钟响后,第二次按下按键2关闭闹钟if(kn2flag=1) kn1flag=1;/进入界面“时分秒”kn2flag=0;buzz=1; /关闭蜂鸣器aclock4=0; /凌晨0点不响/*如果第一次闹钟响不按下闹钟按键2,则2分钟后再次响*/else if(td4=aclock4)&(td5=aclock5+3)&(aclock4!=0)&(td6=24)td4=0; time_data4=td4/10*16+td4%10;time_data5=td5/10*16+td5%10;write_ds1302(0 x8e

34、,0 x00); /关写保护write_ds1302(write_add4,time_data4);/把数据写入相应的地址中,比如:write_ds1302(write_add5,time_data5);/把数据写入相应的地址中,比如:write_ds1302(0 x8e,0 x80);/开写保护/按下按键3减一if(kn4=1) td4=time_data4/16*10+time_data4%16;td5=time_data5/16*10+time_data5%16;kn4=0;td5+;if(td5=60)td5=0;time_data4=td4/10*16+td4%10;time_dat

35、a5=td5/10*16+td5%10;write_ds1302(0 x8e,0 x00); /关写保护write_ds1302(write_add4,time_data4);/把数据写入相应的地址中,比如:write_ds1302(write_add5,time_data5);/把数据写入相应的地址中,比如:write_ds1302(0 x8e,0 x80);/开写保护/*设置正确的年月日时间*/void nianyueri() /设置正确的时间td2=time_data2/16*10+time_data2%16;td3=time_data3/16*10+time_data3%16;/按下按键2加一if(kn3=1)td2=time_data2/16*10+time_data2%16;td3=time_data3/16*10+time_data3%16;kn3=0;td2+;if(td212)td2=1;time_data2=td2/10*16+td2%10;time_data3=td3/10*16+td3%10;write_ds1302(0 x8e,0 x00); /关写保护write_ds1302(write_add2,time_data2);/把数据写入相应的地址中,比如:write_ds1302(wri

温馨提示

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

评论

0/150

提交评论