单片机应用课程设计电子时钟及温度控制器.doc
《单片机应用课程设计电子时钟及温度控制器.doc》由会员分享,可在线阅读,更多相关《单片机应用课程设计电子时钟及温度控制器.doc(37页珍藏版)》请在三一办公上搜索。
1、 单片机应用课程设计(设计课题: 电子时钟及温度控制器 院(系、部): 机械工程系 专业: 机械制造及其自动化专业 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2012年6月21日一、 单片机电子时钟的设计目录第一章前言3第二章方案论证与比较32.1数字时钟方案32.2数码管显示方案4第三章系统设计53.1总体设计53.1.1系统说明53.1.2系统框图3第四章原理图与仿真图64.1 Protel原理图 64.2 Proteus 仿真图74.3流程图84.4源程序清单104.5设计总结18第五章实验心得体会19第六章参考文献20第一章 前言单片机自20世纪70年代问世以来,以其极高的
2、性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保
3、证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89S51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成
4、了一个单片机电子时钟。第二章 方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。
5、原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.2数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或
6、截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。第三章 系统硬件设计3.1总体硬件设计3.1.1系统说明利用单片机
7、(AT89S51)制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。6个PNP管(9012)分别控制六个数码管的亮灭,一个按键用于时间调整。3.1.2系统框图AT89C52六位LED共阳显示按键 DS1302时钟模块蜂鸣器闹铃第四章 原理图与仿真图4.1 Protel原理图 图4-14.2 Proteus 仿真图图4-24.3 流程图主程序开始设定定时器常数,开中断显示时间到1秒?T0中断现场保护重装定时器初值满20次否?满24小时否?满60秒否?满60分否?恢复现场时值加1时缓冲单元清零秒值加1分缓冲单元清零秒缓冲单元清零分值加1结束时钟
8、调整程序关闭显示,省电状态分钟闪烁,调时状态分值加1按键k2时间t1时值=24?按键k2时间t0.5按键k2时间t0.5时钟闪烁,调时状态分值=60?分值清零时值加1时值清零返回显示k2是否按下4.4 源程序清单#include #include #define uchar unsigned char#define uint unsigned intuchar data_7seg10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,;uchar miao,fen,shi,year,mon,day;sbit qh=P13;sbit miaoye
9、ar=P10;sbit fenmon=P11;sbit shiday=P12;sbit rst=P14;sbit sck=P15;sbit io=P16;sbit fm=P17;/*函数声明:*/void write_ds1302_byte(uchar dat);void write_ds1302(uchar add,uchar dat);uchar read_ds1302(uchar add);void read_shijian();void read_riqi();void set_shijian();void set_riqi();void display_shijian();void
10、display_riqi();void delay(int n);void show();void fmzz(); /*DS1302单字节写入:*/void write_ds1302_byte(uchar dat)uchar i;for (i=0;i1;sck=1; /*DS1302多字节写入:*/void write_ds1302(uchar add,uchar dat)rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);write_ds1302_byte(dat);rst=0;_nop_();io=1;sck=1
11、; /*DS1302读取:*/uchar read_ds1302(uchar add) uchar i,value;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);for (i=0;i1;sck=0;if (io) value=value|0x80;sck=1;rst=0;_nop_();sck=0;_nop_(); sck=1;io=1;return value;/*调整日期*/ void set_riqi() if (miaoyear=0) delay(100); if (miaoyear=0) year=(
12、year4)*10+(year&0x0f); year+; if (year=99) year=0; year=(year/10)4)*10+(mon&0x0f); mon+; if (mon=13) mon=1; mon=(mon/10)4)*10+(day&0x0f); day+; if (day=31) day=1; day=(day/10)4)*10+(miao&0x0f); miao+; if (miao=60) miao=0; miao=(miao/10)4)*10+(fen&0x0f); fen+; if (fen=60) fen=0; fen=(fen/10)4)*10+(sh
13、i&0x0f); shi+; if (shi=24) shi=0; shi=(shi/10)4)+(shi%10); write_ds1302(0x84,shi); /*读取日期*/ void read_riqi() year=read_ds1302(0x8D); mon=read_ds1302(0x89); day=read_ds1302(0x87); /*读取时间:*/void read_shijian() shi=read_ds1302(0x85); fen=read_ds1302(0x83); miao=read_ds1302(0x81);/*显示日期*/ void display_r
14、iqi() unsigned int b=1;P2=0x01;P0=data_7segyear/16;delay(b);P2=0x02;P0=data_7segyear%16;delay(b);P2=0x04;P0=data_7segmon/16;delay(b);P2=0x08;P0=data_7segmon%16;delay(b);P2=0x10;P0=data_7segday/16;delay(b);P2=0x20;P0=data_7segday%16;delay(b); /*显示时间:*/void display_shijian() unsigned int a=1;P2=0x01;P
15、0=data_7segshi/16;delay(a);P2=0x02;P0=data_7segshi%16;delay(a);P2=0x04;P0=data_7segfen/16;delay(a);P2=0x08;P0=data_7segfen%16;delay(a);P2=0x10;P0=data_7segmiao/16;delay(a);P2=0x20;P0=data_7segmiao%16;delay(a); /*蜂鸣:*/ void fmzz() uint i; for (i=0;i100;i+) fm=!fm; delay(2); /*延时程序:*/void delay(int n)
16、unsigned int i,j;for(i=0;in;i+)for(j=0;j121;j+); /*显示学号:*/void show() unsigned int m;for(m=0;m20;m+)uint a=10;P2=0x01;P0=data_7seg0;delay(a);P2=0x02;P0=data_7seg2;delay(a);P2=0x04;P0=data_7seg4;delay(a);P2=0x08;P0=data_7seg2;delay(a);P2=0x10;P0=data_7seg1;delay(a);P2=0x20;P0=data_7seg6;delay(a); /*主
17、程序:*/void main() show(); delay(5);/*write_ds1302(0x8e,0x00); /禁止写保护write_ds1302(0x84,0x12);/初始化write_ds1302(0x82,0x00);write_ds1302(0x80,0x00);write_ds1302(0x86,0x01); write_ds1302(0x88,0x06); write_ds1302(0x8C,0x12);write_ds1302(0x8e,0x80);*/开保护while (1) if(qh=0) set_riqi(); read_riqi(); display_ri
18、qi(); read_shijian(); else set_shijian();read_shijian();display_shijian();read_riqi(); if(fen=0) if(miao=0) fmzz();4.5设计总结本设计能够很准确的走时,并能够通过硬件对时钟进行时间、日期调整,并具有整点报时功能。u 功能介绍:1. 显示XX:XX:XX时间和日期。2. 时间可调:调整键(k2)按下时间小于1秒(t0.5s)分钟位闪亮,此时按下k2键(t0.5s)时钟位闪亮,此时按下k2键(t0.5s),返回到正常显示状态。3.下载线和电源线插接说明:1.下载线插接说明:两排十针下
19、载口,板图上都有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角,这一点一定要切记,不然的话程序下载不进去。2.电源线插接说明:电池盒的红线为正,黑线为负。板子所留出来的电源插口用VCC(表示电源正)和GND(表示电源负)标明。u 调试要点:首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。检查无误后插上AT89S51并烧写一简易的程序,观察电路是否能协同工作。最后烧写工作程序,根据显示现象调试程序直至成功。上电运行时,数码管开始显示02:42:16,为我的学号,之后时钟开始随系统时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 应用 课程设计 电子 时钟 温度 控制器
链接地址:https://www.31ppt.com/p-4147370.html