基于51单片机电容表设计
(仿真+程序+设计报告)
功能介绍
具体功能:
1.测量有四个档位,2nf档、20nf档、200nf档和2000nf档;
2.采用六位数码管显示测得电容;
3.若测量值超过了测量范围,最高位显示1;
添加图片注释,不超过 140 字(可选)
程序
#include<reg52.h>
/***微信公众号:木子单片机********/
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P3^0;//定义锁存使能端口 段锁存
sbit CAP=P1^2;//运放输出连接端,当输出高电平时停止计时
sbit nf=P3^1;//测量控制总按键,低电平有效
sbit lm1=P1^3;
sbit lm2=P1^4;
sbit lm3=P1^5;
sbit lm4=P1^6;
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
sbit key4=P3^5;
unsigned int num;
unsigned char code
dofly_DuanMa1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F,不显示小数点。
unsigned char code
dofly_DuanMa2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};// 显示段码值0~F,显示小数点。
dofly_WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
void Delay(unsigned int t); //延时函数声明
void delayms(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void ke1(void) ;
void ke2(void) ;
void ke3(void) ;
void ke4(void) ;
void ke1(void)
{
TempData[0]=dofly_DuanMa2[num/1000];
TempData[1]=dofly_DuanMa1[num%1000/100];
TempData[2]=dofly_DuanMa1[num%1000%100/10];
TempData[3]=dofly_DuanMa1[num%1000%100%10];
TempData[4]=0x37;
TempData[5]=0x71;
}
void ke2(void)
{
TempData[0]=dofly_DuanMa1[num/1000];
TempData[1]=dofly_DuanMa2[num%1000/100];
TempData[2]=dofly_DuanMa1[num%1000%100/10];
TempData[3]=dofly_DuanMa1[num%1000%100%10];
TempData[4]=0x37;
TempData[5]=0x71;
}
void ke3(void)
{
TempData[0]=dofly_DuanMa1[num/1000];
TempData[1]=dofly_DuanMa1[num%1000/100];
TempData[2]=dofly_DuanMa2[num%1000%100/10];
TempData[3]=dofly_DuanMa1[num%1000%100%10];
TempData[4]=0x37;
TempData[5]=0x71;
}
void ke4(void)
{
TempData[0]=dofly_DuanMa1[num/1000];
TempData[1]=dofly_DuanMa1[num%1000/100];
TempData[2]=dofly_DuanMa1[num%1000%100/10];
TempData[3]=dofly_DuanMa1[num%1000%100%10];
TempData[4]=0x37;
TempData[5]=0x71;
}
bit key(void)
{
if(nf==0)
{
delayms(10);
if(nf==0)
return 0;
}
else
return 1;
}
void Delay(unsigned int t)
{
while(--t);
}
void delayms(unsigned char t) //约延时1ms
{
while(--t)
{
Delay(245);
Delay(245);
}
}
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;
for(i=0;i<Num;i++)
{
DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;
P2=dofly_WeiMa[i+FirstBit]; //取位码
DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
}
}
硬件设计
使用元器件:
单片机:AT89C51;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
结构框图:
添加图片注释,不超过 140 字(可选)
设计资料
01仿真图
本设计使用proteus7.8版本设计!具体如图!
添加图片注释,不超过 140 字(可选)
02程序
本设计使用Keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
03设计报告
一万字设计报告,具体如下!
添加图片注释,不超过 140 字(可选)
04设计资料
资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件 、设计报告等。具体内容如下,全网最全! !
添加图片注释,不超过 140 字(可选)
资料获取请观看前面演示视频!
点赞分享一起学习成长。