电子技术综合实践_第1页
电子技术综合实践_第2页
电子技术综合实践_第3页
电子技术综合实践_第4页
电子技术综合实践_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除山东科技大学电子技术综合实践报告设计题目:多功能数字电子表专业:班级学号:学生姓名:指导教师:设计时间:小组成员:3 / 41一、多功能数字电子表二、设计任务与要求1 .实践任务:运用单片机89c52实现多功能电子表的设计与运行2 .基本要求:显示时分秒,时间调节与设置功能,秒表功能,计数功能,闹钟功能。3 .提高要求:运用18b20芯片实时监测周围温度。三、方案设计与论证1 .整体方案论证本数字电子表系统以stc89c52单片机为核心控制器,对系统进行初始化,完成对按键,led数码管显示的控制等功能,以及完成各模块通信协调的功能,时钟芯

2、片dal302不断将时间信号送往单片机,然后单片机通过Led数码管将时间显示出来,按键将信号传递给单片机处理,借以实现对时间的设置,可以对年,月,日,时,分,秒进行设定,还可以通过对闹钟时间进行设置实现定时闹钟的功能,通过温度传感器将温度信号传递给单片机,然后单片机通过led数码管将温度显示出来,达到温度显示的功能.另外,秒表功能有开始,中止,复位来控制,以led数码管显示,计数器则由按键控制计数.最终由6v电源供电。最终实现以下6个功能:1)实现电子表的时,分,秒的显示2)实现电子表对时间等的设定3)实现秒表功能4)实现计数器功能5)实现闹钟报警功能6)实现温度实时监测显示功能2。模块的分类

3、I)stc89c52单片机主控模块设计初期,我们有如下两种以单片机为核心的主控方式可选:1.采用stc89c52单片机作为数字电子表主控核心,运用flashrom,搭载有4Kbrom内部存储空间,能够在3v的低压电源下工作,与mcs-52系列单片机具有完全兼容性,缺点是没有isp在线编程技术,运用于电路设计时,如果对程序进行增添新功能或修改程序不方便控制。2。采用stc89c52单片机作为数字电子表主控核心,搭载flashrom为片内rom,在6V电源工作,对于编程技术可以有效的修改的方式。综上考虑选择笫二种。2 )DS1302时钟电路模块资料内容仅供您学习参考,如有不当之处,请联系改正或者删

4、除在时钟电路模块的设计中,我也想了两种方案:L利用单片机本身自带功能实现定时计数功能,通过程序编写来实现对年,月,日,时,分,秒的计时。通过外部晶振提供准确时钟,采用11。0592的晶振。但是不宜断电保护。2。采用时钟芯片dsl302进行计时,然后时间信号交给单片机处理通过led数码管显示出来。此方案中dsl302性价比高,性能优越,耗电量少,具有计时功能,还有闰年补偿功能,节省了单片机资源且便宜,但控制难度增加。综合考虑选择笫二种方案。3 )led数码管显示模块开始有led数码管和led液晶显示屏两种方案,由于对led数码管更为熟悉好用,选择方案一。4)温度测试模块闹钟模块采用了方便易用且价

5、格低廉的数字温度传感器dsl8b20实现。优点是使用方便,报警选择蜂鸣器。5)键盘扫描电路模块该电路通过编写相应的程序即能实现功能,在此不再赘述。三、电路设计原理1)元器件Stc89c52单片机一个Dsl302时钟芯片一个Dsl8b20温度芯片一个led数码管六个蜂鸣器一个按键三个2)电路图原理图2 / 41资料内容仅供您学习参考,如有不当之处,请联系改正或者删除3 / 41四、软件编程1.软件流程图:11:;星进入后台while(l)循环资料内容仅供您学习参考,如有不当之处,请联系改正或者删除12 / 413.主程序调试要求:1 .MCU:AT89S52芯片或AT89C522 .晶振:12M

6、Hz功能:多功能时钟+温度计*/# include<reg52oh>#include(intrinsoh># defineucharunsignedchar#defineuintunsignedintsbitdis_bitl=P2"7;定义数码管控制口sbitdis_bit2=P2"6:定义数码管控制口sbitdis_bit3=P2"4;定义数码管控制口sbitdis_bit4=P2"3;定义数码管控制口sbitdis_bit5=P2"l:定义数码管控制口sbitdis_bit6=P2"0:定义数码管控制口sbitl

7、edl_bit=P22;定时LED的控制口$13遥16(12,n呼2、5;定时1)的控制口sbitsljbit=PV0;定义S1控制口sbits2_bit=Pri;定义S2控制口sbits3_bit=Pr2;/定义S3控制口sbitdo_dsl8b20=P3-3;定义控制DS18B20sbitspeak=P3-7;定义蜂鸣器控制口sbitclk_dsl302=P3-6:定义控制DS1302的时钟线sbitio_dsl302=P3-5;定义控制DS1302的串行数据sbitrest_dsl302=P34;#definesmg_dataPO定义数码管数据口voiddelay_3us();/3US的

8、延时程序voiddelay_8us(uintt);8US延时基准程序voiddelay_50us(uintt);延时50*T微妙函数的声明voiddisplayl(uchardis_data);数码管1显示子程序voiddisplay2(uchardis_data);数码管2显示子程序voiddisplay3(uchardis_data);数码管3显示子程序voiddisplay4(uchardis_data);/数码管4显示子程序voiddisplay5(uchardis_data);/数码管5显示子程序voiddisplay6(uchardis_data);数码管6显示子程序voidini

9、t_tO();定时器0初始化函数voiddis_led();/LED处理函数voidjudge_sl();S1按键处理函数voidjudge_s2();S2按键处理函数voidjudge_s3();S3按键处理函数voiddis(uchars6,ucharso,uchars4,uchars3,uchars2,ucharsl);显示子程序voiddis_san(uchars6,uchars5,uchars4,uchars3,uchars2,ucharsl,ucharsan);闪烁显示子程序voidjudge_dis();显示处理函数voidjudge_clock();显示处理函数voidset_

10、dsl302();设置时间voidget_dsl302();读取当前时间voidw_lbyte_dsl302(uchart);向DS13O2写一个字节的数据ucharr_lbyte_dsl302();从DS13O2读一个字节的数据/*火火*火*火*水火火火*大火火*大*火火*火*火大火大*DS18B20测温函数定义voidw_lbyte_dsl8b20(ucharvalue);向DS18B20写一个字节ucharr_lbyte_dsl8b20(void);从DS18B20读取一个字节的数据voidrest_ds18b20(void);/DS18B20复位程序voidreadtemp_ds18b

11、20(void);读取温度voiddis_temp();温度显示函数共阳数码管断码表constuchartabll16=OxcO,0xf9,0xa4,OxbO,0x99,0x92,/0123450x82,0xf8,0x80,0x90,0x86,0x87,OxFF,/6789ETB0xc6,Oxbf,Oxff);/cconstuchartabl3=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09);温度内部计算用uchart0_crycle;ucharhourcount,minuteco

12、unt,secondcount,msecondcount;ucharc1ock_hour,clock_minute;ucharcountdown_second;ucharcountdown_hour,countdown_minute;ucharclock.en;闹钟关闭和开启的标志,1开启,0关闭ucharflagl,second_flag,zancunl,zancun2,zancun3;ucharzancun4,zancun5,zancun6,zancun7;ucharclock_f1ag,countdown_f1ag;ucharmsecond_minute,msecond_second,m

13、second_msecond,msecond_flag;/秒表相关参数uintspeak_count;uchartempl,temph,temp_flag;uchartjb,t_s,t_g,t_x,temp_flag2;从左到右分别存储温度百位,十位,个位,小数位uchartab233;/=0x40,0x59,0x23,0x28,0x11,0x06,0x09;上电时默认的时间主程序voidmain()P3=0x00;flagl=0;zancun3=0;msecond_minute=0;置秒表相关参数为0msecond_second=0:msecond_msecond=0:speak=l;关闭蜂

14、鸣器speak_count=0;clock_hour=0;clock_minute=0;clock_flag=0;countdown_f1ag=0;倒计时标志位为0clock_en=0:开机时默认关闭闹钟init_tO();TRO=1;/set_dsl302();设置DS1302的初始时间接下来开始编写让数码管显示的程序while(1)(get_dsl302();judge_dis();显示处理judge_sl();judge_s2();judge_s3();judge_clock();闹钟处理程序)voidtimerO()interrupt1THO二(6553650000)/256;TL0二

15、(6553650000)%256;t0_crycle+;if(t0_crycle=2)/0。1秒(t0_crycle=0;msecond_flag=l;msecond_count+;if(msecond_count=10)l秒(msecond_count=0:second_flag=l;)/*火火火火*火*火火水*火火*显示处理函数voidjudge_dis()(if(flagl=0)(if(second_flag=l)(zancun7+;second_flag=0;)if(zancun7<l)(if(temp_flag2=l)(readtemp_dsl8b20();读取温度temp_f

16、lag2=0;)dis.temp();温度显示函数if(zancun7)=1)(temp_flag2=l;zancun4=hour_count&0xf0;zancun4)>=4;zancun5=minute_count&OxfO:zancuno)=4;zancun6=second_count&0xf0:zancun6>>=4;dis(zancun4,hour_count&OxOf,zancun5,minute_count&OxOfzancun6,second_count&0x0f);dis_led();if(zancun7=5)

17、zancun7=0;)if(flagl!=0)(switch(flagl)(easel:dis(5,10,11,1,12,12);/显示SET1ledl_bit=l;led2_bit=l;break;case2:dis(5,10,11,2,12,12);显示SET2break;case3:dis(5,10,11,3,12,12);显示SET3break;case4:dis(5,10,11,4,12,12);显示SET4break;case5:dis(5,10,11,5,12,12);显示SET5break;case6:dis_san(zancunl/10,zancunl%10,zancun2/

18、10,zancun2%10,12,12,1);break;case7:dis_san(zancun1/10,zancunl%10,zancun2/10,zancun2%10,12,12,2);break;case8:dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,12,12,3);break;case9:进入修改时间,时间分位个位闪烁dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,12,12,4);break;easel0:进入修改闹钟,闹钟小时十位闪烁dis_san(zancunl

19、/10,zancunlMO,zancun2/10,zancun2%10,12,zancun3,1);break;casell:进入修改闹钟,闹钟小时个位闪烁dis_san(zancun1/10,zancunl%10,zancun2/10,zancun2%10,12,zancun3,2);break;casel2:进入修改闹钟,闹钟小时十位闪烁dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,12,zancun3,3);break;casel3:进入修改闹钟,闹钟小时个位闪烁dis_san(zancunl/10,zancunl%10»

20、;zancun2/10,zancun2%10,12,zancun3,4);break;casel4:进入修改闹钟的开关dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,12,zancun3,6);break;caselo:dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,1);break;casel6:dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,zancun3/10,zancun3%1

21、0,2);break;casel7:dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,3);break;case18:dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,4);break;case19:dis_san(zancunl/10,zancunl%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,5);break;case20:dis_san(zanc

22、unl/10,zancunl%10,zancun2/10,zancun2%10,zancun3/10,zancun3%10,6);break;case21:if(second_flag=l)(second_flag=0;countdown_second;if(countdown_second=255)(countdown_second=59:countdown_minute;if(countdown_minute=255)(countdown_minute=59:countdown_hour;if(countdown_hour=255)(flagl=22;countdown_minute=0;

23、countdown_hour=0:countdown_second=0:countdown_f1ag=1;)dis(countdown_hour/10,countdown_hour%10,countdown_minute/10,countdown_minute%10,countdown_second/10,countdown_second%10);/break;case22:if(countdown_flag)0&&countdown_f1ag<7)(speak=0;if(second_flag=l)(second_flag=0;countdown_flag+:)else

24、speak=l;)dis(countdown_hour/10,countdown_hour%10,msecond_second/10countdown_minute/10,countdown_minute%10,countdown_second/10,countdown_second%10);/break;case23:dis(msecond_minute/10,msecond_minute%10,msecond_second%10,msecond_msecond%10,12);break;case24:if(msecond_flag=l)(msecond_flag=0;msecond_mse

25、cond+;if(msecond_msecond=10)(msecond_msecond=0;msecond_second+;if(msecond_second=60)(msecond_second=0:msecond_minute+;if(msecond_minute=100)msecond-minute=OQ:flagl=23;)% 10 , msecond second/10 ,dis(msecond_minute/10,msecond_minutemsecond_second%10,msecond_msecond%10,12);break;case25:dis(zancun3/10,z

26、ancun3%10,zancun2/10zancun2%10,zancunl/10,zancunl%10);break;default:break;)*/*火火火*火火*大火*火*火*/S1按键处理函数voidjudge_sl()sl_bit=l;置10为1,准备读入收据if(sl_bit=0)判断是否有按键按下delay_50us;延时,去除机械抖动if(sibit=O)switch(flagl)caseO:easel:case2:case3:case4:case6:case7:case8:caselO:casell:casel2:casel3:casel5:casel6:casel7:ca

27、sel8:casel9:flagl+:break;case9:flagl=6;break;casel4:flagl=10:break;资料内容仅供您学习参考,如有不当之处,请联系改正或者删除case20:flagl=15;break;case5:case21:case22:case23: :系统从秒表状态复位case24: :系统从秒表状态复位case25:系统从计数器复位flagl=O;break;default:break;)while(sl_bit=O)judge.disO;"/等待按键释放)/*火*火*火*大*/S2按键处理函数voidjudge_s2()(s2_bit=l;

28、置10为L准备读入收据if(s2_bit=0)判断是否有按键按下delay_50us(l);延时,去除机械抖动if(s2_bit=0)(switch(flagl)(easel:在显示SET1状态下按S2件,进入修改时间flagl=6:zancun4=hour_count&0xf0;zancun4>)=4;zancun6=hour_count&0x0f;zancunl=zancun4*10+zancun6:/zancun1=hour_count;zancun5=minute_count&Oxf0;zancun5>>=4;zancun6=minute_co

29、unt&OxOf;zancun2=zancun5*10+zancun6:15 / 41资料内容仅供您学习参考,如有不当之处,请联系改正或者删除/zancun2=minute_count;break;case2:在显示SET2状态下按S2,进入设置闹钟zancunl=clock_hour;zancun2=clock_minute;flagl=10;break;case6:修改时钟小时十位状态下按S2件case7:修改时钟小时个位状态下按S2件case8:修改时钟分钟十位状态下按S2件case9:修改时钟分钟个位状态下按S2件/zancun4=zancun1/10;tab232=zancu

30、nl/10*16+zancunl%10:/zancun5=zancun2&0xf0;/zancun5>>=4;tab231j=zancun2/10*16+zancun2%10;hour_count=tab232;minute_count=tab231;second_count=0;tab230=0;set_dsl302();/设置DS1302的初始时间flagl=0;break;caselO:修改闹钟小时十位状态下按S2casell:修改闹钟小时个位状态下按S2casel2:修改闹钟分钟十位状态下按S2casel3:修改闹钟分钟个位状态下按S2casel4:修改闹钟使能状态

31、下按S2c1ock_hour=zancun1:clock_minute=zancun2;c1ock_en=zancun3:flagl=O;break;case3:flagl=15;zancunl=countdown_hour;zancun2=countdown_minute;zancun3=countdown_second:break;case15:case16:case17:case18:case19:case20:countdown_hour=zancunl;countdown_minute=zancun2;countdown_second=zancun3;flagl=21:countdo

32、wn_f1ag=0:break;case22:flagl=21;break;case21:flagl=22;break;case4:flagl=23;秒表暂停msecond_minute=0:msecond_second=0;msecond_msecond=0;break;case23:flagl=24;break;case24:flagl=23;break;case5:flagl=25;进入计数器模式zancunl=0;zancun2=0:zancun3=0:break;default:break;)while(s2_bit=0)(judge_dis();等待按键释放)/*火*火火*火*火火

33、*火火*火火文*S3按键处理函数voidjudge_s3()(s3_bit=l;置10为1,准备读入收据if(s3_bit=0)判断是否有按键按下(delay_50us(1);延时,去除机械抖动if(s3_bit=0)(switch(flagl)(case6:修改时间小时的十位数zancunl+=10:if(zancunl)=24)zancunl=zancunl%10;break;case7:修改时间小时的个位数zancun1=zancun1/10*10+(zancunl%10+l)%10;if(zancunl)=24)zancunl=20;break;case8:修改时间分钟的十位数zanc

34、un2+=10:if(zancun2>=60)zancun2=60;break;case9:修改时间分钟的个位数zancun2=zancun2/10*10+(zancun2/ol0+l)%10;break;caselO:修改闹钟小时的十位数zancunl+=10;if(zancunl)=24)zancunl=zancunl%10;break;casell:修改闹钟小时的个位数zancunl=zancunl/10*10+(zancunl%10+1)%10:if(zancunl)=24)zancunl=20:break;case12:修改闹钟分钟的十位数zancun2+=10;if(zanc

35、un2>=60)zancun2=60;break;case13:修改闹钟分钟的个位数zancun2=zancun2/10*10+(zancun2%10+l)%10:break;casel4:zancun3=1;break;caselo:修改倒计时小时的十位数zancunl+=10;if(zancunl>=100)zancunl-=100;break;casel6:修改倒计时小时的个位数zancunl=zancunl/10*10+(zancunl%10+l)%10:break;casel7:修改倒计时分钟的十位数zancun2+=10;if(zancun2=60)zancun2-=6

36、0;break;casel8:修改倒计时分钟的个位数zancun2=zancun2/10*10+(zancun2%10+l)%10:break;casel9:修改倒计时秒的十位数zancun3+=10;if(zancun3)=60)zancun3-=60;break;case20:修改倒计时秒的个位数zancun3=zancun3/10*10+(zancun3%10+l)%10;break;case21:case22:/countdown_hour=zancunl;countdown_minute=zancun2;countdown_second=zancun3;flagl=21;break;

37、case23:case24:秒表复位flagl=24;msecond_minute=0;msecond_second=0:msecond_msecond=0;break;case25:zancunl+;if(zancunl=100)(zancunl=0:zancun2+;if(zancun2=100)zancun2=0;zancun3+;)break;default:break;)while(s3_bit=0)(judge_dis();等待按键释放)/火*火*火*火*火火显示处理函数voidjudge_clock()(zancun4=hour_count&0xf0:zancun4)=4

38、;zancunG=hour.count&OxOf:zancun4*=10;zancun4+=zancun6;zancun5=minute_count&0xf0;zancun5>>=4;zancun6=minute_count&0x0f:zancun5*=10;zancun5+=zancun6:if(c1ock_hour=zancun4&&clock_minute=zancun5)(if(clock_en=l&&clock_flag=0)(speak_count=0;开启蜂鸣器clock_flag=l;speak_count=0

39、;)else(clock_flag=0;if(clock_flag=l&&speak_count(400)(if(msecond_count<=5)(speak=0;speak_count+;)else(speak=l;)elsespeak=l;)/*火*火*火火*火大*闪烁显示子程序voiddis_san(uchars6,uchars5,uchars4,uchars3,uchars2,ucharsl,ucharsan)(if(san=l)(if(msecond_count(5)(displayl(s6);)else(displayl(s6);if(san=2)(if(m

40、second_count(5)(display2(s5);)elsedisplay2(s5);)if(san=3)(if(msecond_count<5)(displays(s4);)else(displays(s4);)if(san=4)if(msecond_count<5)(display4(s3);)else(display4(s3);)if(san=5)(if(msecond_count<5)display5(s2);)else(display5(s2);)if(san=6)(if(msecond_count<5)(display6(si);)elsedispl

41、ay6(si);)/*火火*火*大火时钟显示程序voiddis(uchars6,uchars5,uchars4,uchars3,uchars2,ucharsl)(displayl(s6);display2(s5);displays(s4);display4(s3);display5(s2);display6(si);)/*火*火火火火*火*火火*火火火火*水火*火火*火*水*火*voidinit_tO()(TM0D=0x01;设定定时器工作方式1,定时器定时50毫秒TH0=(65536-50000)/256;TL0二(65536-50000)%256;EA=1;开总中断ETO=1;允许定时器0

42、中断t0_crycle=0;定时器中断次数计数单元)/火火*火火*火*水火水*水火*/LED处理函数voiddis_led()(if(msecond_count(5)(ledl_bit=l:led2_bit=l:)else(ledl_bit=O;led2_bit=0:)/*火*>k*火*大火火*大*火*功能:把数据1显示在数码管1上voiddisplay6(uchardis_data)22 / 41资料内容仅供您学习参考,如有不当之处,请联系改正或者删除smg_data=tablldis_data;送显示断码dis_bit6=0;锁存数据delay_50us(40);dis_bit6=l

43、;)/*火火*火*火*火*火*大功能:把数据1显示在数码管1上voiddisplay5(uchardis_data)(smg_data=tablldis_data;送显示断码dis_bit5=0:锁存数据delay_50us(40);dis_bit5=l;)/*大火*火火火火水*火火*火*水火火水火火水火*大*火火*功能:把数据1显示在数码管1上voiddisplay4(uchardis_data)(smg_data=tablldis_data;送显示断码dis_bit4=0;锁存数据delay_50us(40);dis_bit4=l;/*火*火*功能:把数据1显示在数码管1上voiddisp

44、lay3(uchardis_data)(smg_data=tabllEdis_data;送显示断码dis_bit3=0:锁存数据delay_50us(40);dis_bit3=l;)/*>k水*水火火*火火*火火*大*火*功能:把数据1显示在数码管1上voiddisplayl(uchardis_data)(smg_data=tab11dis_data;送显示断码南5)在1=0;锁存数据delay_50us(40);dis_bitl=l;)/*火*火火*火火*大*火*大*功能:把数据1显示在数码管1上voiddisplay2(uchardis_data)# / 41资料内容仅供您学习参考,

45、如有不当之处,请联系改正或者删除smg_data=tablldis_data;送显示断码dis_bit2=0:锁存数据delay_50us(40);dis_bit2=l;/*火*火*火*水*.tr.1.tr7,7,7/7,7,7,、以7,.tr7.7,7.7,、卜.17/7.!<-L-7/7.tr不不下不A不斗不吓K不入7小不7AA不平下A斗斗AA77A斗斗斗斗斗斗斗z人小八不斗AA小¥斗不不*函数名称:voiddelay_50US(unsignedintt)功能:延时50*t(us)voiddelay_50us(uintt)(unsignedcharj;for(;t)0:t)

46、for(j=19;j)0;j);)/.I.tr.tr.1.tr.tr-7I,7.7.7,7.-J/不不不A7A不不不不A不不不不斗不斗斗斗A7AA下平7八,平不下平不入不KA不斗不不A不小不平A小斗斗A*火*火火*大*大*/8微秒延时基准程序voiddelay_8us(uintt)(while(1);)/*大*水火火火*文*火*大*火*大*大/3微秒延时程序voiddelay_3us()/*火*火*火火*火*火火水火火火*文*大*火*火大*火*子程序功能:向DS18B20写一字节的数据voidw_lbyte_dsl8b20(ucharvalue)(uchari=0:for(i=0:i<8

47、;i+)dq_dsl8b20=0;delay_3us();if(value&OxOl)dq_dsl8b20=l;/DQ=l25 / 41资料内容仅供您学习参考,如有不当之处,请联系改正或者删除delay_50us(1);延时50us以上value=1;dLdsl8b20=1;/DQ=1)delay_50us(1);读一个字节ucharr_lbyte_dsl8b20(void)(uchari=0;ucharvalue=O;for(i=0;i(8;i+)(value)>=1:do_dsl8b20=0;/DQ_L;delay_3us();d(L_dsl8b20=l;delay_3us(

48、);delay_3us();if(dq_dsl8b20=l)valuei=0x80;delay_50us(1):延时40us)returnvalue;)/;*火*火火*火*dsl8b20复位子程序voidrest_ds18b20(void)rest:delay_3us();稍做延时delay_3us();dLdsl8b20二1;delay_3us();do_dsl8b20=0;/DQ_L;delay_8us(75);/480us<T<960usdo_dsl8b20=1;拉高总线delay_8us(8);if(do_dsl8b20=1)(return;)delay_8us(11);延

49、时90usif(dq_dsl8b20=1)return;# / 41资料内容仅供您学习参考,如有不当之处,请联系改正或者删除elsegotorest;)/火*大*大火*读取温度voidreadtemp_dsl8b20(void)(uchartemp32;rest_dsl8b20();w_lbyte_dsl8b20(Oxcc);跳过读序列号的操作w_lbyte_dsl8b20(0x44);启动温度转换delay_8us(2);rest_dsl8b20();w_lbyte_dsl8b20(Oxcc);跳过读序列号的操作w_lbyte_dsl8b20(Oxbe);读取温度寄存器等(共可读9个寄存器)前两个就是温度templ=r_lbyte_dsl8b20();temph=r_lbyte_dsl8b20();if(temph&OxfO)判断温度的正负性(temp_f1ag0;/温度为负数标志temph=-temph;templ=-tempi;t_x=tabl3tempi&0x0f;计算温度的小数temp32=temph&0x0f:temp32«=4;tempi)=4;temp32=temp32Itempi;t_b=temP32/100%10:计算温度的百位数据

温馨提示

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

评论

0/150

提交评论