资源描述
本科毕业设计题目:基于STM8单片机的电容触摸按键设计与实现学 院: 应用科技学院 专 业: 电子信息工程 年 级: 2010级 学 号: 120352010069 姓 名: 邵晓斌 指导教师: 苏伟达 2012年4月20日基于STM8单片机的电容触摸按键设计与实现应用科技学院学院 电子信息工程专业120352010069 邵晓斌 指导老师 苏伟达【摘要】根据智能家居双控触摸开关项目的需求,提出一种工艺成本低、检测方便的输入方式,给出系统的软件控制流程,基于STM8系列单片机技术对触摸按键进行软硬件设计,实现一个适合安装在86盒的触摸开关。经测试,在实际运行环境中,证明该系统运行稳定,使用灵活,在低成本的电路中适用性较强。【关键词】STM8;按键;触摸;软件STM8 microcontroller based design and implementation of capacitive touch buttonsScience and Technology Practising College Fujian Normal UniversityElectronic Information Engineering 120352010069 Shao Xiaobin Tutor: Su WeidaAbstract Based on intelligent household dual touch switch control requirements of the project, put forward a kind of process, lower cost, and convenient detection input mode, software control flow of the system is given, based on STM8 series single chip microcomputer technology to touch keys for software and hardware design, to achieve a suitable touch switch installed in 86 boxes. After the test, in the actual operation environment, proved that the system runs stably, flexible use, with a strong applicability in low-cost circuit.Key Words STM8;buttons; touch; soft. 目录1绪论11.1 引言11.2 触摸按键技术的研究现状与发展趋势11.3 本毕业设计的主要工作12. 电容式触摸技术的基础22.1 电容触摸感应按键的基本原理22.2 RC感应原理22.3 RC硬件实现32.4 RC软件实现43系统方案设计53.1 触摸开关系统结构组成53.2 触摸开关系统方案的优点54. 系统硬件设计64.1 单片机最小系统电路设计64.2触摸按键检测电路设计64.3面板LED背光指示电路设计74.4电源供电系统的电路设计84.4.1 AC-DC电源变换电路设计84.4.2 LDO线性稳压电路设计94.5交流电过零检测电路设计94.6驱动电路设计114.6.1 继电器驱动电路设计114.6.2 蜂鸣器驱动电路设计115.系统软件设计125.1 软件设计方法125.2 软件总体设计125.3 软件流程图136.结束语14致谢14参考文献14附录1 系统原理图15附录2 系统PCB版图16附录3系统源程序1731绪论1.1 引言在传统的按键输入检测系统中,主要还是以机械式按键和电阻式触摸按键为主,为解决传统的机械式按键方式易磨损,寿命短等问题,市面上的消费类电子产品逐渐正式采用电容式触摸感应按键,以取代传统机械式的按键。电容式触摸按键的特点是按键美观、造价低廉,机构简单易于安装,防水防污,耐用、寿命长3,还能提供滑动条的功能。但是电容式触摸按键也有很多的问题,因为没有机械结构,所有的检测都是电量的微小变化,所以对于各种干扰敏感得多。针对此趋势,ST意法半导体公司推出了一个基于STM8系列的8位通用且内置控制器(MCU)功能的电容式触摸感应按键(Capacitive Touch Sensor)方案无需增加专用触摸感应芯片,在硬件上仅结合简单的外围检测电路即可轻松实现电容式触摸感应的检测,在软件上使用软件滤波算法去屏蔽各种复杂环境的干扰,整套方案灵活、成本低、工作可靠,不需要开模等优点7,更方便客户进行二次开发。1.2 触摸按键技术的研究现状与发展趋势当今电子产品市场中,智能手机、平板电脑、MP3等便携式电子产品都在逐渐开始使用触摸技术来作为人机交互。触摸控制技术又可分为触摸屏技术和触摸按键技术5。在触摸技术方面,目前使用较多的是电阻式触摸按键与电容式触摸按键。电阻式的触摸按键由多块导电薄膜按照按键的位置印制而成,需要在设备表面贴一张触摸薄膜。电阻式触摸按键虽然价格低廉,但其导电膜耐用性比较低。因此,电容式触摸按键便成了一种理想的替代方案。电容式触摸按键具有在非金属操作面板上无须开孔处理、防水防污、易清洁、无机械开关且寿命长等优点。近几年随着苹果公司将电容触摸感应技术从笔记本引用到iPod后,电容触摸感应已经逐渐应用在目前几乎所有的电子产品,从笔记本电脑、智能手机、PDA、游戏机等手持设备,到ATM机、银行排队取号机等自助终端产品,再到冰箱、空调、洗衣机、热水器、电磁炉等小家电,无不以加入电容触摸感应为创新的卖点。目前,世界知名电子元件生产商均加大了对电容式触摸按键的应用研究,并推出众多的专用的电容触摸感应芯片,也有众多基于MCU集成类的IC。电容式触摸技术具有灵敏度高、分辨率高、清晰度高的特点,其技术的发展潜力很大,因而目前采用较多的触摸屏还是电容式的。随着相关技术的发展,电容式触摸性能将更加完善,种类还会日渐增多,应用范围更加广泛。1.3 本毕业设计的主要工作本毕业设计选用ST意法半导体公司的STM8S003F3P6芯片为程序控制微处理器,处理触摸按键是否被按下,LED指示灯是否发光,继电器是否工作,从而判断按键是否可控可响应,完成触摸开关的设计。本毕业设计先进行对整个系统的软硬件功能规划,完成系统总体方案的设计。然后进行各个相关子模块电路的详细设计,设计完善的功能电路。再对PCB进行Layout,完成PCB设计并送至厂家加工,然后完成成硬件焊接的所有工作,再而完成软件的编写,并结合硬件板对整个系统进行联调,最终得到一个功能完善的产品。再者是毕业论文的撰写,完成一个大学里面完整的毕业设计。2. 电容式触摸技术的基础2.1 电容触摸感应按键的基本原理电容式触摸感应按键的基本原理就是一个不断地充电和放电的张弛震荡器,如果不触摸开关,张弛震荡器有一个固定的充放电周期,频率是可以测量的4。如果我们用手指或者触摸笔接触开关,就会增加电容的介电常数,充电周期就会相应减小。所以,我们要不停测量周期的变化。就可以侦测触摸动作。具体测量的方式有两种:(1).测频法:可以测量频率,计算时间内的固定周期数。如果在固定时间内测到的周期数较原先校准的为少,则此开关便易视为被按压。(2).测周法:即在固定的张弛周期间计算系统时钟周期的总数8。如果开关被按压,则张弛震荡器的频率。会减少,则在相同次数周期会测量到更多的系统时钟周期。2.2 RC感应原理RC采样原理就是通过测量触摸电极电容的微小变化,来感应人体对触摸式感应器的触摸。电容C通过一个固定电阻周期性地充放电。电容值取决于以下几个参数:电极面积(A),绝缘体相对介电常数(R)、相对空气湿度(0)、以及两个电极之间的距离(d)。电容值可由下列公式计算得出: C=(R*0*A)/dRC采样的基本结构图如下图2.2.1所示,固定电压施加在VIN 两端,VOUT 的电压随着电容值的变化而相应的增加或降低,如图2.2.2所示。图2.2.1 RC网络上的压降图2.1.2 测量充电时间通过计算VOUT 的电压达到阀值VTH 所需要的充电时间(tC),来得到电容值(C)。在触摸感应应用中,电容值(C)由两部分组成:固定电容(电极电容CX)和当人体触摸或者接近电极时,由人手带来的电容(感应电容,CT)。电极的电容应该尽可能的小,以保证检测到人手触摸。如图2.1.3所示。因为通常人手触摸与否,带来的电容变化一般就是几个pF(通常5pF)。利用该原理就可以检测到手指的是否触摸了电极。图2.1.3 是否触摸感应2.3 RC硬件实现在本系统设计中,只需要很少的微控制器开销,硬件资源只需要一个定时器捕获,硬件实现如图2.3.1所示。由R1,R2以及电容电极(CX)和手指电容(CT)并联的电容(大约5pF),形成一个RC网络,通过对RC网络充放电时间的测量,可以检测人手的触摸。所有电极共用一个“负载IO”引脚。电阻R1和R2尽量靠近MCU放置。电阻的阻值选取在几十千欧到几百千欧,此电阻用于调节触摸检测的灵敏度。电阻小灵敏度较高,可较少对噪声的影响。图2.3.1 电容触摸感应实现实例2.4 RC软件实现为了保证健壮的电容触摸感应的应用,充电时间的测量需要足够的精确。使用普通定时器进行充电时间的测量。对电容充电开始之前,定时器的计数值被记录下来,如图2.4.1所示。当采样I/O端口上的电压达到某个阀值(VTH)时,再次记录定时器的值。二者之差就是充电或者放电的时间。图2.4.1 定时器计数器值为了提高在电压和温度变动情况下的稳定性,会对电极进行连续两次的测量:第一次测量对电容的充电时间,直到输入电压升至VIH. 。第二次测量电容的放电时间,直到输入电压将至VIL 。具体如图2.4.2所示。图2.4.2 电容充放电时间的测量针对于上图2.4.2所示,以下将对电容充放电时间的测量对感应电极(感应I/O)和负载I/O引脚上的操作流程说明。步骤描述11. 负载I/O引脚设置成输出模式,输出VDD;2. 感应I/O引脚设置成输出模式,输出VDD;3. 保存定时器计数器的初始值(vih_start);21. 感应I/O设置成输入高阻模式Hi-Z,于是电极电容CX 开始充电;3当感应I/O引脚上的电压达到VIH ;1. 保存定时器计数器的值(vih_stop),并由此计算达到高电平VIH 的时间(vih_stop -vih_start),并保存;2. 感应I/O引脚设置成输出模式,输出VDD;3. 负载I/O引脚设置成输出模式,输出到地;4. 保存定时器计数器的初值(vil_start);4感应I/O引脚设置成输入高阻模式,于是电极电容CX 开始放电;5当感应I/O引脚上的电压将至VIL ;1. 保存定时器计数的值(vih_stop),并由此计算到低电平VIL 的时间(vih_stop -vih_start),并保存;2. 将两次测量值“vih_meas”和“vil_meas”相加并保存;3. 重复步骤1的操作。3系统方案设计3.1 触摸开关系统结构组成根据功能的定义,本系统即最终设计实现触摸按键然后执行电子开关动作响应。如下图3.1.1所示为本系统结构组成图。以MCU微控制器为核心,分为信号输入采集和输出执行单元,在硬件需要PCB触摸电极即触摸板、市电过零检测、灯光指示、声音指示、电子开关等模块组成的功能。图3.1.1 触摸开关系统结构组成图3.2 触摸开关系统方案的优点本系统即实现用继电器去控制各种各样的灯光、电器等等各式各样用电器的电源通断。当使用继电器控制AC220V用电设备时,如果在AC220V的峰值附近闭合,则会产生很大的火花,将会影响继电器的寿命并产生各种电磁干扰,如果在AC220V的过零点处闭合,将会减少影响,实现无火花不打火。本系统方案通过AC的过零点检测再下一个交流周期的零点实现继电器导通是本设计的最大优点;其次本系统是属于触摸型开关,在用材用料方面大量的节约铜合金材料,同时对于机械结构的要求大大减少。它直接取代传统触摸开关,操作舒服、手感极佳、控制精准且没有机械磨损。同时,触摸开关更具有人性化的关怀,在开关触摸位置上可以丝印对应的文字提示,个性化的文字提示呈现出更美观的效果,面板且采用水晶面板,LED透过水晶面板发出淡淡的微光,让深夜不再是完全的漆黑,足以让人形成方位和轮廓感,用户再也不用在漆黑的夜中找不着开关的烦恼了。4. 系统硬件设计4.1 单片机最小系统电路设计MCU采用ST意法利STM8S系列单片机,STM8S是基于8位框架结构的微控制器,该MCU是16MHz的哈佛结构和先进的STM8内核,3级流水线,性能较传统8位机有非常大的优势,选用该款MCU在本系统中满足需求并且有几点优点:u 价格:出货量巨大,成本极低,性价比极高u 资源:8K ROM、1K RAM资源足够本系统使用u 外设:1个SPI接口、1个串口,内部多个定时器等u 速度:主频16MHZ运行速率,SPI接口访问速率最大高达8M。建立一个STM8系统必须有以下几个部分组成:电源、复位电路、时钟、仿真与调试接口。具体如下说明:u 电源:STM8S工作在2.9-5.5v的宽电源范围内。本系统采用3.3.v供电u 复位电路:采用RC复位即可满足系统要求u 时钟:STM8可以选择三种时钟源:HIS(内部高速时钟)、LSI(内部低速时钟)、HSE(外部高速时钟),在本系统中采用HIS(内部高速时钟)再经过2分频的时钟作为主时钟u 仿真与调试接口:STM8所有系列单片机都是通过SWIM接口仿真与编程的,而SWIM接口只需要3根线连接就足够了,所以设计的时候非常简便,只要引出单片机的SWIM引脚、RESET引脚和GND引脚做成个接口,STM8仿真器即可对该单片机进行仿真、调试、下载程序。根据STM8S硬件特性和系统需求,设计如图4.1的最小系统电路。图4.1 STM8S最小系统4.2触摸按键检测电路设计本系统中触摸按键检测只需要简单的外围RC电路组成再配合内部定时器即可实现触摸按键的检测,如图4.2所示的虚线框,由PB5_Load引脚发出固定的频率通过R2和C4组成固定的振荡周期,当人体没去触摸TOUCH PAD,PB4_Acq引脚接收到的充放电是固定的,当人体触摸到TOUCH PAD的时候,由于人体相当于一个接大地的电容,因此会在TOUCH PAD触摸片和大地之间形成一个感应电容,感应电容与C4并联,电容变大,振荡周期变长,因而单片机PB4_Acq引脚检测到周期变长即可判断按键是否被压按了。图4.2 触摸按键检测电路4.3面板LED背光指示电路设计面板上LED背光灯的作用是指示目前在本系统中指示当前的开关状态,其另外一个作用是让用户在漆黑的夜中很容易找到开关的具体位置,具体电路设计如图4.3背光指示电路所示。在面板的中心位置安装两颗LED,红色LED表示开关开的状态,蓝色LED表示开关关的状态,在硬件上只需一个IO口再加个三极管对其蓝色LED进行反相驱动。图4.3 面板背光灯指示电路4.4电源供电系统的电路设计在整个系统中,电源电路的设计是非常关键的,本系统中的供电系统组成图如图4.4所示。图4.4 供电系统组成4.4.1 AC-DC电源变换电路设计在本系统中AC-DC电源变换电路中采用TNY266PN,该芯片是一款10W高效小功率隔离式开关电源用集成电路,芯片内部包括一个耐压700V的功率MOSFET开关管、电源控制器和保护电路组成。与传统的PWM控制器不同,它使用一简单的开/关控制器来稳定输出电压。漏极电压提供启动和工作能量,不需要变压器偏置绕组及相关电路,而且还在器件内部结合了自动重启动、输入欠压检测和频率抖动功能。具体电路如图4.1.1所示。 图4.4.1AC-DC电源变换电路电路工作原理:该电源使用TNY266P单片开关电源(U1)、线性光电耦合器PC718A(U2)和可调式精密并联稳压器TL431(U3)3片集成电路。CY1为安全电容,能滤除一次、二次绕组耦合电容产生的共模干扰。高频变压器用EE16磁心。图4.4.1中,交流电经BD1整流完在经过C2、L1、R2、C3等组成的滤波电路输出稳定的直流高压作为启动电源。由R3、C4、D1组成钳位,能吸收在“MOSFET”关断时由高频变压器一次绕组漏感产生的尖峰电压,保护“MOSFET”不受损坏。高频变压器输出的高频电压,经过快恢复二极管D2、C6和L2、C7整流滤波后,获得稳定的输出电压VCC。精密“光电耦合器”反馈电路由U2、U3等组成。输出电压VCC通过电阻分压器R7、R8获得采样电压,与TL431中的2.5V基准电压进行比较后产生误差电压,再经过光电耦合器去改变TNY266P的控制端电流,使占空比发生变化,进而调节VCC保持不变。改变输出电压可改变R7、R8的分压比。在本系统中VCC输出为5V,所以R7、R8采用阻值相等的电阻。若要改变其输出电压可以根据以下公式进行调整电阻的比例实现输出电压的调整。VCC=(1+R7/R8)*Vref,其中Vref=2.5V4.4.2 LDO线性稳压电路设计在本系统中由于AC-DC输出的电压纹波较大,在触摸按键检测中是电容微小的变化,要求电路中为其提供的电源要求比较高,要求电源的纹波和噪声要小,要注意避免由电源串入的外界干扰,所以在这增加一路稳压电路,使得输出的供电电源电压更具干净、稳定。图4.4.2 LDO线性稳压电路如上图4.2.1所示,U4采用AMS1117-3.3V的线性稳压器,在其输入端输出端加上其滤波电容滤波,使输出电压更平坦。4.5交流电过零检测电路设计交流过零检测的信号在功率调节中常有应用,而在本系统中为了保护继电器的寿命和减少产生各种电磁干扰也采用了过零检测电路。具体电路如图4.5.1 所示,电路结构是半波检测的,利用光电转换特性,用微处理器检测整形后梯形波的前后沿对应的时间,计算得出过零点的时刻。在电路中R13-R16与U5组成输入端,在正半波时,当交流电压高于U5的内部发光管的电压时,发光管发光,内部光敏三极管导通,光敏三极管被接到地,从而三极管Q3也导通,经过R19、R20分压获得跟单片机相同的电平。当交流电的电压低于U5内部发光二极管的工作电压时,发光二极管不发光,光敏三极管截止,Q3的基极处于高电平,Q3截止。D4防止在负半周电流损坏单向二极管,本电路中采用光耦隔离抗干扰性能好。图4.5.1 交流电过零检测电路如上图4.5.1图所示,我们对交流过零检测的输入输出波形进行了检测,从而计算出过零点的时间,具体的输出输出波形图如下图4.5.2所示。图4.5.2 交流电过零检测电路如上图4.5.2所示,我们对过零点检测的实现进行分析,Ui在A点处使发光二极管导通,单片机检测到第一个上升沿的时刻即t1, Ui在B点处使发光二极管开始截止,单片机检测到第一个下升沿的时刻即t2,依此类推,单片机分别检测并记录下C点、D点处的时间值t4与t6,则此交流电Ui的两个波峰所发生的时刻t2与t5可由(t1+t3)/2和(t4+t6)/2计算得到。交流电源周期T1=t5-t2,这样,从第二个波峰时刻t5到交流电源Ui的下一个过零点E的时刻t7的时间,刚好为交流电源T1的1/4,从而我们可以很精准的计算出E点的时刻,即:t7=t5+(T1/4)。最后单片机还需保留这三个时刻t1=t4,t2=t5,t3=t6,为下一次检测服务2。4.6驱动电路设计4.6.1 继电器驱动电路设计在本系统中采用电子继电器在交流的零点时刻由单片机发出控制指令去控制输出控制各种各样的灯光或者用电器等等,具体的电路如下图4.6.1所示。图4.6.1 继电器驱动电路4.6.2 蜂鸣器驱动电路设计本系统中蜂鸣器属于预留的功能,在实际当中可以用于触摸开关模式配置成功等其他作用的提示音,具体的电路如下图4.6.2所示。图4.6.2 蜂鸣器驱动电路5.系统软件设计5.1 软件设计方法触摸开关系统的核心是单片机,在以单片机外围硬件全部搭接完成还不能实现全部的信号处理功能,还需通过软件编程来实现硬件设计里面的各个控制的功能,从而达到软件一体化调试运行整个系统。软件设计过程当中需满足本系统所以需求的功能要求,而软件处理该触摸式按键系统的功能要求主要有以下几个方面:(1).检测交流电过零点的时刻;(2).检测按键是否被按下;(3).输出控制背光灯与继电器;本系统采用的是STM8单片机,一般单片机都采用C语言开发居多,也相对简单直观。所以本次软件是基于IAR集成开发环境下采用C语言进行开发,利用从顶向下的思想设计进行模块化设计,与各个子程序模块为实现各部分功能的过程,再而通过主程序实现调用各个部分子程序的控制过程。5.2 软件总体设计 整个软件的核心在于触摸按键扫描,触摸按键扫描处理是在定时器中断实时扫描检测并获取键值,减轻主程序运行任务的负担,捕获零点时刻是由外部中断执行处理,主程序的主要任务即不断在检测判断按键是否有效,是否处于零点时刻。按键的检测是属于较高优先级,当按键被检测到被人体按下,再立马记录零点时刻,当两个条件都满足以后,控制继电器在下一个周期的零点吸合,由于继电器的吸合时间也是毫秒级的,所以在吸合前也要加个延时程序去过度。具体软件模块结构框图如下图5.1所示。图5.1 软件模块结构框图5.3 软件流程图程序的主流程图如图5.2所示,按键检测设计流程图如图5.3所示,系统软件流程是在系统上电之后首先是系统进行初始化,即外设初始化、定时器初始化、外部中断和GPIO等的初始化,等待初始化成功之后,即在检测按键是否被压按,没被压按即返回,当按键被人体压按时,并等待零点时刻的到来,再而控制继电器在下一个交流周期的零点吸合,同时背光灯指示状态也做相应指示。图5.2 主程序流程图 图5.3 主程序按键检测6.结束语触摸式按键的应用越来越广泛,如何有效地降低产品开发成本是必须考虑的问题6,本系统硬件设计中是利用RC电路充放电时间的检测原理来以判别按键是否被压按,这种方法不仅是可以检测单个按键,还可以检测矩阵按键,检测硬件电路相对简单,仅由外围RC构成充放电回路及主MCU组成,替代了原有专用的检测芯片,这样节省了硬件成本,在后期的其他产品应用大有可为。致谢在本次课题设计和实现的过程当中感谢苏伟达老师对我的悉心指导,在百忙之中亦能抽出时间来关注作品设计及论文撰写的整个过程,并且竭尽所能为我创造条件,解决实际过程中遇到的种种困难。另外,也感谢苏伟达多次对我专门指导,为我顺利解决了硬件电路设计、PCB电路板设计、系统软件编程及论文撰写提供最有利的方向。参考文献 1张俊.一个单片机工作者的实践与思考M .北京:北京航空航天出版社, 2008:205-2072盛占石,王青青交流电源过零点检测新方法J 仪表技术与传感器,2012,(2):106-1073廖明燕基于充放电原理的电容式触摸按键设计J电子设计工程,2010,28(10):142-1444管瑞基于张弛原理的JST080触摸按键的优化设计J武汉工业学院学报,2010,29(14):66-735方献良基于A/D的电容触摸按键电路设计J宁波方太厨具有限公司,2010,23(3):122-1256王秀霞,邵斌基于电场传感器MC33794的触摸按键设计J电子设计工程,2009,17(2):100-1017韩俊,戎蒙恬.低成本电容式触摸控制设计J.信息技术,2006(8):42-458陈林. 轻松实现电容式触摸感应按键开关设计J.电子产品世界,2009,17(2):74附录1系统原理图图附录1-1 触摸开关系统原理图附录2 系统PCB版图图附录2-1 触摸开关系统PCB图附录3 系统源程序#include/以下是常量变量的一些宏定义typedef unsigned char uint8_t;typedef unsigned short uint16_t;typedef unsigned long uint32_t; typedef uint32_t u32;typedef uint16_t u16;typedef uint8_t u8;/Load引脚:PB5#define Load 0 x20/Acq引脚:PB4/_Bool Load PB_ODR:2;u8 Acq=0 x10;/#define loadbitmask 0 x20#define GPIOA_BaseAddress 0 x5000#define GPIOB_BaseAddress 0 x5005#define GPIOC_BaseAddress 0 x500a#define GPIOD_BaseAddress 0 x500f#define GPIOF_BaseAddress 0 x5019typedef struct GPIO_struct volatile u8 ODR; /ODR:数据输出寄存器 volatile u8 IDR; /IDR:输入寄存器 volatile u8 DDR; /DDR:数据方向寄存器 0:输入 1:输出 volatile u8 CR1; /CR:端口控制寄存器 volatile u8 CR2; GPIO_TypeDef;GPIO_TypeDef *PORT_ADDR; /LED:PD2#define LED_HIGH PD_ODR |= 0 x04;#define LED_LOW PD_ODR &= 0 x04;#define LED_NEGATION PD_ODR = 0 x04;/BELL:Pc7#define BELL_HIGH PC_ODR |= 0 x80;#define BELL_LOW PC_ODR &= 0 x80;#define BELL_NEGATION PC_ODR = 0 x80;/LED:PD4#define CTRL_HIGH PD_ODR |= 0 x10;#define CTRL_LOW PD_ODR &= 0 x10;#define CTRL_NEGATION PD_ODR = 0 x10;void Clk_Config(void) CLK_CKDIVR_CPUDIV = 0; /系统时钟1分频 while(!(CLK_ICKR & 0 x02); /等待HSI准备好void delay(u16 n) u16 i,j; while(n -) for(i = 0;i 32;i +) for(j = 0;j ODR &= Acq; PORT_ADDR-DDR |= Acq; PORT_ADDR-CR1 &= Acq; /PORT_ADDR-DDR &= Acq; /PB_ODR |= Load; TIM2_CNTRH=0X00; TIM2_CNTRL=0X00; PORT_ADDR-DDR &= Acq; PB_ODR |= Load; while(PORT_ADDR-IDR&Acq)=0 x00); measure_time+=TIM2_CNTRL; measure_count+; PORT_ADDR-ODR |= Acq; PORT_ADDR-DDR |= Acq; PORT_ADDR-CR1 |= Acq; PB_ODR &= Load; TIM2_CNTRH=0X00; TIM2_CNTRL=0X00; PORT_ADDR-CR1 &= Acq; PORT_ADDR-DDR &= Acq; while(PORT_ADDR-IDR&Acq)=Acq); L measure_time+=TIM2_CNTRL; measure_count+; while(measure_count=155) return 1; measure_count=0; measure_time=0; return 0; void Delay(unsigned int t) u8 i; while(t-) for(i=0;i50)break; Delay(100); 21
展开阅读全文