目录
1 引言.......................................................................................................................................... 1
2 设计任务与要求...................................................................................................................... 2
2.1. 设计题目...................................................................................................................... 2
2.2. 设计要求...................................................................................................................... 2
3 系统的功能分析与设计方案.................................................................................................. 3
3.1. 系统的主要功能.......................................................................................................... 3
3.2. 系统的设计方案.......................................................................................................... 3
3.3. 数码管显示工作原理.................................................................................................. 4
3.4. 电路硬件设计.............................................................................................................. 5
3.4.1. 设计原理框图................................................................................................... 5
3.4.2. 电源部分........................................................................................................... 5
3.4.3. 复位电路........................................................................................................... 6
3.4.4. 指示灯电路....................................................................................................... 6
3.4.5. 按键电路........................................................................................................... 6
3.4.6. 时钟电路........................................................................................................... 8
3.4.7. 驱动电路........................................................................................................... 8
3.4.8. 数码管连接电路............................................................................................... 9
3.4.9. 主控模块AT89S52........................................................................................... 9
3.4.10. 材料清单....................................................................................................... 10
3.4.11. 电路原理图、PCB图及实物图................................................................... 11
3.5. 软件设计.................................................................................................................... 13
3.5.1. 软件设计流程................................................................................................. 13
3.5.2. 完整源程序..................................................................................................... 15
4 系统安装与调试.................................................................................................................... 21
4.1. 硬件电路的安装........................................................................................................ 21
4.2. 软件调试.................................................................................................................... 21
5 课程设计总结........................................................................................................................ 22
参考文献.................................................................................................................................... 23
致谢............................................................................................................................................ 24
摘 要
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面。这次课程设计通过对它的学习、应用,以AT89S52芯片为核心,辅以必要的电路,设计了一个简易的单片机电子时钟,包括硬件电路原理的实现方案设计、软件程序编辑的实现、电子时钟正常工作的流程、硬件的制作与软件的调试过程。电子时钟由5.0V直流电源供电,数码管能够比较准确显示时间,通过按键能够调整时间,从而到达学习、设计、开发软、硬件的能力。
关键词:单片机;AT89S52;电子时钟;数码管;按键
1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础。随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,为了让时钟更好的为人民服务,就要求人们不断设计出新型时钟。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟加一,满六十分小时加一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。、如今高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。
本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89S52芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。
利用单片机定时器制作数字时钟并可以实现时钟的控制。
(1)基本要求
① 制作数字时钟系统;
② 可以控制时钟电路,P1.0选择时、分、秒,P1.1对时、分、秒进行自加;
③ 灯的亮灭显示控制端,P3.7口黄灯亮表示控制时,P3.3口红灯亮表示控制分,红灯、黄灯一起亮表示控制秒。
(2)发挥部分
① 时间精度为0.5秒。
利用AT89S52单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间和复位控制等。
此外还要实现对时间的调整功能,AT89S5的P1.0、P1.1、RST外接三个独立按键,当按下P1.0按键时,系统进入调时间的状态或启动时间显示的功能;当按下P1.1按键时,对显示的数码管进行加一的功能,达到调整时间的目的;当按下RST按键时,实现对电子时钟进行复位的功能。
整个系统采用应用广泛的AT89S52作为时钟控制芯片,利用单片机内部的定时器\计数器来实现的,它的处理过程如下:首先设定单片机内部的一个定时器\计数器工作于定时方式,对机器周期计数形成基准时间,然后用另一个定时器\计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。然后通过数码管把它们的内容在相应位置显示出来即可。
数码管显示可以采用静态显示方法或动态显示方法。静态显示方法需要数据锁存器等硬件,接口复杂,时钟显示一般用6个或8个数码管。由于系统没有其他的复杂的任务处理,而且显示的时钟信息随时都可能变化,一般采用动态显示方式。动态显示方法线路相对简单,但需动态扫描,扫描频率要大于人眼视觉暂留频率,信息看起来才稳定。译码方式可分为软件译码和硬件译码,软件译码通过译码程序查得显示信息的字段码;硬件译码通过硬件译码器得到显示信息的字段码,实际中通常采用软件译码。
在具体处理时,定时器计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。另外,为了使用方便,设计了简单的按键,可以通过按键实现时间调整和复位。
数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。
静态显示:所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
动态显示:所谓动态显示,就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用动态显示。
此设计原理框图如图1所示,此电路包括以下六个部分:单片机,按键,指示灯,复位电路,晶振及显示电路。
图1设计原理框图
如图2所示,从外部引入5.0V的直流电,为单片机、复位电路等提供电源。
图2电源部分
如图3所示,复位电路采用上电自动复位和按键手动复位设计在一起,主要由型号为10uF的电解电容,8.2K和220的电阻以及按键S3构成,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。
图3复位电路
如图4所示,指示灯电路主要由两个发光二极管组成,端口低电平有效。灯的亮灭显示控制端,P3.7口黄灯亮表示控制时,P3.3口红灯亮表示控制分,红灯、黄灯一起亮表示控制秒。
图4指示灯电路
如图5所示,按键开关S1、S2分别接P1.0、P1.1端,S1选择时、分、秒,S2对时、分、秒进行自加,低电平有效。
图5按键电路
如图6所示,单片机外接石英晶体和微调电容实现了使用其内部时钟产生的时钟脉冲,其中晶振为12M,电容均为30pF无极性电容。
图6时钟电路
如图7所示,从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟设计采用数码管位选端与三极管集电极相连,三极管发射极接5V直流电源,三极管基极与单片机芯片P0口,数码管段选端与P2口相连。通过编程,单片机芯片即可通过控制端口电平来控制数码管位、段的控制。
图7驱动电路
图8为三位一体数码管的引脚功能图,数码管引脚与单片机芯片引脚和三极管对应相接。数字电子钟的显示模块用2个三位一体数码管实现,数码管从左到右依次显示时十位、个位,分十位、个位,秒十位和个位,采用软件译码动态显示。
图8数码管连接电路
AT89S52是美国ATMEL公司生产的低功耗,高性能CMOS八位单片机,片内ROM全部采用FLASH ROM技术,片内含4K bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。AT89S52提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。它是标准的40引脚双列直插式集成电路芯片,晶振时钟为12MHz,第31引脚需要接高电位使单片机选用内部程序存储器;第40脚为电源端VCC,接5V电源,第20引脚为接地端GND。
Bill of Material for 电子钟原理图.Bom
Used Part Type Designator Footprint
==== ================ ========== ==========
6 4.7k R1 R2 R3 AXIAL0.4
R4 R5 R6
1 8.2k R9 AXIAL0.4
1 10uF C1 RB.2/.4
1 12MHz Y1 XTAL1
2 30pF C2 C3 RAD0.2
2 220 R7 R8 AXIAL0.4
2 ARK AR1 AR2 SP410361K
1 AT89S52 U1 DIP40
1 CON2 J1 SIP2
1 HEADER 5X2 JP1 DIP10
1 RED LED2 DIODE0.4
6 S8550 Q1 Q2 Q3 TO-92B
Q4 Q5 Q6
3 SW-PB S1 S2 S3 SW
1 YELLOW LED1 DIODE0.4
图9为单片机电子时钟的电路原理图,图10为其PCB图,图11为实物图。
图9电路原理图
图10 PCB图
图11实物图
电子时钟的软件系统由主程序和子程序组成,主程序程序包含初始化参数设置、按键处理、数码管显示模块等,
(1)主程序
主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。主程序执行流程如图12。
图12主程序流程图
(2)定时器/计数器T0中断程序
定时器/计数器T0用于时间计时。选择方式1,重复定时,定时时间设为20ms,定时时间到则中断,在中断程序中用一个计数器对20ms计数,计50次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。在对各单元计数的同时,把它们的值放到存储单元的指定位置。定时器/计数器T0中断程序流程图如图13。
图13中断程序流程图
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void KeyHandle(void); /*按键处理模块*/
void Delay (); /*10ms延时*/
void DispClock();
uchar Control[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//数码管控制选通
uchar DisplayArray[6]={0x00,0x00,0x00,0x00,0x00,0x00};//中间存储变量
uchar code CodeNum[16]={0x28,0xEB,0x32,0xA2,0xE1,
0xA4,0x24,0xE8,0x20,0xA0};//0-f段码
uchar Keyflag=0;/*按键处理标记*/
uchar SetFlag=0;//=0,Normal;=1,调秒; =2,调分;=3,调时;
uchar Msecond,Second,Minite,Hour;
sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P3_7 = P3^7;
sbit P3_3 = P3^3;
void main(void)
{
EA=1;
ET0=1;
ET1=1;
P1_1=1;
P3_7=1;
P3_3=1;
TMOD = 0x11;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256; //设定时值为20ms
TH1=(65536-500)/256;
TL1=(65536-500)%256; //设定时值为500us
TR0=1;
TR1=1; //开始定时
for(;;)//while(1)
{
DispClock();
KeyHandle();
}
}
void Time0(void) interrupt 1
{
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
Msecond++;
if(Msecond>=50)
{
Msecond=0;
Second++;
if(Second>=60)
{
Second=0;
Minite++;
if(Minite>=60)
{
Minite=0;
Hour++;
if(Hour>=24)
{
Hour=0;
}
}
}
}
}
void Time1(void) interrupt 3
{
static uchar s_count=0;//变量定义在其它语句之前,keil c(非C语言规则)
uchar temp;
TH1=(65536-500)/256;
TL1=(65536-500)%256; //设定时值为500us
P0=Control[s_count];
temp=DisplayArray[s_count];
P2=CodeNum[temp];
s_count++;
if(s_count>5)
{
s_count=0;
}
}
void KeyHandle(void) /*按键处理*/
{
P1_0=1;
if(P1_0==0)
{
Delay();
if(P1_0==0)
{
SetFlag++;
if(SetFlag>3)
SetFlag=0;
switch (SetFlag)
{ case 1:
P3_7 = 0;
P3_3 = 0;
break;
case 2:
P3_7 = 1;
P3_3 = 0;
break;
case 3:
P3_7 = 0;
P3_3 = 1;
break;
default:
P3_7 = 1;
P3_3 = 1;
break;
}
}
P1_0=1; //防止按键不放
while((P1_0&0x01)!=0x01);
}
//加法处理
P1_1=1;
if(P1_1==0)
{
Delay();
if(P1_1==0)
{
switch (SetFlag)
{
case 1:
Second++;
if(Second>=60) Second=0;
break;
case 2:
Minite++;
if(Minite>=60) Minite=0;
break;
case 3:
Hour++;
if(Hour>=24) Hour=0;break;
default: break;
}
P1_1=1; //防止按键不放
while((P1_1&0x01)!=0x01);
}
}
}
void DispClock()
{
uchar tempData=0;
tempData=Second;//秒钟分解
DisplayArray[0]=tempData%10;
DisplayArray[1]=tempData/10;
tempData=Minite;//分钟分解
DisplayArray[2]=tempData%10;
DisplayArray[3]=tempData/10;
tempData=Hour;//小时分解
DisplayArray[4]=tempData%10;
DisplayArray[5]=tempData/10;
}
void Delay()//10ms延时
{
uchar i,j;
for(i=20;i>0;i--)
for(j=249;j>0;j--);
}
按照电路PCB图把元器件安装到已腐蚀好的铜板对应的位置,再用电烙铁和焊锡将元器件各引脚焊接好。
注意事项:(1)元器件的布局在合理的前提下应尽量集中,尽量使用单面板,双面板顶层走线要尽量少,各个元器件间引脚的连线应尽量短。(2)各个元器件引脚的安装要正确,焊接时不要有虚焊。
将电路板接上5V直流电源,再将用程序调试软件Keil编译好的目标程序代码下载到单片机芯片AT89S52,即开始进行软件的调试工作。如果显示结果不符合设计要求,先检查电路各连接点是否正确连接、是否有虚焊,硬件无问题再检查程序代码是否符合硬件电路的设计,再进行硬件电路的调试工作。如此反复操作,直到调试出正确结果。
经过几周时间以及对单片机的知识总结,把课程设计分成了硬件和软件两大模块。总的来说,硬件部分很好入手,电路也较简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。整个设计过程中遇到的最大问题是软件的编写,软件部分细分为了按键模块、定时/计数模块、显示模块,最后把几个模块整合在主程序模块中,最终实现了电子时钟的功能。
在此次课程设计过程中,将在课程中学到的理论知识运用到实际作品设计、操作中,更进一步地熟悉了单片机芯片的结构及掌握了其工作原理和具体的使用方法与相关元器件的参数计算方法、使用方法,了解了电路的开发和制作及课程设计报告的编写。加深了对相关理论知识及专业知识的掌握度,增强自身的动手能力,锻炼及提高了理解问题、分析问题、解决问题的能力,更深刻的体会到了理论联系实际的重要性,进一步掌握画图软件的使用和提高相应的画图操作水平及技巧。在整个设计过程中还学到了团体合作精神和分析、解决问题的重要性,为以后的求职之路打下了基础。
[1] 黄正谨.综合电子设计与实践[M].东南大学出版社.20##-3.
[2] 夏路易,石宗义.电路原理图与电路设计教程Protel 99SE[M] .北京希望电子出版社.2002.
[3]谢嘉奎.电子线路[M].高等教育出版社.20##-2.
[4] 王毓银.数字电路逻辑设计[M].高等教育出版社.20##-2.
[5] 李光才.单片机课程设计实例指导[M]. 北京:北京航空航天大学出版社 2004.
[6] 杨欣等.电子设计从零开始[M].清华大学出版社.20##-10.
[7] 刘湘涛.江世明.单片机原理与应用[M]. 北京:电子工业出版社,2006.
本课程设计能够顺利完成,是因为有各指导老师的耐心指导、讲解和同学的热心帮助和支持。在此,衷心感谢在本次课程设计过程中指点和帮助我的各指导老师和同学!
这与父母多年来一如既往的支持和关怀是分不开的。在此,向任劳任怨、含辛茹苦的父母致以衷心的感谢!
感谢学院为我们提供了齐全的课程设计仪器设备以及良好的学习环境。
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
科技创新实践[数字时钟设计][用AT89S52单片机设计电子时钟的实验报告]目录单片机的个性化电子钟设计报告1一、设计背景1二、作…
单片机电子时钟的设计目录1引言12设计任务与要求221设计题目222设计要求23系统的功能分析与设计方案331系统的主要功能332…
电子时钟实验报告全部代码在文档末尾51单片机LCD1602液晶显示屏平台下编程实现可直接编译运行目录一实验目的1二实验要求2三实验…
第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和12…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
单片机原理与应用课程设计与实现实训报告专业自动化年级班级姓名实训时间实训地点指导教师一实训题目基于51单片机电子时钟设计设计要求1…
第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和12…
基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重…
单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时…
一6该课程设计是利用MCS51单片机内部的定时计数器中断系统以及行列键盘和LED显示器等部件设计一个单片机电子时钟设计的电子时钟通…