电子万年历的仿真与设计方案.docx

上传人:b****5 文档编号:8097282 上传时间:2023-01-28 格式:DOCX 页数:53 大小:64.95KB
下载 相关 举报
电子万年历的仿真与设计方案.docx_第1页
第1页 / 共53页
电子万年历的仿真与设计方案.docx_第2页
第2页 / 共53页
电子万年历的仿真与设计方案.docx_第3页
第3页 / 共53页
电子万年历的仿真与设计方案.docx_第4页
第4页 / 共53页
电子万年历的仿真与设计方案.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

电子万年历的仿真与设计方案.docx

《电子万年历的仿真与设计方案.docx》由会员分享,可在线阅读,更多相关《电子万年历的仿真与设计方案.docx(53页珍藏版)》请在冰豆网上搜索。

电子万年历的仿真与设计方案.docx

电子万年历的仿真与设计方案

电子万年历的仿真与设计方案

一、方案论证

1、技术可行性

随着国超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。

集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机〔Single-ChipMicrocomputer。

而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。

因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。

  单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:

〔1单片机构成的应用系统有较大的可靠性。

这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。

 〔2系统扩展、系统配置较典型、规,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。

〔3由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。

 〔4有优异的性能、价格比。

2、单片机的选择

方案一:

采用传统的AT89C52作为电机的控制核心。

单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各个领域应用广泛。

方案二:

采用FTC10F04单片机,还带有非易失性Flash程序存储器。

它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。

其主要特点如下:

8KBFlashROM,可以擦除1000次以上,数据保存10年。

由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计,方案二运算速度高,性能好,所以两种方案都有可取之处。

选用方案一作为主方案,方案二作为备用方案。

3、时钟模块的选择

方案一:

用单片机的定时器产生1S的时基信号,然后用程序来实现时钟的时、分、秒计时,同时用程序来产生年、月、日。

该方案优点是减少使用外设芯片;缺点是用单片机模拟时钟,使编程量增大,且用定时器产生时基信号,精度不高。

方案二:

使用时钟芯片DS12C887。

优点是8位数据线并行控制,控制简单;自带有锂电池,外部掉电时,其部时间信息还能够保持10年之久。

缺点是并行控制,占用太多的IO口,且价格很高,不适合一般的电子制作。

方案三:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压2.5V-5.5V围,2.5V时耗电小于300Ma。

仅使用3个IO口,占用最少的单片机资源;其部功能强大。

更重要的是其价格便宜,具有非常高的性价比。

缺点是串行通信,控制比较复杂。

综上,由于本设计对时间要求较精准,且具闰年计算功能,因此本设计选择方案三,采用时钟芯片DS1302。

4、显示模块的选择

方案一:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机相连接时,占用的单片机口线少,但所需要的数码管数量太多,焊接困难极易出错,所以不采用LED数码管作为显示。

方案二:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,如果用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多。

本设计所需显示较多且需要文字,又基于设计要求,所以在本次设计中采用方案三,使用LCD1602液晶显示屏。

5、温度检测模块的选择

方案一:

使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换,此设计方案需要A/D转换电路,增加了硬件成本而且热敏电阻的感温特性曲线并不是严格性的,会产生较大的测量误差。

方案二:

采用数字式温度传感器DS18B20,此类传感器为数字式传感器,而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低了硬件成本,简化系统电路。

另外,数字式温度传感器还具有测量精度高,测量围广等优点。

根据上述论述,本设计采用方案二,选择数字式温度传感器DS18B20。

6、设置模块的选择

在对日期、温度和闹钟进行切换,对日期和时间进行调节校准过程中,系统需要产生激励电流,因此需要用按键。

方案一:

使用独立式键盘。

独立式键盘是指直接用I/O口线构成的单个按键电路。

独立式按键电路配置灵活,软件结构简单。

方案二:

使用矩阵式键盘。

矩阵式键盘是由行线和列线组成,按键位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。

其特点是简单且不增加成本,这种键盘适合按键数量较多的场合。

根据以上的论述,因本系统需要的按键不多,日期加加减,月数加减,年数加减,分数加减,时数加减,设置切换键,要求简单,只需要四个按键即可满足要求。

所以采用方案一独立式键盘。

7、闹钟模块

此模块采用无源蜂鸣器实现,只要编写相应的程序即可实现发出不同频率的声音。

8、最终方案决定

综上各方案所述,对此次设计的方案选定:

采用AT89C52作为主控制系统;DS1302提供时钟;LCD1602液晶显示器作为显示;以DS18B20作为检测温度的传感器;用蜂鸣器实现闹钟响铃。

二、仿真系统硬件设计

1、电路设计框图

 

图〔1总体设计框图

2、单片机控制系统

单片机中央处理系统的方案设计,选用AT89C52单片机作为中央处理器,如图〔2所示。

该单片机除了拥有MCS-51系列单片机的所有优点外,部还具有8K的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。

整个系统结构紧凑,抗干扰能力强,性价比高。

3、DS1302时钟电路

时钟电路主要由时钟芯片DS1302、晶振等几部分组成,如下图所示。

DS1302采用3线串行接口,占用引脚少,部集成了可编程日历时钟,用户可以根据需要通过单片机的控制来自行设置,支持双电源供电,可以使用外部主电源和备用电源,备份电源能够使时钟芯片继续工作。

图〔3DS1302管脚图图〔4DS1302时钟电路

DS1302各引脚的功能为:

8:

Vcc1:

备用电池端;

1:

Vcc2:

5V电源。

当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2

7:

SCLK:

串行时钟,输入;

6:

I/O:

数据输入输出口;

5:

CE/RST:

复位脚;

2、3:

X1、X2是外接晶振脚〔32.768KHZ的晶振;

4:

地〔GND。

DS1302有关日历、时间的寄存器:

图〔5DS1302有关日历、时间的寄存器

1、秒寄存器〔81h、80h的位7定义为时钟暂停标志〔CH。

当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄器的该位置改写为0时,时钟才能开始运行。

2、小时寄存器〔85h、84h的位7用于定义DS1302是运行于12小时模式还是24小时模式。

当为高时,选择12小时模式。

在12小时模式时,位5是,当为1时,表示PM。

在24小时模式时,位5是第二个10小时位

3、控制寄存器〔8Fh、8Eh的位7是写保护位〔WP,其它7位均置为0。

在对任何的时钟和RAM的写操作之前,WP位必须为0。

当WP位为1时,写保护位防止对任一寄存器的写操作。

也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。

DS1302读写时序

DS1302是SPI总线驱动方式。

它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

DS1302的控制字如图〔6:

图〔6DS1302的控制字图

控制字的最高有效位〔位7必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

位6:

如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;

位5至位1〔A4~A0:

指示操作单元的地址;

位0〔最低有效位:

如为0,表示要进行写操作,为1表示进行读操作。

读数据:

读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据是从最低位到最高位。

写数据:

控制字总是从最低位开始输出。

在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入也是从最低位〔0位开始。

4、显示电路

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

显示电路采用LCD1602液晶显示,如图<7>所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。

图〔7LCD1602显示电路

LCD1602的特性:

+5V电压,对比度可调;

含复位电路;

提供各种控制命令,如:

清屏、字符闪烁、光标闪烁、显示移位等多种功能;

有80字节显示数据存储器DDRAM;

建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM;

基本操作时序:

读状态:

输入:

RS=L,RW=H,E=H;输出:

DB0~DB7=状态字;

写指令:

输入:

RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码;输出:

无。

读数据:

输入:

RS=H,RW=H,E=H;输出:

DB0~DB7=数据;

写数据:

输入:

RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据;输出:

无。

LCD1602的各种指令不再一一说明。

5、DS18B20温度检测电路

通过1820进行读数据,将读出来的数据进行进制转换,转换后送到12864显示。

工作原理介绍:

DS18B20是单总线的数字温度传感器。

其与单片机的接口只需要一根数据线即可。

当然连线简单意味着软件处理上可能要麻烦一点。

DS18B20的部存储器分为以下几部分ROM:

存放该器件的编码。

前8位为单线系列的编码后面48位为芯片的唯一序列号。

在出场的时候就已经设置好,用户无法更改。

最后8位是以上56位的CRC码。

RAM:

DS18B20的部暂存器共9个字节。

其中第一个和第二个字节存放转换后的温度值。

第二个和第三个字节分别存放高温和低温告警值。

<可以用RAM指令将其拷贝到EEPROM中>第四个字节为配置寄存器。

第5~7个字节保留。

第9个字节为前8个字节的CRC码。

图〔8DS18B20的温度存放图〔9DS18B20电路

其中S位符号位。

当温度值为负值时,S=1,反之则S=0。

我们把得到的温度数据乘上对应的分辨率即可以得到转换后的温度值。

DS18B20的通讯协议:

在对DS18B20进行读写编程时,必须严格保证读写的时序。

否则将无法读取测温结果。

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过3个步骤:

每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令。

这样才能对DS18B20进行预定的操作。

复位要求主机将数据线下拉500us,然后释放,DS18B20收到信号后等待16~160us然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。

图〔10DS18B20的复位时序图。

图〔11读操作的时序图

图〔12写操作的时序图

6、按键电路

按键电路由四个轻触开关组成,如图<12>所示。

按键用来调整时间,其一端直接接到单片机的端口,另一端接地,当按下按键时,相应的端口变为低电平,通过与个各键相连的端口P1.4,P1.5,P1.6,P1.7可以判断是哪个键按下,从而作相应的操作。

图〔13按键电路

7、蜂鸣器电路

闹钟模块采用单片机输出一定频率的方波从而使蜂鸣器发出声音。

图〔14方波信号图〔15蜂鸣器电路

三、仿真系统软件设计

软件设计是本设计的关键,软件程序编写的好坏直接影响着系统运行情况的良好。

因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。

整个软件系统采用规模化的程序设计方法,共分为时间设定、闹铃设定、倒计时和温度检测系统。

软件系统的主要特点是整个过程完全在键盘的控制之下,实现了完全的友好的人机交互功能。

程序框图如下:

 

四、调试结果及分析

电路设计中单片机采用AT89C52,编译环境为keil,程序使用C语言进行编写,使用proteus仿真软件进行仿真调试,设计硬件制作比较顺利,很快就把硬件电路做好。

接着,主要是程序的调试。

程序调试的难点在于设计的功能模块过多,程序结构比较复杂,使得调试起来比较费时间。

在软件调试过程中,当调节时间和日期后,单片机上电后更新的是PC的时间,后来查找资料发现,是设置ds1302的问题,还有一个问题,在按键操作时有时会出现功能不稳定,这是由于按键存在抖动,所以后来加个去抖动的延时后在判断,基本就可以解决问题。

仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间或闹铃,依次按K1依次在年、月、日、时、分之间切换,,按K2键用于加1操作,K3键用于减1操作,K4是取消按钮,单独按加减按键可以显示温度和进入倒计时。

通过调试和仿真,基本实现了设计所要求的所有功能。

1:

显示年、月、日、时、分、秒信息。

2:

具有可调整日期和时间功能。

3:

DS1302自带闰年补偿功能,可自动判断平闰年,正确显示时间。

4:

实现闹钟提醒功能,且闹钟可设置至年,月,日,时,分,秒。

5:

实时显示环境温度。

6:

显示60秒倒计时功能。

但唯一不足的是不能实现一年的温度记忆功能,我用AT2404调了很长时间,还是不能实现温度的存储和显示,可能是我不太会用那个芯片,看了它的资料,还是不能写出正确的程序。

结束语

本系统以AT89C52为核心部件,使用串行时钟芯片DS1302,实现时间和闹钟的功能设置,用温度传感器DS18B20实现对环境实时温度的检测。

通过键盘和液晶显示屏可方便地校对时钟、设置闹钟时间和显示温度,本系统基本完成了实用电子钟的功能,并添加了许多附加功能,使电子万年历更具多样化,特色化。

尽量做到了硬件电路简单稳定,减少电磁干扰和其他环境干扰。

在该系统设计,调试完成之后,对最后的成功进行分析,同时结合在调试过程中出现的错误和不足进行综合分析,总结在实际系统设计和调试过程中的宝贵经验。

虽然还有一点功能不能实现,但我不会放弃,在以后的业余时间里我会多查资料,多分析,多请教老师同学,争取把它做完善。

同时也希望各位老师批评指正,提供你们的宝贵经验,我相信我会做得更好。

在本次专业方向设计过程当中,收获知识的同时,还收获了阅历,收获了成熟,通过查找大量资料,请教老师同学,以及不懈的努力,不仅培养了独立思考、动手制作的能力,在各种其它能力上也都有了提高。

更重要的是,我们学会了很多学习的方法,知道了理论和实践的巨大差别。

而这是以后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

同时在与老师和同学的交流过程中,互动学习,将知识融会贯通。

通过自己的努力,做出了一个万年历,对以后的学习是一个莫大的鼓舞,激起了我的学习兴趣和开发创新思维。

感学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。

感提供相关技术帮助的老师和同学,你们的支持和鼓励使我对这次的作品完成有了信心和动力,也给了我们很多无私的帮助和支持,我在此深表意。

[参考文献]

[1]于永学、健,1-WIRE总线数字温度传感器DS18B20及应用[J],电子产品世界2003〔416-24

[2]马云峰、子夫、全培,数字温度传感器DS18B20的原理与应用[EB/OL]1-25

[3]胡振宇、鲁源、杜振辉,DS18B20接口的C语言程序设计[J],单片机与嵌入式系统应用,2002-24-43

[4]钢,1-WIRE总线数字温度传感器DS18B20原理及应用,现代电子技术[J],2005<8>21-23

[5]明义,电工电子技术课程设计指导[M],中南大学,2002

[6]郭天祥,新概念51单片机c语言教程,电子工业,2009

[7]跃东,DS18B20集成温度传感器原理与应用[J],教育,2002〔45-23

[8]广弟,《单片机基础》[M],航空航天大学,1994,1-56

[9]谭浩强,C程序设计〔第二版[M],清华大学,2003

[10]付家才,单片机控制工程实践技术[M],化学工业,2004

附录一仿真电路图

图<16>电路原理图

图<17>显示实时时间

图<18>调整日期

图<19>调整时间

图<20>进入后台日期时间调整

图<21>闹钟设置界面

图<22>实时温度显示

图<23>倒计时显示

附录二源程序代码

#include

#include

unsignedcharcodedigit[]={"0123456789"};//数字代码

unsignedcharmode,TH,TL,TN,TD,length,amode,alarmmode,count=60,minutes,hours,

minutea,seconda,seconds,houra=12,yeara=12,montha=01,daya=01,years,months,days;

sbitSCLK=P1^0;//DS1302时钟输入

sbitDATE=P1^1;//DS1302数据输入

sbitREST=P1^2;//DS1302复位端口

sbitSET=P1^4;//DS1302设置模式选择位

sbitADD=P1^5;//增加

sbitRED=P1^6;//减小

sbitCANL=P1^7;

intdown_flag=0;

voiddelay1ms//1毫秒延时

{

intj,k;

while

for1;j-->;

for1;k-->;

}

voiddelaynus//延时若干微秒

{

unsignedchari;

for;

}

/***********蜂鸣器模块************/

sbitbeep=P3^6;//位定义,定义P.6位fmp

voiddely500

{

unsignedchari;

for0;i-->

{

_nop_<>;

}

}

voidxiangling

{

unsignedcharx,i;

while

{

for

{

for

{

beep=~beep;

dely500<>;

}

}

for

{

for

{

beep=~beep;

dely500<>;

dely500<>;

}

}

}

}

/*******DS1302模块*************/

voidWrite1302//向1302写数据

{

unsignedchari;

SCLK=0;

delaynus<2>;

for

{

DATE=date&0x01;

SCLK=1;

delaynus<2>;

SCLK=0;

delaynus<2>;

date>>=1;

}

}

voidWriteSet1302//根据相应的命令输入相应的数据

{

REST=0;

SCLK=0;

REST=1;

Write1302;

delaynus<5>;

Write1302;

SCLK=1;

REST=0;

}

unsignedcharRead1302//读取1302数据

{

unsignedchari,date;

delaynus<2>;

for

{

date>>=1;

if

date|=0x80;

SCLK=1;

delaynus<2>;

SCLK=0;

delaynus<2>;

}

returndate;

}

unsignedcharReadSet1302//根据命令读取1302相应的值

{

unsignedchardate;

REST=0;

SCLK=0;

REST=1;

Write1302;

delaynus<2>;

date=Read1302<>;

SCLK=1;

REST=0;

returndate;

}

voidIntDS1302//DS1302初始化

{

unsignedcharflag;

flag=ReadSet1302<0x81>;

if{//判断时钟芯片是否关闭

WriteSet1302<0x8E,0x00>;//根据写状态寄存器命令字,写入不保护指令

WriteSet1302<0x80,<<0/10><<4|<0%10>>>;//根据写秒寄存器命令字,写入秒的初始值

WriteSet1302<0x82,<<0/10><<4|<0%10>>>;//根据写分寄存器命令字,写入分的初始值

WriteSet1302<0x84,<<0/10><<4|<0%10>>>;//根据写小时寄存器命令字,写入小时的初始值

WriteSet1302<0x86,<<0/10><<4|<0%10>>>;//根据写日寄存器命令字,写入日的初始值

WriteSet1302<0x88,<<0/10><<4|<0%10>>>;//根据写月寄存器命令字,写入月的初始值

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1