当前位置:首页 > 基于51单片机的数字电容测量仪
. .
p++;
}
lcd_pos(0x40); for(i=0;i<16;i++) {
LCD_write_Data(' ');
}
}
unsigned char pro_data(unsigned char mda) 低位互换
{ unsigned char enddat; unsigned char i; enddat = 0; for(i=0;i<8;i++) { enddat = enddat << 1; if(mda & 0x01 == 1) { enddat = enddat | 0x01;
} else { enddat = enddat | 0x00; }
mda = mda >> 1;
}
return enddat;
}
(e)main.c程序清单:
word完美格式
//数据处理函数,将高位和 . .
#include
sbit vo = P3^2; // 用于检测P3.2口的值,计算时间。 计时器0的开与断 sbit tr = P3^7;
// 产生一个低电平脉冲
sbit ledclc = P2^7;
sbit con1 = P0^0; sbit con2 = P0^1; sbit con3 = P0^2;
sbit key1 = P0^3; sbit key2 = P0^4; sbit key3 = P0^5; sbit key4 = P0^6;
sbit led1 = P2^3; sbit led2 = P2^4; sbit led3 = P2^5; sbit led4 = P2^6;
unsigned int tw;
float ftemp;
unsigned long int c;
word完美格式
// 超量程提示灯
// 用于控制继电器,实现档位选择
// 独立按键部分,用于用户选择量程
// 量程提示灯
// 用于获取定时器的数值 // 用于计算电容值的中间变量
// 存放电容值
. .
unsigned char need; 结束置0
// 需要测量时置1,一次测量
unsigned char R; // 表示不同的档位 unsigned char flag; // 数据处理结束置1 unsigned char temp[8]; // 存放电容值的各个位 unsigned char zimu1[] = \ unsigned char zimu2[] = %unsigned char zimu3[] = %unsigned char zimu4[] = \ to measure %unsigned char zimu5[] = \void process(unsigned long int c); void keyscan();
// 数据处理函数
// 键盘扫描函数
// 量程指示灯函数 //量程太高
void ledlight(unsigned char R);
void init_timer0() // 定时器0 初始化 { 断
}
void init_INT1 () { }
EA = 1;
IT1 = 1; // 下降沿触发 EX1 = 1;
// 定时器0 初始化
TH0 = 0x00; TL0 = 0x00; EA = 1;
ET0 = 1; TR0 = 1; TMOD = 0x09;
// gate置1,方式1,16位计时,定时器由P3.2控制开
void main()
word完美格式
. .
{
ledclc = 1; need = 0;
// 超量程提示灯熄灭
// 一开始无需测量
con1 = con2 = con3 = 0;
flag = 0;
// 初始化
init_timer0(); 束
下
{
{
init_INT1(); LCD_init();
dispchar1(zimu3); dispchar2(zimu4); while(1) {
if(need == 1)
{
// 当需要测量时
if(vo == 0 ) //vo == 0时检测计数器的值可能还没开始计数,可能计数结
if(TH0 != 0x00 || TL0 != 0x00) // 是计数结束 若有读数,用tw 存
tw = TH0 << 8; tw = tw | TL0; TH0 = 0x00; TL0 = 0x00;
need = 0; // 需要再次测量时,need置1.避免tw的值
被更//改 即不需要测量时,一直保持 // 一次结束,计时器清零
}
EX1 = 1; // 开外部中断1
else // 反之,证明没有计数,无电容,默认值tw置0 {
word完美格式
共分享92篇相关文档