基于单片机的万年历设计课程设计Word文档格式.docx
《基于单片机的万年历设计课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的万年历设计课程设计Word文档格式.docx(60页珍藏版)》请在冰豆网上搜索。
2系统方案论证
2.1控制部分的选择方案与论证
方案一:
用可编程逻辑器件设计
可采用PLD器件,设计起来结构清晰,各个模块从硬件上设计起来相对简单,控制与显示的模块间连接也会比较方便。
但是考虑到本设计的特点,EDA在能够扩展上比较受局限,占用的资源也多。
从成本上讲,可编程逻辑器件价格比较高。
方案二:
用单片机设计
用
单片机芯片作为控制部分,单片机有丰富的中断源,它的准确度相当高,并且C语言的灵活运用,给编程带来了方便。
单片机I/O功能也比较强大,容易对其进行扩展,使设计更加完善,此外单片机的成本也比较低。
综上所述,
资源丰富,程序编写也灵活简单,可移植性强,性价比也高,所以选择
作为主控芯片。
2.2显示部分的选择方案与论证
采用点阵式数码管显示
点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,但是基于电子万年历主要是显示数字,就显得太浪费了,且价格相对较高。
采用LCD液晶显示屏
LCD液晶显示屏的显示功能特别强大,可以显示大量文字、图形,显示多样清晰可见,使得万年历的内容更加丰富,加上动态显示效果,更加吸引观众的眼球。
2.3时钟芯片的选择方案与论证
直接采用单片机定时计数器
直接采用单片机定时计数器提供时间单位秒,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现时间误差较大,而且不具有实时性,必须用到断电存贮资料,否则一断电,时钟就不会准确,误差太大。
方案二:
采用DS1302时钟芯片实现时钟
DS1302时钟芯片是一种高性能的时钟芯片,可自动对秒、时、分、日、周、月、年以及闰年补偿的年进行计数,而且精度高的RAM作为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300mA。
此外可以外接电池,具有实时性,断电后时间还会走,比较精准。
2.4温度传感器的选择方案与论证
方案一:
使用热敏电阻作为传感器
用热敏电阻与一个相应该阻值相串联分压,用热敏电阻随温度变化的特性,采集这两个电阻变化的分压值,并用A/D转换。
此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的温性曲线并不是严格线性的,会产生较大测量误差。
采用数字式温度传感器DS18B20
此类传感器为数字式传感器,而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路,测量温度精度高。
2.5电路设计最终方案系统原理及总体结构图
本系统包括主控模块,显示模块,时钟模块,温度采集模块,综上各方案所述,电路设计最终方案:
采用
作为主控制系统,1602LCD液晶作为显示部分,DS1302作为时钟模块,DS18B20传感器来采集温度信息。
根据上述电路设计最终方案,系统总体设计方案如图2-1所示
设计的电路主要由四大模块构成:
温度传感器电路,单片机控制电路,显示电路以及校正电路。
图2-1系统总体结构图
当温度传感器接受到外面的信号,送入单片机,单片机将接受到的信号输出,让它在液晶上显示。
同时由单片机控制的万年历以及时间显示,当时间及秒计数计满60时就向分进位,分计数器计满60分后向时计数器进位,小时计数器按“24翻1”规律计数。
时、分、秒的计数结果经过数据处理可直接送显示器显示。
当计时发生误差的时候可以用校时电路进行校正。
时计数器计满24小时后自动向日计数器进一,日计数器由平年、闰年的28/30/31对大、小月和二月的判断应与当月相应的日期相一致,当日计数器计满时,向月计数器进位,月计数器计满12月向年计数器进位,
当年计数器计满100时所以计数器清零。
设计采用的是年、月、日和时、分、星期显示,所以在单片机通过对数据处理进行同时在液晶上显示。
3系统设计
3.1系统硬件仿真原理图
本次设计是在Proteus软件绘制的硬件图,如下图3-1所示
图3-1硬件仿真原理图
3.2单片机89C51控制模块的设计
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含4KB的可反复擦除的只读程序存储器(PEROM)和128B随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和FLASH存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合。
主要性能参数:
①与MCS-51产品指令系统完全兼容
②4K字节可重擦写FLASH闪速存储器
③1000次擦写周期
④全静态操作:
0HZ-24MHZ
⑤三级加密程序存储器
⑥128
8字节内部RAM
⑦32个可编程I/O口线
⑧2个16位定时/计数器
⑨6个中断源
⑩可编程串行UART通道
图3-2AT89C51引脚封装图
芯片引脚介绍:
(1)主电源引脚
①VCC:
+5V电源
②VSS:
地线。
(2)时钟电路引脚
XTAL1和XTAL2:
外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号。
(3)控制信号引脚
①RST/VPD:
复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作;
当单片机掉电时,此引脚上可接备用电源,由VPD向片内RAM提供备用电源,一保持片内RAM中的数据不丢失。
②ALE/PROG:
地址锁存控制信号。
在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。
此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
对于EPROM型单片机,在EPRAM编程期间,此引脚接收编程脉冲。
③PSEN:
片外程序存储器读选通信号输出端。
④EA/VPP:
访问程序存储控制信号。
当EA信号为低电平时,对ROM的读操作限定在外部程序存储器;
当EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
对于EPROM型单片机,在EPRAM编程期间,此引脚接上加21VEPROM编程电源VPP。
(4)I/O引脚
P0.0~P0.7:
P0口8位双向口线,P1.0~P1.7:
P1口8位双向口线,
P2.0~P2.7:
P2口8位双向口线,P3.0~P3.7:
P3口8位双向口线。
P3口线的第二功能。
P3的8条口线都定义有第二功能,详见表3-21。
表3-1P3口各引脚与第二功能表
引脚
第二功能
信号名称
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
INT0
外部中断0申请
P3.3
INT1
外部中断1申请
P3.4
T0
定时/计数器0的外部输入
P3.5
T1
定时/计数器1的外部输入
P3.6
WR
外部RAM写选通
P3.7
RD
外部RAM读选通
以上把8051单片机的全部信号引脚分别以第一功能和第二功能的形式列出。
对于各种型号的芯片,其引脚的第一功能信号是相同的,所不同的只在引脚的第二功能信号。
对于9、30和31三个引脚,由于第一功能信号与第二功能信号是单片机在不同工作方式下的信号,因此不会发生使用上的矛盾。
但是P3口的情况却有所不同,它的第二功能信号都是单片机的重要控制信号。
因此,在实际使用时,都是先按需要选用第二功能信号,剩下的才以第一功能的身份作数据位的输入/输出使用。
图3-3单片机控制模块
3.3LCD液晶显示模块设计
显示模块主要是用来显示公历年、月、日以及时、分、秒、温度、星期等信息。
LCD智能型显示模块则是一种低功耗、低价值、低损耗的显示器件,它不但可以显示各式各样的字符、汉子和图形,同时具有可编程能力,且与单片机接口方便,基于以上优点,LCD智能型显示模块获得了广泛的应用。
1602LCD点阵液晶显示模块是由16*2个液晶显示点组成的一个16列*2行的阵列。
每个显示点对应一位二进制数,1表示亮,0表示灭。
存储这些点阵信息的RAM称为显示数据存储器,要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。
图形或汉字的点阵信息当然有自己设计,问题的关键就是显示点在液晶屏上的位置(行或列)与其在存储器中的地址之间的关系。
每个存储单元存储8个液晶点的显示信息。
下面是关于1602LCD液晶相关信息:
(1)引脚说明如下表所示
表3-21602LCD引脚说明
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
底4位三态、双向数据总线0位(最低位)
8
DB1
底4位三态、双向数据总线1位
9
DB2
底4位三态、双向数据总线2位
10
DB3
底4位三态、双向数据总线3位
11
DB4
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busyflag)
15
BLA
背光电源正极
16
BLK
背光电源负极
①请在DB0~DB7数据线中加入10K上拉电阻,特别是使用单片机中的三态I/O口时。
②V0需要一个外部的0V~10V负压输入,是液晶显示,可串入电位器调整液晶灰度。
(2)下面为1602LCD的指令集表:
表3-31602LCD指令集
3.4DS1302时钟模块的设计
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。
⑴DS1302的引脚排列
其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>
2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK为时钟输入端。
下图为DS1302的引脚功能图:
图3-4DS1302的引脚功能图
⑵DS1302的控制字节
DS1302的控制字如表3-4所示。
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1指示操作单元的地址;
最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
表3-4DS1302的控制字格式
⑶DS1302数据的输入输出
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
图3-5DS1302读写时序图
⑷DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见下表。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;
另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
表3-5DS1302的日历、时钟寄存器及其控制字
寄存器
名
命令字
取值
范围
各位内容
写操作
读操作
秒寄存器
80H
81H
00-59
CH
10SEC
SEC
分钟寄存器
82H
83H
10MIN
MIN
小时
84H
85H
01-12或
00-23
12/
24
AP
HR
日期
86H
87H
01-28,29,
30,31
10DATE
DATE
月份寄存器
88H
89H
01-12
IOM
MONTH
周日寄存器
8AH
8BH
01-07
DAY
年份寄存器
8CH
8DH
00-99
10YEAR
YEAR
DS1302时钟芯片与AT89C51的连接图如下:
图3-6DS1302时钟芯片与AT89C51的连接图
3.5DS18B20温度采集模块的设计
采用数字式温度传感器DS18B20,有DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事领域的温度测量及控制仪器、测量系统和大型设备中。
(1)DS18B20的性能特点可归纳如下:
1)独特的单线接口仅需一个端口引脚进行通信;
2)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;
3)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;
4)测温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃;
5)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;
6)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;
7)测量结果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;
8)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
(2)电路设计
如下图所示。
采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单等特点,此类传感器仅需要一条数据线进行数据传输,使用AT89C51单片机芯片的P2.7端口与DS18B20的I/O口连接,加一个上拉电阻,Vcc接电源,Vss接地。
图3-7DS18B20温度采集
(3)DS18B20工作时序
1.复位时序图
图3-8复位时序图
2.读时序图
图3-9读时序图
3.写时序图
图3-10写时序图
4系统调试
4.1硬件调试
硬件调试是测试焊接完成后的成品的硬件电路的功能,发现及排除相关故障,主要包括主控芯片的调试以及各模块电路的调试。
由于本次设计仅仅处于软件仿真阶段,并没有去设计焊接电路,故该部分略。
在不久的毕业设计论文中一定会完善该部分。
4.2软件调试
本设计的软件编译是在KeiluVision4上进行的,此软件可以生成HEX文件用于下载到单片机上工作。
生成HEX文件后可以在PROTEUS上进行仿真调试。
5结论
经过将近三周的时间,课程设计终于完成了,心里顿时轻松不少,这段时间经历了从茫然不知从哪里下手到收集资料,小组讨论,有了些头绪再到理出思路,开始设计各部分电路,再到调试解决各个问题,期间经过老师的指导又修改电路,最后完成整个电路设计,心情也跟着起起伏伏,有调试成功的喜悦,有试了好多次却不知道哪儿出了问题的迷惑,也有突然有了新想法想尝试的冲动,总之,从畏惧渐渐喜欢上了设计,从设计中学到了好多实用的知识。
参考文献
[1]蔡美琴等.MCS-51系列单片机系统极其应用.北京:
高等教育出版社,2004
[2]林伸茂.8051单片机彻底研究实习篇.北京:
人民邮电出版社,2004
[3]胡学海.单片机原理极其应用系统设计.北京:
电子工业出版社,2005
[4]张毅刚.单片机原理极其应用.哈尔滨:
哈尔滨工业大学出版社,2004
[5]韩志军等.单片机应用系统设计.北京:
机械工业出版社,2005
[6]舒怀林.单片机原理与接口技术.武汉:
华中科技大学出版社,2001
附录
课程设计中的程序如下:
#include<
reg52.h>
#include<
intrins.h>
#include"
SoundPlay.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitSCK=P3^6;
//时钟
sbitSDA=P3^4;
//数据
sbitRST=P3^5;
//DS1302复位
sbitlcdrs=P2^6;
sbitlcdrw=P2^5;
sbitlcden=P2^7;
sbitkey1=P1^0;
//开调时键
sbitkey2=P1^1;
//调时加键
sbitkey3=P1^2;
//调时减键
sbitkey4=P1^3;
//开设定闹铃键
sbitkey5=P1^4;
//返回正常显示键
sbitkey6=P1^5;
//闹铃开关键
sbitDQ=P3^7;
//温度传感器数据通信位
sbitbeep=P2^1;
//蜂鸣器控制IO口
sbitled1=P2^0;
//led灯,闹铃响标志
bitReadRTC_Flag,Display_Flag,Alarm_Flag,flag;
//定义标志位
ucharmiao,fen,shi,ri,yue,week,nian,T,C=0,k=0,m=0,n=0;
ucharset_miao,set_fen,set_shi,set_ri,set_yue,set_nian,TempBuffer[5],temp_value;
charl_tmpdate[7]={0x50,0x08,0x011,0