《基于51单片机的实时时钟设计(8255扩展io口).doc》由会员分享,可在线阅读,更多相关《基于51单片机的实时时钟设计(8255扩展io口).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.目录摘要1第一章51单片机简介21.151系列单片机每部结构21.251单片机的封装与引脚2第二章实时时钟的设计方案42.1单片机最先系统42.28255A模块42.3数码管显示模块52.4时间调节模块62.5整点报时7第三章实时时钟的程序设计83.1时间调节程序流程图83.2主程序流程图9第四章小结10参考文献11附录112附录21318 / 19摘要单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。通过本子课程设计掌握单片机的
2、基本原理,加深对课堂知识的理解,从而达到学习、设计、开发单片机软硬的能力。本设计主要设计了一个基于AT89C52单片机的电子时钟,由定时器定时并在数码管上显示相应的时间,通过中断和按键扫描实现对时间的停止、启动和设置调整。应用Proteus软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。关键字:单片机;子时钟;键盘控制。第一章 51单片机简介单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解
3、计算机原理与结构的最佳选择。 这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等,比方说用来控制路口红绿灯的亮灭 公交车报站 。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词“智能型”,如智能型洗衣机等。1.1 51系列单片机每部结构51系列单片机中主要有8031、8051、8751三种机型,它们的指令系统和芯片引脚完全兼容,只是片程序存储器(ROM)有所不同,其中8031片没有ROM,8051片有4k的掩膜ROM,8751片有4k的紫外线可擦除ROM。其主要资源有:8位CPU、片带震荡器与时钟电路、128B片数据存储器、4K
4、片程序存储器(8031无)、21B特殊功能寄存器、4个8位的IO口、一个全双工串行接口、两个16位定时器、中断系统有5个中断源、111条指令。其部结构如图1.1所示。图1.1 单片机部结构1.2 51单片机的封装与引脚在封装上,51单片机有常用的三种封装:PQFP-44、DIP-40和PLCC-44。我们学习中最常见的封装为DIP-40型的封装,其封装图如图1.2所示。该封装的单片机共有40个引脚,其中可分为端口线电源线和控制线三类。端口线有32条,为4个并行的8为IO端口,由于地址或数据的传送,其中P0口为开漏输出,在作为通用IO使用时需要加上上拉电阻。在外部扩展时分时提供系统的数据总线和地
5、址总线;P2口可作为通用IO接口和外部扩展时的地址总线;P1口只作为通用IO口使用;P3口作为通用IO口外,还附有第二功能,如表1.1所示。表1.1P3口的位第二功能P3.0RXD(串行口输入)P3.1TXD(串行口输出)P3.2INT0(外部中断0输入)P3.3INT1(外部中断1输入)P3.4T0(定时器/计数器0的外部输入)P3.5T1(定时器/计数器1的外部输入)P3.6WR(片外数据存储器写允许)P3.7RD(片外数据存储器读允许)电源线有两根:VCC为+5V电源线,GND为接地。控制线有6根,其中EA为片外存储器访问选择线;PSEN为片外ROM选通线;RST为复位线;XTAL1和X
6、TAL2为片震荡电路输入线;ALE为地址锁存允许线。图1.2 单片机引脚图第二章 实时时钟的设计方案本课设制作的实时时钟由单片机外扩一片8255A芯片,用8255A的PA口和PB口控制6位8段共阳数码管显示时钟,并由定时器控制时钟精准的计时,中断和按键扫描共同完成对时间的初始化、启停和调整。整体完成实时时钟的设计,精准的计时。整体仿真原理图见附录1。2.1 单片机最先系统单片机最小系统就是能使单片机工作的最少的器件构成的系统。对于本课设所使用的AT89C52来讲,其最小系统为AT89C52单片机芯片、时钟电路和复位电路,器仿真原理图如图2.1所示。图2.1单片机最小系统2.2 8255A模块8
7、255A是一种可编程的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为写命令线,皆为低电平有效。A0、A1:地址输入线:用于选中PA、PB、PC口和控制寄存器中哪一个工作。本次课设中8255A的设计如图2.2。图2.2 8255A连接
8、图其中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。2.3 数码管显示模块本课设采用8段共阳数码管,其中abcdefg七段构成日字形dp段位小数点位,当阳极那端为高电平时相应的段为低电平则该段点亮,从而显示不同的数字和符号。本次利用8255A控制数码管,其连接图如图2.3所示。图2.3 数码管显示原理图2.4 时间调节模块时间调节时利用中断和按键扫描来实现的,其
9、连接图如图2.4所示。图2.4 按键连接图其中,定时器启停有外部中断0控制,设置时分秒由外部中断1控制,而调时间时的加减是由按键连接P1.0和P1.1口。2.5 整点报时利用蜂鸣器实现整点报时,仿真原理图如图2.5所示。图2.5 蜂鸣器控制第三章 实时时钟的程序设计程序设计中主要包括初始化,定时器0的控制,中断和按键扫描,蜂鸣器控制等。程序清单见附录2。3.1 时间调节程序流程图时间调节程序流程图如图3.1所示。图3.1 时间调节程序流程图3.2 主程序流程图主程序流程图如图3.2所示。图3.2主程序流程图第四章 小结本次我和本组另外一名同学完成了这次单片机课程设计课题中的实时时钟设计,通过这
10、次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过多的存资源。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的实时时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间
11、的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。最后,感谢老师一个学期来对我们的教育,正是由于老师的精彩的课程和对我们严格的要求,使得我的课程设计能够顺利的完成,同时在课程设计过程中,我们巩固和学习了我们的单片机知识。相信这对我以后的课程设计和毕业设计乃至今后的工作将会有很大的帮助!参考文献(1) 齐.单片机原理与嵌入式系统设计 电子工业(2) 周润景.PROTUES入门实用教程 机械工业(3) 任向民.微机接口技术实用教程 清华大学(4) :/wenku.baidu./view/a5a9ceebf8c75fbfc77db2be.html附录1附录2#include#include#
12、define PA XBYTE0x0000#define PB XBYTE0x2000#define PC XBYTE0x4000#define CMD XBYTE0x6000sbit up=P10;sbit down=P11;sbit FMQ=P13;bit flag_TR=0;unsigned char flag_SET=0,shi=0,fen=0,miao=0,temp=0,i;unsigned char shu10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void init()IE=0x87;TMOD=0x01;TH0=0x4
13、c;TL0=0X00;TCON=0x05;CMD=0x80;void delay(unsigned int m)unsigned char count;while(m!=0)for(count=0;count60)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)whil
14、e(down=0);shi-;if(shi24)shi=23; if(flag_TR=1)TR0=1;elseTR0=0;if(flag_TR=1&fen=0&miao=0)for(i=0;ishi;i+)display(shi,fen,miao);FMQ=0;delay(300);FMQ=1;delay(300);while(miao=0);void timer0() interrupt 1EA=0;TH0=0x4c;TL0=0x00;flag_SET=0;temp+;if(temp=20)temp=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0; EA=1;void timer_run() interrupt 0EA=0;flag_TR=!flag_TR;EA=1;void set_time() interrupt 2EA=0;if(!flag_TR)flag_SET+;flag_SET%=4;EA=1;