模拟电子时钟设计.doc

上传人:精*** 文档编号:1031178 上传时间:2024-03-24 格式:DOC 页数:18 大小:123.23KB
下载 相关 举报
模拟电子时钟设计.doc_第1页
第1页 / 共18页
模拟电子时钟设计.doc_第2页
第2页 / 共18页
模拟电子时钟设计.doc_第3页
第3页 / 共18页
模拟电子时钟设计.doc_第4页
第4页 / 共18页
模拟电子时钟设计.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、武汉理工大学专业课程设计3(微处理器与微控制器应用)课程设计说明书模拟数字时钟的设计1 课程设计技术要求以89c51单片机为核心芯片,设计一个数字时钟,要求如下:A、 利用LED显示数字时钟的时和分;B、 可以对数字时钟进行初始时间设置;C、 可以调整数字时钟的时间;2 设计方案及原理本设计以AT89C51单片机为核心控制器,P0口接LED显示模块,P1口接按键,通过按键输入来控制显示器的显示。在上电时LED显示器开始显示时间并自动计时,自动计时采用单片机内部T0中断实现,在按键电路中只设置了三个按键,通过检测第一个按键按下的次数来实现调时、调分、调秒按键的作用,再通过LED显示器显示时、分、

2、秒的改变。首先设定单片机内部的一个定时器计数器工作于定时方式,对机器周期计数形成基准时间,然后用另一个定时器计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。然后通过数码管把它们的内容在相应位置显示出来。在具体处理时,定时器计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。AT89C51引脚图如图1所示: 图1 AT89C51引脚图VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被

3、定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输

4、入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。 P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些

5、特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH编程期间,此引脚用于输入编程脉冲。在

6、平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(000

7、0H- FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3 硬件实现方案3.1 振荡电路设计单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础

8、上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2所示: 图2 振荡电路3.2 按键接口电路 本实验设计中将按键安置在一起,每个按键占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。 按键接口电路如下图图3所示: 图3 键盘接口电路键盘接口电路中通过调节按键k1的次数分别设置秒、时、分,按键k2实在设置时间是对设置数进行加,按键k3是对设置数进行减,按键k4是进行复位。我设置的复位时间是00-00-00。3.3 显示电路设计对于现实电路我

9、们可以采用数码管,也可以采用液晶显示在这里我采用8位的LED显示器,它显示的时间清晰便捷。显示电路如图4所示: 图4显示电路3.4 完整电路模拟数字时钟完整电路图如下图图5所示: 图5 模拟数字时钟完整电路4 模块功能分析或源程序代码4.1 定时中断子程序 本设计中采用单片机内部定时计数器对于中断子程序,每隔50ms产生一次中断,20次中断即为一秒,秒钟加1。秒钟计满60秒,分钟加1,分钟记满60,小时加1.当小时加到23时全部清零。以下是中断子函数的流程图如图6所示: 开始 产生中断? 否 是 X+ X=20? 否 是 X=0 M+ M=60? 否 是 M=0 f+ f=60? 否 是 f=

10、0s+ s=24? 否 是 s=0 结束 图6 定时计数器终端服务流程图中断服务程序如下:void int0( ) interrupt 1/中断服务程序ET0=0;TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1; x+; if(x=20)/计数20恰好为1秒 x=0;m+; if(m=60)/秒到60 m=0;f+; if(f=60)/分到60 f=0;s+;if(s=24) s=0; 4.2 源程序代码#includeunsigned int m=0,f=0,s=0,con=0;unsigned chard=0xc0,0xf9,

11、0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf;/段选unsigned char x=0x00;#define uint unsigned int#define uchar unsigned charsbit k1=P10;/按钮sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit s1=P14;void delay(unsigned int x)/延时1ms unsigned char j; while(x-) for(j=0;j=4) con=0;TR0=1;ET0=1; if(con=1)/按了一下表示调秒

12、if(k2=0)/增加 delay(30); while(k2=0); m+; if(m=59) m=0; if(k3=0)/减 delay(30); while(k3=0); m-; if(m=60) m=59; if(con=2) if(k2=0) delay(30); while(k2=0); f+; if(f=59) f=0; if(k3=0) delay(30); while(k3=0); f-; if(f=60) f=59; if(con=3) if(k2=0) delay(30); while(k2=0); s+; if(s=23) s=0; if(k3=0) delay(30)

13、; while(k3=0); s-; if(s=24)/实现循环减 s=23; EA=1;/中断开启 void main()/设置定时50ms TH0=(65535-50000)/256; TL0=(65535-50000)%256; TMOD=0X01;ET0=1;TR0=1;EA=1;/开启定时中断 while(1) key(); display(); void int0() interrupt 1/中断服务程序ET0=0;TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1; x+; if(x=20)/计数20恰好为1秒 x=0;

14、m+; if(m=60)/秒到60 m=0;f+; if(f=60)/分到60 f=0;s+;if(s=24) s=0; ET0=1;4.3 调试过程及结论自动开始计时如下图图7所示: 图7 开始计时调节时间如下图图8所示: 图8 调节时间复位如图图9所示: 图9 复位显示所遇到问题及结论:在设计过程中,遇到了几个小问题。比如,秒钟到达六十时,分钟核实中同时进位。这是在设计时因为大意而多加了一个大括号。通过调试结果证明设计符合要求。5 心得体会 通过这次的课程设计让我学到了很多东西,也牢固了了我在书本上所学的知识,通过一个课题的设计,让我明白了如何设计好一个项目。课题的入手后,先进行课题分析,

15、然后上网、看书查资料,之后就是开始初步的硬件画图和软件设计。再然后就是进行硬件软件的调试和修改,直到设计成功。每一个过程都要自己都去亲自实施和设计,才能在这个设计过程中学到了自己应该熟练掌握的知识和技能。这一次设计是使用C编程的,在这个编程过程中倒是学到了不少的东西,自己的编程能力也得到了好大的提高。单片机作为我们们的主要专业课之一,虽然初学们对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我们发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。作为一名电子专业的大三学生,我们觉得做单片机课程设计是十分有意义的,而且是十分必要的。虽然过去从未独立应用过它们,但在学习的过程中带

16、着问题去学我们发现效率很高,这是我们做这次课程设计的又一收获。然后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终

17、身。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我们也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。 总之,这一次的单片机课程设计让我学到了很多有用的知识和技能。6 参考文献1 李广弟,朱月秀,冷祖祁.单片机基础M.第3版.北京航空航天大学出版社,2007年1月2李华.MCS-51系列单片机实用接口技术M.北京航空航天大学出版社,19963 马忠梅,张凯,马岩,单片机的C语言应用程序设计,M,北京:北京航空航天大学出版社,2003.1118

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922