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