智能电子钟的课程设计_第1页
智能电子钟的课程设计_第2页
智能电子钟的课程设计_第3页
智能电子钟的课程设计_第4页
智能电子钟的课程设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

摘要AT89S52单片机完全兼容51单片机,列单片机的应用日趋广泛。本文设计了一种基ATC89S52单片机,使用Dallas的一线制数字温度计DS18B20作为温度传感器,实时时钟芯片DS1302提供当前日期和时间数据,并将实时的日期和温度数据字符型液晶显示器LCD1602上显示,本次设计的智能电子钟钟采用数字电路对日期和温度进行控制设置,采用LCD液晶显示,以24小时的计时方式,根据LCD显示原理进行显示,定时器计数。在本次设计中,电路具有显示日期、时间、温度的根本功能,还可以实现对它们的调整。本次设计要到达的目的是:具有时间显示和手动校对功能,24小时制;具有年、月、日显示和手动校对功能;具有显示当前星期的功能;具有闹铃功能;具有环境温度采集功能;掉电后无需重新设置时间和日期;系统不但接口设计简单、便于控制,而且具有很好的人机界面,可以对当前的时间进行调整。关键字:单片机智能电子钟数字电路1设计的任务1.1课题开发背景随着电子科技的飞速开展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。基于当前市场上的玩具市场需求量大,其中智能电子钟就是一个很好的应用方面,利用单片机能完成根本显示时间和日期的功能,同时还能显示温度的。1.2课题研究的目的和意义利用AT89S52单片机自带资源,设计一款能实现显示时间和其它的智能功能的电子钟。1.3课题的主要研究工作本课题设计的主要工作有以下几个方面:〔1〕设计出能实时的检测温度。〔2〕液晶屏可以显示当前的时间、日期、星期。〔3〕通过按键可以通过对上述内容进行调整。〔4〕具有定时功能和蜂鸣器报时功能。〔5〕根据定时功能来控制收音机和灯具的开关。2总体方案设计2.1设计内容完成基于LCD液晶显示的多功能数字钟的设计。要求该电路具有显示日期、时间、温度的根本功能,还可以实现对它们的调整。本次设计要到达的目的是:具有时间显示和手动校对功能,24小时制;具有年、月、日显示和手动校对功能;具有显示当前星期的功能;具有闹铃功能;具有环境温度采集功能;掉电后无需重新设置时间和日期;采用单片机AT89S52芯片以及相关的芯片来实现多功能的数字钟。该设计选用一线制温度计DS18B20作为温度传感器,实时时钟芯片DS1302提供当前日期和时间数据,并将实时的日期和温度数据在字符型液晶显示器LCD1602上显示出来。本文设计了一种基AT89S52单片机,使用Dallas的一线制数字温度计DS18B20作为温度传感器,实时时钟芯片DS1302提供当前日期和时间数据,并将实时的日期和温度数据字符型液晶显示器LCD1602上显示,本次设计的多功能数字钟采用数字电路对日期和温度进行控制设置,我们采用LCD液晶显示,以24小时的计时方式,根据LCD显示原理进行显示,定时器计数。在本次设计中,电路具有显示日期、时间、温度的根本功能,还可以实现对它们的调整。本次设计要到达的目的是:具有时间显示和手动校对功能,24小时制;具有年、月、日显示和手动校对功能;具有显示当前星期的功能;具有闹铃功能;具有环境温度采集功能;掉电后无需重新设置时间和日期。系统不但接口设计简单、便于控制,而且具有很好的人机界面,可以通过几个按键对当前的时间进行调整,对闹钟进行随意设置,以及温度超过上下限会自动进行报警〔LED亮〕等功能。其原理框图如下列图2.1所示:串行通信接口电路串行通信接口电路LCD1602液晶显示键盘控制电路时钟电路供电电路蜂鸣报时AT89S52单片机温度采集电压转换电路图2.1数字钟原理框图在现代SOC技术的引领下,人们对低故障、高实时、高可靠、高稳定的性能更加青睐,其抗干扰性强,加密性强,超低功耗,可以远程升级,内部有专用复位电路,价格也较廉价,结合本设计的要求及综合以上比拟的情况,我们选择用AT89S52单片机芯片来实现本次设计。3单元模块设计3.1各单元模块功能介绍及电路设计温度采集电路DS18B20是美国Dallas半导体公司生产的一线制数字温度传感器。测量范围为-50℃~+125℃,精度可达0.1℃,不需A/D转换电路,直接将温度值转换成数字量。温度数据的传输,只需要一根数据线,直接将数据线与单片机的P3.6口相连接。其图如下3.1所示:图3.1温度采集DS1302时钟电路DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。DS1302提供2个电源引脚:一个(VCC2)接主电源;另一个(VCC1)接备用电源。其图如下3.2所示:图3.2DS1302时钟电路串行通信接口电路MAX232是电压转换芯片,将TTL电平转换成可以和电脑串口匹配的电压。DB9通过下载线缆与电脑连接,可以将程序下载到单片机上。其图如下3.3所示:图3.3RS232串行通信电源电路为了便于使用,本次采用了把交流的220V经变压器再经LM7805B变为单片机所使用的5V电源,如图3.4。图3.4电源电路按键电路本次设计中用到了4*4的矩阵键盘列阵,通过赋低电平选中其中一列,以便来控制时,分,秒,年,月,日,以及闹钟的调整。其电路如图3.5:图3.5按键控制电路液晶显示显示电路本设计中会将时分秒,年月日周以及闹钟的设置,温度全部都会显示到液晶LCD1602上面,其具有16×2能够显示所有英文大小写字母,0到9十个数字以及一些常用的符号。该液晶在4.5V到5.5V电压范围内都能正确工作,平均工作电流为2mA。液晶HS162共16个管脚。但是由于原理图中电路很简单并且只用到接插件所以此处没有给出原理图。3.2特殊器件介绍3.2.1AT89S52单片机芯片AT89S52功能特性描述AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其图如下3.6所示:图3.6AT89S52引脚图DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月、年,一个月小于31天时可自动进行调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电〔主电源和备用电源〕,可设置备用电源充电方式,提供了对后背电源进行。DS1302是以下的特性:双电源管脚用于主电源和备份电源供给,Vcc1为课编程涓流充电电源,附加七个字节存储器。其外部引脚分配如下图:图3.7DS1302的外部时钟引脚分配温度传感器DS18B20采用独特的一线接口,可用数据总线供电,电压范围为3.0V至5.5V无需备用电源。测量温度范围为-55℃至+125℃。华氏相当于是-67°F到257华氏度-10°C至+85°C范围内精度为±0.5℃。温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。DS18B20内部结构主要由四局部组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置存放器。该装置信号线高的时候,内部电容器储存能量通由1线通信线路给片子供电,而且在低电平期间为片子供电直至下一个高电平的到来重新充电。图3.8DS18B20的管脚液晶显示LCD1602HS1602是目前最常用的字符液晶之一。具有16×2能够显示所有英文大小写字母,0到9十个数字以及一些常用的符号。该液晶在4.5V到5.5V电压范围内都能正确工作,平均工作电流为2mA。液晶HS162共16个管脚.RS为存放器选择信号,RW为读写选择信号,通过这两种信号的不同组合可对液晶进行读写命令和读写数据的操作。1602液晶模块内部的字符发生存储器〔CGROM)已经存储了160个HS162是目前最常用的字符液晶之一。具有16ⅹ2能够显示所有英文大小写字母,0不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比方大写的英文字母“A”的代码是01000001B〔41H〕,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。在操作液晶时,先要对液晶进行初始化,即进行最初是的命令设置。要设置液晶的工作方式设置,显示状态设置,输入方式设置等。最后再向液晶写入数据,即写入想要显示字符的ASCII码。4软件设计4.1软件选择本次设计选择的软件主要是KeiluVision3。Keil公司成立于1986年,主要开发、制造和销售嵌入式8051、251、ARM、XC16x/C16x/ST10等微控制器软件开发工具,提供ANSIC编译器、宏汇编程序、实时管理、调试和模拟器、综合评估板等。Keil公司的uVision把编辑、编译、链接和仿真等模式打包成集成开发环境,当然其集成的C51编译器肯定跟Franklin公司的相关模块肯定有交叉性,uVision还包含工程管理和调试器等非常有用的功能。4.2软件设计流程本次设计的系统软件设计主要包括主程序设计和温度采集子模块程序设计、日历日期数据子模块程序、按键控制子模块程序和LCD液晶显示子模块程序设计等。主程序主要完成器件的初始化,并判断有无按键按下,并根据判断的结果调用相应的子模块程序;而温度采集子模块程序和日历日期数据子模块程序完成相应的数据采集、处理和保存,按键处理子模块程序完成日期和闹钟的设置,而液晶显示子模块只要把上述子模块储存的数据送去显示即可。系统总的流程图如下列图所示:开始开始日历日期数据处理温度数据处理液晶显示按键扫描按键按下按键控制初始化NY时间日期的修改图4.1主程序流程温度采集流程DS18B20在进行温度采集时,必须首先进行初始化,然后发ROM操作指令,再发存储器操作指令,最后才能传输数据。每次对器件进行读写操作时,必须严格按照DS18B20的时序要求。因为温度数据在DS18B20中是以2的补码形式存放的,且低4位为小数局部,4位到10位为整数局部,其余为符号位,因此在读出2个字节的温度数据后,首先求一次补码得到原码,再将数据别离为整数温度值和小数温度值,整数局部的值可通过数据交换指令得到,而小数温度值局部可通过查表得到。因为在液晶显示器上显示的是字符的ASCII码,因而还要转换为BCD,在加30H转换为ASCⅡ码。其流程图如下所示:读温度数据读温度数据初始化求原码温度数据的整数和小数处理转为ASCII码送去显示图4.3温度采集流程日期数据处理流程对时钟芯片的操作主要包括一是将芯片中的日期等数据读出来,二是在进行日期等设置时将设置的数据写入芯片,这也是按键处理时的主要内容。无论是读数据还是写数据满足DS1302对时序的要求。而对芯片各个数据局部的访问是通过地址进行的,且读和写的地址不一样。读出的数据同样要转为ASCII码,然后储存起来,等待送去显示,流程图如下列图所示:初始化初始化读日期数据数据处理将设置的数据写入芯片转为ASCII送去显示图4.2流程图如下列图所5结论本设计在功能上根本上完成了本次智能化电子系统设计的要求,但是也尚存在一些问题。由于时间仓促和自身水平有限,对于电路的可靠性,稳定性等参数还未做过详细的测试。还可以通过修改程序,完成字符或数字的滚动显示。这些事我们组尚未完成的附加功能。6总结与体会6.1设计小结在本次设计中,我们最终完本钱次智能化电子系统设计系的根本要求及功能,并在此根底了对系统功能作了扩展,增加了闹钟设置以及温度测试等局部。在设计开始前我们对各个模块进行了详细的分析和设计准备工作,设计过程中,积极参与完成各个技术实现的难点,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。6.2设计收获及改良通过本次设计,我们对单片机有了更深刻的认识,也从实践的例子中去感受到了单片机设计给我们设计带来的改变与进步。我们不仅掌握KeiluVision3软件的使用,与此同时,我们还对电子设计的思路有了更多的认识。这次对多功能数字钟的设计与制作,让我了解设计电路的程序,也了解了关于智能电子钟的原理与设计理念。在此次的智能电子钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。总之是受益匪浅。这为自己今后进一步深化学习,积累了一定珍贵经验。6.3致谢此次智能电子钟设计中,我要特别感谢我的指导老师的热情关心和悉心指导。让我从中更加的认识了单片机的功能的实现,同时也要感谢班内的一些同学的帮助,在设计中帮我解决一些设计方面的困难。7参考文献[1]万胜前.基于KeilC51软件的电子钟设计与制作[J].鄂州大学学报,2007年第2期[2]蒋梅.单片机万年历设计[J],职业大学报.2000年第2期[3]彭小军.用单片机实现电子钟[J].新余高专学报,2004年4月第9卷第2期[4]付家才.单片机控制工程实践技术[M].北京:化学工业出版社,2004.3[5]刘军等.单片机原理与接口技术[M].上海:华东理工大学出版社,2006.2[6]何书森等.用电子线路设计速成[M].胡州:互见科学技术出版社,2005.10[7]李晓静等.液晶显示控制器与单片机的接口及编程[J].电子技术,2004年第6期[8]张迎新.单片机原理、应用及接口技术〔第二版〕[M].北京:国防工业出版社,2005.9附录:设计原理图:PCB图:实现程序://介绍整个程序所包含的头文件#include<reg52.h>#include<intrins.h>#include<ds1302.h>#include<lcd1602.h>#include<1820.h>//定义#defineucharunsignedchar#defineuintunsignedintUcharu,u1,u2,u3,u4,u5,u6,u7,u8,alarmOn;uintfen,miao,shi,nian,yue,ri,anshu,zh;ucharlinshi,a,a1,a2,a3,a4,a5,a6;uinttab[3];sbitrd=P3^5;sbitP30=P3^0;sbitP31=P3^1;sbitP32=P3^2;sbitP33=P3^3;sbitbeep=P3^3;sbitds1302_rst=P0^2;sbitds1302_sclk=P0^0;sbitds1302_io=P0^1;sbitACC7=ACC^7;sbitB1=B^0;sbitlcd1602_en=P0^5;sbitlcd1602_rw=P0^6;sbitlcd1602_rs=P0^7;#definelcd1602_dataP2ucharlow,high; //存储温度的高位值和低位值sbitDQ=P3^6;//--定义通信端口sbitD1=P0^7;uchargw,sw,w4,tpl,tph;uintbai,b;//主函数局部voidfenjia(ucharrddr,ucharwddr,ucharyddr,ucharfenjiajian)//键盘扫描{u=ds1302_read(rddr);fen=((u&0x70)>>4)*10+(u&0x0f);//进制转换if(fenjiajian==1){fen++;if(fen==60){fen=0;}}else{fen--;if((fen+1)==0){fen=59;}}ds1302_write(wddr,((fen/10)<<4)|(fen%10));write_sfm(yddr,fen);lcd1602_writecom(0x80+0x40+yddr);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+0x40+yddr);}voidshijia(ucharrddr,ucharwddr,ucharyddr,ucharshijiajian)//键盘扫描{a4=ds1302_read(rddr);shi=((a4&0x70)>>4)*10+(a4&0x0f);//进制转换if(shijiajian==1){shi++;if(shi==24){shi=0;}}else{shi--;if((shi+1)==0){shi=23;}}ds1302_write(wddr,(shi/10)<<4|(shi%10));write_sfm(yddr,shi);lcd1602_writecom(0x80+0x40+yddr)lcd1602_writecom(0x0f);lcd1602_writecom(0x80+0x40+yddr);}voidsfmset(){ucharlinshi;do{if(P30==0){delay(5);if(P30==0){while(!(P30));linshi=1;anshu++;if(anshu==1){a=ds1302read(0x81);miao=((a&0x70)>>4)*10+(a&0x0f);/write_sfm(6,miao) lcd1602_writecom(0x80+0x40+6); lcd1602_writecom(0x0f); lcd1602_writecom(0x80+0x40+6);}if(anshu==2){u1=ds1302_read(0x83) fen=((u1&0x70)>>4)*10+(u1&0x0f);write_sfm(3,fen); lcd1602_writecom(0x80+0x40+3);lcd1602_writecom(0x0f); lcd1602_writecom(0x80+0x40+3);}if(anshu==3){u2=ds1302_read(0x85);shi=((u2&0x70)>>4)*10+(u2&0x0f);write_sfm(0,shi); lcd1602_writecom(0x80+0x40+0);lcd1602_writecom(0x0f); lcd1602_writecom(0x80+0x40+0);}if(anshu==4){lcd1602_writecom(0x0c);lcd1602_writecom(0x80+0x40+14); lcd1602_writedata('s');lcd1602_writedata('t'); lcd1602_writecom(0x0f);}if(anshu==5){u7=ds1302_read(0x83) tab[0]=((u7&0x70)>>4)*10+(u7&0x0f); write_sfm(3,tab[0]);//table[0]为分存储器 lcd1602_writecom(0x80+0x40+3); lcd1602_writecom(0x0f); lcd1602_writecom(0x80+0x40+3);}if(anshu==6){ u8=ds1302_read(0x85); tab[1]=((u8&0x70)>>4)*10+(u8&0x0f); write_sfm(0,tab[1]);//table[1]为时存储器 lcd1602_writecom(0x80+0x40+0); lcd1602_writecom(0x0f); lcd1602_writecom(0x80+0x40+0);}if(anshu==7){lcd1602_writecom(0x0c);lcd1602_writecom(0x80+0x40+14);lcd1602_writedata('O');//显示"On",提示闹钟已开启lcd1602_writedata('n');linshi=0;}if(anshu==8){linshi=0;anshu=0;beep=1;lcd1602_writecom(0x80+0x40+14);//第二次按下去除"On"标记lcd1602_writedata('');lcd1602_writedata('');}if(anshu==9){linshi=0;anshu=0; ds1302_write(0x80,0x00);lcd1602_writecom(0x38);lcd1602_writecom(0x0c);//不出现光标}}}if(anshu==2){if(P32==0){delay(5);if(P32==0){while(!P32);fenjia(0x83,0x82,3,1);}}if(P33==0){delay(5);if(P33==0){while(!P33);fenjia(0x83,0x82,3,0);}}}if(anshu==3){if(P32==0){while(!P32);shijia(0x85,0x84,0,1);}if(P33==0){delay(5);if(P33==0){while(!P33);shijia(0x85,0x84,0,0);}}}if(anshu==5){if(P32==0){delay(5);if(P32==0){while(!P32);tab[0]++;write_sfm(3,tab[0]);if(tab[0]==60){tab[0]=0;}}}if(P33==0){delay(5);if(P33==0){while(!P33);tab[0]--;write_sfm(3,tab[0]);if(tab[0]==0){tab[0]=59;}}}}if(anshu==6){if(P32==0){while(!P32);tab[1]++;write_sfm(0,tab[1]);if(tab[1]==24){tab[1]=0;}}if(P33==0){while(!P32);tab[1]--;write_sfm(0,tab[1]);if(tab[1]==0){tab[1]=23;}}}if(anshu==7)//设置好闹钟返回时钟界面并开启闹钟{lcd1602_writecom(0x0c);//闹钟已经设置好lcd1602_writecom(0x80+0x40+16);lcd1602_writedata('O');//显示"On",提示闹钟已开启lcd1602_writedata('n');u7=ds1302_read(0x83);fen=((u7&0x70)>>4)*10+(u7&0x0f);u8=ds1302_read(0x85);shi=((u8&0x70)>>4)*10+(u8&0x0f);if(tab[0]==fen&&tab[1]==shi){alarmOn=1;//闹钟时间到了}if(alarmOn==1){beep=0;delay(10);beep=1;delay(10);beep=0;delay(10);beep=1;}}}while(linshi);}voidzhjia(ucharrddr,ucharwddr,ucharyddr,ucharzhjiajian){u6=ds1302_read(rddr);zh=u6&0x07;//进制转换if(zhjiajian==1){zh++;if(zh==8){zh=1;}}else{zh--;if(zh==0){zh=7;}}ds1302_write(wddr,(zh/10)<<4|(zh%10));write_nyr(yddr,zh);lcd1602_writecom(0x80+yddr);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+yddr);}Voidrijia(ucharrddr,ucharwddr,ucharyddr,ucharrijiajian){u3=ds1302_read(rddr);ri=((u3&0x70)>>4)*10+(u3&0x0f);//进制转换if(rijiajian==1){ri++;if(ri==31){ri=1;}}else{ri--;if((ri+1)==0){ri=30;}}ds1302_write(wddr,(ri/10)<<4|(ri%10));write_nyr(yddr,ri);lcd1602_writecom(0x80+yddr);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+yddr);}voidyuejia(ucharrddr,ucharwddr,ucharyddr,ucharyuejiajian)//键盘扫描{u4=ds1302_read(rddr);yue=((u4&0x70)>>4)*10+(u4&0x0f);//进制转换if(yuejiajian==1){yue++;if(yue==13){yue=0;}}else{yue--;if((yue+1)==0){yue=12;}}ds1302_write(wddr,(yue/10)<<4|(yue%10));write_nyr(yddr,yue);lcd1602_writecom(0x80+yddr);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+yddr);}voidnianjia(ucharrddr,ucharwddr,ucharyddr,ucharnianjiajian)//键盘扫描{u5=ds1302_read(rddr);nian=((u5&0x70)>>4)*10+(u5&0x0f);//进制转换if(nianjiajian==1){nian++;}else{nian--;}ds1302_write(wddr,(nian/10)<<4|(nian%10));write_nyr(yddr,nian);lcd1602_writecom(0x80+yddr);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+yddr);}voidnyrset(){do{if(P31==0){delay(5);if(P31==0){while(!(P31));linshi=1;anshu++;if(anshu==1){ a6=ds1302_read(0x8B); zh=((a6&0x70)>>4)*10+(a6&0x0f);write_nyr(13,zh); lcd1602_writecom(0x80+13); lcd1602_writecom(0x0f); lcd1602_writecom(0x80+13);}if(anshu==2){ a1=ds1302_read(0x87); ri=((a1&0x70)>>4)*10+(a1&0x0f);write_nyr(8,ri); lcd1602_writecom(0x80+8); lcd1602_writecom(0x0f);lcd1602_writecom(0x80+8);}if(anshu==3){a2=ds1302_read(0x89);yue=((a2&0x70>>4))*10+(a2&0x0f);write_nyr(5,yue);lcd1602_writecom(0x80+5);lcd1602_writecom(0x0f);lcd1602_writecm(0x80+5);}if(anshu==4){a3=ds1302_read(0x8D);nian=((a3&0x70>>4))*10+(a3&0x0f)write_nyr(2,nian);lcd1602_writecom(0x80+2);lcd1602_writecom(0x0f);lcd1602_writecom(0x80+2);}if(anshu==5){linshi=0;anshu=0;ds1302_write(0x80,0x00); lcd1602_writecom(0x38);lcd1602_writecom(0x0c);}}} if(anshu==1){if(P32==0){while(!P32);zhjia(0x8B,0x8A,13,1);}if(P33==0){delay(5);if(P33==0){while(!P33);zhjia(0x8B,0x8A,13,0);}}}if(anshu==2){if(P32==0){while(!P32);rijia(0x87,0x86,8,1);}if(P33==0){delay(5);if(P33==0){while(!P33);rijia(0x87,0x86,8,0);}}}if(anshu==3){if(P32==0){while(!P32); yuejia(0x89,0x88,5,1);}if(P33==0){delay(5);if(P33==0){while(!P33);yuejia(0x89,0x88,5,0);}}}if(anshu==4){if(P32==0){while(!P32);nianjia(0x8D,0x8C,2,1);}if(P33==0){delay(5);if(P33==0){while(!P33); nianjia(0x8D,0x8C,2,0);}}}}while(linshi);}voidinit(){ucharnum;Init_DS18B20();lcd1602_init();//ds1302_init();rd=0;for(num=0;num<15;num++){lcd1602_writedata(table[num]);delay(5);}lcd1602_writecom(0x80+0x40);//换行for(num=0;num<8;num++){lcd1602_writedata(table1[num]);delay(5);}}voidmain(){init();while(1){sfmset();nyrset();u=ds1302_read(0x81);miao=((u&0x70)>>4)*10+(u&0x0f);write_sfm(6,miao);u1=ds1302_read(0x83);fen=((u1&0x70)>>4)*10+(u1&0x0f);write_sfm(3,fen);u2=ds1302_read(0x85);shi=((u2&0x70)>>4)*10+(u2&0x0f);write_sfm(0,shi);u3=ds1302_read(0x87);ri=((u3&0x70)>>4)*10+(u3&0x0f);write_nyr(8,ri);u4=ds1302_read(0x89);yue=((u4&0x70)>>4)*10+(u4&0x0f);write_nyr(5,yue);u5=ds1302_read(0x8B);zh=((u5&0x70)>>4)*10+(u5&0x0f);write_nyr(13,zh);u6=ds1302_read(0x8D);nian=((u6&0x70)>>4)*10+(u6&0x0f)write_nyr(2,nian);display_DS18B20(low,high);}}//DS1302程序voidds1302_delay(ucharz){ucharx,y;for(x=110;x>0;x--)for(y=z;y>0;y--);}voidds1302_write(ucharcom,uchardata1){uchartemp,dat,a,k;temp=com;dat=data1;ds1302_rst=0;ds1302_sclk=0;ds1302_rst=1;for(a=0;a<8;a++){ds1302_io=temp&0x01;//写命令,写入最低位temp=temp>>1;_nop_();ds1302_sclk=1;_nop_();ds1302_sclk=0;}for(k=0;k<8;k++){ds1302_io=dat&0x01;//写数据,写入最低位dat=dat>>1;_nop_();ds1302_sclk=1;_nop_();ds1302_sclk=0;}}uchards1302_read(ucharcom){ucharshu,shu1;B=com;ds1302_rst=0;ds1302_sclk=0;ds1302_rst=1;for(shu=0;shu<8;shu++){ds1302_io=B1;B=_cror_(B,1);ds1302_sclk=1;ds1302_sclk=0;}ds1302_delay(5);for(shu1=8;shu1>0;shu1--){ACC=ACC>>1;ACC7=ds1302_io;ds1302_sclk=1;ds1302_sclk=0;}return(ACC);}/*voidds1302_init(){ds1302_write(0x80,0);ds1302_write(0x82,0);ds1302_write(0x84,0);ds1302_write(0x86,0);ds1302_write(0x88,0);ds1302_write(0x8A,0);ds1302_write(0x8C,0);}*///LCD1602液晶显示程序voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*1602写命令*/voidlcd1602_writecom(ucharcom){lcd1602_rs=0;lcd1602_rw=0;lcd1602_data=com;delay(5);lcd1602_en=1;delay(5);lcd1602_en=0;}/*1602写数据*/voidlcd1602_writedata(uchardate){lcd1602_rs=1;lcd1602_rw=0;lcd1602_data=date;delay(5);lcd1602_en=1;delay(5);lcd1602_en=0;}/*1602初始化*/voidlcd1602_init(){lcd1602_rs=0;lcd1602_rw=0;lcd1602_en=0

温馨提示

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

评论

0/150

提交评论