版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论第1章绪论1.1选题的背景和意义1.1.1背景电能的应用技术种类多范围广,主要包括电能光热发电技术、光伏发电技术以及电能光热利用技术。电能的光热应用领域主要包括:电能供暖、电能制冷以及电能热水供应。目前技术比较成熟的是电能供热水和电能供暖,电能供冷技术还不成熟,正处于研发阶段。电能光热利用的主要产品是电热水器,它可以为建筑供暧、供应热水,是一种经济、环保的绿色产品。电能的热利用在全球各国都十分广泛,在我国、以色列以及希腊等国家,电能热水系统主要用于供应洗浴以及生活热水;而在澳大利亚、欧洲等国家,电能热水系统还被广泛应用于建筑供暖,同时电能热水系统还常被作为辅助热源同石油、天然气、电能等常规能源系统联合运行;在美国,游泳池的加热也使用电能热水系统。随着人们生活水平的提高,热水器在人们的生活中扮演着越来越重要的角色,越来越受到人们的青睐。由于燃气热水器易受水压限制,而且安全性较差。每年使用燃气热水器造成的爆炸、中毒等事故也屡有所闻。消费者对燃气热水器怀有一定的惧怕感,所以燃气热水器渐渐淡出市场。而智能电热水器越来越受到人们的认可。1.1.2目的及意义智能电热水器水温水位检测器是采用数字化测量技术,把连续的模拟量(电信号)转换成不连续、离散的数字形式并加以显示的仪表仪器。传统的电热水器水温水位检测器功能单一、精度低,不能满足数字化时代的需求,然而采用单片机的电热水器水温水位检测器功能多样化、精度高、抗干扰能力强。本文所研究的电热水器水温水位检测器是以AT89C51单片机作为主控制元件来能实现热水器里的水温和水位并显示在数码管(或液晶屏),并在水位达不到要求时发出低水位和超水位的报警信号以提醒用户打开或关闭进水阀。更进一步的采用继电器实现自动控制进水和和停止进水,是单片机应用在工业、农业、国防、医药、卫生等各行各业中的一个典型而普通的例子,随着科学技术的进一步发展,人们生活水平的不断提高,只能电热水器越来越受人们的青睐,同时节安全、节能、易操作也是不可缺少的。在本设计中,研究智能电热水器的水温水位检测器非常有意义。据不完全统计,我市城镇居民家庭以电热水器为主,占总量的60%以上;燃气热水器市场份额仅剩不足20%;新兴的太阳能热水器虽然受到安装条件的限制,但其安全、环保的性能广受消费者青睐,发展态势迅猛,市场占有率已达到15%左右。于安全方面的考虑是城镇居民更多选择电热水器和太阳能热水器的主要原因。时下的商品房通风效果并不好,燃气产生的污染无法及时消除,而电热水器和太阳能热水器则基本没有这方面的忧虑。电热水器的优点:易安装,不受天气的影响,不受楼层和供水管道的限制,投入小。正是在这样的背景下,本设计选择基于AT89C52单片机的智能电热水器的设计研究。选用AT89C52单片机作为控制芯片,就是为了实现电热水器的智能化,持续稳定的热水供应,自动断电的安全功能,使人们洗浴时能放心享受,利于人们的身体健康,其务实性能快速满足人们对现代生活快节奏的需求。浙江大学城市学院毕业论文 系统总体设计第2章系统总体设计2.1系统设计要求设计要实现具有:1.电源开关与电源指示灯2.可以人工设定温度3.可以预约定时加热4.可以根据需要随时加热5.具有水温控制和定制时间显示功能2.2系统研究思路根据系统的设计要求,本设计终端以Atmel89S52单片机为CPU,DS18B20为温度传感器,DS1302为实时时钟计时芯片,LCD1602为显示模块,并且以按键进行温度、时间的设定,达到相应条件来驱动继电器工作。设计具体实现:1.可以用6到12V的直流电源供电,也可以用电池盒供电,电池盒上的开关可以控制该终端的运行和停止,并且用设定一枚LED作为电源指示灯。2.DS18B20实时监测温度返回显示到液晶屏上,可以用按键进行设定要达到的水温,并且改变动态可以实时显示。3.DS1302实时显示目前的小时和分钟(因液晶屏显示有限所以没显示其他内容),可以用按键进行改变想要设定进行烧水工作的日期、小时、分钟,并且改变动态可以实时显示。4.当设定的温度大于现在的温度,现在的日期、小时、分钟,分别大于等于设定值的时候,驱动继电器开始进行烧水。(继电器烧水通断用一LED灯代替)5.当加温到现在温度大于设定温度的时候,继电器翻转工作状态(LED灯熄灭)6.由一个单刀双掷开关来实现根据需要随时加热。2.3系统设计框图根据系统的设计要求和设计思路,采用单片机作为控制器件,本次设计的系统包括温度检测、时钟定时、按键调节、显示和继电器控制几个模块,系统框图如图2.1所示:图2.1系统总体设计图浙江大学城市学院毕业论文 元器件介绍及功能第3章元器件介绍及功能3.1AT89S523.1.1功能特性描述AT89C52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要功能特性:1、与MCS-51单片机产品兼容;2、8K字节在系统可编程Flash存储器;3、1000次擦写周期;4、全静态操作:0Hz-33MHz;5、三级加密程序存储器;6、32个可编程I/O口线;7、三个16位定时器/计数器;8、8个中断源;9、全双工UART串行通道;10、低功耗空闲和掉电模式;11、掉电后中断可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符。3.1.2管脚描述VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。AT89S52单片机管脚如图3.1:图3.1AT89S52管脚图3.2DS18B20数字温度传感器3.2.1功能特性描述DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的“DS1820”体积更小、更经济、更灵活。使您可以充分发挥“一线总线”的长处。DS18B20、DS18B22“一线总线”数字化温度传感器同DS18B20一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为±2°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,DS18B20使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。当DSI8B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。表2.1表是对应的一部分温度值。DSI8B20完成温度转换后,就把测得的温度值与TH做比较,若T>TH或T<TL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令做出响应。温度转换算法及分析如下:由于DS18B20转换后的代码并不是实际的温度值,所以要进行计算转换。温度高字节(MSByte)高5位是用来保存温度的正负(标志为S的bit11~bit15),高字节(MSByte)低3位和低字节来保存温度值(bit0~bit10)。其中低字节(LSByte)的低4位来保存温度的小数位(bit0~bit3)。由于本程序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。也就说,本系统的温度精确到了0.1度。2、工作协议:初始化->ROM操作命令->存储器操作命令->处理数据1)初始化单总线上的所有处理均从初始化开始2)ROM操作品令总线主机检测到DSl8B20的存在便可以发出ROM操作命令之一这些命令如指令代码ReadROM(读ROM)[33H]MatchROM(匹配ROM)[55H]SkipROM(跳过ROM][CCH]SearchROM(搜索ROM)[F0H]Alarmsearch(告警搜索)[ECH]3)存储器操作命令指令代码WriteScratchpad(写暂存存储器)[4EH]ReadScratchpad(读暂存存储器)[BEH]CopyScratchpad(复制暂存存储器)[48H]ConvertTemperature(温度变换)[44H]RecallEPROM(重新调出)[B8H]ReadPowersupply(读电源)[B4H]3.2.2管脚描述DS18B20可编程温度传感器有3个管脚,如图3.2所示。GND为接地线,DQ为数据输入输出接口,通过一个较弱的上拉电阻与单片机相连。VDD为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.0~5.5V。图3.2DS18B20管脚图3.3DS1302实时时钟芯片3.3.1功能特性描述DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。3.3.2管脚描述各引脚的功能为:1、Vcc2:5V电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2<Vcc1时,由Vcc1向DS1302供电。2.X1是外接晶振脚3.X2是外接晶振脚(32.768KHZ的晶振)4.地(GND)
5.CE/RST:复位脚6.I/O:数据输入输出口;7.SCLK:串行时钟,输入;8.Vcc1:备用电池端;图3.3DS1302管脚图3.4LCD1602点阵字符液晶显示屏3.4.1功能特性描述1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。LCD1602的特性+5V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有160个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM3.4.2管脚描述LCD1602管脚如图3.4:图3.4LCD1602管脚图3.5继电器3.5.1功能特性描述继电器是一种电子控制器件,采用电磁继电器。通过单片机来控制其线圈的通断电,从而控制其触点的吸和与断开。继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。浙江大学城市学院毕业论文 系统硬件设计第4章系统硬件设计4.1单元电路设计4.1.1电源电路此电源电路如图4-1所示,并且实现了可以用6到12V的直流电源供电,也可以用电池盒供电的功能。电池盒上的开关可以控制该终端的运行和停止,并且用设定一枚LED作为电源指示灯。图4.1电源模块电路图4.1.2单片机电路此单片机电路如图4-2所示,包含了单片机的最小系统和外设连接的接口。图4.2单片机模块电路图4.1.3按键接口电路按键接口电路如图4-3所示,按键接地,表示当按键按下的时候给单片机的信号为0.图4.3按键模块电路图4.1.4温度检测电路温度检测电路如图4-3所示,单总线数据输出,连接单片机的P1.0脚图4.4温度检测模块电路图4.1.5实时时钟电路实时时钟电路图如图4-5所示,一根数据口,一根时钟口和一根RESET口。图4.5实时时钟模块电路图4.1.6液晶显示电路液晶显示电路如图4-6所示,P2口为数据口图4.6液晶显示模块电路图4.1.7驱动加热电路驱动加热电路如图4-7所示:图4.7驱动加热模块电路图4.2总电路图图4.8总电路图浙江大学城市学院毕业论文 系统软件设计第5章系统软件设计5.1开发环境KeiluVision3介绍KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。2006年1月30日ARM推出全新的针对各种嵌入式处理器的软件开发工具,集成KeilμVision3的RealViewMDK开发环境。RealViewMDK开发工具KeilμVision3源自Keil公司。RealViewMDK集成了业内领先的技术,包括KeilμVision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。5.2单元程序流程图5.2.1主程序流程图图5.1主程序流程图5.2.2读温度子程序流程图图5.2读温度子程序流程图5.2.3读当前时间子程序流程图图5.3读当前时间子程序流程图5.2.4液晶显示子程序流程图图5.4液晶显示子程序流程图5.2.5驱动加热子程序流程图图5.5驱动加热子程序流程图5.3程序详细关键代码5.3.1main.c部分/*****************************************************函数功能:按键扫描函数***************************************************/ intkey_scanf(){if(key1==0){delaynms(20);if(key1==0)return0;}if(key2==0){delaynms(20);if(key2==0)return1;}if(key3==0){delaynms(20);if(key3==0)return2;}if(key4==0){delaynms(20);if(key4==0)return3;}}/*****************************************************函数功能:设定温度和时间函数***************************************************/voidsetTimeTemp(){inti; i=key_scanf(); switch(i) { case0: setTemp++; if(setTemp>=80||setTemp<=0) setTemp=0; display_setTemp(setTemp);//显示设定的温度 break; case1: setDay++; if(setDay>=32||setDay<=0) setDay=0; DisplayDay(setDay);//显示设定的温度 break; case2: setHour++; if(setHour>=24||setHour<=0) setHour=0; Display_SetHour(setHour);//显示设定的小 break; case3: setMin++; if(setMin>=60||setMin<=0) setMin=0; Display_SetMinute(setMin);//显示设定的分钟 break; }}/*****************************************************函数功能:主函数***************************************************/voidmain(void){unsignedcharday,minute,hour;//分别储存苗、分、小时,日,月,年unsignedcharReadValue;//储存从1302读取的数据LcdInitiate();//将液晶初始化WriteAddress(0x42);//写小时与分钟分隔符的显示地址,显示在第2行第6列WriteData(':');//将字符常量写入LCDWriteAddress(0x4d);//写分钟与秒分隔符的显示地址,显示在第2行第9列WriteData(':');//将字符常量写入LCDInit_DS1302();//将1302初始化delaynms(5);//延时5ms给硬件一点反应时间 if(Init_DS18B20()==1){ display_error();}display_symbol();//显示温度说明display_setTemp(setTemp);//显示设定的温度Display_SetHour(setHour);//显示设定的小时Display_SetMinute(setMin);//显示设定的分钟DisplayDay(setDay);//JDQ=0;//LED=1; while(1){setTimeTemp(); ReadValue=ReadSet1302(0x83);//从分寄存器读minute=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//将读出数据转化 DisplayMinute(minute); //显示分ReadValue=ReadSet1302(0x85);//从分寄存器读hour=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//将读出数据转化 DisplayHour(hour); //显示小时 ReadValue=ReadSet1302(0x87);//从分寄存器读day=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//将读出数据转化ReadyReadTemp();//读温度准备 TL=ReadOneChar();//先读的是温度值低位 TH=ReadOneChar();//接着读的是温度值高位 TN=TH*16+TL/16;//实际温度值=(TH*256+TL)/16,即:TH*16+TL/16 //这样得出的是温度的整数部分,小数部分被丢弃了 display_temp1(TN);//显示温度的整数部分 delaynms(10); if(day>=setDay&&hour>=setHour&&minute>=setMin&&setTemp>TN) { JDQ=0; //LED=0; } else { JDQ=1; //LED=1; }} }5.3.2ds18b20.c部分/*****************************************************函数功能:将DS18B20传感器初始化,读取应答信号出口参数:flag***************************************************/bitInit_DS18B20(void) {bitflag;//储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在DQ=1;//先将数据线拉高for(time=0;time<2;time++)//略微延时约6微秒;DQ=0;//再将数据线从高拉低,要求保持480~960usfor(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);//返回检测成功标志}/*****************************************************函数功能:从DS18B20读取一个字节数据出口参数:dat***************************************************/unsignedcharReadOneChar(void){ unsignedchari=0; unsignedchardat;//储存读出的一个字节数据 for(i=0;i<8;i++) { DQ=1;//先将数据线拉高 _nop_(); //等待一个机器周期 DQ=0;//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序 _nop_();//等待一个机器周期 DQ=1;//将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备 for(time=0;time<2;time++);//延时约6us,使主机在15us内采样 dat>>=1; if(DQ==1) dat|=0x80;//如果读到的数据是1,则将1存入dat else dat|=0x00;//如果读到的数据是0,则将0存入dat //将单片机检测到的电平信号DQ存入r[i] for(time=0;time<8;time++) ;//延时3us,两个读时序之间必须有大于1us的恢复期 } return(dat);//返回读出的十六进制数据}/*****************************************************函数功能:向DS18B20写入一个字节数据入口参数:dat***************************************************/WriteOneChar(unsignedchardat){ unsignedchari=0; for(i=0;i<8;i++) { DQ=1;//先将数据线拉高 _nop_(); //等待一个机器周期 DQ=0;//将数据线从高拉低时即启动写时序 DQ=dat&0x01;//利用与运算取出要写的某位二进制数据,//并将其送到数据线上等待DS18B20采样 for(time=0;time<10;time++) ;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样 DQ=1;//释放数据线 for(time=0;time<1;time++) ;//延时3us,两个写时序间至少需要1us的恢复期 dat>>=1;//将dat中的各二进制位数据右移1位 } for(time=0;time<4;time++) ;//稍作延时,给硬件一点反应时间}/*****************************************************函数功能:做好读温度的准备***************************************************/voidReadyReadTemp(void){Init_DS18B20();//将DS18B20初始化 WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 delaynms(200);//转换一次需要延时一段时间 Init_DS18B20();//将DS18B20初始化 WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器,前两个分别是温度的低位和高位 }5.3.3lcd1602.c部分/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/voidWriteData(unsignedchary){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的显示模式进行初始化设置***************************************************/voidLcdInitiate(void){delaynms(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口 delaynms(5);//延时5ms,给硬件一点反应时间WriteInstruction(0x38); delaynms(5);//延时5ms,给硬件一点反应时间 WriteInstruction(0x38);//连续三次,确保初始化成功 delaynms(5);//延时5ms,给硬件一点反应时间 WriteInstruction(0x0c);//显示模式设置:显示开,无光标,光标不闪烁 delaynms(5);//延时5ms,给硬件一点反应时间 WriteInstruction(0x06);//显示模式设置:光标右移,字符不移 delaynms(5);//延时5ms,给硬件一点反应时间 WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delaynms(5);//延时5ms,给硬件一点反应时间}5.3.4ds1302.c部分/*****************************************************函数功能:从1302读一个字节数据入口参数:x***************************************************/unsignedcharRead1302(void){unsignedchari,dat; delaynus(2);//稍微等待,使硬件做好准备 for(i=0;i<8;i++)//连续读8个二进制位数据 { dat>>=1; if(DATA==1)//如果读出的数据是1 dat|=0x80;//将1取出,写在dat的最高位 SCLK=1;//将SCLK置于高电平,为下降沿读出 delaynus(2);//稍微等待 SCLK=0;//拉低SCLK,形成脉冲下降沿 delaynus(2);//稍微等待 } returndat;//将读出的数据返回}/*****************************************************函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd***************************************************/unsignedcharReadSet1302(unsignedcharCmd){unsignedchardat;RST=0;//拉低RSTSCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输Write1302(Cmd);//写入命令字dat=Read1302();//读出数据SCLK=1;//将时钟电平置于已知状态RST
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024试用期解除劳动合同协议书
- 2024年基站物业管理与维护服务合同
- 2024的日本日立公司集体合同
- 2024广州市的店面租赁合同
- 2024年共享出行司机合作协议
- 2024年化工原料批量采购协议
- 2024二手房屋拍卖合同样本
- 2024年劳动协议承接补充条款
- 2024-2025学年高中地理第六章自然灾害第一节气象与水文灾害课时作业含解析新人教版必修1
- 2024年学校卫生管理分包合同
- 农村自建房接受赠与协议书范文
- 2023年温州瑞安农商银行招聘考试真题
- GB/T 28617-2024绿色制造通用技术导则铸造
- 2024年工程部门工作计划模版(三篇)
- 2023-2024学年江西省萍乡市八年级(上)期末物理试卷
- 出诊管理制度
- 2024年广东省第一次普通高中学业水平合格性考试历史试卷(解析版)
- 工程项目建设程序及审批部门
- 融媒体综艺节目制作学习通超星期末考试答案章节答案2024年
- 2024年中国融通集团子公司中层管理人员社会招聘高频难、易错点500题模拟试题附带答案详解
- MOOC 创新与创业管理-南京师范大学 中国大学慕课答案
评论
0/150
提交评论