基于单片机的视力保护器设计_第1页
基于单片机的视力保护器设计_第2页
基于单片机的视力保护器设计_第3页
基于单片机的视力保护器设计_第4页
基于单片机的视力保护器设计_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

xx毕业设计xxxx学院毕业设计2-图4.2光线检测子程序流程图4.3.2超声波测距子程序系统开始工作对超声波测距模块进行初始化,通过STC89C52的P3.2端口向HC-SR04输出两个频率约为40kHz的方形脉冲信号,与此同时通过设定的程序启动定时器T0进行超声波返回时间计时。当有超声波信号返回时,给单片机的P3.3引脚,即外部中断申请输入端一个低电平,打开外部中断0,定时器T0停止脉冲计数,然后进行距离计算。若得到使用者头部与桌面的距离小于规定值,则蜂鸣器和LED报警,提示学生注意头部与桌面的距离[16]。若定时器的溢出标志位TF0置1后还没有检测到超声波返回信号,表示此次测距不成功,返回程序,继续发射超声波信号,进行距离测量。超声波测距子程序流程图如图4.3所示。图4.3超声波距离检测子程序流程图4.3.3定时子程序定时的实现要依赖单片机内部的编程,定时子程序对学生的学习时间进行定时。在定时子程序中编程需要以下几个步骤:第1步:通过TMOD选择好定时器的工作模式,本设计采用工作模式0,故TMOD=0x01;第2步:设置计数寄存器TH0和TL0的初值;第3步:打开定时器T0,让定时器开始计时,TR0=0;第4步:通过定时器控制寄存器的溢出标志位TF0,来判断定时器是否溢出[17]。定时器的计时是通过计算脉冲数实现的,而脉冲数是由晶振的振荡频率产生的。在本次毕业设计中,采用的晶振的振荡频率为12MHz,STC89C52的时钟周期为,即1/12000000秒,其中1个机器周期等于12个时钟周期,即机器周期为1μs。设计要求定时10ms,设要经过x个机器周期得到0.01秒,得到如下的方程式:(4.1)计算得到x=10000。16位定时器的最大计数值为65535,加1后为65536溢出,所以要给定时器定时值寄存器的高8位和低8位一个初值,使其经过10000个机器周期后TF0=1。初值为:(4.2)转化成十六进制就是0xD8F0,也就是TH0=0xD8,TL0=0xF0。本设计采用定时器0和工作模式1实现。根据国家卫计委的要求每学习45分钟休息10分钟。首先使定时器0定时10ms,经过100次中断后为1s,再通过秒变量递增,递增60次,变量分变量递增,直到递增到45。然后进入主程序中的报警程序开始工作,蜂鸣器发出警报,并延时5秒,提示使用者注意休息。定时子程序框图如图4.4所示。图4.4定时子程序流程图4.3.4中断子程序中断,是单片机的一种运行机制,程序运行过程中,出现某些意外情况需干预时,停止正在运行的程序并转入处理新情况的程序;处理完毕后又返回原被暂停的程序继续运行。内部中断:单片机的内部集成许多功能模块,如定时器,串口通信,A/D转换器在发生中断时才需要CPU参与,发出请求信号通知CPU。外部中断:系统的外部设备产生的中断源,产生一个中断信号,送到单片机的外部中断请求引脚供CPU检测。中断过程包括:(1)中断源发出中断请求;(2)判断当前处理机是否允许中断和该中断源是否被屏蔽;(3)优先权排队;(4)处理机执行完当前指令或当前指令无法执行完,则立即停止当前程序,保护断点地址和处理机当前状态,转入相应的中断服务程序;(5)执行中断服务程序;(6)恢复被保护的状态,执行“中断返回”指令回到被中断的程序或转入其他程序。超声波中断子程序采用外部中断0,定时器T1,在超声波发出的同时启动定时进行计时,当有超声波返回时,触发外部中断0,进入中断程序后立即停止定时器计时,进行距离计算,若计时器计时溢出时仍未检测到超声波返回信号,则定时器的溢出中断将外部中断关闭,表示此次测距不成功,重新检测。中断主程序如图4.5所示,内部中断如图4.6所示,外部中断如图4.7所示。图4.5中断子程序主流程图图4.6定时中断流程图图4.7外部中断流程图5系统仿真与调试5.1系统仿真仿真采用Proteus软件进行仿真,根据系统原理图在Proteus软件中画好仿真电路图,将预先编写好的程序添加到STC89C52中,点击运行按钮对整个系统进行仿真。由于Proteus软件中没有超声波模块,故用按键来代替超声波传感器来给单片机信号,达到相同的仿真效果。Proteus仿真只能确保程序和原理图没有错误,能达到预期的效果,设计是否能真正的符合要求进行工作还是要看设计实物。如图5.1所示,是仿真的是光线过强时,系统报警,仿真电路图。图5.1视力保护器仿真电路图5.2PCB设计(1)PCB介绍PCB是印制电路板(PrintedCircuitBoard)的简称,通过打印和蚀刻等工艺将原理图中元件的位置和孔位印制到覆铜板的过程。覆铜板多为压制而成的,所以层数多为偶数,根据其结构分为单层板、双层板和多层板。单层板适用于简单元器件不多且布线不复杂的电路图(如本设计可以用单层板),在日常生活中并不常用。多层板由于工艺的原因大多数层数为偶数层,包括信号层、电源层、接地层、丝印层等,但由于多层板的成本过高,在平时中也不常用。最常用的是双层板,由顶层和底层组成,两面都可以走线。(2)PCB绘制在绘制好电路原理图之后,对原理图进行编译确保电路图没有错误,若没有错误生成网络报表,可以通过“工具”菜单下的“封装管理器”查看元器件的封装是否符合要求且均有封装。建立一个新的PCB工程,对PCB图的大小、布线宽度、线距、焊盘大小、孔径、层定义等进行设置,PCB图设置完成之后,在Design菜单下点击UpdatePCBDocument,生成PCB图,通过手动调整进行元器件进行布局,布局时应注意以下几点:(1)应该以主控元件为中心,进行布局;(2)高频元器件要考虑元器件的分布参数;(3)保持信号流向同一方向,便于后期电路的检查;(4)可以把不常用的元器件放在体积较大元器件的下边以压缩板子的大小。手动调整完成后,进行手动布线,在布线时不能出现小于90度的角,以防尖端放电和腐蚀过度。布线完成后,再进一步对PCB图检查,确保所有的飞线都连接完成且没有错误,检查无误后进行PCB的转印、腐蚀、钻孔等操作。本设计的PCB设计图如图5.2所示。图5.2视力保护器PCB设计图5.3系统电路实现(1)元器件检查:根据原理图来购买符合要求的元器件,将买回来的元器件按照各自的方式认真仔细的检查有无损坏,数量是否正确,防止焊接过程中有损坏或缺少,影响焊接。(2)元器件安装与焊接:本设计采用万用板,确认元器件没有损坏且符合要求后,根据PCB电路图元器件位置放置。在万用板上放置时注意先放置焊接要求低和不易损坏的元器件后放置焊接要求较高和易损坏的元器件,同时要注意有极性元件的正负极和STC89C52的方向。电路板焊接时要注意送锡量和焊接时间,过多影响两个元器件的连接方式造成短路,过少则有可能造成虚焊等问题。待所有的元器件焊接完成后,用万用表的蜂鸣档来检查电路板焊接是否有短路、断路、虚焊等问题将所有问题找出并解决。5.4系统调试将单片机放置到程序下载器上,通过USB口与电脑连接用STC_ISP_V480软件将仿真调试过的程序下载到单片机中。下载完成后,对系统上电。首先按下电源开关,LED灯闪烁一次,蜂鸣器响一声,LCD1602液晶显示屏显示当前距离和光强,如图5.3所示。图5.3系统初始状态图然后通过按键对系统进行设置,设置好使用时书本与使用者的距离、最低和最高光线强度、使用时间等信息。在本设计中,设定的距离为30CM,使用时间为45分钟。如图5.4、5.5所示。图5.4系统距离和使用时间设定图图5.5系统光线强度设置图再按下系统开始工作键,系统开始进行工作,开始使用计时。当检测到的信号不符合设定值,系统报警,提醒使用者注意用眼习惯。如图5.6、5.7、5.8、5.9所示。图5.6测定距离报警图图5.7系统定时报警图图5.8光线较弱报警图图5.9光线较强报警图当按下暂停键时,系统暂停计时工作,若此时距离和光强不符合设定值,系统仍不会报警。如图5.10所示。图5.10系统暂停工作图在调试系统按键的过程中,硬件上连接是将按键默认置高,按下后拉低,检测下降沿跳变触发中断,在中断中做相应的按键处理实现。但是在调试过程中发现按键有时会出现按一下会变化多次,实际上按键上有抖动,多次触发中断造成的。后来考虑到按键的抖动问题,采用软件延时消抖方法,结果按键效果便恢复正常。经过系统调试,实物仿真能能达到预期功能,效果良好。6结论本次毕业设计是基于STC89C52单片机的视力保护器的设计,完成了系统硬件电路的设计、软件电路的设计,绘制了整体电路原理图、PCB图,基于KeilμVision4平台的程序编写及利用Proteus对系统电路仿真。经过安装调试,各模块能够流畅运行,整体电路基本满足设计要求,能够完成规定的基本功能。因为时间的限制,本次设计尚存在一定的不足需要解决,比如:可以用LED灯来指示哪个模块报警提醒,便于使用者做出调整;视力保护器可以通过Wi-Fi与手机APP进行连接,便于家长的监督。我相信通过我进一步的学习和努力,一定可以得到好的解决方案。本文完整的体现了STC89C52单片机视力保护器的设计方案和实现过程。设计有很好的市场前景和应用,达到了最初的目标。随着社会的不断进步,人们对视力越来越重视和关注,同时也促进了视力保护器的发展空间,视力保护器功能将会更加强大,操作也将更加智能。参考文献[1]何冰,王菊霞,苏变玲.基于单片机的视力保护器设计[J].电子设计工程,2015,15(3):95-98.[2]张威,石友义,唐鑫鑫,张继.基于51单片机的简易超声波测距系统设计[J].信息通信, 2015,12(5):23-24.[3]梁明亮,韦成杰.单片机对串行A/D转换器ADC0832的C51编程[J].郑州铁路职业技术学 院学报,2009,21(1):36-37.[4]张亚林.基于C52控制的ADC0832应用详解[J].数控技术与应用,2013,5(3):5-6.[5]李军,申俊泽.超声波测距模块HC—SR04的超声波测距仪设计[J].单片机与嵌入式系统应用, 2011,l1(10):77-78.[6]张纪元.基于ARM的水文遥测平台超声波测距报警系统研究[D].太原:太原理工大学.2013.[7]黄国富,胡体玲.倒车语音提示系统的设计与实现[J].电子工程设计,2012,11(8):31-33.[8]朱涛.基于STC89C52单片机的智能循迹小车设计[J].电脑知识技术:学术交流,2011,20(6):27-28.[9]徐军,冯辉.传感器技术基础与应用实训[M].北京:电子工业出版社.2010.12.90-100.[10]王欣,徐智,陶凤,袁春纬.基于超声波测距跟随小车设计[J].电脑知识技术,2016,13(17):59-60.[11]李维民,张成胜.单片机定时/计数器工作频率的研究[J].牡丹江师范学院学报(自然科学版),2013,10(2):15-16.[12]NormanyoE,AyimD,IsaacA.Designingofalettersortingmachinefortheregionalpostofficesinghana[J].ARPNJournalofEnineeringandAppliedSciences,2009,5(6):1-13.[13]赵艳华,龚丽农.基于超声波测量的视力保护仪设计[J].青岛农业大学学报(自然科学版), 2015,32(4).56-58.[14]赵亮.液晶显示模块LCD1602应用[J].电子制作,2007,9(15):21-22.[15]Boo-HyungLee,Jeong-HyunPark.Improvementofcarriersortingrateofletterpostallogistics[J]. InternationalJournalofComputerScienceandApplications,2009,6(3):33-42.[16]陈炜.简易青少年视力保护器的设计[J].科技展望,2015,25(33):46-48.[17]赵亮.单片机内部定时/计数器和中断系统[J].电子制作,2011,7(2):37-39.致谢本课题是在导师xx、xx老师的指导下完成的,本文的顺利完成都离不开xx老师的悉心教导。从选题到设计方案再到最后的论文定稿都给我了很大的辅导,不仅在技术上进行指导,还在系统需求和设计方面给予了很大的帮助。并且张老师在处事态度上教给了我很多人生经验。在大家因为论文焦头烂额时,他总是以轻松幽默的语言来缓解我们的压力。我还要感谢所有电气工程及其自动化专业的所有老师,他们学术渊博,治学严谨,思维活跃,总能给我们带来学习上的帮助。因为有了你们的栽培才有了今天如此艳丽的我们。其次,我要感谢我的同学,是你们在平时中与我探讨论文中出现的问题,并指出在设计中的误区,使我能发现不足并能及时改正,才使得论文能够顺利进行下去。没有你们的帮助,论文不可能这么顺利结稿。在此表示深深的谢意。时光荏苒,岁月如梭,四年很快,济大泉院承载了我的梦想和汗水,是梦起航的地方,未来不管在哪都不会忘记这片让人留念的地方,不忘初心的继续前行。附录A电气原理图图A.1电路原理图附录B电路PCB图图B.1电路PCB图附录C实物图图C.1实物正面图图C.2实物反面图附录D元件清单表D.1元件清单元件名称元件型号元件标号数量(个)单片机STC89C52U11AD转换芯片ADC083211蜂鸣器蜂鸣器B11发光二极管发光二极管D11光敏电阻光敏电阻GR11液晶显示屏LCD1602LCD11电容10uFC11电容20pFC2、C32电阻2KR1、R2、R4、R64电阻10KR31按键SW-PBS1、S2、S3、S44电源开关SW-灰色SW11晶振12MY11三极管9012Q11线路板9*15CM1电源接口J11芯片基座2附录E系统源程序#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include<intrins.h>#include"eeprom52.h"sbitCS=P1^4; //CS定义,连接ADC0832CS脚sbitSCL=P1^5; //SCL定义,连接ADC0832SCL脚sbitDO=P1^6; //DO定义,连接ADC0832DO脚sbitbeep=P1^3; //蜂鸣器IO口定义sbitrs=P1^0; //1602数据/命令选择引脚H:数据 L:命令sbitrw=P1^1; //1602读写引脚 H:数据寄存器 L:指令寄存器sbite=P1^2; //1602使能引脚下降沿触发sbitc_send=P3^2; //超声波发射sbitc_recive=P3^3; //超声波接收ucharflag_hc_value;//超声波中间变量longdistance; //距离uintset_d; //距离bitflag_csb_juli;//超声波超出量程uintflag_time0;//用来保存定时器0的时候的bitflag_200ms=1;ucharguangxian;//光线的显示变量ucharqiang_gx; //设置光线的强的变量ucharruo_gx; //设置光线的弱的变量ucharvalue;ucharflag_alarm;//报警变量ucharmiao=0,fen=0,shi;uchars_miao=55,s_fen=44,s_shi=0;bitxuexi_start;//开始学习标志位ucharmenu_1; //菜单设置变量uchari;ucharflag_gx;//光线报警ucharflag_juli; //距离报警ucharflag_time =0; //时间报警/***********************1ms延时函数*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/******************把设置数据保存到单片机内部eeprom中******************/voidwrite_eeprom(){ SectorErase(0x2000); byte_write(0x2000,set_d%256); byte_write(0x2001,set_d/256); byte_write(0x2002,qiang_gx); byte_write(0x2003,ruo_gx); byte_write(0x2004,s_miao); byte_write(0x2005,s_fen); byte_write(0x2006,s_shi); byte_write(0x2057,a_a); }/******************把数据从单片机内部eeprom中读出来*****************/voidread_eeprom(){ set_d=byte_read(0x2001); set_d=set_d*256+byte_read(0x2000); qiang_gx=byte_read(0x2002); ruo_gx=byte_read(0x2003); s_miao=byte_read(0x2004); s_fen=byte_read(0x2005); s_shi=byte_read(0x2006); a_a=byte_read(0x2057);}/**************开机自检eeprom初始化*****************/voidinit_eeprom(){ read_eeprom(); //先读 if(a_a!=2) //新的单片机初始单片机内问eeprom { set_d=40; a_a=2; qiang_gx=80; ruo_gx=20; s_miao=0,s_fen=45,s_shi=0; write_eeprom(); } }/***********延时程序**************/voiddelay_uint(uintq){ while(q--);}/***********名称:write_com(ucharcom)功能:1602命令函数***************//voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(3); e=1; delay_uint(25); e=0;}/**********************1602写数据函数*******************************/voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(3); e=1; delay_uint(25); e=0; }/***********************lcd1602上显示两位十进制数************************/voidwrite_sfm2(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/10%10); write_data(0x30+date%10); }/***********************lcd1602上显示超声波距离************************/voidwrite_sfm_csb(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/100%10); write_data('.'); write_data(0x30+date/10%10); write_data(0x30+date%10); }/*******************名称init_1602()***********************/voidinit_1602(){ write_com(0x38); // write_com(0x0c); write_com(0x06);}/********名称:write_string(ucharhang,ucharlie,ucharp)******************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }ucharkey_can;/********************独立按键程序*****************/voidkey(){ staticucharkey_new; key_can=20; if((P3&0xf0)!=0xf0) { delay_uint(50); if(((P3&0xf0)!=0xf0)&&(key_new==1)) { key_new=0; switch(P3&0xf0) { case0xd0:key_can=3;break; //左边第1个 case0xb0:key_can=2;break; //左边第2个 case0x70:key_can=1;break; //左边第3个 }// write_sfm2(2,0,key_can); } } else key_new=1; }/***********读数模转换数据*********************/ unsignedcharad0832read(bitSGL,bitODD){ unsignedchari=0,value=0,value1=0; SCL=0; DO=1; CS=0; //开始 SCL=1; //第一个上升沿 DO=SGL; SCL=1; //第二个上升沿 SCL=0; DO=ODD; SCL=1; //第三个上升沿 SCL=0; //第三个下降沿 DO=1; for(i=0;i<8;i++) { SCL=1; SCL=0;//开始从第四个下降沿接收数据 value<<=1; if(DO) value++; } for(i=0;i<8;i++) { //接收校验数据 value1>>=1; if(DO) value1+=0x80; SCL=0; } CS=1; SCL=1; if(value==value1) //与校验数据比较,正确就返回数据,否则返回0 returnvalue; return0;}/*********************小延时函数*****************************/voiddelay(){ _nop_(); //执行一条_nop_()指令就是1us _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}/*********************超声波测距程序*****************************/voidsend_wave(){ c_send=0; //10us的触发 delay(); c_send=1; TH0=0; //给定时器0清零 TL0=0; TR0=0; //关定时器0定时 while(!c_recive); //当c_recive为零时等待 while(c_recive) //当c_recive为1计数并等待 { flag_time0=TH0*256+TL0; if((flag_time0>40000))//当超声波超过测量范围时,显示3个888 { TR0=0; flag_csb_juli=2; distance=888; break; } else { flag_csb_juli=1; } } if(flag_csb_juli==1) { TR0=0; //关定时器0定时 distance=flag_time0; //读出定时器0的时间 distance*=0.017; if((distance>500)) //距离=速度*时间 { distance=888; //如果大于3.8m就超出超声波的量程 } }}/*********************定时器0、定时器1初始化******************/voidtime_init() { EA=1; //开总中断 TMOD=0X11; //定时器0、定时器1工作方式1 ET0=1; //开定时器0中断 TR0=1; //允许定时器0定时 ET1=1; //开定时器1中断 TR1=1; //允许定时器1定时 }/*******************按键执行函数******************/voidkey_with(){ if(menu_1==0) { if(key_can==2) //暂停学习 { xuexi_start=~xuexi_start; beep=1; } if(key_can==3) { xuexi_start=1;//开始学习 miao=0; fen=0; shi=0; } } if(key_can==1) { menu_1++; if(menu_1==1) { write_string(1,0,"1.xsb:m"); write_string(2,0,"2.::"); write_sfm_csb(1,6,set_d); write_sfm2(1,3,s_shi); // 显示 write_sfm2(1,6,s_fen); // 显示 write_sfm2(1,9,s_miao); // 显示 } if(menu_1==2) { write_com(0x80+0x40+0);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 } if(menu_1==5) { write_string(1,0,"3.H-gx:%"); write_string(2,0,"4.L-gx:%"); write_sfm2(1,7,qiang_gx); write_sfm2(2,7,ruo_gx); //设置光线的参数 write_com(0x80+6);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 } if(menu_1>=3) { menu_1=0; write_string(1,0,"csb: mgx:"); write_string(2,0,"::"); write_com(0x0c);//关闭显示 } } if(menu_1==1)//设置超声波参数 { if(key_can==2)// { set_d++; //加超声波距离报警数据 if(set_d>=200) set_d=200; } if(key_can==3)// { set_d--; //减超声波距离报警数据 if(set_d<=10) set_d=10; } write_sfm_csb(1,6,set_d); // 显示设置的距离 write_com(0x85);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1==2)//设置时钟参数 { if(key_can==2)// { s_shi++; //加时钟报警数据 if(s_shi>=24) s_shi=0; } if(key_can==3)// { if(s_shi<=0) s_shi=24; s_shi--; //减时钟报警数据 } write_sfm2(2,3,s_shi); // 显示时 write_sfm2(2,6,s_fen); // 显示分 write_sfm2(2,9,s_miao); // 显示秒 write_com(0x80+0x40+3);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1==3)//设置分钟参数 { if(key_can==2)// { s_fen++; //加分钟报警数据 if(s_fen>=60) s_fen=0; } if(key_can==3)// { if(s_fen<=0) s_fen=60; s_fen--; //减分钟报警数据 } write_sfm2(2,3,s_shi); // 显示时 write_sfm2(2,6,s_fen); // 显示分 write_sfm2(2,9,s_miao); // 显示秒 write_com(0x80+0x40+6);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1==4)//设置秒钟参数 { if(key_can==2)// { s_miao++; //加秒钟报警数据 if(s_miao>=60) s_miao=0; } if(key_can==3)// { if(s_miao<=0) s_miao=60; s_miao--; //减秒钟报警数据 } write_sfm2(2,3,s_shi); // 显示时 write_sfm2(2,6,s_fen); // 显示分 write_sfm2(2,9,s_miao); // 显示秒 write_com(0x80+0x40+9);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1==5) //设置强光报警 { if(key_can==2)// { qiang_gx++; //加强光报警数据 if(qiang_gx>=100) qiang_gx=100; } if(key_can==3)// { qiang_gx--; //减强光报警数据 if(qiang_gx<=ruo_gx) qiang_gx=ruo_gx; } write_sfm2(1,7,qiang_gx); write_com(0x80+6);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1==6) //设置弱光报警 { if(key_can==2)// { ruo_gx++; //加弱光报警数据 if(ruo_gx>=qiang_gx) ruo_gx=qiang_gx; } if(key_can==3)// { ruo_gx--; //减强光报警数据 if(ruo_gx<=1) ruo_gx=1; } write_sfm2(2,7,ruo_gx); write_com(0x80+0x40+6);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 write_eeprom(); //保存数据 }}/*********************报警函数***************************/voidclock_beep(){ staticucharvalue1,value2,value3; if((guangxian>=qiang_gx)||(guangxian<=ruo_gx)) //光线报警 { value2++; if(value2>=2) //循环2次都是报警增强抗干扰 { flag_gx=1;//光线报警 } }else { value2=0; flag_gx=0; } if(xuexi_start==1) //已经开始学习了 { if(distance<=set_d) //距离报警 { value1++; if(value1>=2) //循环2次都是报警增强抗干扰 {

温馨提示

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

最新文档

评论

0/150

提交评论