51单片机电容测量电路+程序设计

发布者:温馨幸福最新更新时间:2020-09-15 来源: 51hei关键字:51单片机  电容测量  555芯片 手机看文章 扫描二维码
随时随地手机看文章

非原创,和大家分享一下

基于AT89C51单片机和555芯片构成的多谐振荡电路设计一电容测量电路,这种测量方法主要是通过一块555芯片来测量电容大小。让555芯片工作在直接反馈无稳态的状态下,555芯片输出一定频率的方波,其频率的大小跟被测量的电容之间的关系是:f=0.772/(R*Cx) ,固定R的大小,其公式就可以写为:f=k/Cx,只要能够测量出555芯片输出的频率,就可以计算出测量的电容。计算频率的方法可以利用单片机的计数器T0和中断INT0配合使用来进行测量。


1.3.1 系统硬件电路设计

该电路主要由单片机AT89C51、按键、继电器、74HC08、LCD16028、555芯片等构成,整体设计电路如图1-7所示。

图1-7


555模块简介

NE555管脚功能介绍:

1脚为地。2脚为触发输入端;3脚为输出端,输出的电平状态受触发器控制,而触发器受上比较器6脚和下比较器2脚的控制。


当触发器接受上比较器A1从R脚输入的高电平时,触发器被置于复位状态,3脚输出低电平;

2脚和6脚是互补的,2脚只对低电平起作用,高电平对它不起作用,即电压小于1Ucc/3,此时3脚输出高电平。6脚为阈值端,只对高电平起作用,低电平对它不起作用,即输入 电压大于2Ucc/3,称高触发端,3脚输出低电平,但有一个先决条件,即2脚电位必须大于Ucc/3时才有效。3脚在高电位接近电源电压Ucc,输出电流最大可打200mA。


4脚是复位端,当4脚电位小于0.4V时,不管2、6脚状态如何,输出端3脚都输出低电平。5脚是控制端。7脚称放电端,与3脚输出同步,输出电平一致,但7脚并不输出电流,所以3脚称为实高(或低)、7脚称为虚高。


555集成电路的框图及工作原理:

555集成电路开始是作定时器应用的,所以叫做555定时器或555时基电路。但后来经过开发,它除了作定时延时控制外,还可用于调光、调温、调压、调速等多种控制及计量检测。此外,还可以组成脉冲振荡、单稳、双稳和脉冲调制电路,用于交流信号源、电源变换、频率变换、脉冲调制等。由于它工作可靠、使用方便、价格低廉,目前被广泛用于各种电子产品中,555集成电路内部有几十个元器件,有分压器、比较器、基本R-S触发器、放电管以及缓冲器等,电路比较复杂,是模拟电路和数字电路的混合体,如图1所示。

555振荡器电路(无稳电路):

由555定时器构成的多谐振荡器如图9(a)所示,其工作波形见图9(b)。


接通电源后,电源VDD通过R1和R2对电容C充电,当Uc<1/3VDD时,振荡器输出Vo=1,放电管截止。当Uc充电到≥2/3VDD后,振荡器输出Vo翻转成0,此时放电管导通,使放电端(DIS)接地,电容C通过R2对地放电,使Uc下降。当Uc下降到≤1/3VDD后,振荡器输出Vo又翻转成1,此时放电管又截止,使放电端(DIS)不接地,电源VDD通过R1和R2又对电容C充电,又使Uc从1/3VDD上升到2/3VDD,触发器又发生翻转,如此周而复始,从而在输出端Vo得到连续变化的振荡脉冲波形。脉冲宽度TL≈0.7R2C,由电容C放电时间决定;TH=0.7(R1+R2)C,由电容C充电时间决定,脉冲周期T≈TH+TL。

1.3.2系统软件设计

系统主程序设计流程如图3-4所示,主要完成定时器的初始化,启动555芯片工作,等待中断,若有中断,则计算电容大小,显示电容大小,然后等待下一次中断。


proteus仿真

载入hex文件,如图1-8

图1-8

可以改变单刀双掷开关SW1,切换被测量的电容。LCD1602上即可显示被测电容的值,仿真时会有误差。


程序清单如下:

用keil c编译

本工程包含一个文件

电容测量.c



/******************************文件Main.c 如下****************************/

//编译环境 :keil c51

//mpu型号:stc89c52rc

//晶振频率:12M

//操作系统:win x

/*************************************************************************/

#include "reg51.h"

#include"intrins.h"                                                                                                                              //库函数


#define DATA P0

sbit RW=P2^1;                                                                                                                                            //1602写数据

sbit RS=P2^0;                                                                                                                                            //1602写地址

sbit EN=P2^2;                                                                                                                                             //1602工作使能

sbit b_test=P3^7;                                                                                                                                 //控制小灯的亮灭

sbit _reset=P3^5;                                                                                                                                 //555时基芯片工作控制信号

unsigned int T_flag,N,C,i,Dis1,Dis0;

unsigned int b[6]={0X13,0X0D,0X00,0X00,0X40,0X16};                          //显示C=00pF


/*******************************延时1ms*********************************/

void Delay1ms(unsigned int mm)

{unsigned int i;

for(mm;mm>0;mm--)

   for(i=100;i>0;i--);

}

/********************************检查忙否********************************/

void Checkstates()

{

unsigned char dat;

RS=0;

RW=1;

do{EN=1;                                                                                                                                                          //下降沿

   _nop_();                                                                                                                                                          //保持一定间隔

              _nop_();

    dat=DATA;

    _nop_();

              _nop_();

    EN=0;

}while((dat&0x80)==1);

}

/*******************************LCD写命令函数****************************/

void wcomd(unsigned char cmd)

{

Checkstates();

RS=0;

RW=0;

DATA=cmd;

EN=1;

_nop_();

_nop_();

_nop_();

_nop_();

EN=0;

}

/******************************LCD写数据函数*******************************/

void wdata(unsigned char dat)

{

Checkstates();

RS=1;

RW=0;

DATA=dat;

EN=1;

_nop_();

_nop_();

_nop_();

_nop_();

EN=0;

}

/********************************初始化***********************************/

void LCDINIT()

{

Delay1ms(15);

wcomd(0x38);                                                                                                                              //功能设置

Delay1ms(5);

wcomd(0x38);                                                                                                                              //功能设置

Delay1ms(5);

wcomd(0x01);                                                                                                                              //清屏

Delay1ms(5);

wcomd(0x08);                                                                                                                              //关显示

Delay1ms(5);

wcomd(0x0c);                                                                                                                              //开显示,不开光标


}


/********************************显示函数********************************/

void Display(void) //显示函数

{

unsigned char i,j;

unsigned char a[12]={0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53};//显示measurements

LCDINIT();

for(i=0;i<12;i++)                                                                                                                              //写显示第一行

[1] [2]
关键字:51单片机  电容测量  555芯片 引用地址:51单片机电容测量电路+程序设计

上一篇:搞定单片机采用6MHz的晶振,定时1ms,用定时器方式0
下一篇:51单片机制作电容电感测表

推荐阅读最新更新时间:2024-11-10 13:47

51单片机主要引脚功能
XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。 RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。 VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。 P0~P3 为可编程通用I/O 脚,其功能用途由软件定义 P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写 1 时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Fla
[单片机]
C51单片机数码管动态显示
数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: C51单片机由于运行速度很慢,在高刷新频率下,单片机的资源耗费很厉害,这样单片机就不可以再进行大量的计算工作,实际上,单片机在刷新时,只需要周期性的改变GPIO口的状态就可以了,剩下的时间其实都是在空转的状态下,我们能不能将这个空转的状态拿来用呢?当然是可以的啦,这里,我们利用单片机的定时器周期地产能中断,在中断内进行数码管的刷新工作,就可以将等待中断的这个CPU时间拿来做别的事情了。 硬件电路: 代码贴过来: 主函数
[单片机]
C<font color='red'>51单片机</font>数码管动态显示
51单片机复位电路设计
单片机在可靠的复位之后,才会从0000H地址开始有序的执行应用程序。同时,复位电路也是容易受到外部噪 声干扰的敏感部分之一。因此,复位电路应该具有两个主要的功能: 1. 必须保证系统可靠的进行复位; 2. 必须具有一定的抗干扰的能力; 复位电路应该具有上电复位和手动复位的功能。以MCS-51单片机为例,复位脉冲的高电平宽度必须大于2个机器周期,若系统选用6MHz晶振,则一个机器周期为2us,那么复位脉冲宽度最小应为4us。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。图1是利用RC充电原理实现上电复位的电路设计。实践证明,上电瞬间RC电路充电,RESET引脚出现正脉冲。只要R
[单片机]
<font color='red'>51单片机</font>复位电路设计
51单片机实验16:A/D模数转换(XPT2046)
关于A/D模数转换以及XPT2046芯片的内容请参考:https://blog.csdn.net/cax1165/article/details/87024388 #include reg52.h #include XPT2046.h sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; uc code x ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uc dig ; void delay(uc x) { uc i,j; for(i=1;i =x;i++) for(j=1;j =110;j++); } v
[单片机]
学习笔记之-51单片机定时计数器
一、单片机的时序 单片机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不一定相同,即所需的拍节数不同。 时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。 在一个时钟周期内,CPU仅完成一个最基本的动作。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。 机器周期:在计算机中,为了便于管理,常把一条指令的
[单片机]
学习笔记之-<font color='red'>51单片机</font>定时计数器
8051单片机教程第十二课:逻辑运算类指令
对累加器A的逻辑操作: CLRA;将A中的值清0,单周期单字节指令,与MOVA,#00H效果相同。 CPLA;将A中的值按位取反 RLA;将A中的值逻辑左移 RLCA;将A中的值加上进位位进行逻辑左移 RRA;将A中的值进行逻辑右移 RRCA;将A中的值加上进位位进行逻辑右移 SWAPA;将A中的值高、低4位交换。 例:(A)=73H,则执行CPLA,这样进行: 73H化为二进制为01110011, 逐位取反即为10001100,也就是8CH。 RLA是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。 例:A中的值为68H,执行RLA。68H化为二进制为01101000,按
[单片机]
详解51单片机控制步进电机
  接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝上买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相(后来才知道,四相和两相步进没什么区别的!!),接线共有六根,外形如下图所示: 拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步
[单片机]
详解<font color='red'>51单片机</font>控制步进电机
51单片机定时器工作方式
一、工作方式0 定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位构成13位的计数器,此时TL(1/0)的高3位未用。 1. 2.C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的初学者要注意。 3.GATE:看上图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去
[单片机]
<font color='red'>51单片机</font>定时器工作方式
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved