標(biāo)題:
單片機(jī)電容測(cè)量?jī)x代碼
[打印本頁(yè)]
作者:
Frionter
時(shí)間:
2018-7-13 15:56
標(biāo)題:
單片機(jī)電容測(cè)量?jī)x代碼
具體見(jiàn)附件,有代碼。
單片機(jī)源程序如下:
#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[]={"<-電容測(cè)量?jī)x->"};
uchar code dis2[]={"頻率: Hz"};
uchar code dis3[]={"電容: F"};
uchar code dis4[]={"檔位:"};
uchar code dis_auto[]={"自動(dòng)擋"};
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);
}
//定時(shí)器0初始化
void Timer0Init(void) //1毫秒@11.0592MHz--16位自動(dòng)重裝
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0xCD; //設(shè)置定時(shí)初值
TH0 = 0xD4; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0=1;
EA=1;
}
//外部中斷0初始化
void exint0_init()
{
INT0=1;
IT0=1;//設(shè)置INT0中斷類(lèi)型(1:僅下降沿;0:上升沿和下降沿)
EX0=1;//使能INT0
}
void main()
{
GPIO_config();//端口初始化
lcd_init();//液晶初始化
Timer0Init();//定時(shí)器0初始化
exint0_init();//外部中斷初始化
//顯示測(cè)量變量及檔位
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)
{
//默認(rèn)自動(dòng)擋---------------------------------------------
case 'A':
lcd_dis_str(3,5,dis_auto);//顯示自動(dòng)擋
if(freq>40000)
{
big_case=1;
small_case=0;
cap = 1430000000 / (3* (freq+1));//計(jì)算電容值
}
else
{
big_case=0;
small_case=1;
cap = 1430000000 / (20001* freq)-27;//計(jì)算電容值
}
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));//計(jì)算電容值
dis_cap(cap);//顯示電容值
lcd_dis_str(3,5,dis_big);//顯示大量程
if(key0==0)//key0按下切換到自動(dòng)擋
{
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;//計(jì)算電容值
dis_cap(cap);//顯示電容值
lcd_dis_str(3,5,dis_small);//顯示小檔位
if(key0==0)//key0按下切換到自動(dòng)擋
{
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;
}
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
電容測(cè)量?jī)x2.0.zip
(110.95 KB, 下載次數(shù): 59)
2018-7-13 15:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhong1227
時(shí)間:
2019-12-29 14:35
你好,這各測(cè)量電容范圍是多少呢
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1