课程设计基于单片机的电子时钟课程设计_第1页
课程设计基于单片机的电子时钟课程设计_第2页
课程设计基于单片机的电子时钟课程设计_第3页
课程设计基于单片机的电子时钟课程设计_第4页
课程设计基于单片机的电子时钟课程设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

目 录第一章前言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第六章参考文献2020第一章 前言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89S51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成了一个单片机电子时钟。第二章 方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.2数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。第三章 系统硬件设计3.1总体硬件设计3.1.1系统说明利用单片机(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结束时钟调整程序关闭显示,省电状态分钟闪烁,调时状态分值加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 miaoyear=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 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; /*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=(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+(shi&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_riqi() 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;P0=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)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); /*主程序:*/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_riqi(); 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.下载线插接说明:两排十针下载口,板图上都有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角,这一点一定要切记,不然的话程序下载不进去。2.电源线插接说明:电池盒的红线为正,黑线为负。板子所留出来的电源插口用VCC(表示电源正)和GND(表示电源负)标明。u 调试要点:首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。检查无误后插上AT89S51并烧写一简易的程序,观察电路是否能协同工作。最后烧写工作程序,根据显示现象调试程序直至成功。上电运行时,数码管开始显示02:42:16,为我的学号,之后时钟开始随系统时间走时,具有整点报时功能,日期同理为当前日期,与时间调节方法相同。第五章 实验心得体会(1)、在这两周里,因为之前接触到的电子系统设计不多,所以一开始,感觉难以入手,就算上网载了很多程序,也看不懂。后来请求同学的帮助,了解了要对各种芯片编写程序时首先应找到该芯片的数据手册,根据数据手册上的说明、时序要求及流程图编写对应程序。(2)、其次,巩固了Keil C51工程文件的建立,程序编写以及编译的掌握程度。最重要的是,因为只是水平有限,要自己编写C程序很难,但在此实验中,最大的收获莫过于看懂别人的程序,分析之后,自己拼凑编写以实现不同的功能。并且掌握了52C程序的编写过程。(3)、掌握了Proteus的使用方法,从实际操作中认识到Proteus在仿真方面的优越性,激发了自己学习Proteus的兴

温馨提示

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

评论

0/150

提交评论