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

下载本文档

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

文档简介

1、基于c语言单片机电子时钟课程设计作者: 日期:课程设计报告课程名称:单片机程序设计报告题目:电子时钟 学生姓名: 所在学院:信息科学与工程学院 专业班级:学生学口号:指导教师:2013年12月25日课程设计任务书报告题目电子时钟完成时间12.25学生姓名专业班级电子信息工程指导教师职称讲师总体设计要求和技术要点设计要求如下:以AT89C51单片机为核心的时钟,在 LCD显示器上显示当前的时间: 使用字符型LCD显示器显示当前时间。显示格式为“时时:分分:秒秒”。用4个功能键操作来设置当前时间。功能键 K1K4功能如下。K1进入设置现在的时间。K2设置小时。K3设置分钟。K4确认完成设置。程序执

2、行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00: 00: 00”, 然后开始计时。工作内容及时间进度安排第17周周1-3立题、论证方案设计周4-5仿真实验第18周周1-3综合调试周4-5验收答辩课程设计成果1与设计内容对应的软件程序2.课程设计总结报告摘要单片计算机即单片微型计算机。由 RAM ROM CPU构成。定时,计数和 多 种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和 工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。 这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。本设计主要设计了一个基于 AT89C

3、51单片机的电子时钟。并在数码管上显 示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转 换。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方 法仿真效果真实、准确,节省了硬件资源。关键词:单片机;子时钟;键控制目录概述电子时钟简介1.2电子时钟的基本特点1.3电子时钟的原理方案设计选择2.1案2.2案三、硬件设计3.1择3.2理3.3计3.4图1516四、软件设计五、结论与心得六、参考文献一、概述1.1电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的 基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的

4、一种计时 工具,采用延时程序产生一定的时间中断用于一秒的定义,通过计数方式进行满 六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的 功能,是人民日常生活补课缺少的工具。1.2电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、 石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不 需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显 示时间的功能,还可以进行时和分的校对,片选的灵活性好。1.3电子时钟的原理该电子时钟由89C51, BUT

5、TON六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒 为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制 键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能, 达到 省电的目的;直接按下不松开,则可以通过按键实现分钟的累加, 每按一次分钟 加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加二、方案设计选择2.1计时方案方案1:采用实时时钟芯片现在市场上有很多实时时钟集成电路,如 DS1287 DS12887 DS1302等。 这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定

6、时功能,计时 数据的更新每秒自动进行一次,不需要程序干预。因此,在工业实时测控系统中 多采用这一类专用芯片来实现实时时钟功能。方案2:使用单片机内部的可编程定时器。利用单片机内部的定时计数器进行中端定时,配合软件延时实现时、分、 秒的计时。该方案节省硬件成本,但程序设计较为复杂。2.2显示方案对于实时时钟而言,显示显然是另一个重要的环节。通常LED显示有两种 方式:动态显示和静态显示。静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节 约CPU勺工作时间。但占有I/O 口线多,每一个LED都要占有一个I/O 口,硬件 开销大,电路复杂。需要几个LED就必须占有几个并行口,比较适

7、用于LED数量 较少的场合。当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄 存器的方式加以解决,但程序编写比较麻烦。LED动态显示硬件连接简单,但动态扫描的显示方式需要占有 CPU较多的 时间,在单片机没有太多实时测控任务的情况下可以采用。本系统需要采用6位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。三、硬件设计3.1单片机型号的选择通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯 片o89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8 位微处理器,器件采用ATMEI高密度非易失存储器制造技术制造

8、,与工业标准的 MCS-51指令集和输出管脚相兼容。由于将多功能 8位CPI和闪烁存储器组合在 单个芯片中,ATME的 89C5是一种高效微控制器,而且它与 MCS-51兼容,且具 有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点, 是最好的选择。3.2数码管显示工作原理数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种 是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称 为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商。阳极即 为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数 码管又分为8

9、段,即8个LED显示段,这是为工程应用方便如设计的,分别为A B、C、D E、F、G DP其中DP是小数点位段。而多位数码管,除某一位的公 共端会连接在一起,不同位的数码管的相同端也会连接在一起。 即所有的A段都 会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分 为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一 直有效。动态显示的原理是,各个数码管的相同段连接在一起, 共同占用8位段 引管线;每位数码管的阳极连在一起组成公共端。 利用人眼的视觉暂留性,依次 给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号, 当全段扫描速度大于视觉

10、暂留速度时,显示就会清晰显示出来。3.3键盘电路设计该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损 耗,该键盘可以实现小时和分钟的调节; 直接按下不松开,则可以通过按键实现 分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的 调节,同样每按一次小时加一。达到时间调节的目的。3.4电路原理图44匸:J=InsjaaaMEgEai四、软件设计#in elude <reg52.h> #in elude vintrin s.h> #defi ne uehar un sig ned char #defi ne uint un sig ned in

11、t#defi ne some nop _nop_();_nop_();_nop_();_nop_();_nop_ ();/宏定义掩延时函数sbit K1= P3A0;/ 位定义sbit K2=P3A1;sbit K3=P3A2;sbit K4=P3A3;sbit D34=P3A4; sbit SCL = P 29 sbit SDA = P 2人1;void diyi();void xia nshi(); /函数声明void pan dua n();/函数声明void delay(uchar z);函数声明定义变量void delay_us(uchar tt)/短延时函数uchar t=O,n=

12、1,m=59,a,te mp;uchar code at=0xe0,0xd0,0xb0,0x70; /定义数组uchar code as10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code b=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;uint cnt;while(tt-);/*/*始化 */*/*at24c02*/ void l2C_start()/|A2C 模块SDA = 1;_n op_();SCL = 1;some nop;SDA = 0;some nop;SCL = 0;v

13、oid I2C_sto p()SDA = 0;_n op_();SCL = 1;some nop;SDA = 1;void l2C_ack(bit ackbit)if(ackbit)elseSDA = 0;SDA = 1;some nop;SCL = 1;some nop;SCL = 0;SDA = 1;some nop;bit l2C_waitack()SDA = 1;some nop;SCL = 1;some nop;if(SDA)SCL = 0;return 0;elseI2C_sto p();SCL = 0;return 1;void l2C_write(uchar dat)uchar

14、 i;for(i=0;i<8;i+)if(dat&0x80)SDA = 1;elseSDA = 0;some nop;SCL = 1;dat <<= 1;some nop;SCL = 0;uchar I2C_read()uchar dat;l2C_waitack();uchar i;for(i=0;i<8;i+)SCL = 1;some nop;dat <<= 1;if(SDA)dat |= 0x01;SCL = 0;some nop;retur n dat;void W_at24c02(uchar add,uchar dat)I2C_start()

15、;l2C_wnte(0xa0);I2C_write(add);I2C_waitack();l2C_write(dat);l2C_waitack();I2C_st op();delay_us(300);uchar R_at24c02(uchar add)uchar AT_te mp;I2C_start();I2C_write(0xa0);I2C_waitack();I2C_write(add);I2C_waitack();I2C_start();I2C_write(0xa1);I2C_waitack();I2C_ack(0);I2C_sto p();AT_te mp = I2C_read();T

16、MOD=0x01;/*/*ma in */ void mai n()diyi();t= R_at24c02(24);程序运行时,读取掉电前数据m= R_at24c02(23);n= R_at24c02(25);while(1)panduan();/判断子函数xianshi();/显示子函数void diyi()定义子函数P2=0xbf;P0=0xbf;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void exer1() interrupt 1 / 定时器 /计数器 1uchar t1;TH0=(65536-50000

17、)/256;TL0=(65536-50000)%256;t1+;if(t1=10)P 2=0x9f; P0=0x00;if(t1=20)P 2=0x9f; P0=0xff;t1=0;t+;W_at24c02(24,t );/每隔一秒,保存当前数据delay(3);W_at24c02(23,m);P2 = 0xdf;P0 =b6; P 2=0x1f; P 0=0xff; P2 = 0xff; P0 =as n%10;W_at24c02(25, n);if(t=60)t=0; m+;if(m=60)m=0; n+;if(n=24)n=0;void xia nshi()/显示函数P2 = 0xdf;

18、 P0 =b0; P 2=0x1f; P 0=0xff; P2 = 0xff; P0 =ast%10;P2=0x1f; P0=0x00;delay(3);P2 = 0xdf; P0 =b1; P 2=0x1f; P 0=0xff; P2 = 0xff; P0 =as(t/10)%10;P 2=0x1f; P0=0x00;delay(3);P2 = 0xdf; P0 =b2; P 2=0x1f; P 0=0xff; P2 = 0xff; P0 =0xbf;P 2=0x1f; P0=0x00;delay(3);P2 = 0xdf; P0 =b3; P 2=0x1f; P 0=0xff; P2 =

19、0xff; P0 =asm%10;P2=0x1f; P0=0x00;delay(3);P2 = 0xdf; P0 =b4; P 2=0x1f; P 0=0xff; P2 = 0xff; P0 =as(m/10)%10;P2=0x1f; P0=0x00;delay(3);P2 = 0xdf; P0 =b5; P 2=0x1f; P 0=0xff; P2 = 0xff; P0 =0xbf;P 2=0x1f; P0=0x00;delay(3);P 2=0x1f; P0=0x00;delay(3);P2 = 0xdf; P0 =b7; P 2=0x1f; P 0=0xff; P2 = 0xff; P0

20、 =as( n/10)%10;P 2=0x1f; P0=0x00;delay(3);void delay(uchar z)/ 延时函数uchar i,j;for(i=0;i<z;i+)for(j=0;j<110;j+);void panduan()/ 判断函数P3=0xfe;delay(5);tem p=P3;temp=temp&0xf0;if(te mp !=0xf0)delay(5);if(te mp !=0xf0)while( P3!=0xfe);if(tem p=atO)a+;TRO=O; if(a=4) a=0;TR0=1;if(te mp=at1)if(a=1) t+; if(t=60) t=0; if(a=2)m+;if(m=60)m=0;if(a=3) n+;if( n=24) n=0;if(te mp=at2)if(a=1)if(t=0)t=60;t-;if(a=2)if(m=0)m=60;m-;if(a=3)if(n=0) n=24; n-;P2 = OxcO;PO =b7; P 2=0x0

温馨提示

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

评论

0/150

提交评论