微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于AT89C2051单片机的数字电容表设计

基于AT89C2051单片机的数字电容表设计

时间:11-04 来源:互联网 点击:
5 软件设计

程序用C语言编写。软件部分由主程序、定时中断服务子程序等模块组成。定时器T0作被测电容器充电时间的计数用。定时器T1用于定时中断服务,定时时间为5 ins,即5 ms产生一次中断。数组BitTab用来存储位驱动码,DispTab[11]用来存储字形码,数组DispBtlf的4个元素分别用来存储从定时器T0读出的数据的个、十百千位的4位数字。程序显示每一位数码的时间为5 ms,因此显示完整的4位数的周期为20 ms(4次中断)。每过240 ms(48次中断)刷新一下数据,即每过240 ms测一次电容量,测量时间小于2 ms,由于这一时间小于中断的时间5 ms,因此在测量过程中不会出现中断现象。测量电容时P1.2口输出高电平,电容开始充电,与此同时定时器T0开始计数,当电容器充电达到基准电压时,P3.6口输出高电平,据此程序做出判断停止T0的计数,并读出数据送数码管显示。如果被测电容器的容量超出测试档的量程,则计数值大于或等于2 000,显示结果为千位数显示1,其他三位数不显示。经仿真和电路测试,发现单片机判断P3.6口是否输出高电平要花3个机器周期,这会使显示值增加3,因此在程序中对此误差进行了修正,对计数值减去了3。字形码的输出用了P3口的P3.0~P3.5,P3.7,P3.6为空,P3口输出的数据通过数组DispTab获得。数据位和字形的对应关系如表1所示。



6 安装与调试

该设计用AT89C2051单片机集成电路,X1用12 MHz的石英晶体,S1选用1×4的波段开关,DS1~DS4选用共阴LED数码管。安装前先将C语言源程序用KEIL 51编译成目标文件即HEX文件,再用编程器将HEX文件写入AT89C2051芯片。调试工作主要是通过对RP1的调节来调整基准电压,最好是通过对一个精度比较高的的电容器的测量来进行调节,而不是直接测量基准电压。具体方法是,选一个经确认容量比较准确的电容器,如15 nF的电容器,将S1置于20 nF档上,调节RP1是测量显示值为1 500。选择的电容器容量至少要大于相应量程的50%,最好是接近满量程,才能调得比较准确。该档调试好后其他各档也就调试好了。如果发现某档精度有问题,可改变其相应充电电阻的阻值来进行调整。在使用过程中,当S1置于2 nF档时,在没有接人测试电容器时,有10 pF左右的显示值是正常的,因为这是电压比较器的输入电容和电路的分布电容。

只要在测量读数时间去掉这一数值即可。因此在调试时不要选择该档,以免因分布电容影响调试得准确性。

C文件源程序如下:



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top