欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于51单片机的数字电容测量仪设计实验报告-.doc

    • 资源ID:4957691       资源大小:2.48MB        全文页数:44页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51单片机的数字电容测量仪设计实验报告-.doc

    电子技术实验报告设计课题 基于单片机的数字式电容仪设计 毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日【摘要】 随着科技的不断发展,人类的不断进步,在电子技术领域的发展可谓突飞猛进,然而电容器在电子线路中得到广泛的应用,它的容量大小对电路的性能有着重要的作用。因此,电容量的测量在日常使用中就不可避免。本设计详细介绍了一种基于单片机的数字式电容测量仪设计方案及实现方法。设计的主要方法是采用555芯片构成单稳态触发器,将电容容量转换为脉冲宽度。通过单片机的计时器测量脉宽, 根据已知的R值,通过单片机的运算功能,计算出电容容量,最后,再通过单片机的普通I/O口控制液晶屏显示出电容容量的计算结果。系统的测量范围为10pF 500uF, 具有多个量程,可根据用户需要由用户选择,与用户的交互是通过键盘实现,不同量程的实现是通过单片机的I/O口控制继电器的吸合与断开来选择不同的R值,从而实现不同的量程。同时,本设计注重设计方法及流程,首先根据原理设计电路,再通过protues仿真,利用keil编程,进而借助altium designer 制作PCB,最后到焊接元器件,调试直至成功。【关键词】 电容测量; 脉冲宽度; 单稳态触发器; 单片机; lcd显示目录1 系统方案设计- 5 -1.1 设计说明及要求- 5 -1.1.1 设计说明- 5 -1.1.2 设计要求- 5 -1.2方案- 6 -1.3方案- 7 -1.4方案- 7 -1.5 三种方案作简单的比较- 8 -2 单元电路设计- 9 -2.1 工作原理- 9 -2.2 硬件电路设计- 11 -2.2.1 单片机电路设计- 11 -2.2.2 555时钟芯片与单片机连接- 12 -2.2.3 低脉冲产生电路- 13 -2.2.4 键盘电路- 13 -2.2.5 指示灯电路- 14 -2.2.6 量程选择电路- 14 -2.2.7 液晶显示电路- 16 -2.3 软件设计- 17 -2.4 量程范围设置- 17 -2.5 altium designer 原理图设计及PCB制作- 18 -2.4.1 原理图设计- 18 -2.4.2PCB制作- 18 -2.4.3设计结果- 19 -3系统测试- 19 -3.1 测量100nf的电容- 19 -3.2 测量4.7uf的电容- 21 -3.3 测试结果- 22 -3.1 误差分析- 22 -4 结论与心得体会- 23 -5 参考文献- 24 -6 附录- 24 -附录1 元器件清单- 24 -附录2 程序清单- 25 -1 系统方案设计1.1 设计说明及要求1.1.1 设计说明框图中的外接电容是定时电路中的一部分。当外接电容的容量不同时,与定时电路所对应的时间也有所不同,即C=f(t),而时间与脉冲数目成正比,脉冲数目可以通过计数译码获得。 1.1.2 设计要求(1)基本部分 自制稳压电源。 被测电容的容量在0.01F至100F范围内 设计两个的测量量程。 显示测量结果,测量误差小于20%。(2)发挥部分 至少设计两个以上的测量量程,使被测电容的容量扩大到100PF至100F范围内。 测量误差小于10%。为实现该设计,达到相应的设计要求,本次设计中考虑了三种设计方案,三种设计方案中主要区别在于硬件电路和软件设计的不同,对于本设计,三种方案均能够实现,最后根据设计要求、可行性和设计成本的考虑选择了基于STC89C52单片机和555芯片构成的单稳态触发电路测量电容的方案。现在一一介绍论证如下。1.2方案如果三角波输入给以被测电容器作为微分电容的微分电路,在电路参数选择适当的条件下,微分电路的输出幅度与Cx成正比,再经峰值检测电路或精密整流及滤波电路,可以得到与Cx成正比的直流电压Ux ,然后再进行A/D转换送给数字显示器,便可实现所要求的函数关系。(电路如图11所示)设三角波函数式为:UI=K(0 <1) UI=K(<2) 因为所以 (0 <1) (<2) 图1-1 方案电容测量框图1.3方案用下图的框图代替A/D转换器,可得到第二种方案。图中压控振荡器输出矩形波,它的频率fx与Ux 成正比,而Ux与被测电容Cx成正比,因而fx与Cx成正比。在计数控制时间Tc等参数合适的条件下,数码管显示器的数字N与Cx的大小可符合题中所要求的函数关系。(电路如图12所示)图1-2 方案电容测量框图1.4方案单稳态触发器接收单片机的窄脉冲触发信号Trig, 输出一个脉冲宽度与待测电容CX 的容量成正比的信号VO。单片机通过检测VO 高电平持续时间来计算电容大小,并将结果显示在液晶屏上。测量过程中, 通过控制单稳态触发器的充电电阻阻值, 实现10pF 500uF 范围内电容的测量。(电路如图1 - 3所示)图1-3 方案电容测量框图1.5 三种方案作简单的比较比较上述三种方案可知,方案采用了A/D转换器,价格比较昂贵;方案比较复杂,安装调试困难;方案电路简单,原理清晰,易于实现,易于控制,本设计就是基于方案展开的。2 单元电路设计2.1 工作原理系统测量的电路原理图如图2-1 所示。电路主要由单片机U1、NE555 定时芯片U2 和检测电容CX 组成。NE555 定时器芯片的6 脚与7 脚相连, 与电阻R和待测电容CX 组成单稳态触发电路。图2-1 系统测量原理图由图2-1可知, NE555 定时器内部主要由电阻分压器、电压比较器OP1 OP2 、与非门G1 G3、输出缓冲反相器G 4 和集电极开路的三极管T 组成。G1、G 2 构成基本RS 锁存器。电阻R1 和电容C1 构成NE555 定时器的上电自动复位电路。复位之后, G3的输出为高电平, 三极管T 处于饱和状态, 待测电容CX 被短路。单片机P37 引脚在上电时的默认电平是高电平。可见, 上电复位后, 比较器OP1、OP2 的输出为高电平, R = S = 1, RS 触发器处于保持状态, 单稳态触发器输出稳态0。系统需要测量时, 单片机的P37 引脚上输出负向窄脉冲VTR 控制单稳态触发器进入暂态, 即可实现一次测量。工作时序图如图2-2 所示。VTR 电平变低后, 比较器OP 2 的输出为低电平。此时, S = 0, R =1, RS 触发器处于置1 状态, 单稳态触发器进入了暂态1。G3 输出的低电平使三极管T 截至, 电源通过电阻R 开始对待测电容充电, 如图2-2 的VCX 波形所示。当VCX 上升到电源电压的三分之二后, 比较器OP1翻转, 使得R = 0。由于VTR 的脉冲宽度为T1 , 在VCX升到三分之二电源电压前已经拉高。此时, R = 0, S= 1, 单稳态触发器的暂态1 结束, 返回到稳态0, 暂态的持续时间为TW , 如图2-2 的VO 波形所示。在暂态期间, 如果VTR 的低电平宽度变为T2 , VCX 到达翻转点后还没有变高, 基本RS 触发器就会进入到R = 0,S = 0的禁止状态, 输出VO 的波形无法预测, 测量出错误结果。因此, 要保证T1 < TW 。图2-2 工作时序图根据RC 暂态电路理论可知, TW 的时间宽度计算公式为:TW = ln3RCX = 1. 1RCX由该公式可知,单稳态的暂态1 持续时间与待测电容CX 的容量成正比 。把输出信号VO 送到单片机的INT0 引脚,控制定时器0 计算出暂态1 期间的标准时钟个数, 就可实现脉冲宽度测量, 从而计算出电容容量。2.2 硬件电路设计2.2.1 单片机电路设计为使单片机正常工作,除电源供电部分外,还需提供晶振电路和复位电路。具体电路如下: 图2-3 单片机工作电路由图2-3可知,9脚外接的是按键复位电路,18,19脚外接的是晶振电路,这样,就构成了单片机正常工作的必备电路。同时,为使P0口正常工作,并增加其带负载能力,P0口需接了上拉电阻(在图中未画出)。2.2.2 555时钟芯片与单片机连接图2-4是555时钟芯片构成的单稳态触发电路,6脚和7脚接在一起,R2和C4构成商店复位电路,2脚用于接收单片机P3.7口产生的低脉冲,3脚接于P3.2脚,用于门控制计时器0的启动与停止。从而将电容容量转为脉冲宽度。图2-4 555芯片与单片机的连接2.2.3 低脉冲产生电路如图2-5所示,按键接于P3.3口,即外部中断1接口,因此低脉冲是利用中断实现的,P3.7口产生低脉冲,可在软件中的外部中断1函数中实现,整个过程为,需要测量时,按键,产生外部中断,利用外部中断,用软件再在P3.7口产生一个低脉冲,之所以利用中断实现该功能,是为了增加产品的可靠性,因为按键的时间是比较长的,直接用按键产生低脉冲可能导致T1 > Tw ,导致测量错误。而利用中断,可以直接在中断函数中产生一个固定时间的低脉冲,保证了测量条件,避免发生错误。图2-5 按键产生低脉冲电路2.2.4 键盘电路如图2-6所示键盘电路主要用于与用户进行交互,如用户需要选择量程时,就必须交互。键盘分为独立键盘和矩阵键盘,这里只需要实现量程的选择,共四个量程,故无需矩阵键盘,4个独立按键就完全够用了。图2-6 键盘电路2.2.5 指示灯电路如图2-7所示,指示灯主要用于给用户以提示,如当前量程提示,超量程提示等等。 D2用于超量程提示,D6用于电源提示。图2-7 指示灯电路2.2.6 量程选择电路在图2-4中可以看到,在RC充电回路中,R值是固定的,不可变的,那么量程也显然是不可变的,因此,需要在此加入可调节充电回路电阻的电路部分,这里,利用继电器可以简单实现。具体电路如图2-8所示,利用继电器时需特别注意,由于单片机输出电流是很小的,不足以驱动继电器吸合,因此要加驱动电路,在这里,选择ULN2003芯片来实现。当然,也可以利用典型的三极管驱动来实现,虽然选择的是芯片实现驱动,在这里也将典型的三极管驱动电路列于此。如图2-9所示。图2-8 实现量程选择电路图2-9 利用三极管的驱动电路2.2.7 液晶显示电路 如图2-10所示,lcd接与P1口,用于显示电容值以及一些相应的测量信息。图2-10 lcd显示电路至此,整个电容测量仪的硬件设计部分就设计好了,接下来,需要的就是与之相匹配的软件支持了。2.3 软件设计软件编程平台选择最常用的keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的C语言编程。在编程中,将该程序分为三个模块:延时模块,1602显示模块及主函数模块。方便调试与理解。具体程序见附录二。总体程序较长,但并不复杂,可根据需要重点看主函数,与硬件电路结合起来,注重程序后紧跟的注释,理解起来是比较容易的,在此就不再一一详细分析。2.4 量程范围设置由于量程的选择是非常重要的一个环节,在这里单独讨论量程的选择。系统采用单片机片内16 位的定时器测量TW 的宽度, 标准计数脉冲的周期为1 微秒时, 为确保计数器不发生溢出, 要求TW < 65 毫秒。同时, 为减小量化误差对结果的影响, 要求TW > 1 微秒。当TW >100 微秒以上时, 可忽略量化误差的影响。为满足10pF 500uF 的测量范围, 可通过设置不同充电电阻R 的阻值来实现。理论计算的电阻R 阻值、理论量程范围以及系统选择的量程范围如表2-1 所示。系统分为四个量程, 可测量10pF 500uF 的电容。表2-1 R值与量程范围的关系R值(欧姆)理论量程范围选择的范围10M9pF 5. 9nF10pF 5nF100K900pF 590nF5nF 500nF1K90nF 59uF0. 5uF 50uF100900nF 590uFF 50uF 500uF2.5 altium designer 原理图设计及PCB制作2.4.1 原理图设计图2-11 原理图设计2.4.2 PCB制作图2-12 PCB设计在此并没有布双层板,红色的线仅仅只是为了标志出跳线。2.4.3 设计结果图2-13 设计结果实物图各个按键功能如图中文字说明。3系统测试由于该作品需实现的功能仅为测电容,在此不列出其他的测试。3.1 测量100nf的电容在此以100nf电容测试为例,演示整个测试过程。测试标称值为104的电容,即测量电容值为100nf的电容。104的电容实物如图2-14所示。测试结果如图2-15所示。若量程选择错误,测试结果如图2-16所示。图2-14 100nf的电容实物图2-15 100nf电容正常测试图2-16 量程错误情况下的测试3.2 测量4.7uf的电容再以测试4.7uf电容为例,测试结果如图2-18所示。图2-18 测试4.7uf的电容3.3 测试结果将测量的一系列电容的电容值与标准值比较。比较结果如表3-1。表3-1 测量值与标准值比较标准值测量值误差300pf320pf6.70%100nf105.15nf5.15%4.7uf5.05uf7.40%100uf106.74uf6.74%由表3-1中数据可知,平均误差是6%,低于设计扩展要求的10%,测量范围是10pf500uf,满足设计要求的100pf100uf。测量结果由液晶直观显示。综合以上分析,该设计满足整体设计要求。3.1 误差分析由于产生的6%左右的误差,在这里简要分析一下误差产生的原因。电容测量的误差主要由NE555 定时器构成的单稳态触发电路的非线性误差T 、计数器的量化误差􀀁N 和标准计数脉冲的频率偏移TC 产生2 3 。因此有:系统采用的标准计数脉冲来自单片机内核时钟, 由片外的高精度晶振与片内电路自激振荡产生,频率非常稳定, 可以忽略其频偏对测量结果的影响。量化误差􀀁N 是数字电路的特有误差, 最坏的情况下等于 1。如采用12M 的晶振, 可获得1MHz 的标准计数脉冲, 量化产生的最大误差为1 微秒。通过设置充电电阻R 的阻值, 使TW 达到毫秒级时, 量化误差的影响非常小, 可以忽略。非线性误差是由器件的非线性特性产生的, 可通过硬件参数修正和软件算法补偿来减小。4 结论与心得体会总之,通过一系列仿真和设计,数字式电容测量仪还是比较成功的做出来了。一路下来还是比较坎坷,从原理到实物,从调试到调试成功,遇到了很多问题,在硬件的原理图设计中,遇到了一个当时觉得非常困难的问题,就是如何实现量程的选择,首先想到的就是用开关实现,由用户根据不同的选择拨动开关,这样虽然很容易的选择了不同的电阻,但是,拨动开关之后如何让单片机知道呢?因为只有单片机知道你选择了何种量程的电阻,才有法作相应的处理,于是想到在用一个按键来通知单片机,可是,这样的话,用户测量一次电容,将会按3次按键,这样无疑增加了操作的繁琐度。于是想到可以由用户按键通知单片机选择量程,用单片机控制某种芯片来选择不同的路径,从而引入不同的电阻。而这种芯片,也是通过查阅很久的资料才查到的,从CD4052到继电器也走了不少弯路,最后权衡各个方面,选择了易于控制的内阻很低的继电器。至此,解决了量程选择问题。可是,在后续的设计中,没有意识到继电器的驱动问题,就直接将他接于单片机的P0口,板子做出来之后,才发现无法驱动继电器,使继电器吸合。就这样,一步一步,最后又选择以ULN2003作为驱动。才得以解决这一系列问题。其次,软件设计也遇到了很多问题,通过很长的时间才调试成功。通过这次设计也收获了很多,知识层面上,学得了很多新知识,解决问题的新方法。实践方面,提高了动手能力,提高了解决实际问题的能力等等。在思想上,更加明白的坚持不懈的重要性,学习探索的重要性,实践动手的重要性。5 参考文献【1】 单片机基础第三版 李广弟 朱月秀 冷祖祁 编著 北京航天大学出版社,2007【2】 数字式电容测量仪设计 张玉芹, 洪远泉 廊坊师范学院学报(自然科学版) 2011 年6 月 第11 卷第3 期6 附录 附录1 元器件清单(1)晶振12M一个(2)stc89c52芯片一片(3)30pf 2个;10uf 1个;470uf 1个;0.33uf 2个;4.7uf 1个;1nf 1个(4)40脚活动底座一个(5)lcd液晶一个(6)按键6个(7)发光二极管6个(8)9引脚排阻 1个(9)680 6个;10k 1个;1k 2个;1k滑动变阻器 1个;10M 1个;100k 1个;100 1个;2k 1个;200 1个;(10) 开关1个(11) 整流桥1个(12)7805稳压芯片1片(13) 继电器 3个(14) ULN2003 1片(10)排针若干,杜邦线若干附录2 程序清单分5个文件:delay.h,delay.c,1602.c ,1602.h,main.c(a) delay.h程序清单:#ifndef _delay_h_#define _delay_h_#define uchar unsigned char#define uint unsigned intvoid delay_us(uint cnt);void delay_ms(uint cnt);#endif(b) delay.c 程序清单:#include "delay.h"void delay_us(uint cnt)uchar i;for(;cnt>0;cnt-)for(i=0;i<12;i+);void delay_ms(uint cnt)uchar i;for(;cnt>0;cnt-)for(i=0;i<125;i+);(c) 1602.h程序清单:#ifndef _1602_h_#define _1602_h_#include<reg52.h> sbit RS = P22; /定义端口 sbit RW = P21;sbit EN = P20;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1unsigned char pro_data(unsigned char mda);void LCD_write_com(unsigned char com);void LCD_write_Data(unsigned char Data); void LCD_init(void); void lcd_pos(unsigned char pos); void disp(unsigned char *p);void dispchar1(unsigned char *p);void dispchar2(unsigned char *p);void dispchar3(unsigned char *p);#endif(d) 1602.c程序清单:#include "1602.h"#include "delay.h" void LCD_write_com(unsigned char com) RS_CLR; RW_CLR; EN_SET; com = pro_data(com); P1 = com; delay_us(5); EN_CLR; void LCD_write_Data(unsigned char Data) RS_SET; RW_CLR; EN_SET; Data = pro_data(Data); P1 = Data; delay_us(5); EN_CLR; void LCD_init(void) LCD_write_com(0x38); / 显示模式设置 delay_ms(5); LCD_write_com(0x38); delay_ms(5); LCD_write_com(0x38); delay_ms(5); LCD_write_com(0x38); LCD_write_com(0x08); / 显示关闭 LCD_write_com(0x01); / 显示清屏 LCD_write_com(0x06); / 显示光标移动设置 delay_ms(5); LCD_write_com(0x0c); / 显示开及光标设置void lcd_pos(unsigned char pos)LCD_write_com(0x80|pos); void disp(unsigned char *p) / 第二行显示数据unsigned char i;lcd_pos(0x43);for(i=0;i<6;i+) if(4=i)LCD_write_Data(0x2e);LCD_write_Data('0'+(*p);p+; void dispchar1(unsigned char *p) / 第一行显示需要显示的提示字符串lcd_pos(0x00);while(*p != '0')LCD_write_Data(*p);p+; lcd_pos(0x4c);LCD_write_Data('f'); void dispchar2(unsigned char *p) / 第二行显示需要显示的提示字符串lcd_pos(0x40);while(*p != '0')LCD_write_Data(*p);p+; void dispchar3(unsigned char *p) / 第一行显示 第二行清空unsigned char i;lcd_pos(0x00);while(*p != '0')LCD_write_Data(*p);p+; lcd_pos(0x40);for(i=0;i<16;i+)LCD_write_Data(' '); unsigned char pro_data(unsigned char mda) /数据处理函数,将高位和低位互换unsigned char enddat;unsigned char i;enddat = 0;for(i=0;i<8;i+)enddat = enddat << 1;if(mda & 0x01 = 1)enddat = enddat | 0x01;else enddat = enddat | 0x00;mda = mda >> 1;return enddat;(e)main.c程序清单:#include <reg52.h>#include "1602.h"#include "delay.h"sbit vo = P32; / 用于检测P3.2口的值,计算时间。 计时器0的开与断sbit tr = P37; / 产生一个低电平脉冲 / 超量程提示灯sbit ledclc = P27;sbit con1 = P00; / 用于控制继电器,实现档位选择sbit con2 = P01;sbit con3 = P02;sbit key1 = P03; / 独立按键部分,用于用户选择量程sbit key2 = P04;sbit key3 = P05;sbit key4 = P06;sbit led1 = P23; / 量程提示灯sbit led2 = P24;sbit led3 = P25;sbit led4 = P26;unsigned int tw; / 用于获取定时器的数值float ftemp; / 用于计算电容值的中间变量unsigned long int c;/ 存放电容值unsigned char need; / 需要测量时置1,一次测量结束置0unsigned char R; / 表示不同的档位unsigned char flag; / 数据处理结束置1unsigned char temp8; / 存放电容值的各个位 unsigned char zimu1 = " range is higher" /量程太高unsigned char zimu2 = "The value of Cap"unsigned char zimu3 = "please press key"unsigned char zimu4 = " to measure "unsigned char zimu5 = " range is lower "void process(unsigned long int c); / 数据处理函数void keyscan(); / 键盘扫描函数void ledlight(unsigned char R); /量程指示灯函数void init_timer0() / 定时器0 初始化 TMOD = 0x09; / gate置1,方式1,16位计时,定时器由P3.2控制开断TH0 = 0x00;TL0 = 0x00;EA = 1;ET0 = 1; TR0 = 1;void init_INT1 () / 定时器0 初始化EA = 1;IT1 = 1; / 下降沿触发EX1 = 1; void main() ledclc = 1; / 超量程提示灯熄灭 need = 0; / 一开始无需测量 con1 = con2 = con3 = 0;flag = 0; init_timer0(); / 初始化init_INT1();LCD_init(); dispchar1(zimu3);dispchar2(zimu4);while(1) if(need = 1)/ 当需要测量时if(vo = 0 ) /vo = 0时检测计数器的值可能还没开始计数,可能计数结束 if(TH0 != 0x00 | TL0 != 0x00) / 是计数结束 若有读数,用tw 存下 tw = TH0 << 8; tw = tw | TL0; TH0 = 0x00; / 一次结束,计时器清零 TL0 = 0x00;need = 0; / 需要再次测量时,need置1.避免tw的值被更/改 即不需要测量时,一直保持 EX1 = 1; / 开外部中断1 else / 反之,证明没有计数,无电容,默认值tw置0 tw = 0; ftemp = tw / 1.1 ; / 计算电容值 根据公式 tw = 1.1 * R * Cc = (unsigned long int)(ftemp )*100; /扩大了一百倍 便于后续程序/取两位小数点process(c); / 调用数据处理函数,根据不同的R值进行处理 if(flag = 1 ) / 数据处理结束 每次处理结束,证明需要更新显示的数据if(tw>=50000 | ledclc = 0)/ 量程超出dispchar3(zimu1); / 量程太高ledclc = 0;else if(tw<=100 && ledclc = 1) /量程太低dispchar3(zimu5);ledclc = 0;else dispchar1(zimu2);disp(temp); flag = 0;keyscan(); void timer0() interrupt 1 / 定时器0中断 用于超量程提示 ledclc = 0;void exint1() interrupt 2 / 外部中断0 用于产生低脉冲,启动555定时器unsigned char a;tr = 1; / tr端一个负脉冲a = 1;while(-a);tr = 0;a = 20;whil

    注意事项

    本文(基于51单片机的数字电容测量仪设计实验报告-.doc)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开