已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号姓名答辩成绩(30%)实物演示(40%)论文成绩(30%)总成绩评语: 指导教师: 年 月 日基于51单片机万年历时钟设计2013 年 5 月30 日33摘 要 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。本文提出了使用8051系列单片机为主控芯片,外加时钟芯片ds1302,温度传感器芯片ds18b20,与LCD1602为显示界面,将年月日时分秒及温度显示在1602上,实现万年历功能。关键词:1602 ; ds1302;89c51;ds18b20目 录1. 设计任务11.1 任务描述11.1.1 小任务11.2 技术指标11.3 难点分析22. 方案比较与论证32.1 方案选择32.2 方案论证32.3 小结33. 系统硬件设计63.1 总体设计83.2 硬件模块电路分析83.3 发挥部分设计83.5 电路原理图93.6 小结94. 系统仿真与软件设计104.1 仿真设计与分析134.2 软件设计134.3 工程文件144.4 小结145. 系统调试与组装155.1 PCB板155.2 制作过程总结155.3 样机调试165.4 小结166. 结论17参考文献28附录291. 设计任务1.1 任务描述 基于51单片机外加DS1302、ds18b20和lcd1602实现多功能的电子时钟,外加了三个功能按键,K1为功能选择按键,K2为设定时钟加,K3为设定时钟减,没按下一次显示在lcd1602上,从而实现可调试的多功能电子时钟。1.1.1 小任务 分别将读取的时钟数据,温度数据显示在液晶屏上,通过软件编写按键实现可调时钟。1.2 技术指标 LCD液晶屏第一行显示“年-月-日-星期”,液晶屏第二行显示“时-分-秒 温度”,功能按下时,光标显示不同的指示,此时可按下K2、K3键进行数值的调节。1.3 难点分析 1.编写好ds1302的底层驱动,51单片机模拟出IIC时序,将ds1302里各个时钟的寄存器读出并显示到液晶上。2.编写好ds18b20,底层驱动,并将ds18b20里转换的数据处理显示到lcd1602中。3.编写好按键,实现修改时间。2. 方案比较与论证 方案一: stc89c51 + ds1302 +ds18b20 + lcd1602 作为硬件设计,通过软件编程实现万年历功能。 方案二:stc89c51 + ds12c887 +ds18b20 + lcd12864作为硬件设计,通过软件编程实现万年历功能。 方案比较: 功能上:方案一通过编程能实现万年历功能并显示在液晶屏上,并实现按键调试功能。方案二通过编程能实现万年历公共并显示在液晶屏上 ,并实现按键调试功能,并且ds12c887自带锂电池,写入数据后可实现掉电保护。 价格上: 实现相同的功能,方案一成本较方案二更低,同时ds1302时钟芯片可外接电源实现掉电数据不丢失功能。 论证:经查阅大量资料,方案一可行。2.1 方案选择 综上所述,可选择方案一进行实验设计与进行,实现万年历显示及调试功能。2.2 方案论证STC89C51RC简介 STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。特点(1)增强型1T 流水线/精简指令集结构8051 CPU(2)工作电压:3.4V-5.5V (5V单片机)/ 2.0V-3.8V (3V 单片机(3)工作频率范围:0 -35 MHz,相当于普通8051 的0420MHz.实际工作频率可达48MHz.(4)用户应用程序空间12K / 10K / 8K / 6K / 4K / 2K字节(5)片上集成512 字节RAM(6)通用I/O 口(27/23个),复位后为:准双向口/ 弱上拉(普通8051 传统I/O 口)可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/高阻,开漏每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过55mA(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片(8)EEPROM 功能(9)看门狗(10)内部集成MAX810 专用复位电路(外部晶体20M 以下时,可省外部复位电路)(11)时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器。用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟。常温下内部R/C 振荡器频率为:5.2MHz 6.8MHz。精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz 8MHz(12)有2个16 位定时器/ 计数器(13)外部中断2 路,下降沿中断或低电平触发中断,Power Down 模式可由外部中断低电平触发中断方式唤醒(14)PWM( 4 路)/ P C A(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/ 下降沿中断均可支持)(15)STC89Cc516AD具有ADC功能。10 位精度ADC,共8 路(16)通用异步串行口(UART)(17)SPI同步通信口,主模式/ 从模式(18)工作温度范围:0 -75/ -40 -+85(19)封装:PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20DS18b20概述DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。1: 技术性能描述、 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 、测温范围 55+125,固有测温误差(注意,不是分辨率,这里之前是错误的)0.5。、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。、工作电源: 35V/DC (可以数据线寄生电源) 、在使用中不需要任何外围元件、 测量结果以912位数字量方式串行传送 、不锈钢保护管直径 6 、适用于DN1525, DN40DN250各种介质工业管道和狭小空间设备测温、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选 、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。DS1302概述DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。LCD1602概述工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。2.3 小结 通过查阅资料及硬件手册,可得在理论上可以选择方案一进行实验设计,已达到所需实现的的功能。即选用stc89c51 + ds1302 +ds18b20 + lcd1602 作为硬件设计,通过软件编程可实现万年历及时钟功能。3. 系统硬件设计 复位电路设计:按键应并接在电容两端,实现手动高电平复位。液晶lcd1602与单片机接口设计: 按键与单片机接口设计: Ds1302与单片机接口设计: Ds18b20与单片机接口设计:3.1 总体设计总体设计电路如图所示:3.2 硬件模块电路分析 复位电路模块电路分析: 在上电的瞬间,10uf电容两端的电压不能突变,RST为高电平,单片机得到复位信号,单片机复位成功,当电容充满电时,RST端电压为0,单片机正常工作,同时在电容两端并接一个按键,当按键按下时,单片机获得高电平,达到电路复位的功能。 液晶显示模块电路分析:液晶Vss引脚与Vee引脚接地,Vdd引脚接+5V电平使液晶进入工作模式,RS、RW、E分别接单片机的P2.0,、P2.1、P2.2,分别控制数据/命令功能、读/写功能、使能功能,数据D0D7口分别接单片机的P0.0-P0.7口,实现数据的并行传输。 按键功能模块电路分析: 单片机的IO口P1.4、P1.5 、P1.6分别连接按键K1、K2、K3连接到地上,当按键按下时,实现IO口电平置低功能,从而实现按键功能。 Ds1302 模块电路分析: Ds1302的Vcc2接电源正极,Vcc1接备用电源,X1、X2之间连接一个32.768KHz的晶振,RST、SCLK、IO分别接入单片机的P2.3、P2.4、P2.5,分别实现输入信号的传输、串行时钟信号传输与双向数据传输,从而实现ds1302与单片机之间的通信与控制。 Ds18b20 模块电路分析: Ds18b20数据输入输出端DQ通过上拉4.7K电阻连接到单片机的P1.0口,通过控制IO的电平变换,实现单片机的控制与数据的传输。3.3 发挥部分设计无3.4 电路原理图3.5 小结 通过查阅资料与各个芯片的数据手册,验证电路设计理论上的可行性,用keil Uvision4 、Proteus 7 Professiona 进行在线仿真调试,直到在仿真的前提下能实现基本的功能就可以开始画PCB,准备硬件等工作。 4. 系统仿真与软件设计4.1 仿真设计与分析 使用keil Uvision4 、Proteus 7 Professional进行在线仿真实验,仿真截图如下:将编译生成的*.hex文件加载到原理图中的单片机中,进行调试。4.2 软件设计见附录4.3 工程文件 工程文件截图如下:4.4 小结 通过软件编程结合Proteus 7 Professional 进行仿真验证,锻炼了逻辑思维,使得程序有清晰的思路,通过编程与仿真的结合,可达到液晶屏上显示年月日时分秒及温度的实验目的,确定实验的可行性。5. 系统调试与组装一、KEIL uVision4 的安装及程序调试三、KEIL uVision4与Proteus联立调试5.1 PCB板5.2 制作过程总结1.首先将在orcad中将PROTUES的原理图重画一次,操作流程基本一致。2画好好需要设置相应的元器件的值比如电阻,电容等,其次还要标上元器件封装,这个封装是对应于PCB软件的封装名称,我们用的画PCB软件是PROTEL99SE。3然后在PROTEL99SE中画原理图中各个元器件的PCB封装,这个PCB封装是和实际的元器件大小等同的。在画的时候需要认真的看数据手册。最好有实物,用游标卡尺仔细量取。同时,为了验证所画PCB封装是否正确还可以通过将此PCB封装按比例1:1打印出来,与元器件比对,确保绘画准确。3.在PROTEL99SE中新建一个工程文件,即XX.DDB文件,同时在此文件中新建一个.pcb文件,在里面画好板的大小。4.将ORCAD导出的网络表导入到新建的PCB文件中,合理安排各个元器件的位置,布局非常重要,尽量将一个模块的放在一起。5.布局好后,就是设定一定的规则,需要.设定电源线、地线和信号线的宽度,一般是地线电源线信号线。 .设定元器件到板的间距。.设定过孔和走线的间距,离的太近会干扰,同时也将不利于焊接。6.布线。尽量在能实现布通的情况下,布线整洁,外观漂亮,线与线尽量一排一排。7.布线完成后,就是对画好的PCB进行检查,检查布线时是否与所设定的规则冲突。8.仔细检查PCB,管脚,标号等是否正确。9.完成制作,打板。5.3 样机调试将程序烧些进去,如果出现和PROTUES仿真不一样的结果,我们将延时稍微延长些,毕竟理论和实际是又差别的。5.4 小结 通过本次PCB的设计,初步了解了由软件仿真到实际硬件的流程,借助PROTUES在软件上实现基本功能后可画PCB,这样确保了实验的可靠性,同时也降低了成本。同时需要在画PCB多积累经验,对PCB的布局、设定规则,走线等技巧需要常年累月的学习,同时在以后的学习中,可以多借鉴他人画的PCB板,看别人的布局,走线等,学习经验。6. 结论 通过本次实训,让我们真正了解了制作一个完整的项目的流程,就如何软件加硬件如何设计的过程有了清晰的概念。同时分清了这里面哪方面是重点,比如画PCB封装、设规定、走线等都是重点的东西。 在这次实训中,遇到了很多问题,比如在DS1302、DS18B20中对于数据如何显示在液晶上,这关系到了数据间的转换,也需要查看数据手册,因为最终显示在液晶上的都是十进制数,所以需要将数据转换成十进制数显示到液晶上。这个问题是C言语的基础知识,间接的说明我们对C语言的基础知识不牢固,让我们知道学习部应该浮躁,追求什么样的算法而忽略掉最基础的东西。这些基础的东西更应该去深入理解并能运用好。对于编程时遇到的瓶颈,时常是因为看数据手册看的不仔细导致的,在此次实验中,就数据转换中就存在这个问题。如向DS1302中需要写入一个初值时间,但是这个写入的数据收据手册明确写了一定要BCD码,所以看数据手册一定要认真,有时候还需要借鉴官方的电路接法,这些都是宝贵的资源,应该利用好。 本次实验,学到的不止有技术上的知识,同时也学会如何在一个组队中如何一起分配各自的工作,只有各个成员团结一致才能做的更完美。同时本次实验的成功离不开老师指导和同学们热情的帮助。我们的路还很长,需要不断的努力。 参考文献 1 DS1302中文数据手册 DS18B20中文数据手册 LCD1602中文数据手册 STC89C51RC数据手册2 C语言程序设计(第三版) 唐浩强附录工程源码如下:#include#include#define uchar unsigned char #define uint unsigned int#define LCDDATA P0sbit DQ=P10; /ds18b20与单片机连接口sbit rs=P20; sbit rw=P21;sbit e=P22;sbit acc0=ACC0; /移位时的第0位sbit acc7=ACC7; /移位时用的第7位sbit K1=P14; /菜单sbit K2=P15; /加一sbit K3=P16; /减一sbit IO=P25; /时钟数据接口sbit RST=P23; sbit SCLK=P24; uchar second,minute,hour,day,month,year,week,count=0; uchar ReadValue,num,time; uint tvalue; /温度值uchar tflag;uchar codetable= 2013-05-30 THU;uchar code table1= 14:36:00 000.0C;uchar code table2= THUFRISATSUNMONTUEWES;unsigned char time_buf216;uchar data disdata5; void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay1(uint z)for(;z0;z-);void write_com(uchar com)rs=0;rw=0;e=0;LCDDATA=com;delay(5);e=1;delay(5);e=0;void write_date(uchar date)rs=1;rw=0;e=0;LCDDATA=date;delay(5);e=1;delay(5);e=0;void init()uchar num;e=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);delay(5);write_com(0x80);for(num=0;num15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num15;num+)write_date(table1num);delay(5); void Write1302(uchar dat) uchar i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delay1(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位 void WriteSet1302(uchar Cmd,uchar dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 delay1(2); /稍微等待,使硬件做好准备 Write1302(Cmd); /写入命令字 Write1302(dat); /写数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 uchar Read1302(void) uchar i,dat; delay(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,因为先读出的是字节的最低位 if(IO=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; /将SCLK置于高电平,为下降沿读出 delay1(2); /稍微等待 SCLK=0; /拉低SCLK,形成脉冲下降沿 delay1(2); /稍微等待 return dat; /将读出的数据返回 uchar ReadSet1302(uchar Cmd) uchar dat; RST=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回 void Init_DS1302(void) WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(0/10)4|(0%10); /根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,(45/10)4|(45%10); /根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,(8/10)4|(8%10); /根据写小时寄存器命令字,写入小时的初始值 WriteSet1302(0x86,(30/10)4|(30%10); /根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,(5/10)4|(5%10); /根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8c,(13/10)4|(13%10); /nian WriteSet1302(0x8a,(0/10)4|(0%10);void DisplaySecond(uchar x) uchar i,j; i=x/10; j=x%10; write_com(0xc7); write_date(0x30+i); write_date(0x30+j); void DisplayMinute(uchar x) uchar i,j; i=x/10; j=x%10; write_com(0xc4); write_date(0x30+i); write_date(0x30+j); void DisplayHour(uchar x) uchar i,j; i=x/10; j=x%10; write_com(0xc1); write_date(0x30+i); write_date(0x30+j); void DisplayDay(uchar x) uchar i,j; i=x/10; j=x%10; write_com(0x89); write_date(0x30+i); write_date(0x30+j); void DisplayMonth(uchar x) uchar i,j; i=x/10; j=x%10; write_com(0x86); write_date(0x30+i); write_date(0x30+j); void DisplayYear(uchar x) uchar i,j; i=x/10; j=x%10; write_com(0x83); write_date(0x30+i); write_date(0x30+j); void DisplayWeek(uchar x) uchar i; x=x*3; write_com(0x8c); for(i=0;i4)*10 + (ReadValue&0x0F); ReadValue = ReadSet1302(0x83); minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = ReadSet1302(0x85); hour=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = ReadSet1302(0x87); day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = ReadSet1302(0x89); month=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue = ReadSet1302(0x8d); year=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); ReadValue=ReadSet1302(0x8b); /读星期 week=ReadValue&0x07; DisplaySecond(second); DisplayMinute(minute); DisplayHour(hour); DisplayDay(day); DisplayMonth(month); DisplayYear(year); DisplayWeek(week); void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num) newval=ReadSet1302(newaddr); /读取当前时间 newval=(newval&0x70)4)*10+(newval&0x0f); /将bcd码转换成十进制 if(flag) /判断是加一还是减一 newval+; switch(s1num) case 1: if(newval99) newval=0; DisplayYear(newval); break; case 2: if(newval12) newval=1; DisplayMonth(newval); break; case 3: if(newval31) newval=1; DisplayDay(newval); break; case 4: if(newval6) newval=0; DisplayWeek(newval); break; case 5: if(newval23) newval=0; DisplayHour(newval); break; case 6: if(newval59) newval=0; DisplayMinute(newval); break; case 7: if(newval59) newval=0; DisplaySecond(newval); break; default:break; else newval-;switch(s1num) case 1: if(newval=0) newval
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理沟通中的反馈技巧
- 陕西省西安市滨河区2025-2026学年初三下学期5月底模拟考试数学试题试卷含解析
- 2026年大学大一(康复治疗学)运动康复技术阶段测试试题及答案
- 2026年大学大一(机械设计制造及其自动化)机械制造基础阶段测试试题及答案
- 护理技能竞赛教学课件参考
- 护理安全的可穿戴设备应用
- 六年级下册第一单元教学初探 品风俗之韵悟语文之妙
- 急救护理中的急救思维
- 护理时间管理:合理规划工作时间
- 吸氧护理服务规范考核试题及答案
- YY 0006-2013金属双翼阴道扩张器
- GB/T 35962-2018群青
- GB/T 10051.4-2010起重吊钩第4部分:直柄单钩毛坯件
- 农产品质量安全知识培训
- 土地盐碱化课件
- 外科学课件-运动系统慢性损伤
- 高校教学课件:旅游景区服务与管理(第三版)
- 预应力混凝土空心板梁预制与架设
- 古建筑油漆彩绘施工方案
- 畜牧兽医专业《猪生产学》电子教案
- 阳台玻璃栏杆施工方案74050完整
评论
0/150
提交评论