标题:
单片机电容测量仪代码
[打印本页]
作者:
Frionter
时间:
2018-7-13 15:56
标题:
单片机电容测量仪代码
具体见附件,有代码。
单片机源程序如下:
#include "delay.h"
#include "GPIO.h"
#include "config.h"
#include "lcd_12864.h"
#include "display.h"
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit big_case=P1^5;
sbit small_case=P1^6;
long int freq,n,cap;
//uchar n;
uchar lcd_i;
uint count_t0,s;
uchar keystate='A';
uchar code dis1[]={"<-电容测量仪->"};
uchar code dis2[]={"频率: Hz"};
uchar code dis3[]={"电容: F"};
uchar code dis4[]={"档位:"};
uchar code dis_auto[]={"自动挡"};
uchar code dis_big[]={"大量程"};
uchar code dis_small[]={"小量程"};
//端口初始化
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin = GPIO_Pin_All;
GPIO_InitStructure.Mode = GPIO_PullUp;
GPIO_Inilize(GPIO_P0,&GPIO_InitStructure);
// GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);
GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);
// GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
}
//定时器0初始化
void Timer0Init(void) //1毫秒@11.0592MHz--16位自动重装
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
//外部中断0初始化
void exint0_init()
{
INT0=1;
IT0=1;//设置INT0中断类型(1:仅下降沿;0:上升沿和下降沿)
EX0=1;//使能INT0
}
void main()
{
GPIO_config();//端口初始化
lcd_init();//液晶初始化
Timer0Init();//定时器0初始化
exint0_init();//外部中断初始化
//显示测量变量及档位
lcd_dis_str(0,0,dis1);
lcd_dis_str(1,0,dis2);
lcd_dis_str(2,0,dis3);
lcd_dis_str(3,0,dis4);
while(1)
{
dis_freq(freq);
switch(keystate)
{
//默认自动挡---------------------------------------------
case 'A':
lcd_dis_str(3,5,dis_auto);//显示自动挡
if(freq>40000)
{
big_case=1;
small_case=0;
cap = 1430000000 / (3* (freq+1));//计算电容值
}
else
{
big_case=0;
small_case=1;
cap = 1430000000 / (20001* freq)-27;//计算电容值
}
dis_cap(cap);//显示电容值
if(key1==0)//key1按下切换到大量程
{
delay_ms(5);
if(key1==0)
{
keystate='B';
while(!key1);
}
}
if(key2==0)//key2按下切换到小量程
{
delay_ms(5);
if(key2==0)
{
keystate='C';
while(!key2);
}
}
break;
//大量程档位---------------------------------------------------
case 'B':
big_case=1;
small_case=0;
cap = 1430000000 / (3* (freq+1));//计算电容值
dis_cap(cap);//显示电容值
lcd_dis_str(3,5,dis_big);//显示大量程
if(key0==0)//key0按下切换到自动挡
{
delay_ms(5);
if(key0==0)
{
keystate='A';
while(!key0);
}
}
if(key2==0)//key2按下切换到小量程
{
delay_ms(key2==0);
if(key2==0)
{
keystate='C';
while(!key2);
}
}
break;
//小量程档位---------------------------------------------
case 'C':
big_case=0;
small_case=1;
cap = 1430000000 / (20001* freq)-27;//计算电容值
dis_cap(cap);//显示电容值
lcd_dis_str(3,5,dis_small);//显示小档位
if(key0==0)//key0按下切换到自动挡
{
delay_ms(5);
if(key0==0)
{
keystate='A';
while(!key0);
}
}
if(key1==0)//key1按下切换到大量程
{
delay_ms(5);
if(key1==0)
{
keystate='B';
while(!key1);
}
}
break;
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
电容测量仪2.0.zip
(110.95 KB, 下载次数: 59)
2018-7-13 15:55 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
zhong1227
时间:
2019-12-29 14:35
你好,这各测量电容范围是多少呢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1