电子钟温度计课程设计_第1页
电子钟温度计课程设计_第2页
电子钟温度计课程设计_第3页
电子钟温度计课程设计_第4页
电子钟温度计课程设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子钟温度计课程设计一电子 钟温度计的设计*大学物信学院单片机课程设计课 题:电子钟温度计的设计指导老师:* 姓名:* 学号:*摘要:该设计实现了 24小时制的时间显示及设定、年、月、日、星期 的显示及设定、温度的检测及显示等功能。设计共分为四大部分,分 别是控制部分、时钟部分、温度检测部分和人机交互部分。本设计采用的是STC89C51RC单片机,内部带有8KB的ROM,能 够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧 写程序更加方便。计时采用DS1302时钟芯片实现,该芯片通过简单的串行通信与 单片机进行通信,时钟/日历电路能够实时提供年、月、星期、日、 时分、秒信息,采用

2、双电源供电,当外部电源掉电时能够利用后备电 池准确计时。温度检测采用DALLAS公司的数字化温度传感器DS18B20,该芯 片采用的是独特的“一线总线”的方式与单片机进行通信,一线总线 独特而且经济的特点,是用户可以轻松的组建传感器网络,为测量系 统的构建引入全新的概念。实时温度采用一线总线的方式传输大大的 提高了信号的抗干扰性,分辨率可通过软件设置,其小巧的体积为各 种环境下测量温度提供了方便。显示器件采用通用型1602液晶,可显示32个字符,如果使用数 码管来做显示器件需消耗大量的系统资源,因此采用低功耗的1602 液晶,该液晶显示方便,功能强大,完全能满足数字万年历的显示要 求。关键词:

3、单片机 AT89C51 温度传感器 DS18B20 时钟芯 DS1302 液晶 1602目录目录第一章设计任务 第二章电路设计 TOC o 1-5 h z 2.1设计方案比较42.1.1时钟电路的设计42.1.2温度电路的设计52.2根据设计绘制整体方框图及硬件图62.2.1整体方框图62.2.2总体硬件图6第三章程序流程图3.1主程序流程图3.2键盘服务程序流程图3.3温度采集与显示程序流程图第四章模块设计及说明 4.1液晶显示模块 TOC o 1-5 h z DS1602 简介8DS1602相应功能特性介绍8DS1602液晶与单片机接口电路94.2计数模块DS1302 特性介绍9DS130

4、2 引脚介绍9DS1302与单片机接口电路104.3实时环境温度采集模块DS18B2O 简介10单总线介绍10DS18B20 管脚介绍10DS18B20 时序介绍10DS18B20与单片机的接口电路11114.4设置模块11 第五章调试与验证11第一章设计任务能够实现时间的正确显示,并且可以对表进行调整。能够实现年月日及星期的显示,并且可以对日期进行调整。能够实现对温度的及时检测,并且可以正确显示。(4)用protues实现对设计的仿真。第二章电路设计2.1电路方案的比较2.1.1时钟电路的设计方案一:时钟电路可由555定时器组成,通过555定时器构成 1Hz脉冲发生电路(如图2-1),然后将

5、脉冲机输入单片机,经单片 机计算生成时钟。脉冲信号从555的3号引脚输出,通过电阻和电容 可以得到不同频率的脉冲。其计算方法为tpl=R2C2ln2 ; tph=(R1+R2)C2ln2。图2-1 555秒脉冲发生电路方案二:用单片机控制专用时钟芯片DS1302(如图2-2),通过 对时钟芯片的初始化设置、写数据、读数据等操作,实现对时钟信息 的获取。TAL1KiOJAJMFO 1JAD1FU2.AD2FgTAL1KiOJAJMFO 1JAD1FU2.AD2Fg顿FC5JAD5FPJWADORGIP2 Di*AaF2.-1CMP2.2fMOPGEHALEP2EAP2P2 EIM.14P2.7f

6、M5P10P3 giP-1.2F32JIHTOP1 4P3.+TDP1 3P3.-5mP1DP-17WJ/PD-ycciVCC2X1RST SCLH: IfO?:2图2-3 DS1302与单片机连接比较:两个方案虽然都能实现时钟的功能,但是方案一由于电阻电 容 及其自身的精度影响,其生成的秒脉冲精度相对差一些,且将 秒脉冲信号换算成时钟的编程也相对复杂,而方案二能够较好地弥补 方案一的不足。所以本设计中的时钟电路采用方案二的设计。2.1.2温度检测电路的设计方案一:利用热敏电阻对温度特殊的温度效应,可以通过一个比 较简单的电路将温度信号转换成相应的电压信号,为了使电压信号更 便于精确测量,可以

7、利用运放将电压信号放大,再经模数转换将电压 信号送入单片机,最后通过单片机的计算得出温度值,送入数码管显 示。方案二:利用单片机对温度传感器DS18B20的控制,获取温度 传感器所采集的温度信号(如图2-3)。比较:方案一原理容易理解,但实际操作很有难度。不仅自己设计电路精度不能保证,而且外围电路复杂,成本也较高。而由图2-3 可以直观看出方案二简单方便,且精度较高,所以本设计中的温度检 测电路采用方案二。2.2根据设计绘制整体方框图及硬件图显示模块(1602液晶)2.2.1整体方框图实时温度 采集模块DS18B20设置模块(独立按 键)实时温度 采集模块DS18B20设置模块(独立按 键)2

8、.2.2总体硬件图LC131 Uffl-iCL- 1JCTAL1rciiVAijn1JCTAL1rciiVAijnPDlVaDIFQI.,ADZ:TXL2rcimijLrgwuAS!SElWaD?rzxr/ise. ir口 aw归pwhP2A-I1TLEMM.MIP3JVA1+rz.ic.MSP t JJF3BIC-: 口Al.lRaiTxDFl JP3ZIHD, i旦FSKHTTAi.lKLiTTUFMERHFFi J5,gn.n.fl.1pariWT第三章程序流程图3.1主程序流程图3.2键盘服务程序流程图III3.3温度采集与显示程序流程图17犯中断DSI脸。是调川所厅-旋DS18R2O

9、17犯中断DSI脸。是调川所厅-旋DS18R2O呼列号切始化nsLWHE四川中断州声发虑融过ROM指令胴J也妹携:UMDS1BBM第四章 模块设计及说明4.1液晶显示模块DS1602 简介1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号 等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵 字符位都可以显示一个字符。每位之间有一个点距的间隔,每行之间也有也有 间隔,起到了字符间距和行间距的作用。1602的驱动电路带有11条指令,可以 很方便的控制液晶的现实效果如:清屏、左移右移、光标显示。而且1602显示 的字符在下一条指令为到来之前不会改变,也就是能

10、够维持显示的字符,1602 液晶占用的系统资源也少。在编程时必须注意1602的初始化和三个控制口的编写,确保从DS1302和 18B20中读出的数据正确输入。DS1602相应功能特性介绍+5V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功 能有80字节显示数据存储器DDRAM内建有160个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAMDS1602液晶与单片机接口电路LCD1Lmoibl=:TEX.T4.2计数模块DS1302特性介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,

11、附加31字节静态 挪,采用SPI三线接口与CPU进行通信,并可采用突发方式 一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、 星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作 电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源 充电方式,提供了对后备电源进行涓细电流充电的能力。DS1302引脚介绍Vccz C1SvK1XI C2 3 7SCLK3 6QCiNDE4 2 5各引脚的功能为:1、Vcc2: 5V 电源。当 Vcc2Vcc1+02V 时,由 Vcc2 向 DS1302 供电,当 Vcc24.3.1 DS18B2O 简

12、介DS18B20是美国DALLAS公司生产的数字温度传感器,采用单总线的接 口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场 温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系 统的构建引入全新概念。测量温度范围宽,测量精度高,在使用中不需要任何外围元件,支持多点组网功能多个DS18B20可以并联在惟一的单线上,实现多点测温,供电方式灵活 DS18B20可以通过内部寄生电路从数据 线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外 部电源,从而使系统结构更趋简单,可靠性更高。因此非

13、常适合本系统使 用。4.3.2单总线介绍单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。单总线通常要求外接一个约为4.7K-10K的上拉电阻,这样,当总线闲 置时其状态为高电平。DS18B20管脚介绍GND为电源地;DQ为数字信号输入/输出端VDD为外接供电电源输入端,在寄生电源DS18B20时序介绍DS18B20的一线工作协议流程是:初始化-ROM操作指令-存储器操作指令-数据传输。其工作时序包括:初始化时序写时序读时序DS18B20与单片机的接口电路4.4设置模块采用4个独立按键,接口电路如下;第五章调试与验证本设计采用protues软件进行仿真,经过反复的调试最终仿真通过。

14、可以实现预期的功能。部分功能演示如图5-1所示i rniUJCIGL :Ttvr; 20L3-06-21 STH M:43;日3 舞I: g 龚 Mu 日曙 n* 驻iLpm职口 pa.rrxD fi-ZiTHTB pgfimP3L4Tn Fisirri FQfmn rarflirP 7.1MB5:忠常EM3FZ/设/加/设/加/减code附录一:程序 #include #includeDS18B20_3. H#define uint unsigned int#defineucharunsigned char uchar a,miao,shi,fen,ri,yue,ni an,week,fla

15、g,key1n,te mP;/flag用于读取头文件 中的温度值,和显示温 度值#define yh 0 x80 /LCD 第一行的初始位置,因 为LCD1602字符地址 首位D7恒定为1 (100000000=80) #define er 0 x80+0 x40 /LCD第二行初始位置 (因为第二行第一个字符位置地址是0 x40) /液晶屏的与C51之间 的引脚连接定义(显示 数据线接C51的P0 口)sbit rs=P2八5;sbit rw=P2八6; /如果 硬件上rw接地,就不 用写这句和后面的 rw=0 了sbit en=P2八7;sbit SCLK = P1A6; /* 实时时钟时

16、钟线引脚 */sbit IO = P3八5; /* 实时 时钟数据线引脚*/ sbit RST = P1A7; /*实 时时钟复位线引脚*/ sbit ACC0=ACCA0;sbit ACC7=ACCA7;/校时按键与C51的引 脚连接定义sbit key1=P3人2;置键sbit key2=P3八3;键sbit key3=P3人4;键uchar tab1=20; 年显示的固定字ucharcode tab2= : : ; 时间显示的固定字符 延时函数,后面经常 调用void delay(uint xms)延时函数,有参函数uint x,y;f0r(x=xms;x0;x-) for(y=110;

17、y0;y);/*液晶写入指 令函数与写入数据函 数,以后可调用 业业业业业业业业业业业业业业/*/ write_1602com(ucharcom)/*液晶写入指令函数*rs=0;/数据/指令选择置为指令rw=0; 读写选择置为写P0=com;/送 入数据delay(1);en=1;/拉高使能端,为制造有效的下降沿 做准备delay(1);en=0;en由高变低,产生下降沿,液晶执行 命令write_1602dat(uchardat)/*液晶写入数据 函数*rs=1;/数据/指令选 择置为数据rw=0; 读写选择置 为写P0=dat;/送 入数据delay(1);en=1; en置高电 平,为制

18、造下降沿做准 备delay(1);en=0; /en 由高变低,产生下降沿,液晶 执行命令lcd_init()* 液晶初 始化函数*for(a=0;a8;a+)write_1602com(0 x38);/设置液晶工作模 式,意思:16*2行显示, 5*7点阵,8位数据write_1602com(0 x0c);开显示不显示光标write_1602com(0 x06);/整屏不移动,光标 自动右移write_1602com(0 x01);/清显示write_1602com(yh+ 1);/日历显示固定符号 从第一行第1个位置之 后开始显示for(a=0;a0;a-)IO=ACC0;SCLK=0;S

19、CLK=1;ACC=ACC1;uchar read_byte() 读一个字节RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;return (ACC);void write_1302(ucharadd,uchar dat)/ 向1302芯片写函数,指定 写入地址,数据RST=0;SCLK=0;RST=1; write_byte(add); write_byte(dat);SCLK=1;RST=0;uchar read_1302(ucharadd)/从 1302读数据函 数,指定读取数据来源 地址uchar temp;RST=0;SCLK=0;

20、RST=1; write_byte(add); temp=read_byte();SCLK=1;RST=0; return(temp);ucharBCD_Decimal(uchar函数,输入BCD,返 回十进制 uchar Decimal;Decimal=bcd4;return(Decimal=Deci mal*10+(bcd&=0 x0F) ;/- void ds1302_init()(2010-01-07,12:00:00,/1302芯片初始化子函 数(2010-01-07,12:00:00,week4)RST=0;SCLK=0;write_1302(0 x8e,0 x00);/允许写,禁

21、止写保护write_1302(0 x80,0 x00); II向DS1302内写秒寄存器80H写入初始秒数据00write_1302(0 x82,0 x00);向DS1302内写分寄存器 82H 写入初始分数据00I/write_1302(0 x84,0 x12);向DS1302内写小时寄存器84H写入初始小时数据12I/write_1302(0 x8a,0 x04);向DS1302内写周寄存器 8aH 写入初始周数据4I/write_1302(0 x86,0 x07);向DS1302内写日期寄存器86H写入初始日期数据07I/write_1302(0 x88,0 x01);向DS1302内写

22、月份寄存器88H写入初 始月份数据01write_1302(0 x8c,0 x10);向DS1302内写年份 寄存器 8cH 写入初始 年份数据10write_1302(0 x8e,0 x80);/打开写保护温度显示子函数void write_temp(uchar add,uchar dat) 向LCD写温度数据,并指 定显示位置uchar gw,sw;gw=dat%10; 取得个位数字sw=dat/10; 取得十 位数字write_1602com(er+a dd);/er是头文件规定 的值 0 x80+0 x40write_1602dat(0 x30+sw);/数字+30得到该 数字的LCD

23、1602显示write_1602dat(0 x30 +gw);数字+30得到该 数字的LCD1602显示write_1602dat(0 xdf);/显示温度的小圆圈符 号,0 xdf是液晶屏字符 库的该符号地址码dd);/er是头文件规定 的值 0 x80+0 x40write_1602dat(0 x30+sw);/数字+30得到该 数字的LCD1602显示write_1602dat(0 x30 +gw);/数字+30得到该 数字的LCD1602显示write_1602dat(0 x43);/显示C符号,add);/设定显示位置add);/设定显示位置=i0 x43 是液晶屏字符库 里大写C的

24、地址码时分秒显示子函数void write_sfm(uchar add,uchar dat)/ 向LCD写时分秒,有显示 位置加、现示数据,两 个参数uchar gw,sw;gw=dat%10; 取得个位数字sw=dat/10;/ 取得十位数字write_1602com(er+a/年月日显示子函数void write_nyr(ucharadd,uchar dat)/ 向LCD写年月日,有显 示位置加数、显示数 据,两个参数uchar gw,sw;gw=dat%10;/ 取得个位数字sw=dat/10;/ 取得十 位数字write_1602com(yh+为第一个位置+addwrite_1602d

25、at(0 x30+sw);数字+30得到该 数字的LCD1602显示write_1602dat(0 x30+gw);/数字+30得到该 数字的LCD1602显示void write_week(uchar week)/写星期函数write_1602com(yh+ 0 x0c);/星期字符的显 示位置switch(week)case1:write_1602dat(M);/ /星期数为1时,显示write_1602dat(O);write_1602dat(N); break;case星期数据为2时显示write_1602dat(U);write_1602dat(E);break;case 3:wri

26、te_1602dat(W);/ /星期数据为3时显示write_1602dat(E);write_1602dat(D); break;case4:write_1602dat(T);/星期数据为4是显示write_1602dat(H);write_1602dat(U);break;case5:write_1602dat(F);2:write_1602dat(T);星期数据为5时显示2:write_1602dat(T);write_1602dat(R);write_1602dat(T);break;if(key1=0)/key1为功能键(设置键)键共有秒、分、时、星键共有秒、分、时、星case6:

27、write_1602dat(S);星期数据为6时显示write_1602dat(T);write_1602dat(A);break;case7:write_1602datCS);星期数据为7时显示delay(9); 延时,用于消抖动if(key1=0) 延时后再次确认按键按下while(!key1);key1n+;if(key1n=9)key1n=1;设置按期、日、月、年、返回, 8个功能循环write_1602dat(U);switch(key1n)write_1602dat(N); break;* 键 盘扫描有关函数 业业业业业业业业业业业业业业业业业业业 *void keyscan()c

28、ase 1: TR0=0;关闭定时器/TR1=0;write_1602com(er+0 x09);/设置按键按动一 次,秒位置显示光标write_1602com(0 x0f ;write_1602com(0 x0f ;);设置光标为闪烁temp=(miao)/10*16 +(miao)%10;/ 秒数据 写入DS1302write_1302(0 x8e,0 x0 0);write_1302(0 x80,0 x 80|temp);/miaowrite_1302(0 x8e,0 x80) ;break;case2:write_1602com(er+6);/ /按 2次fen位置显示光 标write

29、_1602com(0 x0f) ;break;case3:write_1602com(er+3);/ /按动3次,shiwrite_1602com(0 x0f)break;case4write_1602com(yh+0 x 0e);/按动 4 次,weekwrite_1602com(0 x0f);break;case5write_1602com(yh+0 x0a);按动5次,riwrite_1602com(0 x0f);break;case6write_1602com(yh+0 x 07);/按动 6 次,yuewrite_1602com(0 x0f);break;case7write_160

30、2com(yh+0 x 04);按动 7 次,nianwrite_1602com(0 x0f)break; case 8:if(key1n!=0)/key2temp=(miao)/10*16break; case 8:if(key1n!=0)/key2temp=(miao)/10*16write_1602com(0 x0c);/按动到第8次,设置 光标不闪烁TR0=1; 打开定时器temp=(miao)/10*16+( miao)%10;write_1302(0 x8e,0 x00);write_1302(0 x80,0 x00|temp);/miao数据写入DS1302 write_1302

31、(0 x8e,0 x80);break;/-Ml当 key1按下以下。再按以 下键才有效(按键次数 不等于零)if(key2=0) 上调 键delay(10);if(key2=0)while(!key2);switch(key1n)case 1:miao+;/ 设 置键按动1次,调秒if(miao=60) miao=0; 秒超过59,再加1,就归零write_sfm(0 x08,mia o);/令 LCD在正确位 置显示加设定好的 秒数+(miao)%10;/ 十进制转换成DS1302要求的DCB码write_1302(0 x8e,0 x00); /允许写,禁止写保 护write_1302(0

32、 x80,temp); 向 DS1302 内写秒寄存器80H写入调write_sfm(0 x05,fen);/令 lCd在正确位置 显示加设定好的分 数据temp=(fen)/10*16+(fen)%10;/十进制转换成DS1302要求的DCB整后的秒数据BCD码write_1302(0 x8e,0 x0 0);/允许写,禁止写保write_1302(0 x8e,0 x8 0); /打开写保护write_1602com(er+0 x09);/因为设置液晶的 模式是写入数据后,光 标自动右移,所以要指 定返回/write_1602com(0 x 0b);break;case 2:fen+;if(

33、fen=60)fen=0;write_1302(0 x82,te mp);/向 DS1302 内写分寄存器82H写入调 整后的分数据BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(er+6);/因为设置液晶的模 式是写入数据后,指针 自动加一,在这里是写 回原来的位置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);令LCD在正确的位置 显示加设定好的小 时数据temp=(shi)/10*16+(s hi)%10;十进制转换 成DS1302要求的DCBwrite_1302(0 x8e,0 x00

34、);/允许写,禁止写保 护write_1302(0 x84,te mp);向 DS1302 内写 小时寄存器84H写入 调整后的小时数据 BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(er+3);/因为设置液晶的模 式是写入数据后,指针 自动加一,所以需要光 标回位break;case 4:week+;if(week=8) week=1;write_1602com(yh+0 x0C);/指定加后的周 数据显示位置write_week(week);指定周数据显示内容temp=(week)/10*16+( week)%10;十进制转 换成 DS13

35、02 要求的 DCB码write_1302(0 x8e,0 x00);/允许写,禁止写保 护write_1302(0 x8a,te mp);向 DS1302 内写周寄存器8aH写入调整后的周数据BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(yh+0 x0e);/因为设置液晶的 模式是写入数据后,指 针自动加一,所以需要 光标回位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri); 令LCD在正确的位置显 示加设定好的日期 数据temp=(ri)/10*16+(ri)%10;/十进制转换成DS1302要求

36、的DCB码write_1302(0 x86,te mp);向 DS1302 内写 日期寄存器 86H 写入 调整后的日期数据BCD码write_1302(0 x8e,0 x8 0);/打开写保护write_1602com(yh+ 10);/因为设置液晶的 模式是写入数据后,指 针自动加一,所以需要 光标回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue); 令LCD在正确的位置 显示加设定好的月 份数据write_1302(0 x8e,0 x0temp=(yue)/10*16+(0);/允许写,禁止写保 yue)%10;/十制转换护成DS13

37、02要求的DCB份数据write_1302(0 x8e,0 x00);允许写,禁止写保 护write_1302(0 x88,te mp);向 DS1302 内写 月份寄存器88H写入 调整后的月份数据 BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(yh+7);/因为设置液晶的模 式是写入数据后,指针 自动加一,所以需要光 标回位break;case 7:nian+;if(nian=100)nian=0;write_nyr(3,nian); 令LCD在正确的位置 显示加设定好的年temp=(nian)/10*16+(nian)%10;/十进制转换

38、成DS1302要求的DCBwrite_1302(0 x8e,0 x0 0);/允许写,禁止写保write_1302(0 x8c,te mp);向 DS1302 内写 年份寄存器 8cH 写入 调整后的年份数据BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(yh+4);/因为设置液晶的模 式是写入数据后,指针 自动加一,所以需要光 标回位break;-减键write_1302(0 x8e,0 x0key3,各句功能参照0); /允许写,禁止写保加键注释x09);/因为设置液晶的x09);/因为设置液晶的=iif(key3=0)delay(10);调

39、延时,消抖动if(key3=0)while(!key3);switch(keyln)case 1:miao-;if(miao=-1)miao=59;/秒数据减到-1时自动变成59write_1302(0 x80,temp); 向 DS1302 内写秒寄存器80H写入调 整后的秒数据BCD码write_1302(0 x8e,0 x80); /打开写保护write_1602com(er+0模式是写入数据后,指 针自动加一,在这里是 写回原来的位置write_sfm(0 x08,miao);/在 LCD的正确位 置显示改变后新的秒 数temp=(miao)/10*16+( miao)%10;/十进制

40、转 换成DS1302要求的 DCB码/write_1602com(0 x 0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%10;/十进制转换成DS1302要求的DCBtemp=(shi)/10*16+(shi)%10;十进制转换成DS1302要求的DCBwrite_1302(0 x8e,0 x00);/write_1302(0 x8e,0 x00);/允许写,禁止写保write_1302(0 x8e,0 x00);/允许写,禁止写保 护write_1302(0 x82,temp);向

41、DS1302 内写分寄存器82H写入调 整后的分数据BCD码write_1302(0 x84,temp);向 DS1302 内写小时寄存器84H写入write_1302(0 x8e,0 x80);/打开写保护调整后的小时数据BCD码write_1602com(er+6);/因为设置液晶的模 式是写入数据后,指针 自动加一,在这里是写 回原来的位置break;case 3:shi-;if(shi=-1)shi=23;write_sfm(2,shi);write_1302(0 x8e,0 x80);/打开写保护write_1602com(er+3);/因为设置液晶的模 式是写入数据后,指针 自动加

42、一,所以需要光 标回位break;case 4:week-;if(week=0) week=7;write_1602com(yh+0 x 0C);/指定加后的周 数据显示位置write_week(week); 指定周数据显示内容temp=(week)/10*16+( week)%10;十进制转 换成DS1302要求的DCB码针自动加一,所以需要 光标回位break;case 5:ri-;if(ri=0)ri=31;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10;/十进制转换成DS1302要求的DCB码write_1302(0 x8e,0 x0 0);/允许写,禁

43、止写保write_1302(0 x8e,0 x0 0);/允许写,禁止写保write_1302(0 x8a,temp);向 DS1302 内写周寄存器8aH写入调write_1302(0 x86,temp);向 DS1302 内写日期寄存器86H写入 调整后的日期数据BCD码整后的周数据BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(yh+0 x0e);/因为设置液晶的 模式是写入数据后,指write_1302(0 x8e,0 x80);/打开写保护write_1602com(yh+ 10);/因为设置液晶的模式是写入数据后,指针自动加一,所以需

44、要 光标回位break;case 6:yue-;if(yue=0) yue=12;write_nyr(6,yue);temp=(yue)/10*16+( yue)%10;/+进制转换 成DS1302要求的DCBwrite_1302(0 x8e,0 x00);/允许写,禁止写保 护write_1302(0 x88,te mp);向 DS1302 内写月份寄存器88H写入 调整后的月份数据BCD码write_1302(0 x8e,0 x80);/打开写保护write_1602com(yh+7);/因为设置液晶的模 式是写入数据后,指针 自动加一,所以需要光 标回位break;case 7:nian

45、-;if(nian=-1)nian=99;write_nyr(3,nian);temp=(nian)/10*16+(ni an)%10;/十进制转换 成DS1302要求的DCBwrite_1302(0 x8e,0 x00);/允许写,禁止写保 护write_1302(0 x8c,te mp);向 DS1302 内写年份寄存器8cH写入 调整后的年份数据BCD码write_1302(0 x8e,0 x80);/打开写保护显示IIIIIIwrite_1602com(yh+4);/因为设置液晶的模 式是写入数据后,指针 自动加一,所以需要光 标回位break;void timer0() interr

46、upt1 /取得并显示日历 和时间/Init_DS18B20(); 温度传感器DS18b2初 始化子函数,在头文件 中flag=ReadTemperatur e();/将 18b2头文件运 行返回的函数结果送 到变量FLAG中,用于读取秒时分周日月 年七个数据(DS1302 的读寄存器与写寄存 器不一样): TOC o 1-5 h z miao=BCD_Decimal(read_1 302(0 x81); fen=BCD_Decimal(read_1 302(0 x83); shi=BCD_Decimal(read_1 302(0 x85);ri=BCD_Decimal(read_1 302(

47、0 x87);yue=BCD_Decimal(read_1 302(0 x89);nian=BCD_Decimal (read_1302(0 x8d);week=BCD_Decima l(read_1302(0 x8b);显示温度、秒、时、分数据:符后开始显示write_week(week);分数据:符后开始显示write_week(week);显示温度,从第二行第12个字符后开始显示 write_sfm(8,miao);/秒,从第二行第8个字 后开始显示(调用时分 秒显示子函数)write_sfm(5,fen);/分,从第二行第5个字符后开始显示write_sfm(2,shi);/小时,从第

48、二行第2个 字符后开始显示显示日、月、年数 据:write_nyr(9,ri);/ 日期,从第二行第9个字 符后开始显示write_nyr(6,yue);/月份,从第二行第6个 字符后开始显示write_nyr(3,nian);/年,从第二行第3个字/-void init() /定时器、计数器设置函数TMOD=0 x11; /指定 定时/计数器的工作方 式为3TH0=0; /定时器 T0的高四位=0TL0=0; /定时器 T0的低四位=0EA=1; 系统允许 有开放的中断ET0=1; / 允许 T0 中 断TR0=1; 开启中断, 启动定时器业业业业业业业业业业业业业业业业业业 * 主 函 数业业业业业业业业业业业业业业业业业业业 不不不不不不不不不不不不不不不不不不不业业业业业业业void main()调lcd_ini

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论