基于51单片机的万年历的设计.docx

上传人:b****6 文档编号:8673127 上传时间:2023-02-01 格式:DOCX 页数:54 大小:282.55KB
下载 相关 举报
基于51单片机的万年历的设计.docx_第1页
第1页 / 共54页
基于51单片机的万年历的设计.docx_第2页
第2页 / 共54页
基于51单片机的万年历的设计.docx_第3页
第3页 / 共54页
基于51单片机的万年历的设计.docx_第4页
第4页 / 共54页
基于51单片机的万年历的设计.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

基于51单片机的万年历的设计.docx

《基于51单片机的万年历的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的万年历的设计.docx(54页珍藏版)》请在冰豆网上搜索。

基于51单片机的万年历的设计.docx

基于51单片机的万年历的设计

基于51单片机的万年历设计

摘要

本篇论文主要介绍了运用单片机实现电子万年历的设计,其中51单片机作为对系统的主要控制器,由DS1302完成对时钟电路的显示和DS18B20对温度的检测。

设计主要由时钟电路模块、稳压电路模块、液晶显示模块、温度测试模块组成。

实现了年、月、日、星期、温度显示,及闹钟报警的功能。

这个设计具有体积小,简单方便,功能齐全,精度高等特点。

关键词

51单片机;时钟芯片;温度显示;闹钟设置

Abstract

ThispapermainlyintroducestherealizationofelectroniccalendarapplicationofthedesignofSCM,51MCUasthemaincontrollerofthesystem,DS1302completedbytheclockcircuitdisplayandtemperaturetestDS18B20。

Designedforusemainlybytheclockcircuitmodule,voltageregulatorcircuitmodule,liquidcrystaldisplaymodule,temperaturemeasurementmodules。

Achievedayear,month,day,week,temperaturedisplay,andalarmclockfunction。

Thisdesignissmall,simpleandconvenient,completefunctionsandhighaccuracy。

 

Keywords

51MCU;Clockchip;Temperaturedisplay;Alarmclocksettings

 

 

1. 引言

单片机经过几十年的发展,已经广泛应用于生活中的各个领域。

例如导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、工业自动化过程的实时控制和数据处理等各个方面。

电子万年历就是运用了单片机实现时钟的功能,在日常生活中主要有方便人们生活和装饰等作用。

万年历原本就具有良好的开放性和发挥性,可以根据不同的需求设计多种多样功能的万年历,以去满足人们日常生活。

万年历基本设计要求简单轻巧,功能齐全等。

现在对于电子万年历的设计大多运用51单片机。

主要是因为51单片机种类齐全、结构体系完整、指令系统功能完善、性能优越、具有较高可靠性和高性价比等特点。

1.1 选题背景

随着人们的生活水平提高,生活节奏的加快,对时间的要求越来越高,为了方便人们能随时知道时间,万年历的需求也日益增长。

至二十一世纪的今天,万年历经过第三次革命:

第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。

第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。

第三次革命就是单片机数码计时技术的应用(电子万年历)。

1.2 单片机的发展历程

单片机是单片微型计算机的简称,也就是把微处理器(CPU)、一定容量的程序存储器(ROM)和数据存储器(RAM)、输入/输出接口(I/O)、时钟及其他一些计算机外围电路,通过总线连接在一起并集成在一个芯片上构成的微型计算机系统。

单片机经过几十年的发展,在功能、体积、功耗、价格等个个股方面已经达到非常优异的水平。

在未来的发展中,单片机将趋向实现高性能化、存储器大容量化、接口多样化、集成化、低功耗化等特点。

2. 设计方案思路

方案一:

万年历的单片机芯片选用AT89S52作主控制芯片,显示模块采用LCD1602,温度检测模块采用DS18B20温度传感器,时钟芯片选用DS1302芯片,稳压源电路主要采用三端集成电路7805,经过稳压电路,可以提供单片机正常工作电压5V。

方案二:

万年历的单片机芯片选用89C51作主控制芯片,显示模块采用LED数码管,温度检测模块采用DS18B20温度传感器,时钟芯片选用DS1302芯片,稳压源电路主要采用三端集成电路7805,经过稳压电路,可以提供单片机正常工作电压5V。

本次设计选择方案一,主要是因为AT89S52具有89C51的功能,片内ROM全都采用FlashROM,能以超低电压工作,具有在线编程可擦除技术。

DS18B20温度传感器,它具有耐磨耐碰、体积小、使用方便、封装形式多样的优点。

DS1302芯片具有高性能、低功耗、可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V,满足设计所需。

3. 万年历的硬件设计原理

3.1 硬件系统设计框架

图3-1硬件系统设计框架

3.2 单片机主控制模块

AT89S52单片机为40引脚双列直插芯片,有4个I/0口P0、P1、P2、P3,每条I/0口能独立的做输出和输入。

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

图3-2 AT89S52引脚示意图

3.3 时钟电路模块

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

图3-3 DS1302引脚示意图

3.4 稳压电路模块

三端稳压集成电路7805是一个输出正5V直流电压的稳压电源电路。

稳压电路采用7805,输入端和输出端分别接滤波电容,在输入端接一个二极管,可防止正负极电源接反。

图3-4 7805引脚示意图

3.5 液晶显示模块

LCD1602液晶显示屏有16个引脚,通过D0~D7的8位数据端传输数据和指令。

图3-5 LCD1602引脚示意图

表3-5LCD1602引脚功能

管脚1

Vss

一般接地

管脚2

Vdd

接电源(+5V)

管脚3

V0

液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高

管脚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位

管脚15

BLA

背光电源正极

管脚16

BLK

背光电源负极

3.6 温度测试模块

DS18B20温度传感器具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

测温范围-55℃~+125℃,固有测温分辨率0.5℃,工作电源为3~5V。

图3-6 DS18B20引脚示意图

4. 软件设计

4.1 程序设计流程图

万年历的程序主要包括:

延时程序、键盘输入程序(加减时按键程序、闹钟加减按键程序)、温度显示模块程序、时钟显示模程序、液晶数据显示程序等。

 

 

图4-1 程序流程设计图

4.2 时间设定模块设计

DS1302可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿功能。

设计时不需要加电容,只需加一个32.768HZ晶振就可以了。

 

 

图4-2 时间设定程序流程图

4.3 温度设定模块设计

DS18B20的初始化:

(1)先将数据线置高电平“1”。

(2)延时(该时间要求的不是很严格,但是尽可能的短一点)

(3)数据线拉到低电平“0”。

(4)延时750微秒(该时间的时间范围可以从480到960微秒)。

(5)数据线拉到高电平“1”。

(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。

据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起最少要480微秒。

(8)将数据线再次拉高到高电平“1”后结束。

 

 

图4-3 温度测量程序流程

4.4 闹钟设定模块设计

 

图4-4 闹钟设定程序流程图

5. 万年历的制作和调试

5.1 布线的原则

画硬件原理图时应注意些原则:

(1)按统一的要求选择图纸幅面、图框格式、电路图中的图形符号、文字符号。

(2)应根据万年历的的工作原理,将各元器件自左到右,自上而下地排成一列或数列。

(3)图面安排时,电源部分一般安排在左下方,输入端在左侧,输出端在右侧。

(4)图中可动元件的工作状态,原则上应处于开断、不加电的工作位置。

(5)将所有芯片的电源和地引脚全部利用,不要悬空。

在实际画的过程中应考虑自己的制作水平,为了防止制作出的PCB板有断线等情况发生,在画线时都用30mil,而为了区分电源线和接地线,则电源线和接地线用50mil。

在画PCB中应值得注意的是先看元器件的实物,然后看软件中是否有相对应的库元器件,如果没有就需要根据实物自己画出相对应的元件,以免做好板后才发现元器件无法插入对应的孔中。

在制作PCB板的时候应注意必须把墨全部转印到覆铜板上,以免对板腐蚀的时候出现断线等情况,如果转印并不十分好,则可以用黑色水墨笔在断线处画上一笔,也可以起到防腐蚀的效果。

5.2 焊接调试

万年历的制作过程中焊接最容易出现问题,在焊接前,必须先对照元器件的PCB图和原理图,以免防止元器件的正负极接反或者把元器件搞错。

在焊接的时候要注意虚焊,根据焊接的经验,在焊点锡是尖角的,一般都是焊实了;如果焊点处出现圆颗状,则容易出现虚焊,元器件的管脚可能没有焊实,出现接触不良的情况。

检查是否虚焊可以在完成焊接后,接上电源,看电路是否能正常工作,如果不行,则可以用数字万用表进行检测。

用数字万用表检测的时候,可以很方便的检测出电路的通断,判断在做板的时候是否有断路,也很容易检测是否虚焊。

5.3 万年历硬件调试

在制作出实物后,硬件并非按照理论上的情况成功进行。

经过检测发现单片机的工作电压不能达到5V,导致LCD不能正常显示,经过检查发现稳压电路供电有问题,主要是7805端的电压不稳定,经过对焊接的修正和电容的更换,使单片机能获得5V的正常工作电压。

LCD正常工作状态:

图5-31602正常显示状态

对于进行检测时发现实际温度与检测温度有偏差,且偏差较大的问题,只需对程序进行修正,可以减小误差。

修正前:

a=tmpreadbyte();//先读取低八位

b=tmpreadbyte();//再读取高八位

temp=b;

temp=temp<<8;

temp=temp|a;

mm=temp*0.625;

temp=mm*10;

return(temp);

修正后:

a=tmpreadbyte();//先读取低八位

b=tmpreadbyte();//再读取高八位

temp=b;

temp=temp<<8;

temp=temp|a;

mm=temp*0.0625;

temp=mm*10+0.5;

return(temp);

5.4 系统软件的调试

根据原理图,在已有的程序上进行修改就可以运用于设计。

在编写过程中可以根据自己所想的理想界面,对程序进行修改,在修改完成后没有错误就可以运用在硬件上。

一般在程序编写好后,可以先进行软件仿真,这个可以检查程序是否适用于硬件,如果没有成功则说明,程序还存在一些问题;如果成功,则说明程序没有问题。

但是在软件仿真成功后,实际运用在硬件上,未必能成功,那是因为软件仿真和实际的硬件始终存在一定的差别,软件仿真只是提高程序的成功率。

在运用在实际的硬件上时,还需要根据硬件的实际情况进行修正,一般都可以成功,问题不大。

在软件调试时由于实际硬件问题,原本的程序不适合,在对程序进行修改,使结果能正常显示在LCD上。

对程序数值的修改如下:

数值不正确导致无法显示:

voidinit_ds18b20()//DS18B20初始化;

{

ucharx;

x=1;

while(x)

{

DQ=0;

delay_us(100);//需延时480us—960us

DQ=1;

//delay_us

(2);//需延时15—60usfor2——28.21us可以?

?

?

?

?

?

delay_1us(4);//while2——21.70us

if(DQ==0)//等待DS18B20拉低;

x=0;

}

delay_us(20);//需要延时60—240us

DQ=1;//释放总线

//delay_us(500);

}

修改后的数值:

将//while2——21.70us改为while3——28.21us就可以了

 

6. 结论

本次设计主要是介绍了单片机的发展历程和万年历在日常生活中给人们带来的方便。

第二章主要介绍了设计万年历的总体思路、万年历组成的几个模块以及模块之间的连接。

第三章主要介绍了各个模块的具体组成的,每个模块选用的具体器件和器件的优点,其中主要运用到的器件是单片机AT89S52、DS1302时钟芯片、DS18B20温度传感器、7805三端集成稳压电路、LCD1602液晶显示屏。

第四章主要介绍了软件设计,写出了其中几个主要模块的程序流程图,看起来清晰明了,便于程序的编写。

第五章主要介绍了在制作万年历的过程中的注意事项、硬件软件的最终调试和解决在制作过程中出现的问题。

在此次万年历的设计过程中,更加熟习地掌握单片机及其他元器件的运用,明白了它们的工作原理和使用方法。

在制作过程中,很好的锻炼了自己的动手能力,从一片空白,到慢慢运用自己所学,把几年的学习知识一起运用在一个作品中,这个万年历的成功制作,自己付出许多时间、精力。

更主要的是利用这个设计,把以前的分散知识结合在一起,并且用自己的方式表达出来,这是对自己几年的辛苦的肯定。

在此过程中同样感到了自己的许多不足,和一些知识的欠缺,明白对于电子这一类的学习中还有许许多多自己所不知道的知识和问题。

但是也明白了,只有在一次次的实践过程中,才能成长的更快,才能完善自己,才能挑战未来。

希望在以后还能像这样不断扩展和锻炼自己。

 

参考文献

[1]孙育才.MCS-51系列单片机微型计算机及应用[M].东南大学出版社,1997,23-34.

[2]何立民.单片机应用系统设计[M].北京航空航天大学出版社,1999,60-62.

[3]张天凡.51单片机C语言开发详解[M].电子工业出版社,2008,12-70

[4]于永.51单片机C语言常用模块与综合系统设计[M].电子工业出版社,2007,240-257

[5]胡辉.单片机原理与应用[M].中国水利水电出版社,2007,50-119

[6]谭浩强.C语言设计[M].清华大学出版社.2005,106-107

[7]高鹏.Protel99入门与提高[M].人民邮电出版社.2007,220-222

[8]王怀平.单片机微机万年历设计[N].职大学报.2000.2

[9]胡汉才.单片机原理及接口技术[M].清华大学出版社.1996,546-643

[10]张有德.单片微型机原理应用与实践[M].复旦大学出版社.1992,347-468

[11]何希庆.MCS-51单片机原理实例实践[M].山东大学出版社.1989,242-298

[12]范立南.单片微机接口与控制技术[M].辽宁大学出版社.1996,78-204

[13]李华.MCS-51系列单片机实用接口技术[M].北京航空航天大学出版社.1999,138-248

[14]张毅刚.MCS-51单片机应用设计[M].哈尔滨工业大学出版社.1997,442-648

[15]晁阳.单片机CS-51原理及应用开发教程.清华大学出版.2007,354-355

谢辞

此次万年历的设计在指导老师和同学的帮助下,自己一步一步完成的。

很感谢指导老师对我的关心和督促,感谢同学对我在遇到问题时的帮助。

在学校的良好环境中,安心学习,顺利完成毕业设计。

在这次的设计中学到了许多知识,很好地锻炼自己,通过自己努力完成了作品。

感谢学校创造这么好的学习环境;感谢指导老师的细心栽培;感谢同学的热心帮助!

 

附件

附件一:

原理图

 

附件二:

PCB图

附件三:

元器件清单

1

元器件名称

元器件型号

数量

2

普通电容C1、C2

22pf

2

3

普通电容C5、C6

0.1uf

2

4

电解电容C7

10uf

1

5

点解电容C3、C4

100uf

2

6

普通电阻R4、R9

1kΩ

2

7

普通电阻R5、R6、R7、R8、R10

10kΩ

5

8

普通电阻R2

4.7kΩ

1

9

普通电阻R100

10Ω

1

10

可变电阻R3

10kΩ

1

11

上拉电阻R1

4.7kΩ

1

12

单片机U1

AT89S52

1

13

时钟芯片U2

DS1302

1

14

三端集成稳压电路U4

7805

1

15

晶振Y3

12M

1

16

晶振Y2

32.768HZ

1

17

LCD液晶显示屏Y1

1602

1

18

温度传感器J1

DS18B20

1

19

插针J2

CON2

1

20

开关S1、S2、S3、S4、S5

5

21

蜂鸣器LS1

1

22

二极管D1

IN4007

1

23

PNPQ1

8550

1

附件四:

实物图

 

附件五:

程序清单

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

/*****************变量定义*************************/

uintl_tmp;

sbitdssclk=P1^0;

sbitdsio=P1^1;

sbitdsrst=P1^2;

sbitlcdrs=P3^0;

sbitlcdrw=P3^1;

sbitlcden=P3^2;

ucharmiao,shi,fen,nian,yue,ri,xinqi;

sbitBUZZER=P3^3;//蜂鸣器接口

sbits0=P2^0;//时间设置

sbits1=P2^1;//闹钟设置

sbits2=P2^2;//加一

sbits3=P2^3;//减一

uintntable[4];

sbitDQ=P1^4;//定义DS18B20接口;

ucharaa,bb,cc,dd,ee,ff;

uinttemp;

ucharjinzhi(ucharx);

ucharnza,nzb,nzc,nzd;//闹钟设置的各参数

ucharflag,flag1,flag2,s0num,s1num;//flag1为闹钟标志位,flag显示标志位,flag2为按键锁定标志位

/*******************函数声明部分***********************/

voidhelp(void);

voidkeyscan();//键盘输入

voiddelay_us(ucharus);//forus延时

voiddelay_1us(ucharus);//whileus延时

voiddelay_1ms(ucharz);//键盘延时消抖

voidinit_ds18b20();//DS18B20初始化

bittmpreadbit();//读一位程序

uchartmpreadbyte();//读一个字节程序

voidwritebyte(dat);//写字节程序

voidwrite_ds_byte(uchartemp);//ds1302写一位

voidwrite_ds(uchar,uchar);//ds1302写一个字节

ucharread_ds(uchar);//ds1302读一个字节

//voidread_rtc(void);

//voidset_rtc(void);

voidwrite_sfm(uchar,uchar);//lcd写时分秒月日

voidwrite_year(uchar,uchar);//lcd写年

voidwrite_xinqi(uchar,uchar);//lcd写星期

uinttmp();//读取温度

voiddisplay(ucharaa,ucharbb,ucharcc,uchardd,ucharee,ucharff);//温度显示部分

voidinit();//lcd初始化

voidwrite_date(uchardate);//lcd写数据

voidwrite_com(ucharcom);//lcd写指令

voidtmpchange();//温度转化命令

ucharjinzhi(ucharx);//进制转化

voidinit_naozhongdisplay(void);//闹钟显示界面初始化

/********************延时部分**************************/

voiddelay_us(ucharus)//forus延时

{

uchari;

//i=us;

for(i=us;i>0;i--);

}

voiddelay_1us(ucharus)//whileus延时

{

uchari;

i=us;

while(i)

{

i--;

}

}

voiddelay_1ms(ucharz)//键盘延时消抖

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddelay(ucharz)

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/***********

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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