龙岩学院课程设计报告课程设计题目基于AT89C51芯片制作的数字时钟班级05电本(2)班姓名邵利威学号200504032405电本2班24号邵利威1任务书一.任务利用(AT89C51芯片)单片机定时器制作数字时钟二.设计目的通过课程设计的教学实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。初步掌握简单单片机应用系统的设计、制作、调试的方法。提高动手实践能力、提高科学的思维能力。要求三.设计要求1)数码管显示当前的时间值;2)时间精度为0.5秒,由时、分之间的分隔点的闪烁体现;3)两个按钮,一个用作“时”的设定另一个做“分”的设定;四.制作要求1.掌握单片机最小系统的电路原理图;2.硬件的焊接、连接;3.独立编辑、编译软件;05电本2班24号邵利威2数字时钟目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。要知道当前的时间,必须先开灯,故较为不便。现在市场上也出现了一些电子钟,它以四只LED数码管来显示时分,与传统的以指针显示秒的方式不同,违背了人们传统的习惯与理念,而且这类电子钟一般是采用大型显示器件,只适用于银行、车站等公共场所,且外观设计欠美观,很少进入百姓家庭。此外无论是机械钟、石英钟还是电子钟,都价格比较昂贵。针对以上存在的问题,我们设计了一款采用LED显示器件显示的电子时钟,经济实惠,且正确度高,又便于在无照明的情况下查看时间。是一款真正价廉物美的电子时钟。1系统主要功能电子钟的主要功能有:四只LED数码管显示当前时分;两个按钮,一个用作“时”的设定另一个做“分”的设定。长按按钮可进行快进调节。2系统的硬件构成及功能电脑钟的原理框图如图1所示。它由以下几个部件组成:单片机89C2051、电源、时分显示部件以及显示驱动部分。时分显示采用静态扫描,用74LS164驱动数码管显示时分,显示驱动的数据输出和时钟信号输出都通过AT89C2051的P1.0和P1.1口控制。电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作。图105电本2班24号邵利威32.1AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C2051是一个有20个引脚的芯片,引脚配置如图2所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。AT89C2051芯片的20个引脚功能为:图2AT89C2051引脚配置VCC电源电压。GND接地。RST复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2来自反向振荡放大器的输出。P1口8位双向I/O口。引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1”后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。P3口引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。表1P3口特殊功能P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)05电本2班24号邵利威42.2驱动部件本设计的驱动电路采用74LS164,74LS164是最常见的移位寄存器,移位寄存器是暂时记忆数据的“寄存器”,其特征是具有将数据向左或向右移动的功能。移位寄存器有各种形式。按存数据的位数有4位、8位等,按“输入/输出数据”形式有“串入/串出”、“串入/并出”、“并入/串出”、“并入/并入”等。图3(a)是串行输入/并行(串行)输出移位寄存器74LS164的管脚排列图。其功能表见表2所示。74LS164有两个串行数据DA、DB输入端,使用时一般把它们连在一起;CR为清零输入端,低电平有效,当该端加入低电平时,寄存器输出Q0~Q7全为低电平。在正常情况下,清零输入端接高电平,当CP信号上升沿到来时,数据右移一位;Q0~Q7为并行数据输出端,同时Q7端也是串行数据输出端,对于串行输入的数据,最先输入的从Q7输出,最后进入的从Q0输出。CP为移位脉冲。74LS16417814DADBQ0Q1Q2Q3GNDCPCRQ4Q5Q6Q7Vcc74LS165S/LCPD4D5D7Q7D6Q7GNDSID0D1D2D3CIVcc18916(a)(b)图3常用移位寄存器管脚排列图表274LS164的真值表输入输出CRCPDADBQ0Q1Q2Q3Q4Q5Q6Q70XXX0000000010XXQ0Q1Q2Q3Q4Q5Q6Q71↑111Q0Q1Q2Q3Q4Q5Q61↑0X0Q0Q1Q2Q3Q4Q5Q61↑X00Q0Q1Q2Q3Q4Q5Q62.3时分显示部件由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图4所示。二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。05电本2班24号邵利威5图4LED数码管结构原理图众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的转换。从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。各段码位与显示段的对应关系如表3。表3各段码位的对应关系需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。通常数据口的D0位与a段连接,D1位与b段连接,……D7位与dp段连接,如表3所示,表4为用于LED码管显示的十六进制数和空白字符与P的显示段码。表4LED显示段码字型共阳极段码共阴极段码字型共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3BOH4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H注:(1)本表所列各字符的显示段码均为小数点不亮的情况。(2)“空白”字符即没有任何显示。段码位D7D6D5D4D3D2D1D0显示段dpgfedcba05电本2班24号邵利威63.总原理图设计根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阴数码管。将AT89C2051的P1.0~P1.1分别与74LS164的数据输入口和时钟信号输入口相连,74LS164是8位串入并出移位寄存器,负责将P1.0输出的串行数据转换成并行信号。显然,这种方式显示同样的位数使用单片机的口线大大减少,即可以让LED当前时间数值,数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。为节省端口,本系统采用静态扫描显示方式。系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。每个LED数码管由相对应的74LS164驱动,数码管的a,b,c,d,e,f,g,h,分别分别74LS164的QA,QB,QC,QD,QE,QF,QH相连。具体设计原理图及实物PCB图见下图所示:数字钟原理图505电本2班24号邵利威7实物PCB图64系统的软件构成及功能本系统的软件系统主要可分为主程序和定时器中断程序以及查询P1.2,P1.3端口并判断是否调用子程序三大模块。下面对部分模块作介绍。4.1系统主程序设计主程序的功能是完成系统的初始化,程序流程如图4所示。图705电本2班24号邵利威84.2中断程序设计(1)T0定时器设计中断程序(如图5所示),其中T0完成时间计数,T1控制小数点闪烁,采用AT89C2051内部T0中断实现,T0工作于定时方式1,进行16位计数,赋初值为3CB0H,T0溢出时即计时0.1S,当时间到达0.1s×60,即1分钟时,分计数增加1,到达1小时,则时计数增加1,分别用R4,R3,R2,R1存放时、分的十位、个位,值分别对应显示在的数码管4、数码管3、数码管2、数码管1。当放分计数和时计数的值分别到达60min、24h时,则对它们清零,以便从新计数。具体流程图(8),60min、24时既复位清零的流程图见图(9)。(2)T1定时器设计(控制小数点闪烁)T1定时器的中断打开及计时开始由T0中断进行控制,当T0溢出10次,既计时达到一秒,打开T1中断并开始计时,T1的赋值不做严格规定,当T1溢出时,产生T1中断,调用中断程序,同时关闭T1中断,并使R3加10,在延迟约0.5秒左右,调用一次显示子程序,此时数码管3显示的数字为带小数点的数字,最后将R3减10,返回原来的值。中断程序结束。对于R3加10分析:首先我们知道对于0~9各字符的显示段码均为小数点不亮的情况的代码为:3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;同理当0~9各字符的显示段码均为小数点亮的情况的代码为:db0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h,0ffh,0efh。所以在程序设计中制TAB表格数据为:Tab2:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhdb0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h,0ffh,0efh所以当R3加10在表格中所查到的代码所代表的数既为小数点亮的数。具体流程图设计见图(8)(3)时分设置设计在时分设置功能设计中,主要用判断语句JBP1.2,REL或JBP1.3,REL,进行对P1.2,P1.3端口的电平高低进行实时查询判断,初始值为低电平,当P1.2检查到高电平时,关闭TO,T1定时器中断,并使T0停止计时,进入分设置模式,设置完毕后返回,同时打开TO,T1定时器中断,并使T0开始计时;当P1.2检查到高电平时,同样的关闭TO,T1定时器中断,并使T0停止计时,进入时设置模式,设置完毕后返回,同时打开TO,T1定时器中断,并使T0开始计时。分设置具体流程图设计见图(10)时设置流程图与分设置基本相似,把P1.2端口换成P1.3即可,在进位过程中的设计可以参看图(9),使之能在24时进位置00时。05电本2班24号邵利威9流程图设计图(8)是否到一秒R5加1调用显示程序分显示加1调用显示程序是否到