多功能数字钟课程设计报告.docx
《多功能数字钟课程设计报告.docx》由会员分享,可在线阅读,更多相关《多功能数字钟课程设计报告.docx(36页珍藏版)》请在冰豆网上搜索。
多功能数字钟课程设计报告
天津职业技术师范大学
TianjinUniversityofTechnologyandEducation
课程设计
专业班级:
应电0814班
学生姓名:
王宝玉(3)许韵雯(13)江卫红(12)
指导教师:
刘新月(讲师)潘静(讲师)
系别:
电子工程学院
1引言
微型计算机的出现给人类生活带来了根本性的变化,单片机技的出现也给现代生活 带来了一次新的技术革命,因其极高的性能价格比,应用很广,发展很快。
电子时钟是现代社会应用广泛的计时工具,在我们日常生活中发挥重要作用。
故本次课程设计通过对单片机的学习和应用,以AT89C52芯片为核心,辅以必要的电路,设计了一个具有LCD准确显示的数字实时时钟,采用独立式按键进行时间调整和功能转换,并引入一个内部充电电源在停止外部供电时仍具有内部计时的功能。
该系统同时具有硬件设计简单、应用性强、工作稳定性高等优点。
2课程设计的目的与要求
2.1设计的目的
1、AT80S52单片机硬件结构。
2、DS18B20温度传感器的使用方法。
3、DS1302时钟芯片的用法。
4、12864LCD液晶屏的编程使用方法。
2.2要求
1、能够以数字的形式在LCD12864上显示当前时间的小时和分钟和秒。
2、能够以数字加汉字的形式在LCD12864上显示当前时间的小时和分钟和秒。
3、能够以数字加汉字的形式在LCD12864上显示当前年月日。
4、能够以数字加汉字的形式在LCD12864上显示当前星期。
5、时间采用时钟芯片DS1302控制。
6、温度采用DS18B20温度传感器检测当前温度。
7、所有功能在LCD12864当中同步显示。
8、采用AT89S52单片机控制
3方案论证及选择
3.1多功能数字钟的总体设计思路
按照系统的设计功能要求,本多功能数字钟系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合ds1302和ds18b20来控制时钟和温度的调整显示。
获得多功能数字钟的数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。
3.2多功能数字钟系统方案论证
3.2.1多功能数字钟系统方案选择
方案1:
通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;
方案2:
用专门的时钟芯片(DS1302)实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。
虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。
用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。
综上所述,选择方案2。
3.2.2单片机的选择
方案1:
8031系列,由于它没有内部RAM,系统又需要大量内存存储数据,因而不可用;51系列单片机的ROM为4K,对于我们设计的系统可能有点小。
方案2:
52系列单片机与51系列的结构一样,而ROM扩大为8K,对我们设计系统提供充足的空间进行功能的扩展。
再有51系列单片机与52系列的单片机价格差不多。
因此,我们选择52系列的单片机。
3.2.3显示系统的方案比较
方案1:
用数码管或点阵LED显示。
方案2:
用液晶1602显示。
方案3:
用液晶12864显示。
时钟和温度的显示可以用数码管或LED,而且价格便宜。
但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。
有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用1602液晶显示数据有限,1602不能够显示指针时钟,只能够显示一些基本的西文字符,显示数据的可读性不好,用可以显示汉字的12864液晶显示器还可以增加显示信息的可读性,用12864的绘图功能即可绘制出大字体数字,让人看起来会很方便。
虽然它们在价格上差距很大,但是1602不能够实现我们的要求,12864.是我们唯一的选择。
3.2.4温度系统方案选择
方案1:
用热敏电阻等测温元件测出电压,再转换成对应的温度。
需要比较多的外部元件(A/D转换)支持,且硬件电路复杂,制作成本相对较高。
方案2:
用DS18B20直接测温。
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
经比较,我们选择方案2。
温度实现只能通过外部的温度传感器来实现。
经上网查阅及市场考察,DS18b20体积小,只有3只脚,电路接法简单。
内部含有寄存器为我们设计实现上下限报警功能提供保障。
精度为0.5°C,也符合我们设计的要求。
DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。
3.3多功能数字钟系统的总体设计
初步确定设计系统由单片机AT89S52主控模块、时钟模块ds1302、测温模块ds18b20、显示模块12864、按键扫描模块、ISP在线编程模块、复位模块、晶振模块共8个模块组成,电路系统框图如下
4.1基本原理
本设计采用一块单片机(AT89S52)作为多功能数字钟的控制核心,加以温度传感(DS18B20)、时钟芯片(DS1302)、液晶显示屏(12864)、复位电路、晶振电路、按键电路等构成。
系统的结构框架最主要的部分是中间的主控模块部分,时间的计算由时钟芯片(DS1302)完成,通过简单的串行接口与单片机进行通信。
温度测量由温度传感器(DS18B20)完成。
传感器的测量结果由于是以数字信号形式输出,可以直接送给单片机处理。
单片机在接到数据后,一方面将时间日期通过液晶显示屏(12864)显示出来,另一方面通过对键盘的扫描来确定哪个键按下,随即跳转到该键对应功能模块界面。
4.2单片机最小系统电路设计
4.2.1单片机芯片选择
单片机采用52系列单片机。
由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
AT89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
单片机管脚图及说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下表所示:
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高
电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
EA:
非/Vpp脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。
4.2.2复位电路
复位电路有两种方式:
上电复位和按钮复位,我们主要用按钮复位方式。
如下图所示:
4.2.3晶振电路
电路中,在XTAL1和XTAL2之间连接晶体震荡器与电容构成稳定的自激震荡器,电容器C3和C4对振荡器具有微调作用。
如下图所示:
选取原则:
电容选取22pF,晶振为12MHz。
4.2.4电源电路
AT89S52单片机的供电电源是5V的直流电。
如下图所示:
4.3时钟系统电路设计
4.3.1时钟芯片选择
我们采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求,且具有闰年补偿等多种功能。
它采用主电源和备用电源双电源供电。
它的工作电压范围2.0~5.5V,在2.2V时,小于300nA。
它内部含有31个字节的静态RAM,可提供用户访问。
DS1302内部的寄存器为我们调时,闹钟定时提供了寄存空间。
备用电源也实现了当系统断电后,时钟仍然可以保持。
而且它是串行接口,与单片机通信所需要的接口少。
不像DS12887等芯片并行通信需要很多IO口。
4.3.2DS1302管脚及寄存器说明
1)DS1302的引脚排列
Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
因此,我们Vcc1用3V的纽扣电池作为备用电源,Vcc2用系统电源作为主电源。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向)。
SCLK为时钟输入端。
2)DS1302的寄存器说明
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31
个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
3)、DS1302时钟电路如下图所示:
DS1302与单片机的连接仅需3条线:
时钟线SCLK、数据线I/O和复位线RST。
时钟线SCLK与P1.1相连,数据线I/O与P1.2相连,复位线RESS与P1.3相连。
由于DS1302是靠涓细电流充电来实现串行输入输出的,因此,在SCLK、I/O、RST线上要加上拉电阻,其中,它们的电流应该在500u~1mA之间,若电源为5V,则R约为5k,因此,我们的电阻R=4.7K。
在单电源与电池供电系统中,vcc1提供低电源并提供低功率的备用电源。
Vcc2提供高电源作为芯片供电的主电源。
因此,这里vcc1用10uf的电容做电池,vcc2用5V的系统电源。
晶振为32.768KHz接入X1、X2引
脚。
4.4温度系统电路
4.4.1温度芯片的选择
温度实现只能通过外部的温度传感器来实现。
经上网查阅资料及市场考察,DS18b20体积小,只有3只脚,电路接法简单。
它能够直接读出被测温度。
内部含有寄存器为我们设计实现上下限报警功能提供保障。
用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;精度为0.5°C,也符合我们设计的要求。
DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。
4.4.2DS18B20内部结构描述
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8个字节的存储器,结构如图4.1所示。
头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义如图4.2所示。
低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
4.4.3DS18b20温度系统电路
DS18B20温度系统电路如下:
DS18B20有两种接法:
一是单线接法即只接QT。
这种方法应用它内部的寄生电源,因此在QT上要用一个MOSFET把I/O线只接拉到电源上。
二是从vdd脚加上电源。
方法一适合于远距离温度监控,不需要本地电源。
而我们只是设计测温系统,选择方法二就行了,还有MOSFET极容易烧,我们不用它。
Vdd接5V电源,vss接地,QT与P3.1相连。
因为DS18B20的工作电流约为1MA,因此Qt端还要加上拉电阻为其提供电流。
若用5V电源,则R=5/1MA=5k。
R取4.7K。
4.5LED12864液晶显示电路
4.5.1LED12864简介
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
4.5.2液晶12864引脚说明
管脚号管脚名称、电平管脚功能描述如下表
1、VSS0V电源地
2、VCC3.0+5V电源正
3、V0-对比度(亮度)调整
4、RS(CS)H/L
RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据
5、R/W(SIDH/LR/W=“H”,E=“H”,数据被读到DB7——DB0)R/W=“L”,E=“H→L”,DB7——DB0的数据被写到IR或DR
6、E(SCLK)H/L使能信号
7、DB0H/L三态数据线
8、DB1H/L三态数据线
9、DB2H/L三态数据线
10、DB3H/L三态数据线
11、DB4H/L三态数据线
12、DB5H/L三态数据线
13、DB6H/L三态数据线
14、DB7H/L三态数据线
15、PSBH/LH:
8位或4位并口方式,L:
串口方式
16、NC-空脚
17、/RESETH/L复位端,低电平有效
18、VOUT-LCD驱动电压输出端
19、AVDD背光源正端(+5V)
20、KVSS背光源负端
LED12864液晶显示电路设计中采用LCD12864液晶显示。
它一般串口、并口两种方式显示,而我们在这里采用串口显示。
LCD12864显示电路如下图所示:
4.6蜂鸣器电路
4.6.1蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为:
压电式蜂鸣器和电磁式蜂鸣器两种类型。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
蜂鸣器发声原理:
电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,通过一个三极管C9012来放大驱动蜂鸣器。
它的电路如下图所示:
4.7按键电路
采用轻触按键完成各项功能的设置,分别为调整年份、调整月份、调整日期、设置小时、调整分钟以及设置闹铃。
它的电路如下图所示:
4.8ISP在线编程电路
4.9总体硬件系统设计:
4.10元件列表
5软件设计
为利于该设计的多功能的实现和更高的编程效率,采用c语言进行编程。
为实现编程结构清晰,采用各个模块单独编程,最后实现各个模块的综合连接。
主程序的框架由键盘扫描程序构成,各个功能模块程序嵌入到各个按键的子程序中,通过对按键的不断扫描来确定跳转到哪个功能模块。
对于键盘模块,采用扫描法循环扫描。
5.1软件流程图
2.5.1软件流程图
主程序流程图
计算阳历程序流程图
时间调整流程图
5.1软件程序
主程序
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#include"lcd12864.h"
#include"ds1302.h"
ucharNEXT=0;
ucharstate;
uintcounter,date;
ucharjifei_flag,start_flag;
uchartab[]={"行车距离00.0公里"
"单价00.0元"
"总价00.0元"
"停车计时00分钟"};
uintx,f,m,n,k,mn;//定义全局变量
sbitdj=P1^0;
sbitFMQ=P3^0;
sbityw=P0^0;
sbitk1=P3^1;
sbitk2=P3^3;
sbitk