版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、郑州航空工业管理学院单片机课程设计说明书 12 级 电子信息工程 专业 82 班级题 目 基于单片机的数字电子时钟 学 号 121308227 姓 名 王涛 指导教师 王丹 二一 四 年 十二 月 十七 日一、电子时钟的基本原理数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机STC89C52在Proteus软件中实现数字时钟的定时、时间调整、闹正设置等功能。具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各
2、个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C52芯片和2个四位一体的共阳极的数码管为核心,辅以必要的电路,构成了一个单片机数字时钟。 单片机控制的数字钟的硬件结构与软件设计,给出了C语言源程序。此数字钟是一个将“时”、“分”、“秒
3、”显示于人的视觉器官的计时装置。显示器件选用LED七段数码管。在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。针对数字钟会产生走时误差的现象,在电路中就设计有有校准时间功能的电路。使用动态数码显示的方法,运用独立式按键识别过程,按“时”,“分”,“秒”数据送出显示处理方法。(1)具有时、分、秒计数显示功能,以24小时循环(2)LED数码管显示时、分、秒的个位和十位(3)可以在任意时刻校准时间(4)能够完成时间的显示、复位等功能二、电子时钟的硬件设计图1数码管选择端 图2接外部晶振 图3按键原理图4 89c52单片机AT89C52单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)
4、和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分. Vcc40 电源端;GND20 接地端。工作电压为5V 。 外接晶振引脚晶振连接的内部、外部方式图XTAL119 、XTAL218 :XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。复位RST9常用复位电路图在振荡器运行时,有两个
5、机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。P0口:P0口是一个八位三态I/O口,在访问外部存储器时,可分时用作低八位地址线和八位数据线;该系统中P0口是和8个330的电阻相连接到数码管上,用来控制数码管的段选线,因为数码管是共阳极的,故低电平时有效,数码管的字段才会点亮;P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,在访问外部存储器时,它送出高八位地址;在系统中它是和8个4.7K的电阻相连接到三极管上,用来控制数码管的字选线,还需要用
6、一个低电平使三极管导通,字选线也是低电平时有效,数码管才会点亮;P3口:P3口是一个带有内部上拉电阻的8位双向I/O口:在系统中其中P3.0到P3.4四个接口是和4个按键相连,可以用来调时,P3.7接口是通过一个电阻、三机管和蜂鸣器相连,当电路连接正确且三极管导通时,蜂鸣器就会发出响声;(3)键盘显示、通信部分:主要是由一个MAX232芯片、四个按键、两个4位的LED及一些电阻等元件组成,构成了LED显示电路及键盘控制电路,下面分别作介绍: LED显示电路:LED数码管是通过控制对应发光二极管来显示数字的,每个数码管是由8个发光二极管构成,外加正向电压时二极管导通,发出清晰的光,数码管有共阴极
7、和共阳极之分;系统采用的是共阳极的,用因为因为需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,另需两个数码管来显示横,因此我们用了两个四位的数码管,并采用动态显示方式显示时间;键盘控制电路:该设计需要校对时间,所以用三个按键来实现;按K2选择位,按 K3来调节加时间,按 K4来减时间,但当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况,在释放一个键时,也回会出现类似的情况,这就是抖动,抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms,抖动问题不解决就会引起对闭合键的识别,用软件方法可以很容易地解决抖动问题,这就是通过延迟8ms来等待抖动
8、消失,这之后,在读入键盘码。表1元器件列表原件名称数量焊接位置电源部分USB座1USBUSB线1双排针(2)1CONN1跳帽2104电容0.1uF6C2,5,6,7,8,9,11LED灯1D1电阻2K1R2最小系统部分40针座1U1STC89C521晶振12MHz1Y1电容20pF2C3,C4复位键1SW_RST电阻10K1R1蜂鸣器1LS1+三极管9015(电子钟,交通灯)9Q1Q9三极管9015(密码锁,电子琴)5Q1Q4, Q9电阻3301R3键盘显示、通信部分16针座1U2MAX2321单排针(5)1UART按键(电子钟,交通灯)4KEY1KEY4按键(密码锁,电子琴)8KEY1KEY
9、8单排针(3)1SWITCH1跳帽14位LED(电子钟,交通灯)2DIGILED1,24位LED (密码锁,电子琴)1DIGILED1电阻4.7K8R14R21电阻3308R6R133、 电子时钟的软件设计1、 程序流图及说明 先是主程序开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间,流程图如图所示,然后是子程序流程图,时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示,流程图如图所示,定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分
10、单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间,流程图如图所示:启动定时器开始按键检测时间显示 秒个位十位显示开始分个位十位显示小时个位十位显示结束图5主程序流程图 图6时间显示流程图开始硬件延时1s?秒加1是否60s?秒清零分加1是否为60min?分清零,时加1是否为24h?时清零K3按下?秒清零K3按下?分加1,60清零时加1,24清零显示时间显示时间K3按下?开始中断返回结束图7定时中断流程图 图8按键处理流程图2.源程序#include"reg52.h" #include"intrins.h"unsig
11、ned int second,min,hour,num,m;sbit K1 = P30; /总选择sbit K2 = P31; /次选择sbit K3 = P32; /+数据sbit K4 = P33; /-数据unsigned char code duan=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff;void delay(unsigned int i) char j; for(i; i > 0; i-) for(j = 200; j > 0; j-);void time() interrupt 1 TH0
12、=(65536-50000)/256; TL0=(65536-50000)%256;num+;if(num=20)second+;num=0;if(second>=60)second=0;min+; if(min>=60) min=0; hour+; if(hour>=24) hour=0; void main(void)second=0;min=0;hour=12;num=0;m=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=1; EA=1; while(1) if(K2=0)
13、delay(40) ; if(K2=0) while(K2=0); m+; if(m=0) P2=0x7f;P0=duanhour/10;delay(100);P2=0xbf; P0=duanhour%10;delay(100);P2=0xdf;P0=duan10;delay(100);P2=0xef;P0=duanmin/10;delay(100);P2=0xf7;P0=duanmin%10;delay(100);P2=0xfb;P0=duan10;delay(100);P2=0xfd;P0=duansecond/10;delay(100);P2=0xfe;P0=duansecond%10;
14、delay(100); if(m=1) P2=0x7f;P0=duan11;delay(100);P2=0xbf; P0=duan11;delay(100);P2=0xdf;P0=duan11;delay(100);P2=0xef;P0=duan11;delay(100);P2=0xf7;P0=duan11;delay(100);P2=0xfb;P0=duan10;delay(100);P2=0xfd;P0=duansecond/10;delay(100);P2=0xfe;P0=duansecond%10;delay(100);if(K3=0) delay(40);if(K3=0)while(
15、K3=0);second=0; if(m=2) P2=0x7f;P0=duan11;delay(100);P2=0xbf; P0=duan11;delay(100);P2=0xdf;P0=duan10;delay(100);P2=0xef;P0=duanmin/10;delay(100);P2=0xf7;P0=duanmin%10;delay(100);P2=0xfb;P0=duan11;delay(100);P2=0xfd;P0=duan11;delay(100);P2=0xfe;P0=duan11;delay(100);if(K3=0) delay(40) ;if(K3=0) while(
16、K3=0);min+; if(K4=0&&min!=0)delay(20);if(K4=0&&min!=0) while(K4=0&&min!=0);min-; if(m=3) P2=0x7f;P0=duanhour/10;delay(100);P2=0xbf; P0=duanhour%10;delay(100);P2=0xdf;P0=duan11;delay(100);P2=0xef;P0=duan11;delay(100);P2=0xf7;P0=duan11;delay(100);P2=0xfb;P0=duan11;delay(100);P2
17、=0xfd;P0=duan11;delay(100);P2=0xfe;P0=duan11;delay(100);if(K3=0) delay(40);if(K3=0)while(K3=0);hour+; if(K4=0&&hour!=0)delay(40); if(K4=0&&hour!=0)while(K4=0&&hour!=0);hour-; if(m=4) m=0; 四、课程设计总结 首先作为一个团队,团结精神最重要。团结是使整个团队的凝聚力。在完成项目时,需要小组所有成员的共同努力,只凭个人的力量是无法完成的。其次是个人分工。每个人的能力
18、不同,我们根据每个人的实际情况具体分工。力求其在指定时间内完成任务,这样才能保证任务顺利完成。我们深刻地感受单片机不单是一门文化课程,更是一门科学技术。单片机课程设计则是人生课程,我们学到了很多课堂上无法学到的东西。从新奇好玩到失败后的痛苦无助,从失败中爬起,哪怕再失败,也永不放弃。这就是单片机课程设计教会我们的最宝贵的知识。此次课程设计我们组虽然成功的完成了任务,但是我们并不满足。因为温度影响超声波的传播速度,我们加入了温度补偿模块,这样可以根据环境温度应用不同的公式计算距离。此次课程设计是某一年电子设计大赛的课题,我们从中学到了很多技术知识。经过这次单片机课程设计实验,让我获得了很多知识,进一步加深了我对AT89C52单片机的掌握,另外也巩固了我的编程思想和焊接技术。 本次的数字时钟设计,让我对自己在大学四年的知识的到了回顾,例如模电和数电以及做PCB的软件。它也让我充分发挥了对所学知识的理解和设计的书面表达能力。这为今后自己进一步深化学习,积累了一定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论