#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sfr AUXR =0x8E;
void delay_1ms();
void delay_ms(uint x);
bit busy(void);
sbit rs=P2^0;//数据/指令选择控制线
sbit rw=P2^1;//读写控制线
sbit en=P2^2;//使能控制线
sbit LED=P2^7;
unsigned int count;
unsigned int fre_count=0;
unsigned int time=0;
unsigned int cap_measure=0;
unsigned int cap_measure1=0;
unsigned char test;
bit read_s;
bit ready;
bit busy(void)
{
bit busy_flag = 0;
rs = 0;
rw = 1;
en = 1;
delay_ms(5);
busy_flag = (bit)(P0 & 0x80);
en = 0;
return busy_flag;
}
void lcd_wcom(uchar com) //1602写命令函数
{
while(busy());
rs=0;
rw=0;
P0=com;
delay_ms(5);
en=1;
delay_ms(1);
en=0;
}
void lcd_wdat(uchar dat)//1602写数据函数
{
while(busy());
rs=1;
rw=0;
P0=dat;
delay_ms(5);
en=1;
delay_ms(1);
en=0;
}
void lcd_init()//1602初始化函数
{
lcd_wcom(0x38);//8位数据,双列,5*7字形
lcd_wcom(0x0c);//开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06);//显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01);//清屏
}
void lcd_showstring(uchar line,uchar pos,char *String)
{
unsigned char i;
if(line==1) lcd_wcom(0x80|(pos-1));
else lcd_wcom(0x80|(pos-1+0x40));
for(i=0;String[i]!='\0';i++)
{
lcd_wdat(String[i]);
}
}
int LCD_Pow(int X,int Y)
{
unsigned char i;
int Result=1;
for(i=0;i<Y;i++)
{
Result*=X;
}
return Result;
}
void lcd_shownum(uchar line,uchar pos,uint num,uchar length)
{
unsigned char i;
unsigned char temp;
unsigned char enshow=0;
if(line==1) lcd_wcom(0x80|(pos-1));
else lcd_wcom(0x80|(pos-1+0x40));
for(i=length;i>0;i--)
{
//lcd_wdat(num/LCD_Pow(10,i-1)%10+'0');
temp=num/LCD_Pow(10,i-1)%10;
if(enshow==0&&i!=1)
{
if(temp == 0)
{
lcd_wdat(' ');
}
else
{
enshow=1;
lcd_wdat(temp+'0');
}
}
else lcd_wdat(temp+'0');
}
}
void lcd_shownum1(uchar line,uchar pos,uint num,uchar length)
{
unsigned char i;
unsigned char temp;
if(line==1) lcd_wcom(0x80|(pos-1));
else lcd_wcom(0x80|(pos-1+0x40));
for(i=length;i>0;i--)
{
temp=num/LCD_Pow(10,i-1)%10;
//lcd_wdat(num/LCD_Pow(10,i-1)%10+'0');
lcd_wdat(temp+'0');
}
}
void TM0_1sr()interrupt 1
{
count++;
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time++;
if(time==20)
{
read_s=1;
TR1=0;
TR0=0;
}
}
void INT0_1sr()interrupt 0
{
LED=1;
test=0;
P1|=0x07;
lcd_showstring(1,1,"test ");
lcd_showstring(2,1," ");
count=0;
time=0;
IT0=0;
delay_ms(10);
TH0 = TL0 =0xff;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
TR0=1;
}
void sys_init()
{
ET0=1;
ET1=1;
TMOD=0x16;
TH0=0xff;
TL0=0xff;
TR0=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=0;
IT0=1;//int0
EX0=1;
EA=1;
}
void main()
{
sys_init();
lcd_init();
P1|=0x07;
LED=0;
lcd_showstring(1,1,"ready");
read_s=0;
while(1)
{
if(read_s==1)
{
read_s=0;
if(count>300) ready=1;
else
{
test++;
if(test>3)
{
if(count>100) ready=1;
else if(count>10)
{
ready=1;
test++;
}
else
{
P1|=0x07;
IT0=1;
LED=0;
lcd_showstring(1,1,"over range");
}
}
else
{
TR1=0;
TR0=0;
switch(test)
{
case 1:
P1&=0xfd;
break;
case 2:
P1&=0xfe;
break;
case 3:
P1&=0xfb;
delay_ms(500);
break;
default:
break;
}
time=0;
count=0;
TH0 = TL0 =0xff;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
delay_ms(100);
TR1=1;
TR0=1;
}
}
}
if(ready==1)
{
ready=0;
P1|=0x07;
IT0=1;
fre_count=count;
LED=0;
switch(test)
{
case 0://0.1nf-10nf
lcd_showstring(1,1,"R=500k");
lcd_shownum(1,8,fre_count,5);
lcd_showstring(1,14,"HZ");
cap_measure=(unsigned int)(1460/count);
cap_measure1=(unsigned int)(146000/count)%100;
if((unsigned int)(1460000/count)%10 >= 5) cap_measure1++;
if(cap_measure1==100) cap_measure++;
lcd_showstring(2,1,"C=");
lcd_shownum(2,3,cap_measure,2);
lcd_showstring(2,5,".");
lcd_shownum1(2,6,cap_measure1,2);
lcd_showstring(2,10,"nF");
break;
case 1://10nf-100nf
lcd_showstring(1,1,"R=50k");
lcd_shownum(1,8,fre_count,5);
lcd_showstring(1,14,"HZ");
cap_measure=(unsigned int)(13800/count);
cap_measure1=(unsigned int)(138000/count)%10;
if((unsigned int)(1380000/count)%10 >= 5) cap_measure1++;
if(cap_measure1==10) cap_measure++;
lcd_showstring(2,1,"C=");
lcd_shownum(2,3,cap_measure,3);
lcd_showstring(2,6,".");
lcd_shownum1(2,7,cap_measure1,1);
lcd_showstring(2,10,"nF");
break;
case 2://100nf-1uf
lcd_showstring(1,1,"R=5k ");
lcd_shownum(1,7,fre_count,5);
lcd_showstring(1,13,"HZ");
cap_measure=(unsigned int)(96500/count);
if((unsigned int)(965000/count)%10>=5) cap_measure++;
lcd_showstring(2,1,"C=");
lcd_shownum(2,3,cap_measure,5);
lcd_showstring(2,10,"nF");
break;
case 3://1uf-10uf
lcd_showstring(1,1,"R=500 ");
lcd_shownum(1,7,fre_count,5);
lcd_showstring(1,13,"HZ");
cap_measure=(unsigned int)(240/count);
cap_measure1=(unsigned int)(24000/count)%100;
if((unsigned int)(240000/count)%10 >= 5) cap_measure1++;
if(cap_measure1==100) cap_measure++;
lcd_showstring(2,1,"C=");
lcd_shownum(2,3,cap_measure,2);
lcd_showstring(2,6,".");
lcd_shownum1(2,7,cap_measure1,2);
lcd_showstring(2,10,"uF");
break;
case 4:
lcd_showstring(1,1,"R=480 ");
lcd_shownum(1,7,fre_count,5);
lcd_showstring(1,13,"HZ");
cap_measure=(unsigned int)(240/count);
cap_measure1=(unsigned int)(2400/count)%10;
if((unsigned int)(24000/count)%10 >= 5) cap_measure1++;
if(cap_measure1==10) cap_measure++;
lcd_showstring(2,1,"C=");
lcd_shownum(2,3,cap_measure,3);
lcd_showstring(2,6,".");
lcd_shownum1(2,7,cap_measure1,1);
lcd_showstring(2,10,"uF");
break;
case 5:
lcd_showstring(1,1,"R=480 ");
lcd_shownum(1,7,fre_count,5);
lcd_showstring(1,13,"HZ");
cap_measure=(unsigned int)(240/count);
if((unsigned int)(2400/count)%10 >= 5) cap_measure++;
lcd_showstring(2,1,"C=");
lcd_shownum(2,3,cap_measure,5);
lcd_showstring(2,10,"uF");
break;
default:
break;
}
}
}
}
void delay_1ms()
{
uint i;
for(i=122;i>0;i--);
}
void delay_ms(uint x)//ms级延时函数
{
while(x--)
{
delay_1ms();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
电容测量.rar (15个子文件)
电容测量
Last Loaded 电容测量.pdsbak 24KB
电容测量.pdsprj 23KB
电容测量.pdsprj.SC-202101271135.Administrator.workspace 3KB
cap_measure源文件
lcd1602.uvproj 14KB
main.c 7KB
Objects
cap_measure.lnp 87B
main.obj 21KB
cap_measure.build_log.htm 2KB
cap_measure.hex 7KB
cap_measure 17KB
lcd1602.uvopt 5KB
lcd1602.uvgui.Administrator 89KB
Listings
main.lst 14KB
led1602.m51 19KB
cap_measure.m51 23KB
共 15 条
- 1
hestering
- 粉丝: 762
- 资源: 13
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页