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

📄 dr.c

📁 利用单片机测量电容的C51程序。通过调试
💻 C
字号:
#include <reg52.h>
#include <math.h>

sbit P33=P3^3;
#define Uchar unsigned char
#define Uint unsigned int


unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x37};

unsigned  int gei,shi,bai,qian,wan,swan,bwan,UF;

unsigned long int R,XIANSHI,JISHU;

void delay(unsigned char n ) 
{							// 延时子程序
	Uchar i,j;
		for(j=0;j<n;j++)
		for(i=0;i<10;i++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
}

bit lcd_bz()   
{						   // 测试LCD忙碌状态
	bit result;
	rs = 0;				   //使能
	rw = 1;			       //读
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	result = (bit)(P0 & 0x80);
	ep = 0;
	return result;
}

lcd_wcmd(Uchar cmd)	 
{							// 写入指令数据到LCD
	while(lcd_bz());
	rs = 0;
	rw = 0;	    //写
	ep = 0;
	_nop_();
	_nop_();
	P0 = cmd;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;
}

lcd_pos(Uchar pos)	
{							 //设定显示位置
	lcd_wcmd(pos|0x80);
}

lcd_wdat(Uchar dat)	
{							//写入字符显示数据到LCD
	while(lcd_bz());
	rs = 1;
	rw = 0;
	ep = 0;
	P0 = dat;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;
}

lcd_init()	
{							//LCD初始化设定
	lcd_wcmd(0x38);			//
	delay(1);
	lcd_wcmd(0x0c);			//
	delay(1);
	lcd_wcmd(0x06);			//
	delay(1);
	lcd_wcmd(0x00);			//清除LCD的显示内容
	delay(1);
}

void display() using 2                // 写入数据到LCD
{
    Uchar i;
     
	EA=0;
 
	disdate[7]=cedate%10+0x30;				//显示数据按位分离
	disdate[8]=cedate%100/10+0x30;
	disdate[9]=cedate%1000/100+0x30;
	disdate[10]=cedate%10000/1000+0x30;
	disdate[11]='.'	;
	disdate[12]=cedate%100000/10000+0x30;


	lcd_init();				// 初始化LCD
	lcd_pos(0);            //设置显示位置为第一行的第5个字符
   for(i=0;i<16;i++)		//显示提示信息
   {
    lcd_wdat(hintdate[i]);

   }
								  //在第二行显示数据
	lcd_pos(0x40);
	lcd_wdat(disdate[12]);				  //送显示数据;
	lcd_wdat(disdate[11]);
	lcd_wdat(disdate[10]);
	lcd_wdat(disdate[9]);
	lcd_wdat(disdate[8]);
	lcd_wdat(disdate[7]);

	
	EA=1;
}
jishuan()
{	//dianzu();
    
         XIANSHI=((JISHU*1.000)*10000)/(R*1.09861);//0.5US	PF
 //	XIANSHI=12345678;

 
 	    if(XIANSHI>9999999)
	      {
	       XIANSHI=XIANSHI/1000;
	       UF=1;
	      }
	    
	 
	gei=XIANSHI%10;
	shi=XIANSHI%100/10;
	bai=XIANSHI%1000/100;
	qian=XIANSHI%10000/1000;
	wan=XIANSHI%100000/10000;
	swan=XIANSHI%1000000/100000;
	bwan=XIANSHI/1000000;
	
}


Delay(tc)
{  unsigned int i,j;
 for(i=0;i<tc;i++)
 {  for(j=0;j<80;j++) 
 ; 
 }
}


LED()
{ 
 
 
   P2=0x7F;
   P0=table[bwan];
   Delay(1); 
   P2=0XBF;
   P0=table[swan];
   Delay(1); 
   P2=0xDF;
   P0=table[wan];
   Delay(1); 
   P2=0xEF;
   P0=table[qian];
   Delay(1); 
   P2=0xF7;
   P0=table[bai];
   Delay(1); 
   P2=0xFB;
   P0=table[shi];
   Delay(1); 
   P2=0xFD;
   P0=table[gei];
   Delay(1); 
   P2=0xFE;
   if(UF==1)
    {P0=table[17];}
	else
	{P0=table[16];}
   Delay(1); 
 
   
}

void int1() interrupt  2 using 0 
{  
    
dd: if  (P33==1)
    {  	  	 
	    TR1=1;
	   	EA=0;
		  
   dd1: if(P33==0)
	      {
	       TR1=0;
	       JISHU=TH1;
		  // JISHU=JISHU&0X00FF;
		   JISHU<<=8;
		   JISHU=JISHU+TL1;
		   jishuan();
		  // EA=1;
           }
	   else
	      {
	     goto dd1;
	      }
	} 
  else
  {goto dd;}
   // EA=0;    
}


  void main(void)
{     
	SP=0X70;
	IT1=1;
	TMOD=0X10;
	TL1=0X00;
	TH1=0X00;
	EX1=1;
	TR1=0;
	EA=1;
	XIANSHI=0;
	UF=0; 
	
	while(1)
	{
	  desplay();
	    
	}
}

⌨️ 快捷键说明

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