温度显示闹钟功能的电子日历设计.docx

上传人:b****6 文档编号:7532580 上传时间:2023-01-24 格式:DOCX 页数:42 大小:626.56KB
下载 相关 举报
温度显示闹钟功能的电子日历设计.docx_第1页
第1页 / 共42页
温度显示闹钟功能的电子日历设计.docx_第2页
第2页 / 共42页
温度显示闹钟功能的电子日历设计.docx_第3页
第3页 / 共42页
温度显示闹钟功能的电子日历设计.docx_第4页
第4页 / 共42页
温度显示闹钟功能的电子日历设计.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

温度显示闹钟功能的电子日历设计.docx

《温度显示闹钟功能的电子日历设计.docx》由会员分享,可在线阅读,更多相关《温度显示闹钟功能的电子日历设计.docx(42页珍藏版)》请在冰豆网上搜索。

温度显示闹钟功能的电子日历设计.docx

温度显示闹钟功能的电子日历设计

课程设计报告

 

课程名称:

温度显示闹钟功能的电子日历设计

姓名

学号:

班级:

专业:

电子信息工程

日期:

2011年6月30日

前言

单片机在咱们日常生活中应用相当的普遍,大到工业控制方面,小到生活儿童玩具等的应用。

现今已经成为必不可少的控制系统。

单片机具有价钱低廉技术成熟等特点,收到大家的普遍好评,单片机就像一个小型的运算机有自己的处置器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、按时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等)在工业的生产中常常利用于智能控制,自动控制等方面。

能够专门好的代替人做一些工作,在控制精度方面也有专门好的表现。

另外,在时下很流行的家电智能控制方面也有专门大的应用。

 

温度显示闹铃功能的电子日历设计

一,课程设计的目的与要求

1.课程设计的目的

应用STC89C52RC单片机,DS1302,DS18B20,24C02和1602实现具有温度检测功能和闹钟功能的基于1602显示的电子日历的设计与制作。

(1)基于DS1302,万年历功能模块。

(2)DS18B20温度显示模块。

(3)1602显示模块。

2.课程设计要求

在两周内实现上述设计目的,完成电路的设计,焊接和实现。

二,整体设计

大体工作原理

(1)利用DS1302的时钟芯片功能,因为DS1302具有两个电源,一个主电源一个从电源,主电源掉电以后芯片内部时钟还在跑,能够保证时钟的实时性。

(2)数字温度传感器DS18B20能够方便的感应外界温度,从而实现温度的实时监测。

(3)利用液晶LCD1602将以上信息显示出来

整体硬件设计

2.2.1、系统组成方案

P0口控制1602的D0---D7,,,别离控制1602的RS,RW,E。

,,,别离控制键盘部份。

蜂鸣器。

,,别离控制DS1302的RST,I/O,SCLK。

,别离控制24C02C的SDA,SCK。

控制DS18B20的DQ。

以上为硬件端口的分派。

、按键、显示功能的概念

(1)1602第一屏显示年月日,时刻,礼拜,和温度。

换屏以后显示闹钟的设置。

在板子中,最上面的一个按键是时刻,年月日,礼拜的调整控制,中间两个按键上边的是加一按键,下边一个是减一按键。

最下边的一个按键是闹钟的设置按键。

硬件设计

DS1302简介:

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实不时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实不时钟可提供秒、分、时、日、礼拜、月和年,一个月小与31天时能够自动调整,且具有闰年补偿功能。

工作电压宽达~。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

各引脚的功能为:

Vcc1:

主电源;Vcc2:

备份电源。

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

SCLK:

串行时钟,输入,控制数据的输入与输出;

I/O:

三线接口时的双向数据线;

CE:

输入信号,在读、写数据期间,必需为高。

该引脚有两个功能:

第一,CE开始控制字访问移位寄放器的控制逻辑;第二CE提供结束单字节或多字节数据传输的方式。

DS1302有下列几组寄放器:

DS1302①有关日历、时刻的寄放器共有12个,其中有7个寄放器(读时81h~8Dh,写时80h~8Ch),寄存的数据格式为BCD码形式,

DS1302有关日历、时刻的寄放器

DS1302的寄放器和控制命令

日历、时刻寄放器及控制字如下表所示:

寄存器名称

7

6

5

4

3

2

1

0

1

RAM/CK

A4

A3

A2

A1

A0

RD/W

秒寄存器

1

0

0

0

0

0

0

分寄存器

1

0

0

0

0

0

1

小时寄存器

1

0

0

0

0

1

0

日寄存器

1

0

0

0

0

1

1

月寄存器

1

0

0

0

1

0

0

DS18B20简介:

DALLAS最新单线数字温度传感器DS18B20简介新的"一线器件"体积更小、适用电压更宽、更经济Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持"一线总线"接口的温度传感器。

一线总线独特而且经济的特点,利用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±°C。

DS1822的精度较差为±2°C。

现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。

适合于恶劣环境的现场温度测量,如:

环境控制、设备或进程控制、测温类消费电子产品等。

DS18B20的特性:

DS18B20能够程序设定9~12位的分辨率,精度为±°C。

可选更小的封装方式,更宽的电压适用范围。

分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后仍然保留。

1.DS18B20的新性能

(1) 可用数据线供电,电压范围:

~;

(2) 测温范围:

-55~+125℃,在-10~+85℃时精度为±℃;

(3) 可编程的分辨率为9~12位,对应的可分辨温度别离为℃、℃、℃和℃;

(4) 12位分辨率时最多在750ms内把温度值转换为数字;

(5) 负压特性:

电源极性接反时,温度计不会因发烧而烧毁,但不能正常工作。

 

2.DS18B20的外形和内部结构

DS18B20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的管脚排列如下:

引脚概念:

(1)DQ为数字信号输入/输出端;

(2)GND为电源地;

(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

有4个主要的数据部件:

(1)光刻ROM中的64位序列号是出厂前被光刻好的,它能够看做是该DS18B20的地址序列码。

64位光刻ROM的排列是:

开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

光刻ROM的作用是使每一个DS18B20都各不相同,如此就可以够实现一根总线上挂接多个DS18B20的目的。

按照DS18B20的通信协议,主机控制DS18B20完成温度转换必需通过三个步骤:

每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,如此才能对DS18B20进行预定的操作。

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

ROM指令表:

指令

约定代码

功能

读ROM

33H

读DS1820ROM中的编码(即64位地址)

符合ROM

55H

发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。

搜索ROM

0F0H

用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。

为操作各器件作好准备。

跳过ROM

0CCH

忽略64位ROM地址,直接向DS1820发温度变换命令。

适用于单片工作。

告警搜索命令

0ECH

执行后只有温度超过设定值上限或下限的片子才做出响应。

RAM指令表:

指令

约定代码

功能

温度变换

44H

启动DS1820进行温度转换,转换时最长为500ms(典型为200ms)。

结果存入内部9字节RAM中。

读暂存器

0BEH

内部RAM中9字节的内容

写暂存器

4EH

发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。

复制暂存器

48H

将RAM中第3、4字节的内容复制到EEPROM中。

重调EEPROM

0B8H

将EEPROM中内容恢复到RAM中的第3、4字节。

读供电方式

0B4H

读DS1820的供电模式。

寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。

4.DS18B20工作原理

DS18B20的读写时序和测温原理与DS1820相同,只是取得的温度值的位数因分辨率不同而不同,且温度转换时的延不时刻由2s减为750ms。

 

24C02简介:

管脚配置

管脚描述

管脚名称功能

A0A1A2器件地址选择

SDA串行数据/地址

SCL串行时钟

WP写保护

Vcc+工作电压

Vss地

管脚描述

SCL串行时钟

24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟这是一个输入管脚。

SDA串行数据/地址

24C02双向串行数据/地址管脚用于器件所有数据的发送或接收SDA是一个开漏输出管脚可与其它开漏输出或集电极开路输出进行线或wire-OR

A0A1A2器件地址输入端这些输入脚用于多个器件级联时设置器件地址当这些脚悬空时默许值为0当利用24WC01或24WC02时最大可级联8个器件若是只有一个24WC02被总线寻址这三个地址输入脚A0A1A2可悬空或连接到Vss若是只有一个24WC01被总线寻址这三个地址输入脚A0A1A2必需连接到Vss,当利用24WC04时最多可连接4个器件该器件仅利用A1A2地址管脚A0管脚未用能够连接到Vss或悬空若是只有一个24WC04被总线寻址A1和A2地址管脚可悬空或连接到Vss,当利用24WC08时最多可连接2个器件且仅利用地址管脚A2A0A1管脚未用能够连接到Vss或悬空若是只有一个24WC08被总线寻址A2管脚可悬空或连接到Vss,当利用24WC16时最多只可连接1个器件所有地址管脚A0A1A2都未用管脚能够连接到Vss或悬空。

WP写保护

若是WP管脚连接到Vcc所有的内容都被写保护只能读当WP管脚连接到Vss或悬空允许

器件进行正常的读/写操作

I2器件寻址

主器件通过发送一个起始信号启动发送进程然后发送它所要寻址的从器件的地址8位从器件地址的高4位固定为1010见图5接下来的3位A2A1A0为器件的地址位用来概念哪个器件和器件的哪个部份被主器件访问上述8个CAT24WC01/024个CAT24WC042个

LCD1602简介:

1.字符型LCD的引脚概念

2.常常利用指令

(1)清屏指令

功能:

<1>清除液晶显示器,即将DDRAM的内容全数填入"空白"的ASCII

码20H;

<2>光标归位,即将光标撤回液晶显示屏的左上方;

<3>将地址计数器(AC)的值设为0。

(2)光标归位指令

功能:

<1>把光标撤回到显示器的左上方;

<2>把地址计数器(AC)的值设置为0;

<3>维持DDRAM的内容不变。

(3)进入模式设置指令

功能:

设定每次定入1位数据后光标的移位方向,而且设定每次写入的一个

字符是不是移动。

参数设定的

情形如下所示:

位名设置

I/D0=写入新数据后光标左移1=写入新数据后光标右移

S0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右

移1个字符

(4)显示开关控制指令

功能:

控制显示器开/关、光标显示/关闭和光标是不是闪烁。

参数设定的情

况如下:

位名设置

D0=显示功能关1=显示功能开

C0=无光标1=有光标

B0=光标闪烁1=光标不闪烁

(5)设定显示屏或光标移动方向指令

功能:

使光标移位或使整个显示屏幕移位。

参数设定的情形如下:

S/CR/L设定情形

00光标左移1格,且AC值减1

01光标右移1格,且AC值加1

10显示器上字符全数左移一格,但光标不动

11显示器上字符全数右移一格,但光标不动

(6)功能设定指令

功能:

设定数据总线位数、显示的行数及字型。

参数设定的情形如下:

位名设置

DL0=数据总线为4位1=数据总线为8位

N0=显示1行1=显示2行

F0=5×7点阵/每字符1=5×10点阵/每字符

整体软件设计

2.3.1、存储单元的分派、标志位的概念

各个所用端口的肯定:

sbitDQ=P1^0;//ds18b20温度传送数据IO口

sbitds1302_rst=P1^1;//1302复位

sbitds1302_io=P1^2;//数据输入输出

sbitds1302_sclk=P1^3;//串行时钟

sbitalarm_out=P3^6;

sbitlcd1602_rs=P2^0;//1602命令、数据选择

sbitlcd1602_rw=P2^1;//1602写

sbitlcd1602_e=P2^2;//1602使能

sbitset=P2^4;//选择按键

sbitup=P2^5;//加

sbitdown=P2^6;//减

sbitnao=P2^7;

main()

{

lcd1602_init();

ds18b20_init();

ds1302_init();

c02_init();

while

(1)

{

if(done==1)

{

keyjpress();

}

if(done==0)

{

xianshi();//取得并显示日历和时刻

key_set_alarm();

alarm_ring();

}

}

}

 

整体设计流程图如下

具体程序流程图

三,结束语

在这次课程设计中确实对单片机的理解有了专门大的提高,从纯的理论中能联系到实际中来。

专门是对I2C总线的理解有了专门大的进步,在验收中老师提到一个最困扰的问题就是地址问题,咱们的数据是怎么写进去的,写到哪里了,自己对地址的概念有了一个加倍清楚的熟悉。

另外,对数据手册的运用也有了必然的熟悉,以前所学的知识大部份只局限到讲义,可是咱们要用到一个芯片,咱们必需要明白它的特性,那么数据手册,就是一个不可缺少的资料。

再次,就是这次咱们小组三个人表现出来的合作意识超级不错,也很感想老师所提出的问题,在解决问题进程中也是提高专门快的。

 

四,系统原理图

五,程序清单

#include<>

#include""

#include""

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetabe1[]="20--";//液晶一直显示的字符

ucharcodetabe2[]=":

:

";

ucharcodetabe3[]="Alarmset:

";

ucharmiao,fen,shi,nian,yue,ri,week,wendu_shi,wendu_ge,wendu_shu,variate,alarm_shi,alarm_fen,alarm_miao;

ucharflag=1,count=0,flag_up=0,flag_down=0,flag_alarm=0,alarm_on,alarm_count=0,done=0;

uintwendu;

//概念IO

sbitDQ=P1^0;//ds18b20温度传送数据IO口

sbitds1302_rst=P1^1;//1302复位

sbitds1302_io=P1^2;//数据输入输出

sbitds1302_sclk=P1^3;//串行时钟

sbitalarm_out=P3^6;

 

sbitlcd1602_rs=P2^0;//1602命令、数据选择

sbitlcd1602_rw=P2^1;//1602写

sbitlcd1602_e=P2^2;//1602使能

sbitset=P2^4;//选择按键

sbitup=P2^5;//加

sbitdown=P2^6;//减

sbitnao=P2^7;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

//延时

voiddelay(ucharx)

{

uchary,z;

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

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

}

voiddelay1()

{

_nop_();

_nop_();

}

ds18b20_delay(ucharxus)//延时xus

{

while(xus--);

}

/**********************ds18b20***********************/

voidds18b20_init()//DS18B20初始化

{

ucharx=0;

DQ=1;

ds18b20_delay(8);

DQ=0;

ds18b20_delay(80);

DQ=1;

ds18b20_delay(14);

x=DQ;

ds18b20_delay(20);

}

voidwrite_onechar(uchardat)//写一字节

{

uchari;

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

{

DQ=0;

if(dat&0x01==0x01)

DQ=1;

else

DQ=0;

ds18b20_delay(5);

DQ=1;

ds18b20_delay

(1);

dat>>=1;

}

}

ucharread_onechar()//读一字节

{

ucharvalue=0,i;

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

{

value>>=1;

DQ=0;

ds18b20_delay

(1);

DQ=1;

if(DQ==1)

value|=0x80;

else

value&=0x7f;

ds18b20_delay(4);

}

returnvalue;

}

uintread_wendu()//DS18B20读温度

{

uchara=0,b=0;

uintwen=0x0000;

ds18b20_init();//初始化

write_onechar(0xcc);//跳过读序号列号的操作

write_onechar(0x44);//启动温度转换

ds18b20_delay(150);

ds18b20_init();//初始化

write_onechar(0xcc);//跳过读序号列号的操作

write_onechar(0xbe);//读取温度寄存器等(共可读9个寄存器)前两个就是温度

ds18b20_delay(150);

b=read_onechar();//读取温度值低位

a=read_onechar();//读取温度值高位

wen=a;

wen=(wen<<8)|b;

returnwen;

}

 

/**********************ds1302***************************/

voidwrite_byte(uchardat)//写一字节

{

uchark;

ACC=dat;

for(k=8;k>0;k--)

{

ds1302_io=ACC0;

ds1302_sclk=0;//拉低sclk

ds1302_sclk=1;//拉高sclk

ACC>>=1;

}

}

ucharread_byte()

{

uchark;

for(k=8;k>0;k--)

{

ACC7=ds1302_io;

ds1302_sclk=1;//拉高sclk

ds1302_sclk=0;//拉低sclk

ACC>>=1;

}

returnACC;

}

voidds1302_write(ucharadd,uchardate)

{

ds1302_rst=0;

ds1302_sclk=0;//在rst没拉高之前先把sclk置0

ds1302_rst=1;

write_byte(add);

write_byte(date);

ds1302_sclk=1;

ds1302_rst=0;

}

uchards1302_read(ucharadd)

{

uchartemp;

ds1302_rst=0;

ds1302_sclk=0;//在rst没拉高之前先把sclk置0

ds1302_rst=1;

write_byte(add);

temp=read_byte();

ds1302_sclk=1;

ds1302_rst=0;

returntemp;

}

voidds1302_init()//ds1302初始化

{

ds1302_rst=0;

ds1302_sclk=1;

ds1302_write(0x8e,0x00);//写允许

ds1302_write(0x80,0x58);

ds1302_write(0x82,0x56);

ds1302_write(0x84,0x23);

ds1302_write(0x86,0x21);

ds1302_write(0x88,0x12);

ds1302_write(0x8a,0x02);

ds1302_write(0x8c,0x10);

ds1302_write(0x8e,0x80);//写保护

}

 

/***************************lcd1602***************************/

voidlcd_write_com(ucharcom)//命令字写入lcd单元中

{

lcd1602_rw=0;

delay1();

lcd1602_rs=0;//RW=1,RS=0,写LCD命令字

delay1();

P0=com;//将com中的命令字写入LCD数据口

delay1();

lcd1602_e=1;//E端时序

delay1();

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

当前位置:首页 > 求职职场 > 简历

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

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