标题:
简易电阻电容电感RLC测量仪 proteus仿真及程序
[打印本页]
作者:
chengtaixiang
时间:
2016-12-30 14:32
标题:
简易电阻电容电感RLC测量仪 proteus仿真及程序
RLC测量仪的仿真原理图:
0.png
(29.94 KB, 下载次数: 135)
下载附件
2016-12-31 00:21 上传
0.png
(57.87 KB, 下载次数: 148)
下载附件
2016-12-31 00:22 上传
RLC测量仪可测电阻电容电感,仿真文件及程序源码下载:
RLC测量仪.rar
(73.8 KB, 下载次数: 371)
2016-12-30 14:31 上传
点击文件名下载附件
下载积分: 黑币 -5
源码预览:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
sbit R=P1^0;
sbit C=P1^1;
sbit L=P1^2;
sbit A1=P1^3;
sbit A0=P1^4;
#define LCD_data P0
uchar code table1[10]={"R= R"};
uchar code table2[10]={"C= pF"};
uchar code table3[10]={"L= mH"};
uchar code f_table[88]={13,14,15,16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100};
uchar code f_correct[88]={9,10, 11, 12, 12, 12, 13, 14, 15, 16, 17, 18, 18, 18, 19, 20, 21, 21, 22, 23, 24, 25, 25, 26, 26, 27, 28, 29, 29, 30, 30, 31, 32, 33, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, 44, 45, 45, 46, 47, 48, 49, 49, 50, 51, 51, 52, 53, 54, 54, 55, 55, 56, 57, 57, 58, 59, 60, 60, 62, 62, 63, 64, 64, 65, 66, 66, 67, 67, 68, 69, 70, 71, 71,};
uchar a6,a5,a4,a3,a2,a1;
uchar flag;
unsigned long cnt,cnt1;
uchar f_cnt;
/********************************/
void delay_us(); //18us
void delay_ms(uint);
void lcd_init();
void lcd_write_com(uchar com);
void lcd_write_dat(uchar dat);
void lcd_init();
void lcd_display(uchar add,uchar dat);
/***********************************/
void delay_us()
{
uchar x;
for(x=0;x<5;x++);
}
void delay_ms(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<123;y++);
}
void lcd_write_com(uchar com)
{
E=0;
RS=0;
RW=0;
delay_us();
LCD_data=com;
E=1; //高脉冲写入数据
delay_us();
E=0;
}
void lcd_write_dat(uchar dat)
{
E=0;
RS=1;
RW=0;
delay_us();
LCD_data=dat;
E=1; //高脉冲写入数据
delay_us();
E=0;
}
void lcd_init() //lcd初始化
{
delay_ms(15);
lcd_write_com(0x38);
delay_ms(10);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
delay_ms(2);
}
void timer_init(void) //定时器初始化
{
TMOD=0X51;
PT0=1; /*中断优先*/
TH0=0x3c;
TL0=0xb0;
TH1=0;
TL1=0;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
}
void lcd_display(uchar add,uchar dat) //lcd显示(地址,数据)
{
lcd_write_com(add);
lcd_write_dat(dat);
delay_us();
}
void real_display(void)
{
if(!R)
{
// while(!R);
A1=A0=0;
lcd_display(0x80,table1[0]);
lcd_display(0x80+1,table1[1]);
lcd_display(0x80+8,table1[8]);
lcd_display(0x80+9,table1[9]);
}
else if(!C)
{
A0=0;A1=1;
lcd_display(0x80,table2[0]);
lcd_display(0x80+1,table2[1]);
lcd_display(0x80+8,table2[8]);
lcd_display(0x80+9,table2[9]);
}
else if(!L)
{
A0=1;A1=0;
lcd_display(0x80,table3[0]);
lcd_display(0x80+1,table3[1]);
lcd_display(0x80+8,table3[8]);
lcd_display(0x80+9,table3[9]);
}
if(a6)
lcd_display(0x80+2,0x30+a6);
else
lcd_display(0x80+2,' ');
if(a6||a5)
lcd_display(0x80+3,0x30+a5);
else
lcd_display(0x80+3,' ');
if(a6||a5||a4)
lcd_display(0x80+4,0x30+a4);
else
lcd_display(0x80+4,' ');
if(a6||a5||a4||a3)
lcd_display(0x80+5,0x30+a3);
else
lcd_display(0x80+5,' ');
if(a6||a5||a4||a3||a2)
lcd_display(0x80+6,0x30+a2);
else
lcd_display(0x80+6,' ');
lcd_display(0x80+7,0x30+a1);
}
void correct(void) //误差修正函数
{
uchar i,k;
unsigned long wucha;
if(cnt<100000) //100KHz以内的修正
{
if(cnt>980&&cnt<2100) cnt-=1;
if(cnt>=2100&&cnt<3900) cnt-=2;
if(cnt>=3900&&cnt<4800) cnt-=3;
if(cnt>=4800&&cnt<5700) cnt-=4;
if(cnt>=5700&&cnt<8000) cnt-=5;
if(cnt>=8000&&cnt<9100) cnt-=6;
if(cnt>=9100&&cnt<10900) cnt-=7;
if(cnt>=10900&&cnt<11900) cnt-=8;
if(cnt>=11900&&cnt<13000) cnt-=9;
if(cnt>=13000&&cnt<=100000)
{
k=cnt/1000;
for(i=0;i<88;i++)
{
if(k==f_table[i])
{
cnt-=f_correct[i];
}
}
}
}
if(cnt>100000)
{
wucha=(cnt/1000)*73065/100000;
cnt-=wucha;
}
}
void main()
{
timer_init();
lcd_init();
while(1)
{
if(flag==1)
{
real_display();
flag=0;
}
}
}
void timer0() interrupt 1
{
uchar timer0;
TH0=0x3c; //50ms
TL0=0xb0;
timer0++;
if(timer0==20)
{
TR1=0; //关闭的计数器
EA=0;
cnt=TL1+TH1*256+f_cnt*65536;
correct();
//cnt1=(1e+9)/(2*0.693 *cnt)-20000/2;
if(!R)
{
// while(!R);
cnt1=1000000/(0.2*0.693*cnt)-165;
}
else if(!C)
{
cnt1=1000000000/(0.693*3*510*cnt);
}
else if(!L)
{
cnt1=(1e+9)/(4*3.14*3.14*cnt*cnt*0.05);
}
timer0=0;
a6=cnt1%10000000/100000;
a5=cnt1%100000/10000;
a4=cnt1%10000/1000;
a3=cnt1%1000/100;
a2=cnt1%100/10;
a1=cnt1%10;
flag=1;
TH1=0;
TL1=0;
TH0=0x3c;
TL0=0xb0;
cnt=0;
f_cnt=0;
EA=1;
TR1=1; //打开计数器
}
}
void int1() interrupt 3
{
f_cnt++;
}
复制代码
作者:
51dz
时间:
2017-2-28 13:00
好用的程序 点赞
作者:
dradolee
时间:
2017-4-10 16:11
楼主,电感测量电路中有个0.1F的电容,但是实际没有这么大的,如果制作实物需要如何替代呢
作者:
uuu1
时间:
2018-1-5 17:01
要是要求电阻100Ω~1MΩ;电容100pF~10000pF;电感100μH~10mH,电路怎么改呢
作者:
飞翔的土豆
时间:
2018-3-31 21:32
非常好,赞一个
作者:
faxa1
时间:
2018-4-1 21:56
谢谢分享
作者:
ab560
时间:
2018-4-3 08:13
好东东,正需要,谢谢分享
作者:
905919814
时间:
2018-4-15 16:48
感谢分享
作者:
huangchuan0771
时间:
2018-4-18 18:37
真心感谢楼主,很需要…
作者:
GVOID
时间:
2019-1-3 22:05
感谢楼主分享
作者:
12212a
时间:
2019-4-14 15:59
为什么仿真有错???
作者:
myt123
时间:
2019-4-16 19:11
good!
作者:
51HHEI66
时间:
2019-5-3 11:08
咦。。为什么跟有个贴是一样的,,,
作者:
大力水手PP
时间:
2019-7-4 12:18
Real Time Simulation failed to start.
仿真时出现了这个错误,不知是什么原因啊,各位
作者:
dilin
时间:
2019-11-27 09:24
操作使用
真好
作者:
maguilong
时间:
2019-12-9 21:03
作者有没有只测量电感的还有代码
作者:
我i是大哥
时间:
2019-12-10 09:41
你们焊接图有没有?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1