多功能万年历

2016-02-21 │ 毕业设计

篇一:多功能万年历毕业设计(终稿)

目 录

引言 ...................................................................... 1

1 系统功能与方案论证...................................................... 2

1.1系统功能 ........................................................... 2

1.2 系统基本方案选择和论证 ............................................ 2

1.2.1 单片机芯片的选择方案和论证 ................................... 2

1.2.2 显示模块选择方案和论证 ....................................... 3

1.2.3 时钟芯片的选择方案和论证 ..................................... 3

1.2.4 温度传感器的选择方案与论证 ................................... 3

1.3 电路设计最终方案决定 .............................................. 4

2 系统的硬件设计与实现.................................................... 4

2.1 电路设计框图 ...................................................... 4

2.2 系统硬件概述 ...................................................... 4

2.3 各系统电路及工作原理 .............................................. 5

2.3.1 AT89S52单片机最小系统设计 ................................... 5

2.3.2 时钟电路模块的设计 ........................................... 6

2.3.3 温度采集电路的设计 ........................................... 8

2.3.4 LCD1602液晶显示模块设计 ..................................... 8

2.3.5 电源电路 .................................................... 10

2.3.6 闹钟电路设计 ................................................ 10

2.3.7 键盘输入电路 ................................................ 11

3 软件设计 ............................................................... 11

3.1 主程序框图 ........................................................... 12

3.2 DS1302时间处理 ................................................... 12

3.3 环境温度采集 ..................................................... 15

3.4 键盘扫描 ......................................................... 15

3.5 音乐播放 ......................................................... 15

3.6 公历转农历 ....................................................... 15

结束语 ................................................................... 17

参考文献 ................................................................. 18

附录 ..................................................................... 19

附录A 程序 ........................................................... 19

附录B 原理图 ......................................................... 41

致谢 ..................................................................... 41

多功能万年历的设计

摘 要:本设计采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路、键盘电路,使人机交互简便易行,此外还结合音乐闹铃电路、温度采集电路和供电电路。本方案设计出的万年历可以显示日期、时间、温度、农历,并且设置了音乐闹铃功能。该万年历可以应用于一般的生活和工作中,也可以通过改装,提高性能,增添新功能,从而给人们的生活和工作带来方便。

关键词:万年历;AT89S52;LCD1602;时钟日历芯片DS1302;音乐闹钟

The Multi-functional Calendar Design

na Abstract: This design has adopted by the extensive use of single chip microcomputer as the core. Hardware and software combination make the hardware parts greatly simplified and improve the stability of the system.The use of LCD display circuit, keyboard circuit makes the information exchange simple. In addition, the design is combined with music alarm circuit, temperature acquisition circuit and power supply circuit. It can show a calendar date, time, temperature, the lunar and set up music alarm function. On one hang the calendar can be applied to general life and work, on the other hang, it can improve performance by modification to add new functions, so that it can bring more convenience to people's life and work. Key words: calendar;AT89S52;LCD1602; clock calendar chip DS 1302; music alarm clock.

引言

电子万年历是实现对年、月、日、时、分、秒数字显示的计时装置,广泛用于个人、家庭、车站、码头、办公室、银行大厅等场所,成为人们日常生活中的必需品。数字集

成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子万年历精度高,功能易于扩展,可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯等电路。因此,研究电子万年历及扩大其应用有着非常现实的意义。

1 系统功能与方案论证

1.1系统功能

·LCD显示年、月、日、时、分、秒、星期、温度、农历等信息

·手动调整年、月、日、时、分、星期、温度上限、闹铃时间

·温度报警

·闹铃播放音乐

·日历时间掉电保护

·公历与农历自动关联

·闹铃可选择关闭、每天循环或只响应一次三种模式

·可选用USB、直流12V或5V电源或交流9V电源对电路进行供电

1.2 系统基本方案选择和论证

由于现在市面上的电子万年历的种类比较多,因此到底选择什么样的方案在设计中是至关重要的。正确地选择方案就可以使产品更加人性化,并且可以减小开发的难度,缩短开发的周期,降低产品的成本等等,因此就会被人们普遍接受,并且能够更快地将产品推向市场实现其自身的价值。

1.2.1 单片机芯片的选择方案和论证

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,在烧写程序时需要专门的下载器。

方案二:

采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51

系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能时,烧写程序方面,再加上本系统程序较大,需要较大的存储空间,因此选择采用AT89S52作为主控制系统。

1.2.2 显示模块选择方案和论证

方案一:

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

方案二:

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

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,显示多样,清晰可见,但是价格贵,需要的接口线多,本设计所需显示的内容较多。所以在此设计中采用LCD1602液晶显示屏。

1.2.3 时钟芯片的选择方案和论证

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。

方案二:

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

1.2.4 温度传感器的选择方案与论证

方案一:

使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。

此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。

方案二:

采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。

1.3 电路设计最终方案决定

综上各方案所述,对此次作品的方案选定:采用AT89S52作为主控制系统;DS1302实现时钟;数字式温度传感器;LCD1602字符液晶显示屏作为显示。

2 系统的硬件设计与实现

2.1 电路设计框图

图1 系统框图

2.2 系统硬件概述

本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片显示公历的年、月、日、星期、时、分、秒和农历的月、日,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示器显示出来。键盘输入由四个按键来实现,用这四个按键可以对日期、时间、星期、温度报警上限进行调整,并可以对闹铃的开关和闹铃的

篇二:(多功能电子万年历开题报告)

西北民族大学

毕业论文(设计)开题报告

论文(设计)名称 多功能电子万年历 论文(设计)起止时间 —月日 姓 名 丁永亮 学 号 学 院 电气工程学院 专业班级09自动化(2)班 指导教师 王涛

说明:

1.本报告必须由承担毕业论文(设计)课程任务的学生在正式开始做论文(设计)前独立撰写完成,交指导教师审阅、学院审查。

2.每篇毕业论文(设计)课题撰写本报告一份,作为指导教师、学院审查学生能否承担该毕业论文(设计)课题任务的依据,并接受学校的抽查。

篇三:下面是一个多功能的电子万年历的程序

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

下面是一个多功能的电子万年历的程序。

主要功能:

1、显示当前的日期及标准北京时间

2、实时检测当前温度并通过1602显示出来

3、具有可调的闹钟功能,通过按键调整闹钟的起

闹时间

4、通过按键实现画面的切换

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

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code digit[]={"0123456789"}; //定义字符数组显示数字

uchar code Error[]="Error!Check!"; //说明没有检测到DS18B20

uchar code table[]="Alarm Clock";

uchar code table1[]="0123456789";

uchar code table2[]="WEEK";

uchar code table3[]="Today is fine!";

uchar code table4[]="HELLO!";

uchar code table5[]="Made by xiaoyou";

uchar code table6[]="Happy new year!!";//1.1

uchar code table7[]="Valentine's Day"; //2.14

/*uchar code table8[]="Qing Ming jie!";//4.5

uchar code table9[]="Happy Labor Day!";//5.1

uchar code table10[]="Duan Wu jie!";//6.15

uchar code table11[]="Army day!";//8.1

uchar code table12[]="Teacher's Day!";//9.10

uchar code table13[]="National Day!";//10.1

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

以下是对液晶模块的操作程序

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

sbit RS=P0^5; //寄存器选择位,将RS位定义为P2.0引脚

sbit RW=P0^6; //读写选择位,将RW位定义为P2.1引脚

sbit E=P0^7;//使能信号位,将E位定义为P2.2引脚

sbit DQ=P1^1;

sbit T_RST=P2^0;

sbit T_CLK=P1^0;

sbit T_IO=P1^2;

sbit beep=P2^4;

sbit key1=P3^0;//调闹钟的小时即x

sbit key2=P3^1;//调闹钟的分钟即y

sbit key3=P3^2;//显示切换

sbit key4=P3^3;

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

uchar time;//设置全局变量,专门用于严格延时

static uchar x=0x08,y=30;

uchar t_sec,sec1,sec2;

uchar t_min,min1,min2;

uchar t_hour,hour1,hour2;

uchar t_mon,mon1,mon2;

uchar t_day,day1,day2;

uchar t_year,year1,year2;

uchar week,week1;

uchar com,inf;

void tixing(unsigned char mm,unsigned dd);

void show();

void delay1(uchar t)

{

uchar a,b;

for(a=t;a>0;a--)

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

}

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

函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒

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

void delay1ms()

{

uchar i,j;

for(i=0;i<10;i++)

for(j=0;j<33;j++)

;

}

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

函数功能:延时若干毫秒

入口参数:n

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

void delaynms(uchar n)

{

uchar i;

for(i=0;i<n;i++)

delay1ms();

}

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

函数功能:判断液晶模块的忙碌状态

返回值:result。result=1,忙碌;result=0,不忙

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

bit BusyTest(void)

{

bit result;

RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1; //E=1,才允许读写

_nop_();//空操作

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

//将忙碌标志电平赋给result

E=0;//将E恢复低电平

return result;

}

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

函数功能:将模式设置指令或显示地址写入液晶模块

入口参数:dictate

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

void WriteInstruction (uchar dictate)

{

while(BusyTest()==1);//如果忙就等待

RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;

E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲, _nop_();

_nop_();

_nop_(); // 就是让E从0到1发生正跳变,所以应先置"0"_nop_();

_nop_();//空操作两个机器周期,给硬件反应时间 P2=dictate;//将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令

}

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

函数功能:指定字符显示的实际地址

入口参数:x

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

void WriteAddress(unsigned char x)

{

WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"

}

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

函数功能:将数据(字符的标准ASCII码)写入液晶模块

入口参数:y(为字符常量)

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

void WriteData(uchar y)

{

while(BusyTest()==1);

RS=1; //RS为高电平,RW为低电平时,可以写入数据

RW=0;

E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,

// 就是让E从0到1发生正跳变,所以应先置"0"

P2=y; //将数据送入P0口,即将数据写入液晶模块

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

E=1; //E置高电平

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 }

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

函数功能:对LCD的显示模式进行初始化设置

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

void LcdInitiate(void)

{

delaynms(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间

WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口 delaynms(5); _nop_();

_nop_();

_nop_();

//延时5ms ,给硬件一点反应时间

//延时5ms ,给硬件一点反应时间

WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁 delaynms(5);//延时5ms ,给硬件一点反应时间

WriteInstruction(0x06); //显示模式设置:光标右移,字符不移

delaynms(5);_nop_();

_nop_();

_nop_(); //延时5ms ,给硬件一点反应时间

WriteInstruction(0x01); _nop_();

_nop_();

_nop_();//清屏幕指令,将以前的显示内容清除

delaynms(5); //延时5ms ,给硬件一点反应时间

}

void write_com(uchar com)//向1602写指令

{

RS=0;

RW=0;

P2=com;

delaynms(10);

E=1;

delaynms(10);

E=0;

}

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

函数功能:将DS18B20传感器初始化,读取应答信号

出口参数:flag

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

bit Init_DS18B20(void)

{

bit flag;//储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在

DQ = 1; //先将数据线拉高

for(time=0;time<2;time++) //略微延时约6微秒

;

DQ = 0; //再将数据线从高拉低,要求保持480~960us

for(time=0;time<200;time++) //略微延时约600微秒

;//以向DS18B20发出一持续480~960us的低电平复位脉冲

DQ = 1; //释放数据线(将数据线拉高)

for(time=0;time<10;time++)

; //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time<200;time++) //延时足够长时间,等待存在脉冲输出完毕

;

return (flag); //返回检测成功标志

}

多功能万年历

查看更多毕业设计相关内容,请点击毕业设计
推荐访问:功能最全的万年历 万年历2020年日历
作文 论文 简历 文秘 合同 文库 计划 总结 体会 报告 策划 材料 公文 礼仪 思想 党团 演讲稿 企事业 发言致辞 资讯