⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cap02.c

📁 基于AT89C2051单片机的数字电容表设计。里面有源代码、protues仿真图
💻 C
字号:
//#include <reg51.h>
#include <REG2051.H>
//#include <intrins.h>

unsigned char i,j,n,t,DispBuf[4];
unsigned int cap;
unsigned char code
BitTab[4]={0xbf,0xdf,0xef,0xf7};//位驱动码
unsigned char code
DispTab[11]={0xfe,0x70,0xed,0xf9,0x73,0xdb,0xdf,0xf0,0xff,0xfb,0x40};//字形码
//sbit P1_2=P1^2;
//sbit P3_6=P3^6;

main()         //主程序
{	TMOD=0x11;//定时器T0、T1均工作于定时方式1
	TH1=0xec;
	TL1=0x78;//T1定时时间为5ms
	IE=0X88; //开中断
	TR1=1;   //开定时器T1
	P1_2=0;             //电容放电
	for(;;);  //无限循环,定时中断返回点
}

Timer1() interrupt 3  //定时中断服务程序
{	TH1=0xec;
	TL1=0x78;
	t=BitTab[j];    //取位值
	P1=P1|0x78;     //P1.3~P1.6送1
	P1=P1&t;        //P1.3-P1.6输出取出的位值
    if(j==0 && DispBuf[j]==0)t=DispTab[10];//最高位为0时,取空格字形码
    else
	{
     t=DispBuf[j];   //取出待显示的数
     t=DispTab[t];   //取字形码
    }
	P3=t;           //字型码由P3输出显示
        //	if(j==1) P1_0=1;else P1_0=0;//设置小数点
	j++;            //j作为数码管的计数器,取值0-3,显示程序通过它确认显示哪个数码管
	if(j==4) j=0;
	n++;
	if(n==48)       //每过48个中断测一次电容量
	{	
		n=0;
		TH0=0;
		TL0=0;
        
		P1_2=1;             //电容开始充电
		TR0=1;              //开定时器T0
               //for(i=0;i>10000;i++) {_nop_();_nop_();_nop_();}
		while (AOUT == 0);
               //for(;AOUT == 0;);    //判断充电电压达到参考电压否
		TR0=0;              //充电电压达到参考电压,关定时器T0
		P1_2=0;             //电容放电
		cap=TL0|(TH0<<8);   //取定时器T0中的数值
		cap=cap-3;          //修正误差
		if(cap>=10000)
		{
			DispBuf[3]=10;
			DispBuf[2]=10;
			DispBuf[1]=10;
			DispBuf[0]=1;   //超量程,最高位显示1,其余各位不显示(灭)
		}
		if(cap<10000)        //不超量程,取各位数值
		{
		  	DispBuf[3]=cap%10;//取个位数
			cap=cap/10;
			DispBuf[2]=cap%10;//取十位数
			cap=cap/10;
			DispBuf[1]=cap%10;//取百位数
			DispBuf[0]=cap/10;//取千位数
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -