毕业设计(论文)-基于STC单片机的多功能电子时钟.doc_第1页
毕业设计(论文)-基于STC单片机的多功能电子时钟.doc_第2页
毕业设计(论文)-基于STC单片机的多功能电子时钟.doc_第3页
毕业设计(论文)-基于STC单片机的多功能电子时钟.doc_第4页
毕业设计(论文)-基于STC单片机的多功能电子时钟.doc_第5页
免费预览已结束,剩余50页可下载查看

下载本文档

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

文档简介

届 别: 2010届 学 号: 200614070217 毕 业 设 计(论文)基于stc单片机的多功能电子时钟姓 名 系 别、 专 业 计算机科学系 计算机科学与技术导 师 姓 名、职 称 完 成 时 间 2010年03月20日 49摘 要单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。at89s52就是51系列中的一个比较成熟的型号,它完全兼容51单片机的指令。本文详细介绍了基于at89s52单片机的数字电子钟的设计,本电子钟可以实现日期、时间的显示和调整,带有整点提示和一个闹钟,并且可以显示当前气温。本设计包括硬件设计和软件设计两部分。主要硬件有:三端稳压器lm7805、at89s52单片机、字符型液晶显示模块hy1602a、单总线数字温度计ds18b20和若干按键等。软件大致思路为:使用12mhz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的。用数字温度计ds18b20测量当前气温,在把实时数据显示在lcd1602上的同时,不断扫描按键,如果有按键按下,则对按键做出相应的响应。关键字:单片机; 电子时钟; 测温; abstractmcu in the application of electronic products becomes more widely, particularly the 51 series of mcu, because of its ease of use, low prices and other advantages,its in a large market share. at89s52 is a more mature models in the 51series, it is fully compatible with the directive mcu 51. this paper describes the mcu based on the at89s52 the design of digital electronic clock, the electronic clock can be achieved date, time and adjust the show, it also has the exact point timekeeping and a clock,for the better it can display the current temperature. the design includes hardware and software design in two parts. main hardware: three-terminal regulator lm7805, at89s52 mcu, character lcd module hy1602a, single-bus digital thermometer ds18b20 and a number of buttons. the general idea for software: by use of 12 mhz crystal, the mcus internal timer 0 works in the methods 1, each count 50,000 machine cycle (50 ms) resulted in an interruption, composition a second by interrupts 20 times, so that you can achieve precise the purpose of time. after ds18b20 digital thermometer measuring the current temperature,it will be displayed the real-time data on the lcd1602 at the same time, and constantly scan button, if a button is depressed, it will be produce the corresponding response with the button. keywords: mcu; electronic clock; temperature measure; 摘 要iabstractii1 绪论11.1 设计要求21.2 设计思路21.3 设计重难点32 硬件设计32.1 器件选型32.2 硬件总图32.3 器件介绍42.3.1 电源模块42.3.2 单片机at89s5252.3.3 数字式温度传感器ds18b20122.3.4 lcd1602显示模块153 软件设计193.1 软件设计思路193.1.1 实现功能193.1.2 显示状态193.1.3 定义变量203.1.4 接线方式203.1.5 编程思路203.2 主程序流程图223.3 程序清单及注释233.3.1 主程序“clockmain.c”243.3.2 延时子程序“delay.h”363.3.3 扫描按键子程序“key_scan.h”373.3.4 温度测量子程序“ds18b20.h”373.3.5 液晶显示子程序“lcd1602.h”404 精度分析434.1 误差来源434.1.1 硬件误差434.1.2 软件误差434.1.3 消除误差的办法435 总结与展望45致谢46参考文献47附录:硬件电路设计图48 1 绪论单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,单片机的使用领域已十分广泛,已经远远超出了计算机科学的领域,小到玩具,信用卡,大到航天器,机器人,从实现数据采集,过程控制,模糊控制等智能控制到人类的日常生活,可以说,在人们的生活生产中都离不开单片机,又如智能仪表、实时工控、通讯设备、导航系统、家用电器,电子万年历,到计时器,定时器,计数器,频率计,电子秤,电子血压表等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词“智能型”,“电脑型”,如智能型洗衣机,电脑温控冰箱等。在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面。单片机的应用具有范围广的特点,对各个行业的技术改造和产品智能化的更新换代起着重要的推动作用。(1) 单片机在智能仪表中的应用单片机广泛地应用于各种仪表仪器,使仪表仪器智能化,提高它们的测量速度精度,加强控制功能。(2) 单片机在机电一体化中的应用单片机的出现促进了机电一体化,它作为机电产品的控制器,充分地发挥了体积小,可靠性高,功能强,现场安装灵活方便等优点,大大强化了机器的功能,提高了机器的精度,自动化和智能化的水平。(3) 单片机在实时控制中的应用对于过程控制中的各种物理参数:如转速。位移,流量,压力,温度,湿度,化学成分的测量和控制。将测量技术,自动控制技术和计算机技术相结合,充分发挥数据处理和实时控制功能,使系统工作在最佳状态。(4) 单片机在分布式多机系统中的应用单片机在这种多机系统中,往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。当今的微处理器和微型计算机正向着功能更强,速度更快,价格更廉和网络化,智能化以及多图型,超媒体的方向发展。随着网络通信技术的和多媒体技术的发展,微机及其应用技术将以前所未有的速度,深度和广度向前发展。将迅速改变人们传统的生活方式,给未来的政治,经济发展带来日益深远的影响。而51单片机是各单片机中最具有代表性的一种。电子时钟是现代电子技术在时钟领域的具体实现方式。1.1 设计要求用at89s52单片机,在1602lcd上显示年月日、星期、时分秒、当前温度。具备整点提示功能,提示音为蜂鸣器发出“滴滴”声。具备闹钟功能,闹铃方式为蜂鸣器持续响10秒钟,或者用按键手动关闭响铃。可以用键盘调整时间、设定闹钟。复位时间是2008年6月10日08:59:55。1.2 设计思路本设计是纯粹的应用性设计,主要以实现计时、定时、温度显示等功能为最终目的。设计以atmel公司的at89s52为核心,在最小系统的基础上扩展键盘,数字温度计,以及lcd显示模块,硬件设计简单节约,其功能的实现主要靠软件设计,所以软件在本设计中是最为重要的。本设计包括硬件设计和软件设计两部分。主要硬件有:三端稳压器lm7805、at89s52单片机、字符型液晶显示模块hy1602a、单总线数字温度计ds18b20和若干按键等。软件大致思路为:使用12mhz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的。用数字温度计ds18b20测量当前气温。在把实时数据显示在lcd1602上的同时,不断扫描按键,如果有按键按下,则对按键做出相应的响应。1.3 设计重难点在本设计中,利用单片机内部定时器0产生1秒的周期来精确计数是重点。所以在定时器0的中断服务子程序中,必须要对调用子程序工程中压栈出栈等额外浪费的时间进行软件补偿。本设计的难点在于对于数字温度计ds18b20的操作。数字温度计ds18b20是一个单总线器件,所以对它的读写操作必须严格遵循其时序要求。而其时序比较复杂,这一点比较困难。2 硬件设计2.1 器件选型本设计选取的电源部分是由220v转9v的变压器、整流桥和三端稳压器lm7805构成,主控mcu为atmel公司的at89s52,温度传感器选择比较成熟的ds18b20,显示器件选择市面上常见的字符型液晶显示模块hy1602a。2.2 硬件总图整个系统硬件连接总图如图2-1:图2-1 硬件连接总图2.3 器件介绍2.3.1 电源模块一、总体功能描述图2-2 电源模块本设计的电源模块主要由以下器件组成:220v转9v的变压器、整流桥、三端稳压器lm7805。如图2-2所示,从电网取电,通过变压器把220v交流电转换为9v交流电。然后再通过整流桥得到9v直流电,经过电容c4进行滤波后,输入到三端稳压器lm7805,就可以从lm7805的输出端得到稳定的+5v直流电。其中电容c5和c6都是为了抗干扰和滤波。二、三端稳压器lm7805特性说明7805系列为3端正稳压电路,to-220封装(如图2-3所示),能提供多种固定的输出电压,应用范围广。内含过流、过热和过载保护电路。带散热片时,输出电流可达1a。虽然是固定稳压电路,但使用外接元件,可获得不同的电压和电流。图2-3 三端稳压器lm7805主要技术参数:输出电流可达1a输出电压有:5v过热保护短路保护输出晶体管soa保护极限值(ta=25)输入电压(vo=518v)35v热阻(结到壳)5/w热阻(结到空气)65/w工作结温范围0125贮存温度范围-651502.3.2 单片机at89s52一、功能特性描述at89s52是一种低功耗、高性能cmos 8位微控制器,具有8k 在系统可编程flash存储器。使用atmel公司高密度非易失性存储器技术制造,与工业80c51产品指令和引脚完全兼容。片上flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位cpu和在系统可编程flash,使得at89s52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。at89s52具有以下标准功能:8k字节flash、256 字节ram、32位i/o口线、看门狗定时器、两个数据指针、三个16位定时器/计数器、一个6向量两级中断结构、全双工串行口、片内晶振及时钟电路。另外,at89s52可降至0hz 静态逻辑操作,支持两种软件可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。二、内部结构图如图2-4为单片机at89s52的内部结构框图。图2-4 at89s52内部结构框图二、外部引脚图如图2-5为单片机at89s52的引脚图。 图2-5 at89s52引脚图四、引脚定义及功能说明1vcc(40):电源+5v。2vss(20):接地,也就是gnd。3xtl1(19)和xtl2(18):振荡电路。单片机是一种时序电路,必须有脉冲信号才能工作,在它的内部有一个时钟产生电路,有两种振荡方式,一种是内部振荡方式,只要接上两个电容和一个晶振即可;另一种是外部振荡方式,采用外部振荡方式时,需在xtl2上加外部时钟信号。4p0口(39-32):8位漏极开路型双向i/o口,即地址/数据总线复用口。作为输出口用时,每位能以吸收电流的方式驱动8个ttl逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器时,分时转换地址(低8位)和数据总路线复用,在访问期间激活内部上拉电阻。在flash编程时,p0口接收指令字节,而在程序校验时,输出指令字节,校验时,用i/o口。p1的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的要求外接上拉电阻。5p1口(1-8):是一个带内部上拉电阻的8位准双向通上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(i)。flash编程和程序校验期间,p1接收低8位地址。p1口第二功能如表2-1。表2-1 p1口第二引脚功能引脚号 第二功能 p1.0 t2 (定时器/计数器t2 的外部计数输入),时钟输出 p1.1 t2ex (定时器/计数器t2 的捕捉/重载触发信号和方向控制) p1.5 mosi (在系统编程用) p1.6 miso (在系统编程用) p1.7 sck (在系统编程用)6p2口(21-28):是一个带内部上拉电阻的8位准双向通用i/o口。p2的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(i)。要访问外部程序存储器或16位地址的外部数据存储器时,p2口送出高8位地址数据。在访问8位地址的外部数据存储器时,p2口送出高8位地址数据。在访问8位地址的外部数据存储器时,p2口线上的内容在整个访问期间不改变。flash编程或校验时,p2口亦接收高位地址和其它控制信号。7p3口(10-17):是一组带有内部上拉电阻的8位双向i/o口。p3口输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对p3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的p3口将用上拉电阻输出电流(i)。p3口除作为一般的i/o口线外,更重要的用途是它的第二功能。p3口第二功能如表2-2。表2-2 p3口第二引脚功能引脚号 第二功能 p3.0 rxd (串行输入) p3.1 txd (串行输出) p3.2 (外部中断0)p3.3 (外部中断1) p3.4 t0 (定时器0 外部输入) p3.5 t1 (定时器1 外部输入) p3.6 (外部数据存储器写选通) p3.7 (外部数据存储器写选通)8(29):外部程序存储器选通信号,是外部程序存储器选通信号。当at89s52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据存储器时,将不被激活。9ale/(30):地址锁存控制信号ale是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash编程时,此引脚也用作编程输入脉冲。在一般情况下,ale以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ale脉冲将会跳过。如果需要,通过将地址为8eh的sfr的第0位置1”,ale操作将无效。这一位置1”,ale仅在执行movx或movc指令时有效。否则,ale将被微弱拉高。这个ale使能标志位(地址为8eh的sfr的第0位)的设置对微控制器处于外部执行模式下无效。10rst(9):复位信号输入端/备用电源输入端。当振荡器工作时,rst引脚出现两个机器周期以上高电平将使单片机复位。11/vpp(31):内/外部rom选择端。欲使cpu仅访问外部程序存储器,端必须保持低电平。如果加密位lb1被编程,积怨位时内部会锁存端状态。flash存储器编程时,该引脚加上+12v的编程允许电源vpp,当然这必须是该器件是使用12v编程电压vpp。五、特殊功能寄存器at89s52单片机内的锁存器、定时器、串行口数据缓冲器以及各种控制寄存器和状态寄存器都是以专用功能寄存器的的形式出现的,它们分散的分布在内部ram地址空间范围(80hffh)内。以下对这些专用寄存器作简单的介绍。1累加器acc 累加器是一个最常用的专用寄存器。大部分单操作数指令的操作取自累加器。很多双操作数指令的一个操作取自累加器。加、减、乘、除算术运算指令的运算结果都存放在累加器a或ab寄存器对中。指令系统中用a作为累加器的助记符。2b寄存器:在乘除指令中,用到了b寄存器。乘法指令中的两个操作数分别取自a和b ,其结果存放在ab寄存器对中。除法指令中,被除数取自a,除数取自b,商数存放于a,余数存放于b。在其它指令中,b寄存器也可作为ram中的一个单元来使用。3程序状态字psw 程序状态字是一个8位寄存器,它包含了程序状态信息。(1)cy(psw.7)进位标志 在执行某些算术和逻辑指令时,可以被硬件或软件置位或清零。在布尔处理机中它被认为是位累加器,其重要性相当于一般中央处理机中的累加器a。(2)ac(psw.6)辅助进位标志 当进行加法或减法操作而产生由低4位数(十进制的一个数字)向高四位数进位或借位时,ac将被硬件置位,否则就被清零。ac被用于十进制调整。(3)f0(psw.5)标志位0 是用户定义的一个状态标记,可以用软件来使它置位或清零,也可以用软件测试f0以控制程序的流向。(4)rs1、rs0(psw.4、psw.3)寄存器区选择控制位1和0可以用软件来置位或清零以确定工作寄存器区。rs1、rs0与寄存器区的对应关系如表2-3。表2-3 rs1、rs0与寄存器区的对应关系rs1 rs0对应寄存器区0 0 区0 (00h07h)0 1 区1 (08h0fh)1 0 区2 (10h17h)1 1 区3 (18h1fh)(5)ov(psw.2)溢出标志当执行算术指令时,由硬件置位或清零,以指示溢出状态。(6)p(psw.0)奇偶标志每个指令周期都由硬件来置位或清零,以表示累加器a中1的位数的奇偶数。若1的位数为奇数,则p置位,否则清零。此标志位对串行通信中的数据传输有重要的意义。在串行通信中常用奇偶效验的办法来检验数据传输的可靠性。在发送端可根据p的值对数据奇偶位置位或清零。若通信协议中规定用奇效验的办法,则p=0时,应对数据的奇偶位置位,否则就清零。4栈指针 栈指针sp是一个8位专用寄存器。它指示出堆栈顶部在内部ram中的位置。系统复位后,sp初始化为07h,使得堆栈事实上由08h单元开始。考虑到08h1fh单元分属于工作寄存器区13,若程序设计中要用到这些区,则最好把sp值改置为1fh或更大的值。sp初始值越小,堆栈深度就可以越深。堆栈指针的值可由软件改变,因此堆栈在内部ram值的位置比较活跃。 除用软件直接改变sp值外,在执行psuh,pop指令,各种子程序调用,中断响应,子程序返回(ret)和中断返回(reti)等指令时,sp值将自动增量或减量。5数据指针 数据指针dptr是一个16位专用寄存器,其高位字节寄存器用dph表示,低位字节寄存器用dpl表示。既可以作为一个16位寄存器dptr来处理,也可以作为两个独立的8位寄存器dph或dpl来处理。6端口p0p3专用寄存器p0、p1、p2和p3分别是i/o端口p0p3的锁存器。p0p3作为专用寄存器还可以用直接寻址方式参与其它操作指令。7串行数据缓冲器数据缓冲器sbuf用于存放欲发送或已接收的数据,它实际上由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器。当要发送的数据传送到sbuf时,进的是发送缓冲器,当要从sbuf读数据时,则取自接收缓冲器,取走的是刚接收到数据。8定时器/计数器mcs-51系列中有两个16位定时器/计数器t0和t1。它们各由两个独立的8位寄存器组成,共有4个独立的寄存器:th0、tl0、th1、tl1。可以对这四个寄存器寻址,但不能把t0、t1当作一个16位寄存器来寻址。9其它控制寄存器 ip、ie、tmod、tcon、scon和 pcon寄存器分别包含有中断系统、定时器/计数器、串行口和供电方式的控制和位状态。2.3.3 数字式温度传感器ds18b20一、ds18b20的特性ds18b20 “一线总线”数字化温度传感器是daas最新单线数字温度传感器,同ds1820一样,ds18b20也支持“一线总线”接口,测量温度范围为-55+125,在-10+85范围内,精度为0.5。ds1822的精度较差为2。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,与前一代产品不同,新的产品支持3v5.5v的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。ds18b20可以程序设定912位的分辨率,精度为0.5。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在eeprom中,掉电后依然保存。ds18b20的性能是新一代产品中最好的!性能价格比也非常出色!ds1822与ds18b20软件兼容,是ds18b20的简化版本。省略了存储用户定义报警温度、分辨率参数的eeprom,精度降低为2,适用于对性能要求不高,成本控制严格的应用,是经济型产品。继“一线总线”的早期产品后,ds18b20开辟了温度传感器技术的新概念。ds18b20使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。二、引脚图及说明ds18b20引脚图如图2-6所示,引脚说明如表2-4所示。图2-6 ds18b20引脚封装图表2-4 ds18b20引脚说明引脚 符号 说 明 1 gnd 接地2 dq 单线运用的数据输入/输出引脚 3 vdd 可选vdd引脚三、应用温度测量ds18b20通过门开通期间内低温度系数振荡器经历的时钟周期个数计数来测量温度,而门开通期由高温度系数振荡器决定。计数器予置对应于-55的基数,如果在门开通期结束前计数器达到零,那么温度寄存器它也被予置到-55的数值将增量,指示温度高于-55。同时计数器用钭率累加器电路所决定的值进行予置。为了对遵循抛物线规律的振荡器温度特性进行补偿,这种电路是必需的。时钟再次使计数器计值至它达到零。如果门开通时间仍未结束,那么此过程再次重复。钭率累加器用于补偿振荡器温度特性的非线性,以产生高分辩率的温度测量。通过改变温度每升高一度,计数器必须经历的计数个数来实行补偿。因此,为了获得所需的分辩率,计数器的数值以及在给定温度处每一摄氏度的计数个数钭率累加器的值二者都必须知道。此计算在ds18b20内部完成以提供0.5的分辩率。温度读数以16位、符号扩展的二进制补码读数形式提供。数据在单线接口上串行发送,ds18b20可以以0.5的增量值,在0.5至+125的范围内测量温度。对于应用华氏温度的场合,必须使用查找表或变换系数。四、单总线系统硬件接法单线总线是一种具有一个总线主机和一个或若干个从机从属器件的系统,ds18b20起从机的作用。根据定义,单线总线只有一根线,这一点是重要的,即线上的第一个器件能在适当的时间驱动。该总线为了做到这一点,第一个连接到单线总线上的器件必须具有漏极开路或三态输出。ds18b20的单线接口(i/o引脚是漏极开路的)。多站(multidrop)总线由单线总线和多个与之相连的从属器件组成。单线总线要求近似等于5k的上拉电阻。单线总线的空闲状态是高电平。不管任何原因,如果执行需要被挂起,那么若要重新恢复执行,总线必须保持在空闲状态。如果不满足这一点,且总线保持在低电平时间大于480us,那么总线上所有器件均被复位。存在脉冲(presence pulse)使总线主机知道ds18b20在总线上,并已准备好工作。五、读写协议经过单线接口访问ds1820的协议protocol如下:l 初始化l rom操作命令l 存储器操作命令l 处理/数据初始化:单线总线上的所有处理均从初始化序列开始,初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。一旦总线主机检测到从属器件的存在,它便可以发出器件rom操作命令之一。所有rom操作命令均为8位长。一般常用的rom操作命令有:读rom(33h)、符合rom(55h)、跳过rom(cch)、搜索rom(f0h)。常用存储器操作命令有:启动温度变换(44h)、读暂存存储器(beh)、写暂存存储器(4eh)。2.3.4 lcd1602显示模块一、lcd1602概述字符型型液晶是一种用57点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字。本设计所采用的lcd1602即为最常用的2行16个字。下面是hy1602a液晶模块的一些主要技术参数:1、逻辑工作电压(vdd):+4.5+5.5v2、lcd驱动电压(vdd-vl):+4.5+13.0v3、工作温度(ta):060(常温)/-2075(宽温)4、工作电流:2.0ma5、屏幕视域尺寸:62.516.1mm6、字符尺寸:2.95w4.35hmm二、引脚图及功能介绍本设计使用带背光的液晶模块1602采用标准的16脚接口,如图2-7,其引脚功能如下:图2-7 lcd1602引脚图第1脚:vss为电源地,接gnd。第2脚:vdd接5v正电源。第3脚:vee为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:rw为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:bla背光电源正极(+5v)输入引脚(本图未显示)。第16脚:blk背光电源负极,接gnd(本图未显示)。注意:液晶模块背光须消耗电流约为50ma左右。三、lcd1602操作说明本设计采用的lcd1602是以常见的hd44780为控制模块,它的主要操作说明如下:基本操作时序读状态:输入:rs=l,rw=h,e=h。 输出:d0d7=状态字写指令:输入:rs=l,rw=l,d0d7=指令码,e=高脉冲。 输出:无读数据:输入:rs=h,rw=h,e=h。 输出:d0d7=数据写数据:输入:rs=h,rw=l,d0d7=数据,e=高脉冲。 输出:无2.状态字说明sta7d7sta6d6sta5d5sta4d4sta3d3sta2d2sta1d1sta0d0 sta0-6当前数据地址的数值sta7读写操作使能 ( 1:禁止; 0:允许 )注:对控制器每次进行读写操作之前,都必须进行忙状态检测,确保sta7=03.ram地址映射图控制器内部带有808位(80字节)的ram缓冲区,如图2-8。图2-8 ram地址映射图4.指令说明初始化设置显示模式设置指令码功能00111000设置162显示,57点阵,8位数据接口显示开/关及光标设置指令码功能00001dcbd=1 开显示; d=0 关显示c=1 显示光标; c=0 不显示光标b=1 光标闪烁; b=0 光标不显示000000nsn=1 当读或写一个字符后地址指针加一,且光标加一;n=0 当读或写一个字符后地址指针减一,且光标减一;s=1 当写一个字符,整屏显示左移(n=1)或右移,以得到光标不移动而屏幕移动的效果;s= 当写一个字符,整屏不移动。数据控制控制器内部设有一个数据地址指针,用户可以通过他们来访问内部的全部80字节ram。数据指针设置指令码功能80h+地址码(0-27h,40h-67h)设置数据地址指针其它设置指令码功能01h显示清屏:1.数据指针清零 2.所有显示清零02h显示回车:数据指针清零5.操作时序图读操作时序图图2-9 lcd1602读操作时序图写操作时序图图2-10 lcd1602写操作时序图3 软件设计3.1 软件设计思路3.1.1 实现功能用at89s52单片机,在1602lcd上显示年月日、星期、时分秒、当前温度。具备整点提示功能,提示音为蜂鸣器发出“滴滴”声。具备闹钟功能,闹铃方式为蜂鸣器持续响10秒钟,或者用按键手动关闭响铃。可以用键盘调整时间、设定闹钟。复位时间是2008年6月10日08:59:55。3.1.2 显示状态1. 正常显示状态1602lcd第一行第一列开始显示“年-月-日、星期”。1602lcd第二行第一列开始显示“时:分:秒、闹钟开关标志、温度”。2. 时间设定状态在正常显示状态下按下按键k1进入时间设定状态,用按键k1在要调整的数据(年、月、日、时、分、秒和闹钟定时)间循环切换,切换到的数据前显示右方向三角,表示当前数据可以调整,按k3加1,按k4减一。如果长按k3或k4按键,则当前数据保持加(减)1,直到按键被松开。在设定过程中,可以随时按下按键k5退出设定状态并保存设定内容。也可以随时按下按键k6退出设定状态,不保存设定内容。3. 在任何状态下,按下k2快速切换闹钟开关。4. 如果lcd1602出现显示异常,可以在正常显示状态下按k3,重新初始化lcd。 3.1.3 定义变量1. 时间显示部分:年(year)、月(month)、日(day)、时(hour)、分(min)、秒(sec)、星期(week)、闹钟所设定的时(a_hour)、分(a_min)、 闹钟开状态标志(alarm_f)。2. 时间调整部分:暂存状态的年(year_tmp)、月(month_tmp)、日(day_tmp)、时(hour_tmp)、分(min_tmp)、秒(sec_tmp)、闹钟所设定的时(a_hour_tmp)、分(a_min_tmp)。3. 温度显示部分:温度值(temperature)、温度十位(tens)、温度个位(units)、温度十分位(decile)、过渡变量(t_tmp)。3.1.4 接线方式按键k1k6连p1.0p1.5。温度传感器ds18b20数据位dq连p2.4。1602lcd的数据位d0d7连接p0.0p0.7 ,功能位rs连p2.0,rw连p2.1,e连p2.2。蜂鸣器连p2.3。3.1.5 编程思路1. 给以下变量赋初值:年(year)、月(month)、日(day)、时(hour)、分(min)、秒(sec)、闹钟状态(aflag)、闹钟所设定的时(a_hour)、分(a_min),计算变量星期(week)。2. 因为晶振频率为12mhz,所以计数频率为12mhz/12=1mhz,这就需要计数器0计数1000000次才可以达到一秒钟。我们用定时器0工作在方式1状态,每次计数50000次,如此进行20次,即可凑够一秒钟。这样可以得到初始化定时器的控制字:tmod=0x01,计数初值65536-50000=15536即 0x3cb0,这样就可以设计一个计数一秒的函数。3. 初始化温度传感器ds18b20,读取温度获得以下变量:温度十位(tens)、温度个位(units)、温度十分位(decile)。4. 读相应变量的值,送入lcd显示时间和温度等信息。5. 不断的扫描按键,并且响应按键输入。在进入设定模式后,所有时间变量被过渡变量代替,如果确认设置,则过渡变量赋给时间变量,如果取消设置,则还使用原时间变量。3.2 主程序流程图开始定时器0初始化温度传感器ds18b20初始化液晶显示器lcd1602初始化液晶显示器lcd1602初始化把自定义字符写入lcd的cgramc 判断闹钟是否启动y闹钟响n测量温度扫描键盘判断k2是否按下y开/关闹钟n判断k3是否按下y重新初始化lcd判断k1是否按下ny计数器k1_cnt加1abn判断k1_cnt是否大于1c计数器k1_cnt=2进入时间设定模式进入正常显示模式ccba判断k1_cnt是否为1判断k1_cnt是否为10 ny进入设定菜单y y执行键盘操作n图3-1 主程序流程图3.3 程序清单及注释本设计使用keil vision3(如图3-2)作为编译和调试的环境。为了条理清晰和方便程序移植,在工程中按照功能模块化分为如下几个文件:clockmain.c、delay.h、key_scan.h、ds18b20.h、lcd1602.h。图3-2 编译和调试的环境keil vision33.3.1 主程序“clockmain.c”#include#include#include#include#include#includesbit buzz=p23; /定义蜂鸣器的接口unsigned char k1_cnt=0; /记录k1连续按下的次数unsigned char hint_cnt=0;unsigned char code hint1=press set to ch-;/press k1 to set ;unsigned char code hint2=ange time&alarm!;unsigned char code hint3=alarm setting: ;unsigned char code hint4= ; /十个空格unsigned int year=2010,year_tmp;unsigned char month=4,day=30,week,hour=9,min=59,sec=50;/复位的时间初值unsigned char a_hour=10,a_min=1;unsigned char month_tmp,day_tmp,hour_tmp;unsigned char min_tmp;unsigned char sec_tmp;unsigned char a_hour_tmp,a_min_tmp;unsigned char key;bit alarm_f=1; /闹钟开状态标志位unsigned char bissextile(unsigned int y);/函数声明,判断是否闰年unsigned char temp_bissextile(unsigned int y);/函数声明,判断是否闰年unsigned char temp_day_max(unsigned char m);/函数声明,判断当月天数unsigned char day_max(unsigned char m);/函数声明,判断当月天数unsigned char week_calculate(unsigned int y,unsigned char m,unsigned char d);/函数声明,计算星期void timer0_init(); /函数声明,定时器t0初始化void normal_display();/函数声明,正常显示模式void alarm_judge();/函数声明,判断闹铃状态void setting_menu();/函数声明,进入设定菜单void setting_display(unsigned char c);/函数声明,显示设定模式void key_action(unsigned char c); /函数声明,响应键盘输入void alarm(); /函数声明,启动闹铃main()timer0_init(); /定时器0初始化ds18b20_init(); /温度传感器ds18b20初始化lcd_init(); /显示器lcd602初始化user_defined_char(); /把自定义字符写入lcd1602的cgramwhile(1) alarm_judge(); /判断闹铃是否启动readtemperature(); /读ds18b20检测到的温度 key=key_scan(); /扫描键盘if(key=k2) /如果按下k2,则打开或关闭闹钟功能alarm_f=alarm_f; if(key=k3) /如果按下k3,则初始化lcd1602(处理lcd显示故障) lcd_init();user_defined_char();if(key=k1) /如果k1被按下k1_cnt+; /用k1_cnt记录k1按下的次数if(k1_c

温馨提示

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

最新文档

评论

0/150

提交评论