1、目 录摘要 4 第1章 设计要求 51.1设计要求 51.2设计内容 51.3设计基本环境 5第2章 设计方案和论证 62.1总设计原理框图 62.2设计方案选择 7第3章 硬件电路 8 3.1单片机的选择 83.1.1 单片机内部原理分析 83.1.2单片机的引脚及封装 93.1.3单片机最小系统 11 32 数码管显示工作原理 11 3.3 8255A模块 12 3.4时间调节模块 13 3.4.1 时间设置 13 3.4.2整点报时 13 第4章 软件调试 14 4.1时间调节程序流程图 14 4.2主程序流程图 18第5章 仿真调试 22第6章 总结与体会 23第7章 参考文献 23摘
2、要单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,集定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。通过本子课程设计掌握单片机的基本原理,加深对课堂知识的理解,从而达到学习、设计、开发单片机软硬的能力。本课程设计由AT89C51,BUTTON,六段数码管等构成,结合单片机最小系统晶振电路作为驱动电路,复位电路作为系统复位使用;结合proteus和keil软件进行设计此系统,通过四个按键调整走时时间和定时时间,由定时器定时并在数码管上显示相应的时间,通过中断和按键扫描实现对时间的
3、停止、启动和设置调整。程序利用C语言进行编写,结合单片机的引脚的以及相关知识完成程序的编写,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。运行仿真时,可以显示时钟走时时间,通过按键可以修改时间,以及可以进行手动设置闹钟闹铃时间,同时通过蜂鸣器进行闹铃的效果,通过仿真调试效果真实、准确,节省了硬件资源。关键字:单片机;LED数码管;定时;子时钟;键盘控制第1章1.1 设计要求1、准确计时,以数字形式显示时、分、秒的时间。2、小时以24小时计时形式,分秒计时为60进位。 3、校正时间功能,即能随意设定走时时间。4、闹钟功能,一旦走时到该
4、时间,能以声或光的形式告警提示。5、设计5V直流电源,系统时钟电路、复位电路。 6、能指示秒节奏,即秒提示。7、可采用交直流供电电源,且能自动切换。1.2 设计内容 以单片机为控制器,采用定时器中断的方法,设计一个一天24小时进制的实时时钟,并用8个发光二极管分别显示时、分、秒的记时以及过度符号“-”,通过按键调定时钟的具体时间,达到修改时间,设定闹钟,整点报时,倒计时秒表的效果。1.3设计基本环境条件环境条件:电脑、软件(keil)、硬件(proteus)组合设计系统Keil:它是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性
5、、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Proteus:它是目前最好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。第2章 设计方案和论证本次设计时钟电路,使用了89C51单片机芯片控制电路,单片机控制电路简单且
6、省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、LED显示即可满足设计要求。2.1 总设计原理框图如下图所示:微型控制器时钟电路声光报时校时输入数据显示2.2 设计方案的选择1. 计时方案方案1:采用现成实时时钟芯片使用一些实时时钟集成电路,如DS1287、DS12887、DS1302等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时等功能,计时数据的更新每秒自动进行一次,不需要程序干预。因此,在工业实时测控系统中多采用这类专
7、用芯片来实现实时时钟功能。方案2:使用单片机内部的可编程定时器。利用单片机内部的定时计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案优点是节省硬件成本,可以利用程序代替。缺点是程序设计相对较为复杂,精确度不高,同时还可能会和延时冲突,导致显示效果不佳。2.显示方案对于实时时钟而言,显示显然是另一个重要的环节。通常LED显示有两种方式:动态显示和静态显示。静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节约CPU的工作时间。但占有I/O口线多,每一个LED都要占有一个I/O口,硬件开销大,电路复杂。需要几个LED就必须占有几个并行口,比较适用于LED数量较少的场合。当
8、然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。本系统需要采用6位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。第3章 硬件电路 3.1单片机的选择3.1.1单片机内部原理分析通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯片。89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标
9、准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。51单片机中其主要资源有:8位CPU、片内带震荡器及时钟电路、128B片内数据存储器、4K片内程序存储器(8031无)、21B特殊功能寄存器、4个8位的IO口、一个全双工串行接口、两个16位定时器、中断系统有5个中断源、111条指令。其内部结构如图3-1所示。 图3-13.1.2单片机单片机的封装及引脚 89C51单片机是由深圳宏晶公司代理销售
10、的一款MCU,是由美国设计生产的一种低电压、高性能CMOS 8位单片机,片内含8kbytes的可反复写的FlashROM和128bytes的RAM,2个16位定时计数器5。 89C51单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。这些部件通过内部总线联接起来,构成一个完整的微型计算机。其管脚图如图所示。89C51单片机管脚结构图VCC:电源。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当
11、P1口的管脚第一次写1时,被定义为高阻输入。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”时,其管
12、脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3
13、口也可作为89C51的一些特殊功能口,如下表所示:P3口的位第二功能P3.0RXD(串行口输入)P3.1TXD(串行口输出)P3.2INT0(外部中断0输入)P3.3INT1(外部中断1输入)P3.4T0(定时器/计数器0的外部输入)P3.5T1(定时器/计数器1的外部输入)P3.6WR(片外数据存储器写允许)P3.7RD(片外数据存储器读允许)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲
14、信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意
15、加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。3.1.3单片机最小系统单片机最小系统就是能使单片机工作的最少的器件构成的系统。对于本课设所使用的89C51来讲,其最小系统为89C51单片机芯片、时钟电路和复位电路,器仿真原理图如图所示。32 数码管显示工作原理数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称
16、为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给
17、出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。Proteus仿真图如下图所示。3.3 8255A模块8255A是一种可编程的I/O接口芯片,可以与MCS-51系统单片机以及外设直接相连,广泛用作外部并行I/O扩展接口。8255A内部由PA、PB、PC三个8位可编程双向I/O口,A组控制器和B组控制器,数据缓冲器及读写控制逻辑四部分电路组成。数据总线(8条):D0D7,用于传送CPU和8255A间的数据、命令和状态字。控制总线(6条):RESET:复位线,高电平有效。/CS:片选线,低电平有效。/RD、/WR:/RD为读命令线,/WR为写命令线,皆为低电平有
18、效。A0、A1:地址输入线:用于选中PA、PB、PC口和控制寄存器中哪一个工作。本次课设中8255A的设计如图所示。其中DOD7连接在单片机的外扩数据总线P0口上,WR和RD分别接在单片机的WR和RD口,RESET接在单片机RST上,CS、A1和A0分别接在P2.7、P2.6和P2.5上,从而8255A的A口地址可为0000H,B口地址可为2000H,C口地址可为4000H控制口地址可为6000H。3.4时间调节模块3.4.1 时间设置时间调节时利用中断和按键扫描来实现的,其中,定时器启停有外部中断0控制,设置时分秒由外部中断1控制,而调时间时的加减是由按键连接P1.0和P1.1口。3.4.2
19、 整点报时利用蜂鸣器实现整点报时和闹钟设置,仿真原理图如图所示。第4章 软件调试4.1时间调节程序流程图时间调节程序流程图如图所示。时间调节设置:void display(unsigned char s,unsigned char f,unsigned char m,unsigned char t)unsigned char shi0,shi1,fen0,fen1,miao0,miao1;shi0=s/10; shi1=s%10;fen0=f/10; fen1=f%10;miao0=m/10; miao1=m%10;PA=0x80;PB=shushi0;delay(5);PA=0x40;if(
20、flag_SET=3&t)PB=shushi1&0x7f;elsePB=shushi1;delay(5);PA=0x20;PB=0xbf;delay(5);PA=0x10;PB=shufen0;delay(5);PA=0x08;if(flag_SET=2&t)PB=shufen1&0x7f;elsePB=shufen1;delay(5);PA=0x04;PB=0xbf;delay(5);PA=0x02;PB=shumiao0;delay(5);PA=0x01;if(flag_SET=1&t)PB=shumiao1&0x7f;elsePB=shumiao1;delay(5);void clock
21、() display(shi,fen,miao,!flag_TR);while(k) display(shi12,fen12,miao12,1); if(flag_SET)TR0=0;if(flag_SET=1&up=0)while(up=0);miao12+;if(miao12=60)miao12=0;if(flag_SET=1&down=0)while(down=0);miao12-;if(miao1260)miao12=59;if(flag_SET=2&up=0)while(up=0);fen12+;if(fen12=60)fen12=0;if(flag_SET=2&down=0)whi
22、le(down=0);fen-;if(fen1260)fen12=59;if(flag_SET=3&up=0)while(up=0);shi12+;if(shi12=24)shi12=0;if(flag_SET=3&down=0)while(down=0);shi12-;if(shi1224)shi12=23; if(!setclock&flag_TR) k=!k; 4.2 主程序流程图主程序流程图如图void main()unsigned char b;init();while(1) display(shi,fen,miao,!flag_TR);if(flag_SET)TR0=0;if(fl
23、ag_SET=1&up=0)while(up=0);miao+;if(miao=60)miao=0;if(flag_SET=1&down=0) while(down=0);miao-;if(miao60)miao=59;if(flag_SET=2&up=0) while(up=0);fen+;if(fen=60)fen=0;if(flag_SET=2&down=0) while(down=0);fen-;if(fen60)fen=59;if(flag_SET=3&up=0) while(up=0);shi+;if(shi=24)shi=0;if(flag_SET=3&down=0) while
24、(down=0);shi-;if(shi24)shi=23; if(flag_TR=1)TR0=1;elseTR0=0; if(!a&flag_TR) b=!b;if(!setclock&flag_TR) k=!k; while(k) display(shi12,fen12,miao12,k); clock(); display(shi,fen ,miao,!flag_TR);if(flag_TR=1&fen=0&miao=0)for(i=0;ishi;i+)display(shi,fen,miao,!flag_TR);FMQ=0;delay(300);FMQ=1;delay(300);whi
25、le(miao=0);if(shi=shi12&fen=fen12&miao=miao12)for(i=0;i5;i+)display(shi,fen,miao,!flag_TR);FMQ=0;delay(300);FMQ=1;delay(300);while(miao=0);第5章 仿真调试第6章 总结体会本次我和本组另外一名同学完成了这次单片机课程设计课题中的实时时钟设计,通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过
26、多的内存资源。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的实时时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。最后,感谢老师一个学期来对我们的教育,正是由于老师的精彩的课程和对我们严格的要求,使得我的课程设计能够顺利的完成,同时在课程设计过程中,我们巩固和学习了我们的单片机知识。相信这对我以后的课程设计和毕业设计乃至今后的工作将会有很大的帮助!参考文献(1) 张齐.单片机原理与嵌入式系统设计 电子工业出版社(2) 周润景.PROTUES入门实用教程 机械工业出版社(3) 任向民.微机接口技术实用教程 清华大学出版社(4) 22