基于时钟日历芯片DS1302的万年历设计_第1页
基于时钟日历芯片DS1302的万年历设计_第2页
基于时钟日历芯片DS1302的万年历设计_第3页
基于时钟日历芯片DS1302的万年历设计_第4页
基于时钟日历芯片DS1302的万年历设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE38基于时钟日历芯片DS1302的万年历设计黄豪民摘要随着科学技术的发展,万年历的设计也层出不穷。本设计以单片机AT89C51和DS1302为核心,结合译码器74HC154和驱动芯片74LS244,以及模拟键盘,LED显示电路等构成一个可控及显示精确的万年历时间系统。DS1302为一个实时时钟芯片,具有较高时间精度,它与单片机进行串口通信,单片机通过与它的通信,取出其时间寄存器中的值,再通过相应的电路,把时间值通过LED显示,如果显示的值与标准时间不同,此系统就经过模拟键盘灵活控制,调节DS1302中时间寄存器中的值,达到与标准时间同步。关键词AT89C51,DS1302ABSTRACTAlongwithscienceandtechnology'sdevelopment,thedesignsoftheperpetualcalendarhavemanymeanings.ThisdesignusesthemicroprocessorAT89C51andthechipDS1302,withthedecoderchip74HC154,thedrivechip74LS244,thesimulativekeyboard,theLEDdisplayandsoontoconstitutetheperpetualcalendarsystemwhichcancontrolanddisplayprecisely.DS1302isareal-timeclockchipandhasthehightimeprecision,itcommunicateswiththemicroprocessorviatheserialinterface.ThemicroprocessortakesoutDS1302’stimeregistervaluebythecommunication,atlasttheLEDdisplaysthetimevaluebythecorrespondingcircuit.Ifthetimevalueisdifferentfromthestandardtime,thesimulationkeyboardcanadjustconvenientlyDS1302’stimeregistervalue,achievingwiththestandardtimesynchronously.KeywordsAT89C51,DS1302目录摘要 IABSTRACT II1绪论 12功能要求 33方案论证 33.1显示器的选择 33.1.1VFD显示器 33.1.2LED显示器 33.1.3LCD液晶显示器 43.2编程语言的选择 43.2.1单片机汇编语言 43.2.2单片机C语言 43.3微处理器的选择 54硬件电路 64.1DS1302时钟芯片 74.1.1DS1302简介 74.1.2DS1302的控制字节 84.1.3数据的输出 94.1.5DS1302的寄存器 94.1.6DS1302的读写方式 114.1.7DS1302时序图 124.1.8DS1302电路 134.2单片机AT89C51 144.2.1单片机AT89C51简介 144.2.2单片机引脚简介 154.2.3低功耗模式 184.3模拟键盘的设计 194.4LED显示器的设计 194.574LS244芯片 215软件设计 255.1系统软件设计原理 255.2键盘扫描子程序 255.3显示子程序 265.4DS1302控制子程序 265.5主函数 276软件平台 286.1Proteus软件 286.2KEIL软件 307结论 33参考文献 34附录A:部分单片机源程序 35致谢 381绪论在科技日新月异发展的今天,人们对时间概念的认识显得尤为深刻,“时间就是金钱”,“时间就是生命”等警句更是激励着人们努力工作,把握时间。作为时间的标量,时钟等计时设备也随着人们的不断认识而变化。在三千年前,我国祖先就发明了用土和石片刻制成的“土圭”与“日规”两种计时器,成为世界上最早发明计时器的国家之一。到了铜器时代,计时器又有了新的发展,用青铜制的“漏壶”取代了“土圭”与“日规”。东汉元初四年张衡发明了世界第一架“水运浑象”,此后唐高僧一行等人又在此基础上借鉴改进发明了“水运浑天仪”、“水运仪象台”。至元明之时,计时器摆脱了天文仪器的结构形式,得到了突破性的新发展。元初郭守敬、明初詹希元创制了“大明灯漏”与“五轮沙漏”,采用机机械结构,并增添盘、针来指示时间,这使其计时更准确,机械性也更先进。而在国外,阿拉伯工匠最早利用等速运动原理设计出摆钟表。埃及人制造了漏壶钟,它是由两个互相叠置的圆筒组成。水从上面的圆筒穿过一个小孔滴入下面的圆筒。水滴完了,就是某个时辰过去了。大一点儿的漏壶灌一次水可报六个小时,然后再重新装满水。他们还甚至做了装有指针和鸣击装置的钟表,每隔一小时,一定数量的圆球便滚落到金属盖上,发出大声的鸣响。而钟表发展史日晷是最早报“标准时”的仪器,它由晷盘和晷针组成。晷盘是一个有刻度的盘,其中央装有一根与盘面垂直的晷针,针影随太阳运转而移动在盘上的位置。一二七零年前后在意大利北部和南德一带出现的早期机械式时钟,以秤锤作动力,每一小时鸣响附带的钟,自动报时。一三三六年,第一座公共时钟被安装于米兰一教堂内,在接下来的半个世纪里,时钟传至欧洲各国,法国、德国、意大利的教堂纷纷建起钟塔。到了现代,计时设备的新技术更是层出不穷,一九六九年,日本精工手表公司开发出世界上第一块石英电子手表,日误差缩小到零点二秒以内。与传统的机械式手表相比,它走时更为准确,功能更多,制作的成本也更低。一九七二年,美国的汉密尔顿公司发明了数字显示手表,马达和齿轮从手表中消失了。为了适应现代社会的需要,瑞士等国更是推出自己特色的钟表新产品,如瑞士菲利浦公司生产的光电钟,可将光源转换成电能作能源的电子表。日本研制成具有录音、放音等功能的数字手表,还有翻译手表、电视手表等。英国的无声闹声,到了预定钟点,产生振动叫醒人,可供耳聋者使用。还有声控照明钟、气温钟、火警闹钟等。

时钟芯片作为一个独特的时钟设备,它结合时钟原理,把晶振,寄存器等组合在一起做成独立的一块芯片,灵活地满足各种用户需要。2功能要求本设计要求以单片机和DS1302为核心,结合显示电路,模拟键盘等辅佐模块,构成一个可控又计时准确的万年历时钟系统。3方案论证本设计从3个方面来分析论证:显示器的选择,编程语言的选择和微处理器的选择。3.1显示器的选择一般嵌入式系统可供选择的显示器有以下几种,其具体介绍为:3.1.1VFD显示器VFD显示器是由电子管发展过来的一种显示器件。它是真空二极管或三极管的一种改型。二极管的改型称为静态VFD,三极管的改型称为动态VFD。静态VFD含有两个基本电极:阴极(灯丝)和阳极。动态VFD比静态VFD多一极:栅极。所有电极在高真空条件下封装于玻璃壳内。由阴极发射的电子在正向电位的作用下加速到栅极和阳极(静态VFD直接到达阳极),并碰撞激活在阳极的荧光粉图案使其发光。所需的亮度图形显示可以由控制栅极和阳极(静态VFD仅控制阳极)正电位或负电位来实现。VFD显示器具有高清晰度、高亮度、宽视角、反应速度快和从红色到蓝色多种色彩等特点,显示效果好。当使用CIG(集成芯片玻璃)技术时,可集成VFD驱动电路;具有可靠且寿命长等特点。但它需要5.5~6.3V的灯丝电压,150~450mA的灯丝电流,12~36V的阳极加速电压,15~36V的栅极电压。不考虑阳极和栅极电流,单灯丝功耗就达825mW,功耗相对来说较大,不适合在移动设备上使用。另外,它需要多组电压不同的供电电压,使用不方便。3.1.2LED显示器LED显示器是由发光二极管发展过来的一种显示器件。它是LED发光二极管的改型。一般分为LED数码管显示器和LED点阵显示器。LED点阵显示器能显示各种信息,但它的体积较大,适合于广告牌等需要大面积显示的场所。LED数码管显示器具有高亮度、宽视角、反应速度快,可靠性高、使用寿命长等特点。它比较适合显示数字的时钟系统,同时,在微处理器和LED发光二极管显示器之间一般还需要驱动芯片。3.1.3LCD液晶显示器LCD液晶显示器是利用光的偏振现象来显示的。一般分为数字型LCD和点阵型LCD。前者用于显示简单的字符,如时钟等;后者能显示复杂的图形和自定义字符,因此应用非常广泛。LCD液晶显示器具有本身不发光,靠反射或者透射其它光源发光的优点,同时具有功耗小、可靠性高、寿命长、体积小、电源简单等特点,非常适合于嵌入式系统、移动设备和掌上设备的使用。结合实际,本时钟系统的显示模块要求简单,以及基于自己掌握的知识,本设计采用LED显示器。3.2编程语言的选择3.2.1单片机汇编语言处理器CPU可以识别的是一组由0和1序列构成的指令码,这种指令码构成的指令系统称为机器语言,但由于它们不直观,难记、难认、难理解、难易查错等特点,人们在20世纪50年代中期开始用一些“助记符号”来代表机器语言中由0和1组成的指令系统。这些“助记符号”构成的指令系统和现在增加的伪指令集称为汇编语言。它具有以下几个方面的特性:与机器的相关性、执行的高效性、编写程序的复杂性、调试的复杂性等。单片机汇编语言在这个设计系统中也就是MCS-51指令集。它是由111条指令组成,按照它们的操作性质可划分为数据传送、算术运算、逻辑操作、程序转移、位操作等5大类。MCS-51的指令长度较短:单字节指令有49条;双字节指令有46条;最长的是三字节指令,只有16条。指令周期较短:单机器周期指令64条,双机器周期指令45条,只有乘除需要4个机器周期。MCS-51的指令具有简明、整齐和易于掌握的特点。3.2.2单片机C语言单片机C语言源自于单片机汇编语言,它是一种面向过程的语言,具有结构化的特点,可以产生紧凑的代码。它于单片机汇编语言相比,具有如下的优点:①对单片机的指令系统不要求很了解,仅要求对8051的存储器结构有所了解②寄存器的分配,不同存储器的寻址及数据类型等细节可有编译器管理③程序有规范的结构,可分为不同的函数,这种方式可使程序结构化④关键字及运算符号可近似人的思维过程式使用⑤编程及程序调试时间显著缩短,从而提高效率⑥提供的库包含许多标准子程序,具有较强的数据处理能力⑦编好的程序容易植入新程序单片机C语言具有单片机汇编语言力所不及的优点,而且已发展成为嵌入式系统的一个发展方向,因此我选择单片机C语言作为本设计的编程语言。3.3微处理器的选择基于本时钟系统的设计要求,由于只是处理显示,键盘检测,与DS1302联系等基本功能,不选择ARM,X89等32位CPU和AVR等16位CPU,而选择ATMEL公司的AT89C51作为本设计的CPU。4硬件电路图4.1为本课题——基于时钟日历芯片DS1302的万年历设计的系统设计原理框图。图4.1基于时钟日历芯片DS1302的万年历的系统的原理框图系统的硬件电路主要由DS1302、AT89C51单片机、模拟键盘、74LS244驱动芯片、74HC154(4-16译码器)、16个数码管等组成。AT89C51单片机把DS1302中寄存器的时间值取出来,通过译码电路,驱动电路,在数码管上显示出时间,模拟键盘通过数码管显示的值做相应的控制,以达到准确显示时间的目的。图4.2为本课题——基于时钟日历芯片DS1302的万年历设计的系统设计的电路原理图(在PROTEUS软件中仿真)。图4.2基于时钟日历芯片DS1302的万年历的系统的电路原理图4.1DS1302时钟芯片4.1.1DS1302简介DS1302是美国DALLAS公司推出的一种串行接口实时时钟芯片。芯片内部具有可编程日历时钟和31个字节的静态RAM,日历芯片可自动进行闰年补偿,并可以对年、月、日、周日、时、分、秒进行计时,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,提供了对备份电源进行绢流充电的能力。它的主要特点为采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能,通常采用普通32.768kHz晶振。DS1302采用八脚的DIP封装,其引脚排列如图4.3所示:Vcc1,Vcc2:电源输入,其中Vcc1为后备电源,Vcc2为主电源。GND:接地端RST复位端X1,X2:外接32.768KHz石英晶振输入I/0:数据输入/输出端SCLK串行时钟输入图4.3DS1302引脚图在DS1302的引脚排列,Vcc1和Vcc2为电源引脚,其中,单电源供电时接Vcc1引脚,双电源供电时,主电源接接Vcc2,从电源接Vcc1,如果采用可充电的镉镍电池,可启用内部涓流充电器在主电压正常时间向电池充电,以延长电池的使用时间。备份电池也可用1微法以上的超容量电池代替,但得注意备份电池的电压应略低于主电源的工作电压。X1和X2是振荡源,外接32.768kHz的石英晶振。RST是通信允许信号,当RST=0时,允许通信,当RST=0时,禁止通信。I/O引脚为双向串行数据传送信号,SCK引脚为串行数据的位同步信号。DS1302的内部结构如图4.4所示。图4.4DS1302内部结构图DS1302的典型应用如图4.5所示。4.1.2DS1302的控制字节DS1302的控制字如图4.6所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中。位6(RAM/CK)位为DS1302片内RAM/时钟选择位,如果为0,则表示存取日历时钟数据,为1表示存取RAM数据。位5至位1(A4至A0)用来选择日历时钟寄存器或RAM的地址选择位。最低有效位位0(RD/WR)为读写控制位,如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。图4.5DS1302的典型应用图4.6DS1302的控制字节4.1.3数据的输出I/O引脚在写入控制指令字后的下一个SCLK时钟的下降沿时,传送一个字节的数据,数据输入从低位即位0开始。注意在数据传送时,RST引脚需保持高电位。如4.7所示4.1.4数据的输入I/O引脚在写入控制指令字后的下一个SCLK时钟的上升沿时,数据被写入到内部寄存器,DS1302,数据输入从低位开始,一直到高八位。注意在数据传输时,RST引脚需保持为高电位,如图4.8所示。图4.7数据的输出图4.8数据的输入4.1.5DS1302的寄存器

DS1302有12个寄存器,其中前7个寄存器分别存放着秒,分,时,日,月,星期和年等信息,存放的数据位为BCD码形式。此外,DS1302还有控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。寄存器及其控制字如表4.1所示。秒寄存器的最高位为时钟暂停控制位,当CH=0时,时钟振荡器暂停,DS1302进入低功耗状态,当CH=1时启动时钟。写保护寄存器的最高位WP=1时,才能对日历时钟或RAM的内容进行写操作,WP=0,禁止写操作。表4.1DS1302的寄存器时钟多字节寄存器为多字节突发方式控制寄存器,通过对该寄存器的寻址,可以将对日历时钟或RAM的读写操作规范为多字节方式。在此方式下写时钟寄存器时,必须按数据传送的次序写入最先的8个寄存器;而以多字节方式写RAM时,为了传送数据不必写入所有的31个RAM字节。时钟多字节寄存器读写控制字如图4.9所示。图4.9时钟多字节读写方式绢细电流充电控制寄存器如下图4.10所示。图4.10绢细电流充电控制寄存器TCS:绢细充电选择TCS=1010使能绢流充电TCS=其它禁止绢流充电DS:二极管选择位DS=01选择一个二极管DS=10选择二个二极管DS=00或11即使TCS=1010,充电功能也被禁止RS的选择如表4.2所示.表4.2RS选择31*8RAM寄存区如下图4.11所示。图4.11RAM寄存区4.1.6DS1302的读写方式DS1302与8051之间通过IO线传送同步串行数据,SCLK为串行通信时位同步时钟,一个SCLK脉冲传送一位数据。每个数据传送时都以字节为单位,低位在前,高位在后,传送一个字节需要8个SCLK脉冲。数据传送可以分为单字节传送方式和多字节突发方式传送。单字节传送方式如图4.12所示,在RST=1期间,8051单片机先向DS1302发送一个字节的命令字,紧接着发送一个字节的数据,DS1302在接受到命令字节后自动将数据写入到指定的片内地址或从该地址读取数据。数据多字节突发方式的传送时序如图4.13示,RST=1期间,若8051单片机向DS1302发送的命令字节中A4—A1全为1,则DS1302在接受到这个字节命令后可以一次进行8个字节日历时钟数据或是31个片内RAM单元数据的读写工作。图4.12DS1302单字节传送方式图4.13DS1302多字节突发方式从以上时序可知,单字节方式传送一次数据需要16个SCLK脉冲多字节方式传送一次数据在对日历时钟进行读写时需要72个SCLK脉冲,而在对片内RAM单元读写时最最多需要256个SCLK脉冲。4.1.7DS1302时序图DS1302读时序图如图4.14所示图4.14DS1302读时序图DS1302写时序图如图4.15所示。DS1302时序图中一些重要参数如表4.3所示。图4.15DS1302写时序图表4.3时序图中重要参数参数名称使用条件最小值最大值TccVcc=2.0V4usVcc=5.0V1usTchVcc=2.0V1000nsVcc=5.0V250nsTclVcc=2.0V1000nsVcc=5.0V250nsTcchVcc=2.0V240nsVcc=5.0V60ns4.1.8DS1302电路DS1302单元电路(在PROTEUS软件中仿真)如4.16所示。图4.16DS1302电路原理图4.2单片机AT89C514.2.1单片机AT89C51简介AT89C51引脚图如图4.17所示。图4.17AT89C51引脚AT89C51内部结构如图4.18所示。图4.18AT89C51内部结构AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4Kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,可以灵活地应用到各种控制领域。AT89C51的主要特性:1)与MCS-51产品指令系统完全兼容

2)4K字节可重复擦写Flash闪速存储器

3)1000次擦写周期

5)全静态工作:0Hz-24Hz

6)三级加密程序存储器

7)128×8位内部RAM

8)32个可编程I/O线

9)2个16位定时器/计数器

10)6个中断源

11)可编程串行UART通道

12)低功耗的闲置和掉电模式AT89S51具有PDIP,TQFP和PLCC三种封装形式。本设计采用的是PDIP封装形式。4.2.2单片机引脚简介P0口——8位,开漏极,双向I/O口。P0口可作为通用I/O口,但须外接上拉电阻,作为输出口,每个引脚能以吸收8个TTL的灌电流。作为输入时,首先应将引脚置1。P0口也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线,在该模式下,P0口含有内部上拉电阻。在Flash编程时,P0口接收代码字节数据;在编程校验时,P0口输出代码字节数据(需要外接上拉电阻)。P1口——8位、准双向I/O口,具有内部上拉电阻。P1口是为用户准备的1/O双向口。在编程和校验时,可用做输入低8位地址。用做输入时,应先将输出锁存器置1.P1口可驱动4个TTL负载。P2口——具有内部上拉电阻的8位双向I/O口。P2口用作输出口时,可驱动4个TTL负载;用作输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外输出电流。CPU访问外部16位地址的存储器时,P2口提供8位地址,当CPU用8位地址寻址外部存储器时,P2口为P2特殊功能寄存器的内容。在Flash并行编程和校验时,P2口可输入高字节地址和某些控制信号。P3口——具有内部上拉电阻的8位双向口。P3口用做输出口时,输出缓冲寄存器可吸收4个TTL的灌电流;用作输入口时,首先将引脚置1,由内部上拉电阻抬为高电平。若外部的负载是低电平,则通过内部上拉电阻向外输出电流。在与Flash并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O功能外,还有替代功能。表5.2所列。P3口——具有内部上拉电阻的8位双向口。P3口用做输出口时,输出缓冲寄存器可吸收4个TTL的灌电流;用作输入口时,首先将引脚置1,由内部上拉电阻抬为高电平。若外部的负载是低电平,则通过内部上拉电阻向外输出电流。在与Flash并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O功能外,还有替代功能。表5.2所列。表5.2P3口的替代功能引脚符号说明P3.0RXD串行口输入P3.1TXD串行口输出P3.2外部中断0P3.3外部中断1P3.4T0T0定时器的外部计数输入P3.5T1T1定时器的外部计数输入P3.6外部数据存储器的写选通P3.7外部数据存储器的读选通2.控制信号线RST——复位输入信号,高电平有效。在振荡器稳定工作时,在RST脚施加两个机器周期(即24个晶振周期)以上的高电平,将器件复位。/VPP——外部程序存惜器访问允许信号EA(ExternalAccessEnable)。当信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H~FFFFH;当接地时,对ROM的读操作从内部程序存储器开始,并可延续至外部程序存储器。在编程时,该引脚可接编程电压(AT89C51的VPP为5V或12V;AT89LV51的VPP为12V)。在编程校验时,该引脚可接VCC。——片外程序存储器读选通信号用PSEN(ProgramStoreEnable),低电平有效。在片外程序存储器取指期间,当有效时,程序存储器的内容被送至PO口(数据总线);在访问外部RAM时,无效。AIE/——低字节地址锁存信号AlE(AddresslatchEnable)。在系统扩展时,AlE的下降沿将PO口输出的低8位地址锁存在外接的地址锁存器中,以实现低字节地址和数据的分时传送。此外,ALE端连续输出正脉冲.频率为晶振频率的1/6,可用做外部定时脉冲使用。但要注意,每次访问外RAM时要丢失一个ALE脉冲。在编程期间,该引脚输入编程脉冲()。3.电原线VCC——电源电压输入。GND——接地。4.外部晶振引线XTAL1——片内振荡器反相放大器和时钟发生线路的输入端。使用片内振荡器时,连接外部石英晶体和微调电容。XTAL2——片内振荡器反相放大器的输出端。当使用片内振荡器时,外接石英晶体和微调电容。当使用外部振荡器时,引脚XTAL1接收外振荡器信号,XTAIL2悬空。时钟振荡器:AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。其震荡电路如图4.19所示。外接石英晶体(或陶瓷谐振器)及电容C1,C2接在放大器的反馈电路中构成并联谐振电路,其震荡电路如图4.20所示。图4.19内部震荡电路图4.20外部震荡电路4.2.3低功耗模式AT89S51有两种节电运行模式:空闲模式和掉电模式。eq\o\ac(○,1)空闲模式在空闲模式下,CPU处于睡眠状态,振荡器和所有片内外围电路仍然有效。空闲模式可由软件设置进入(设IDL=1)。在这种模式下,片内RAM和SFR中的内容保持不变。空闲模式可通过任何一个允许中断或硬件复位退出。若用硬件复位方式结束空闲模式。则在片内复位控制逻辑发生作用前长达约两个机器周期时间内,机器从断点处开始执行程序。片内硬件禁止访问内部RAM,但不禁止访问端口。为避免采用复位方式退出空闲模式时对端口的不应有的访问,在紧随设置进入空闲指令(即设IDL=1)的后面,不能是写端口或外部RAM的指令。eq\o\ac(○,2)掉电模式引起掉电模式的指令是执行程序中的最后一条指令(使PD=1的指令)。在掉电模式下,振荡器停止工作,CPU和片内所有外围部件均停止工作,但片内RAM和SFR中的内容保留不变,直到掉电模式结束。退出掉电模式可用硬件复位或任何一个有效的外部中断和。复位可重新设置SFR中的内容,但不改变片内RAM中的内容。在VCC电源恢复到正常值并维持足够长的时间之后,允许振荡器恢复并达到稳定,方可进行复位,以退出掉电模式。如表5.3所示为空闲和掉电模式下的引脚状态。表5.3空闲和掉电模式下的引脚状态模式程序存储器ALEP0P1P2P3空闲内部11DataDataDataData空闲外部11高阻Data地址Data掉电内部00DataDataDataData掉电外部00高阻DataDataDataAT89C51单片机的复位、晶振振荡电路如图4.21所示(PROTEUS软件仿真).图4.21AT89C51单片机的复位、晶振振荡电路复位电路。单片机上电,当振荡器正在运行时,只要持续给RST引脚两个机器周期的高电平便可完成系统的复位。4.3模拟键盘的设计模拟键盘电路如图4.21所示(PROTEUS软件仿真)。本键盘为行列式键盘,采用2X7格式。它公占用9个I/O口,它们一起组合形成14个按键,分别控制DS1302中时间寄存器的秒,分,小时,年,月,日,星期的值的增减,以达到控制的目的。图4.21模拟键盘电路4.4LED显示器的设计eq\o\ac(○,1)LED显示器的结构常用的7段LED显示器由7个发光二极管按“日”字形排列,所有发光二极管的阳极连接在一起称为“共阳LED”,所有阴极连接在一起称为“共阴LED”。当选用共阴极LED显示时,如果共阴极端接地,则某个发光二极管的阳极加上高电平时,对应的发光二极管点亮。因此,要显示某字形就应该使此字形的相应段的二极管点亮,实际上就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据称为字符的“段码”。字符数据字与LED段码的关系为:D7D6D5D4D3D2D1D0DPgfedcba数据字LED段码DP为小数点段。共阴极LED的段码求反即得共阳极LED的段码。其数码管的编码如如表5.4所示。 eq\o\ac(○,2)LED显示器的控制原理LED显示器的控制方式有静态显示和动态显示两种。1)静态显示所谓静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定导通或截至。这种显示方式的每一位都需要有1个8位输出口控制。静态显示时,用较小的电流就能得到较高的亮度。当显示器位数较少时,采用静态显示的方法是合适的。当位数较多时,所需的I/O线较多,例如本设计,一般就采用动态显示方法。2)动态显示动态显示就是逐位扫描轮流显示。在这种显示控制方法中,显示器分时工作,每次只能有一个器件显示,由于人的视觉暂留,所以从宏观上看起来仍然是所有器件都在显示。LED显示器电路如图4.22所示。P0.0~P0.3与74LS244的A0~A3四个引脚分别相连,利用74HC154驱动能力驱动P0.0~P0.3这四个引脚,然后74HC154的输出端分别与74HC154的四个数据输入引脚相连,通过74HC154的译码,从而分别选择16个输出端,由于74HC154的输出选择信号为低电平,而我选择的LED为共阳极,所以我在它们的输出端加以反向器,使其输出为高电平,以显示所选LED的目的。表5.4数码管的编码表显示数码段码显示数码段码00C0H880H10F9H990H20A4HA88H30B0HB83H499HC0C6H592HD0A1H682HE86H70F8HF8EH图4.22LED显示器电路4.574LS244芯片74LS244是一个单向总线驱动器,它有8个三态驱动器,分为两组,由控制端1G和2G控制,其引脚图如图4.23所示。引脚说明:1A1,1A2,1A3,1A4:第一组输入总线2A1,2A2,2A3,2A4:第二组输入总线1Y1,1Y2,1Y3,1Y4:第一组输出总线2Y1,2Y2,2Y3,2Y4:第二组输出总线1G,2G:第一,二组总线控制端GND:接地Vcc:电压端图4.2374LS244引脚图74LS244内部结构图如图4.24所示。4.2474LS244内部结构图真值表如表5.5所示。表5.574LS244真值表注:Z高阻态X低电平或高电平4.674HC154芯片74HC154是PHILIPS生产的一款4—16译码器74HC154是高速硅门的CMOS芯片。其主要的特点有:1)16线的分离能力2)输入4位二进制编码,16位输出中只有一位输出3)2个使能输入控制门为控制或扩展4)芯片种类:中规模集成电路74HC154引脚图如图4.25所示。引脚介绍:Y0—Y15:输出,低电平有效E0,E1:输入,使能控制,低电平有效GND:接地端A0—A3:地址输入Vcc:电压输入图4.2574HC154引脚图74HC154逻辑符号如图4.26所示。图4.2674HC154逻辑图74HC154真值表如表5.6所示。74HC154逻辑图如图4.27所示。表5.674HC154真值表注:H高电平L低电平X高电平或低电平图4.2774HC154逻辑图5软件设计系统软件采用C语言编写,其编译器为KeiluVisions软件。5.1系统软件设计原理系统软件运行的总体流程包括:DS1302初始化,LED显示,模拟键盘控制。其系统主程序流程图如图5.1所示。5.2键盘扫描子程序判断是否有键被按下的方法基本上有两种:第一,逐键扫描,就是判断依次判断每个键是否被按下,如果有键被按下,则转如相应的按键出来子程序,如延时,按键作用子程序,等此键的相应程序处理完后,再检查是否有其它按键是否被按下,则按键处理流程如图5.2所示。图5.1系统流程图图5.2逐键扫描第二是逐行扫描:先把所有的行电平置成低电平,把所有的列电平置成高电平,然后扫描各列,如果所有的列都为高电平,则没有键按下;如果某列为低电平,则此列的某行有按键按下;要判断此列的那个键按下,则要采用“逐行扫描”,也就是先把第一行置成低电平,其余行为高电平,列电平保持不变,如果检查到某列为低电平,则此列的第一行按键就是被按下的键,如果没检查到低电平,则把第二行置成低电平,其余行为高电平,再检查列电平,从而判断是否有键按下,依次置行电平,直到检查到那个键被按下为准。最后再处理被按下的键的子程序,则此种方案的流程图5.3所示。图5.3逐行扫描图5.4数码管显示流程图应用系统的单片机为了能及时地响应键盘的操作,需经常对键盘进行扫描,扫描的时间根据各自的系统而定。如可以定时器定时扫描;也可以根据外部中断等执行扫描子程序。此外,在键盘操作中,还得注意解决“抖动”,实现“每按一次键只响应一次”,以及“一键多功能”等编程问题,以及防止“两键同按”或“数键同按”等误操作问题。根据以上原理,基于我设计的系统对键盘要求简单的特点,我选择“逐键扫描法”来达到设计和要求的目的。我选择7X2键盘来分别控制DS1302中时间寄存器的秒,分,小时,年,月,日,星期的值的增减,以达到调节和控制的目的。5.3显示子程序16个LED数码管按照动态显示原理,按照年,月,日,星期,小时,分,秒的次序,依次显示,由于人的视觉差异,所以构成一个时间显示系统,其子程序的流程图如图5.4所示。5.4DS1302控制子程序DS1302作为本设计的核心,通过对其复位,初始化,读时间寄存器中的值,以及通过键盘控制改变时间寄存器中的值。其子程序流程图如5.5所示。5.5主函数主函数是一个无限循环体。首先初始化DS1302芯片,接着提取DS1302寄存器中的值,经过单片机的数字处理,用16个LED数码管显示出时间信息,然后根据LED数码管显示出来的值,控制键盘的相应按键,调整相应的时间值。已达到与标准时间的目的。其子程序的流程图如图5.6示。5.5DS1302控制流程5.6主函数流程6软件平台6.1Proteus软件ProteusISIS运用是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。②支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本章介绍ProteusISIS软件的工作环境和一些基本操作。ProteusISIS的工作界面是一种标准的Windows界面,如图6.1所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。图6.1ProteusISIS的工作界面基本操作流程1)将所需元器件加入到对象选择器窗口。单击对象选择器按钮,如图6.2所示。图6.2对象选择器弹出“PickDevices”页面,在“Keywords”栏中输入你将用到的芯片的名称,系统在对象库中进行搜索查找,并将搜索结果显示在“Results”栏中。在“Results”栏中的列表项中,双击你将用到的芯片的名称,则可将相应的芯片添加至对象选择器窗口。接着输入其它芯片的名称,再在“Keywords”栏中输入其它你将用到的芯片的名称,并在“Results”栏中双击相应芯片的名称,将它们添加到对象选择器窗口。2)放置元器件至图形编辑窗口在对象选择器窗口中,选中芯片,将鼠标置于图形编辑窗口该对象的欲放位置、单击鼠标左键,该对象被完成放置。同理,将其它芯片放置到图形编辑窗口中。若对象位置需要移动,将鼠标移到该对象上,单击鼠标右键,此时我们已经注意到,该对象的颜色已变至红色,表明该对象已被选中,按下鼠标左键,拖动鼠标,将对象移至新位置后,松开鼠标,完成移动操作。3)放置总线至图形编辑窗口单击绘图工具栏中的总线按钮,使之处于选中状态。将鼠标置于图形编辑窗口,单击鼠标左键,确定总线的起始位置;移动鼠标,屏幕出现粉红色细直线,找到总线的终了位置,单击鼠标左键,再单击鼠标右键,以表示确认并结束画总线操作。此后,粉红色细直线被蓝色的粗直线所替代,如图6.3所示。4)元器件之间的连线单击绘图工具栏按钮处于选中状态当鼠标的指针靠近R1右端的连接点时,跟着鼠标的指针就会出现一个“×”号,表明找到了R1的连接点,单击鼠标左键,移动鼠标(不用拖动鼠标),将鼠标的指针靠近LED显示器的A端的连接点时,跟着鼠标的指针就会出现一个“×”号,表明找到了LED显示器的连接点,同时屏幕上出现了粉红色的连接,单击鼠标左键,粉红色的连接线变成了深绿色,同时,线形由直线自动变成了90º的折线,这是因为我们选中了线路自动路径功能。5)元器件与总线的连线画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可,如图所示。6)给与总线连接的导线贴标签PARTLABELS单击绘图工具栏中的导线标签按钮,使之处于选中状态。将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“×”号,如图6.4所示。图6.3元器件与总线的连线表明找到了可以标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图所示。在“string”栏中,输入标签名称(如a),单击“OK”按钮,结束对该导线的标签标定。同理,可以标注其它导线的标签,如图所示。注意,在标定导线标签的过程中,相互接通的导线必须标注相同的标签名。图6.4原件命名则一张电路设计图完成7)把Keiluvision软件产生相应程序软件的.hex文件加入到单片机中。用鼠标右键单击图形编辑窗口中的单片机,然后用左键单击它,则弹出“EditCompoment”页面,然后单击“programFile”后面的选择按扭,把.hex文件加入进去。8)单击仿真运行开始按钮,执行相应电路以及程序的功能。如果不对则检查相应电路以及程序,以达到设计要求为准。6.2KEIL软件KeilC51是德国知名软件公司Keil(现已并入ARM公司)开发的基于8051内核的微控制器软件开发平台,是目前开发8051内核单片机的主流工具。它分为两种版本:评估版本和全版本。在相关网站上可以免费下载评估版本,并按说明依次安装。C51工具包的整体结构,如下图6.5所示,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。图6.5C51工具包的整体结构用KEIL软件编一个单片机程序的方法:1)启动KeilC51软件。2)新建工程。执行KeilC51软件的菜单”Project|NewProject…”,弹出一个”CreateNewProject”对话框。先选择先选择一个合适的文件夹准备来存放工程文件,然后,“文件名”后填入工程名,例如“DS1302”。3)选择CPU类型。我们选择ATMEL公司的AT89C51,然后单击“确定”。4)接着出现是否把标准8051的启动代码添加到工程中去的选择框,我们选择否。5)执行菜单“File|New…”,出现一个名为“Textn”(其中n表示序号)的文档。6)接着执行菜单“File|Save”,弹出一个名为“SaveAs”的对话框。将文件名改为“DS1302.c”,然后保存,扩展名“.c”不可省略,然后在此文件中输入源代码,最后保存此文件。7)添加源程序文件到工程中.单击KeilC51软件左边项目工作窗口“Target1”上的“+”,将其展开。然后右击“SourceGroup1”文件夹,会弹出如图1.7所示的选择菜单。单击其中的“AddFilestoGroup'SourceGroup1'”项.出现“AddFilestoGroup'SourceGroup1'8)添加源程序到文件中。在“AddFilestoGroup'SourceGroup1'”对话框中选择”DS1302.c”文件,添加到此工程中。9)单击KeilC51工具栏的“”图标,弹出名为“OptionsforTarget‘Target1’”的对话框。单击“Output”标签页,选中“CreateHEXFile”项,然后“确定”。10)单击工具栏的按钮“”编译当前源程序。如果出现错误,则会在输出窗口中显示,则仔细检查程序,直到没有错误和警告。11)编译后的结果会生成IntelHEX格式的程序文件“DS1302.hex”。把它用专门的软件以及设备烧录到单片机即可。经过软件与硬件的结合,基于时钟日历芯片DS1302的万年历设计的结果显示如图6.6所示。注:LED显示的顺序为:年(4位),星期(2位),月(2位),日(2位),分(2位),分(2位),秒(2位),所以此图显示的时间为2008年6月9日12时54分33秒,星期一图6.6基于时钟日历芯片DS1302的万年历设计效果图7结论时钟芯片DS1302作为一个特殊的计时设备,与其它计时设备有着不同的特点,它利用晶振产生的振荡脉冲为基础,并把关于时间参数都存储在寄存器中,人们使用它只需要利用单片机取出其时间寄存器中的值,并分别显示就可,而且它与单片机的接口简单,方便,易于实现。在开发时钟芯片DS1302时,需注意以下几个方面问题:首先得注意DS1302的时序,在没有相应处理芯片的处理下,我们需要用单片机编程模拟其时序,只有这样才能让DS1302识别单片机控制命令和处理命令,才能达到正常的通信。接着是DS1302作为一个时钟芯片,它的操作一般都是以其寄存器操作为基础,但在操作这些处理之前,必须初始化芯片,如果没这个操作,一切操作都是不可行的,然后是对寄存器操作得注意其格式,因为各个寄存器的各个位的作用都是不是相同的。最后是对以DS1302和单片机为核心的外围电路设计,因为每个电路都可以选择不同芯片或电路来实现其功能,所以我们在选择这些芯片时,力求简单,易用,不用选择一些复杂的芯片。DS1302对环境的要求很低,很适合在各种恶劣环境中使用,且易于控制,方便使用。参考文献[1]李广飞,李良飞,楼然苗等.单片机C程序设计实例指导.北京航空航天大学出版社,2005年9月[2]谢自美.电子线路设计·实验·测试.华中科技大学出版社,2002年7月[3]康华光.电子技术基础.高等教育出版社,1998年8月[4]谭浩强,张基温,唐永炎.C语言程序设计教程.高等教育出版,1998年7月[5]刘守义.单片机应用技术.西安电子科大,2005年12月[6]周航慈.单片机应用程序设计技术.北京航空航天大学,2002年11月[7]王志军.单片机原理与接口技术.大连理工大学出版社,2004年8月[8]沈庆阳,郭庭吉.8051单片机实践与应用.清华大学出版社,2002年9月[9]艾德才.微机接口技术实用教程.清华大学出版社,2002年7月1日[10]吴向军,罗源明,刘广旋.汇编语言程序设计.高等教育出版社,2005年1月[11]丁元杰.单片微机原理及应用.机械工业出版社,2007年5月[12]戴佳,戴卫恒.51单片机C语言应用程序设计实例精讲.电子工业出版社,2006年4月[12]阎石.数字电路技术基础.高等级教育出版社,2006年5月[13]DS1302英文资料/icstock/247/DS1302.html.[14]74LS244英文资料/icst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论