资源描述
2009级电子信息科学与技术毕 业 论 文 论文题目:基于单片机控制数字时钟系统的设计 论文作者: 指导老师:专业班级:电子信息科学与技术2009级学 号:提交论文日期:2011年 11 月 日论文答辩日期:2011年 12 月 日 中 国重 庆2011年 11 月 目 录摘要:Abstract:1引言11.1单片机数字时钟的简介11.2单片机数字时钟的功能简介12 智能交通灯控制系统的硬件介绍12.1 AT89S52单片机简介12.1.1 AT89S52单片机的主要性能参数22.1.2 AT89S52芯片内部结构简介22.1.3 主要引脚功能32.2 DS18B20简介52.1.5 DS18B20内部结构简介52.1.6 主要引脚功能32.3 LCD1602的原理框图43 电路图53.1数字时钟全电路图54 智能数字时钟的软件设计94.1智能数字时钟的软件设计流程图94.2 时钟的软件设计104.3 DS18B20检测温度的软件设计105.控制器的软件设计115.1 按键的设定11结束语13参考文献13致谢语14(共18页)第16页摘要本文介绍了多功能数字时钟的系统设计。系统具有时间设置及显示,温度显示等功能。系统以AT89S52为核心,主要基于AT89S52,低功耗MCU的字符型数字时钟的研究。系统带有液晶显示器,配合按键提供友好的用户界面,操作简单,该数字时钟能长期、连续、可靠稳定的工作;同时具有体积小、低功耗等特点,便于携带,使用方便。系统软件设计包括单片机编程。单片机软件编程主要实现按键、液晶显示、时钟、计时、温度显示等模块功能。关键词:数字时钟 单片机 液晶显示器Abstract1引言1.数字时钟简介现在的人都比较重视时间观念,基本上把时间就等于金钱。对于一个把握时间严格的人或者事情来说,时间的不准会给自己带来不必要的麻烦。所以有显示的时钟比指针式的时钟表现出更大的优势。带显示的时钟简单明了,而且更直观、读数快、时间更精确。而机械的时钟依赖于晶体振荡器,可能导致较大的误差。数字时钟是采用数字电路对“时”,“ 分”,“ 秒”,数字显示的装置。数字时钟的精度、稳定度远远超过老式机械时钟。在本设计中,采用LCD显示时、分、秒,以24小时计时方式。以12MHZ的晶振产生振荡脉冲,定时器计数。电路具有时钟显示的基本功能和对时钟的调整,同时加入DS18B20对周围环境温度的检测,使自己对当日气温有所了解,方便衣物的穿着。同时随时间的显示连同日期、星期同步显示,促进对时间的了解。数字时钟是小巧,价格低廉,走时精度高,使用方便,低功耗,功能丰富,便于集成化而受广大消费者的喜爱,故而得到广泛的应用。2 数字时钟控制系统的硬件介绍2.1 AT89S52单片机简介AT89S52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含8k bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。 2.1.1 AT89S52单片机的主要性能参数 与单片机产品兼容8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz33Hz、三级加密程序存储器、32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。2.1.2 AT89S52芯片内部结构简介中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(内部RAM):数据存储器用于存放变化的数据。AT89S52中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用寄存器占用。程序存储器(内部ROM):程序存储器用于存放程序和固定不变的常数等。通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。AT89S52内部配置了8KB闪存。定时/计数器(ROM): 定时/计数器用于实现定时和计数功能。AT89S52共有2个16位定时/计数器。 并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。每个口都由1个锁存器和一个驱动器组成。 全双工串行口:A89S51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 时钟电路:时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。 中断系统:中断系统的作用主要是对外部或内部的终端请求进行管理与处理。AT89S52共有5个中断源,其中又2个外部中断源和3个内部中断源。如图1:图1 AT89S52系列单片机的内部结构示意图 图2 AT89S52引脚 2.1.3 主要引脚功能AT89S52 引脚图如图2 所示:VCC:电源电压GND:接地P0口:P0口是一组8位漏极开路型双向I0口,也即地址数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。P1口:Pl 是一个带内部上拉电阻的8位双向IO口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。表1 P1引脚图端口引脚第二功能:P1.5MOSI(用于ISP编程)P1.6MOSI(用于ISP编程)P1.7MOSI(用于ISP编程)P2 口:P2 是一个带有内部上拉电阻的8 位双向IO 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。P3 口:P3 口是一组带有内部上拉电阻的8 位双向I0 口。P3 口输出缓冲级可驱动4 个TTL逻辑门电路。对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。P3口除了作为一般的I0口线外,更重要的用途是它的第二功能,如下表2:表2 p1引脚图端口引脚第二功能:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外中断0)P3.3/ INT1(外中断1)P3.4T0(定时计数器0外部输入)P3.5T1(定时计数器1外部输入)P3.6/ WR(外部数据存储器写选通)P3.7/ RD外部数据存储器读选通)P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。ALE:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。程序储存允许()输出是外部程序存储器的读选通信号,当AT89S52 由外部程序存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的信号。VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。XTAL1:振荡器反相放大器及内部时钟发生器的输入端。DS18B20数字温度传感器简介DS18B20是DALLAS公司推出的数字温度传感器,可直接输出912位的数字温度值,含有一个由非易失性存储器保存上下限报警点的报警器。DS18B20使用单总线系统,仅需一根数据线即可实现与微处理器之间的通信。工作温度范围是55+125,温度测量数据在10+85范围内的精度可达0.5。DS18B20还可通过数据线实现寄生供电,从而省掉了外部电源。每个DS18B20都具有一个唯一的64位器件识别码,这样可使多个DS18B20挂在同一条单总线系统上,并由一个微处理器来控制这些分布在一个较大区域内的很多的DS18B20。因此,它可由诸如采暖通风空调环境控制系统,建筑物内部、设备或机器的温度监测系统以及过程监控系统。使用DS18B20数字温度传感器的优势:传统的热敏电阻价格高,不具有线性,可靠性差,测量温度准确率低,对于小于1的温度信号不适用需要复杂的恒流源电路。数据处理复杂,热电偶要加上补偿电路且材料价格高,都需要A/D转换成数字信号才能由微处理器进行处理。DS18B20是单线数字温度传感器,其具有:(1) 采用单总线的接口方式与微处理器连接时只需要一根线即可实现微处理器与DS18B20的双向通信。单总线具有经济性强,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便;(2) 测量温度范围宽,测量精度高。DS18B20的测量范围为55+125,在10+85范围内,精度为0.5。传统的热敏电阻在4090,对于小于1的温度测量不准确;(3) 在使用中不需要任何外围元器件就可以实现测温;(4) 多点组网功能。多个18B20可以并联在唯一的三线上,实现多点测温;(5) 供电方式灵活。DS18B20可以通过内部寄生电路从数据线上获取电源,当数据线上的时序满足一定要求时,可以不接外电源,使结构更加简单,可靠性更高;(6) 测量参数可配置。DS18B20的测量分辨率可通过程序设定为912位;(7) 负压特性。电源极性接反时,温度计虽不会正常工作,但是也不会因为发热而烧毁;(8) 掉电保护功能。DS18B20内部含有EEPROM,在系统掉电以后,仍可保存分辨率及报警的设定值。(9) DS18B20是一个数字温度采集IC,输出的信号就是8位数字信号,直接可以知道温度值;(10) DS18B20具有体积小,适用电压更宽、更经济、可选封装更小的封装方式,更宽的电压适用范围,适合构建自己的经济测温系统。图3 DS18B20引脚图18B20引脚说明:1GND 地2DQ 数据输入输出3VDD 可选的VDD图4 DS18B20组成方框图图1的方框图表示DS18B20的主要部件。DS18B20有三个主要的数据部件:1)64位激光(lasered)ROM;64位激光ROM用来存储DS18B20本身的64位串行编码,具体结构如表5所示。开始8位是产品类型的编号,接着是每个器件的唯一的序号,共有48位,最后8位是前56位的CRC校验码,也是多个DS18B20可以采用一线进行通信的原因。表5DS18B20的64位闪速ROM结构图8b 检验CRC48序列号8b出厂代码(10H)MSBLSBMSBLSB MSB LSB2)温度灵敏元件;3)非易失性温度告警触发器TH和TL,可以通过软件写入用户报警上下限。器件从单线的通信线取得其电源,在信号为高电平的时间周期内,把能量贮存在内部的电容器中,在单信号线为低电平的时间期内断开此电源,直到信号线为高电平重新接上寄生电源为止。使用寄生电源的是以复杂的软件编程为代价实现的。作为另一种可供选的方法,DS18B20也可以用外部的5V电源供电。 我们选择外部电源供电是为了减轻软件设计的负担。4)高速暂存器。数字温度传感器DS18B20的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PROM,其中E2PROM用于存储TH,TL值、数据先写入RAM,经校验后传给E2PROM;而高速暂存器中的第5字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如表6所示。表6配置寄存器字节各位的定义格式TMR1R011111DS18B20的工作原理:与DS18B20的通信经过一个单线接口。在ROM操作未定建立之前不能使用存贮器和控制操作。主机首先提供五种ROM操作命令之一:)Read ROM(读ROM),命令字为33H;2)匹配ROM,命令字为55H;3)跳过ROM,命令字为CCH;4)搜索ROM,命令字为F0H;报警搜索,命令字为ECH。随机存储操作命令:写随机存储,命令字为4EH;读随机存储器,命令字为BEH;启动温度转换,命令字为44H;复制随机存储器,命令字为48H;重新调出,命令字为B8H;读电源,命令字为B4H。DS18B20是通过时间片(time slots)来读出和写入DS18B20的数据,时间片用于处理数据位和指定进行何种操作的命令字。l 写时间片(Write Tim slots)当微处理器主机把数据线从高逻辑电平拉至低逻辑电平时,产生写时间片:写1时间片和写0时间片。所有时间片必须有最短为60ms的持续期,在各写周期之间必须有最短为1s的回复时间。在I/O线由高电平变为低电平之后,DS18B20在15s至60s的窗口之间对I/O线采样。线为高电平,写1就发生;如果为低电平,便发生写0。对于微处理器写1时间片的时候,数据线必须先被拉至逻辑低电平,然后被释放,使数据线在写时间片开始之后的15s之内拉至低电平;微处理器写0时间片的时候,数据线被拉至逻辑低电平且至少保持低电平60s。l 读时间片(Read Tim slots)微处理器从DS18B20读数据时,主机产生读时间片。当主机把数据线从逻辑高电平拉至低电平时,产生读时间片。数据线必须保持逻辑低电平1s;来自DS18B20的输出数据在读时间片下降沿之后的15s有效。要读出从读时间片开始算起15s的状态主机必须停止把I/O引脚驱动至低电平。在读时间片结束时,I/O引脚经过外部的上拉电阻拉回至高电平。所有读时间片的最短有效期限为60s,各个读时间片之间必须有最短为1s的回复时间图 5 DS18B20读/写时序图LCD1602简介LCD1602的特点LCD1602比传统的LED数码管更省电,可视面积更宽大,可同时显示的内容较丰富,显示的内容多样化,不仅可以显示数字、字母也可以显示一些自己定义的点阵式的图形,而且价格低廉,体积较小,使用简单的电路就可以驱动(传统的数码管需要接上拉电阻)。LCD1602控制IC特点1. 作为控制器可驱动4016点阵液晶像素,并可通过外接驱动器扩展驱动。2. 显示字符格式有三种:57 点阵+光标,510点阵+光标,用户自定义。3. 并口数据传输可作为8位数据传输和4位数据传输两种方式。4. 具有简单而功能较强的指令集,可实现字符移动、闪烁等显示功能。5. 内置字符生成ROM(CGROM)8320位,字符生成RAM(CGRAM)512位,显示RAM(DDRAM)808位。图5 LCD1602外形尺寸表3 LCD1602模块接口说明编号符号电平输入/输出引脚作用1Vss电源地2Vcc电源(+5V)3Vee对比调整电压4RS0/1输入0=输入指令,1=输入数据5R/W0/1输入0=向LCD写入数据或指令,1=从LCD读取信息6E1,10输入使能信号,1读取信息,10(下降沿)执行指令7DB00/1输入/输出读总线line0(最低位)8DB10/1输入/输出读总线line19DB20/1输入/输出读总线line210DB30/1输入/输出读总线line311DB40/1输入/输出读总线line412DB50/1输入/输出读总线line513DB60/1输入/输出读总线line614DB70/1输入/输出读总线line715A+VccLCD背光电源正极16K接地LCD背光电源负极l LCD1602液晶的工作原理表4 LCD1602状态字说明STA7STA6STA5STA4STA3STA2STA1STA0D7D6D5D4D3D2D1D0STA0-6当 前 数 据 地 址 指 针 的 数 值STA7读 写 操 作 使 能1:禁 止 0:允 许在对控制器每次进行读写操作之前,都必须进行读写检测,确保DB7为0。表5 LCD1602液晶的时序参数时序参数符号极限值单位测试条件最小值典型值最大值E信号周期tc400-ns引脚EE脉冲宽度tpw150-nsE上升沿/下降沿时间tR,tF-25ns地址建立时间tSP130-ns引脚E、R/W、RS地址保持时间tHD110-ns数据建立时间(读操作)tD-100ns引脚DB0DB7数据保持时间(读操作)tHD220-ns数据建立时间(写操作)tSP240-ns数据保持时间(写操作)tHD210-ns图6 LCD1602读操作时序图读操作时序(如图6)读状态输入:RS=L,RW=H,E=H输出:DB0DB7=状态字读数据输入:RS=H,RW=H,E=H输出:DB0DB7=数据写操作时序(如图7)写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无写数据输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据输出:无图7 LCD1602写操作时序图3电路图4数字时钟系统的软件设计4.1数字时钟的软件设计定时:定时是对时间进行统计。AT89S52的定时器/计数器的定时功能其实也是通过计数实现的,与计数功能不同的是,此时计数脉冲来自于单片机内部的时钟脉冲。单片机在每个机器周期都将计数器的值加1,由于每个机器周期等于12个振荡周期,因此计数器的计数速率为振荡频率的1/12。当晶体振荡频率选定时,机器周期也确定了。计数值乘以单片机的机器周期就为定时时间。在本次设计中使用的AT89S52单片机的定时器0,定时的时间是50ms。程序如下:void tim00(void)interrupt 1 /程序作用:时钟定时中断程序,用来定时所用TH0=-50000/256; /给定时器0高位赋初值TL0=-50000%256; /给定时器0低位赋初值if(ci59) /如果秒大于59秒也就是到了60秒的时候miao=0; /秒清零,恢复为原始的0状态fen+; /秒清零的同时,分钟数加1if(fen59) /如果分钟大于59分钟也就是到了恰好60分钟的时候fen=0; /分钟恢复为原始的0状态shi+; /分钟清零的时候,同时小时加1if(shi23) /如果小时大于23也就是说小时恰好为24时的时候shi=0; /小时清零if(xingqi6) /此时满了一天24小时的条件如果星期小于6xingqi+; /星期数向前加1elsexingqi=1;/当星期大于6的时候,星期清零,即为星期日if(yue=1)|(yue=3)|(yue=5)|(yue=7)|(yue=8)|(yue=10)|(yue=12)&(ri31)|(yue=4)|(yue=6)|(yue=9)|(yue=11)&(ri30)|(nian%100)=0)|(nian%4)=0)&(yue=2)&(ri29)|(nian%100)!=0)|(nian%4)!=0)&(yue=2)&(ri12) /如果月份大于12月即为1月的时候yue=1; /月份恢复为1nian+; /同时年的数字向前加14.3温度检测的软件设计温度检测流程图跳过ROM命令启动温度转换初始化匹配ROM命令读数开始初始化bit init_18b20(void)/DS18B20初始化bit x; /定义一个位变量xdq=1; /把DS18B20的数据线dq拉高delay(14); /延时28微秒dq=0; /把DS18B20的数据线dq拉低delay(85); /延时170微秒dq=1; /把DS18B20的数据线dq拉高delay(16); /延时32微秒x=dq; /把此时数据线dq的值送给位变量x保存起来delay(20); /延时40微秒return x; /把x的值通过数据线返回给主机即AT89S52 uchar readonechar(void) /函数作用:主机收集DS18B20发送的数据uchar dat1,i;/定义两个变量dat1和i,dat1用来收集DS18B20发送给主机的数据,i记位数for(i=0;i=1; /主机把从DS18B20收集过来的数据通过移位保存起来dq=1; /把数据线dq拉高if(dq)dat1|=0x80; /把收集到的数据与0X80相或delay(4); /延时8个微秒return dat1; /将收到的8位数据发送给主机void writeomechar(uchar dat1) /作用:主机对DS18B20写命令uchar i; /定义一个记位数的变量ifor(i=0;i=1; /将数据移位后逐字节发送int readtempture(void) /本函数作用:用于读取DS18B20的数据,以及将数据转换为温度int tt; /定义一个整型变量tt,收集转化后的温度值uchar a; /定义一个字符型变量a,保存DS18B20低位的值uchar b; /定义一个字符变量b,保存DS18B20高位的值init_18b20(); /初始化DS18B20writeomechar(0xcc); /对DS18B20写跳过ROM命令,即为不读DS18B20的序列号writeomechar(0x44); /对DS18B20写启动温度转换命令init_18b20(); /初始化DS18B20writeomechar(0xcc); /对DS18B20写跳过ROM命令writeomechar(0xbe); /对DS18B20写读随机存储器a=readonechar(); /把readonechar()读出的值赋给a(先发送的是低位)b=readonechar(); /readonechar()读出的值赋给b(后发送的是高位)tt=(b*256+a)*0.625; /把收集到的2进制温度值转换为10进制的温度值return (int)tt;/将处理好的数据返回给主机 5控制的软件设计本设计使用3个独立按键作为调节时钟的控制器件以及一个按键用于控制当时钟出现异常情况的时候复位于初始状态的复位和一个切换显示的标志按键(LCD1602显示内容丰富,本设计中有多屏显示)。按键说明:模式键:在小时,分钟,年,月,日,星期各个不同的类别中选择;加键:在小时,分钟,年,月,日,星期中执行加;减键:在小时,分钟,年,月,日,星期中执行减;切换键:切换不同的屏显。由于本次设计中有加,减两个按键,而不是一个单独的加键或者减键,没有设计连续的加或者减的方法,为了调节的方便,没有使用万年历法。任何一个类别均可单独调节至准确。程序设计如下:void tim01(void)interrupt 3 /作用:用于本设计的控制部分,使用定时器1TH1=-9999/256; /给定时器1高位初值TL1=-9999%256; /给定时器1低位初值if(P1!=0xff) /有键按下时jianzhi_temp=P1; /主机读取P0口的值anjianflag=1; /按键按下标志if(anjianflag=1) /按键按下标志成立,确定有键按下cishu+; /计中断次数,用于消除抖动if(cishu10)&(P1=0xff)&(anjianflag=1)/当松开的时候cishu=0; /计数清零,恢复为0状态anjianflag=0; /标志不成立,表示本次按键结束switch(jianzhi_temp) /根据读取到的P0口的值做跳转case 0xfe: /按下的是模式设置键if(moshi7) /在7种模式中自加,0为调时,1调分钟,2为调/年,3调月份,4调日期,5调星期,6不做调整moshi+;elsemoshi=0;/模式清零break;case 0xfd: /在各种模式下,加不同的类别(加)switch(moshi)case 0:if(shi23) /加小时shi+;elseshi=0;break;case 1: if(fen59) /加分钟fen+;elsefen=0;break;case 2:nian+; /加年份break;case 3:if(yue12) /加月份yue+;elseyue=1;break;case 4:if(ri31) /加日期ri+;elseri=1;break;case 5:if(xingqi0) /减小时shi-;elseshi=23;break;case 1: if(fen0) /减分钟fen-;elsefen=59;break;case 2:nian-; /减年份break;case 3:if(yue1) /减月份yue-;elseyue=12;break;case 4:if(ri0) /减日期ri-;elseri=31;break;case 5:if(xingqi0) /减星期xingqi-;elsexingqi=7;break;case 0xf7:qiehuanflag=qiehuanflag; /切换不同的屏显break;l 6结束语通过本次设计我学会了l 7参考文献赵建领 薛园园 51单片机开发与应用技术详解2009.10电子工业出版社(348)宋戈 黄鹤松 员玉良 蒋海峰51单片机应用开发范例大全2010.2人民邮电出版社(224)
展开阅读全文