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

📄 diancanshuceliang.c

📁 电参数测量 c语言的 基于MCS51单片机
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned  int
uchar code table[]="0123456789Hz.V mAOm  ";
sbit lcden=P2^0;
sbit lcdrw=P2^1;
sbit lcdrs=P2^2;

sbit LED=P3^4;
sbit  s1=P3^6;
sbit  s2=P3^7;
sbit  s3=P3^5;
sbit  s4=P3^3;
void dianya();
void  dianzu();
void dianliu();
uint count,n=10,s=1000;
uchar ge,fen,den,wan,qian,bai,shi,nen,num,cnt=0x0f,s1num,swan;
void display();
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=1;y>0;y--);
}
void write_com(uchar com)
{
	lcdrs=0;
	lcdrw=0;
	P0=com;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}

void write_data(uchar date)
{
	lcdrs=1;
	lcdrw=0;
	P0=date;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}
void init()
{
	lcden=0;
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);
	write_com(0x80);
}
void main()
{
   init();
  TMOD=0x95; //1001 0101,T0计数,T1定时
   TH1=0x0f;
   TL1=0x00;
   TH0=0;
   TL0=0;//T0计数器清零
   IE=0x88;
   	//	TR0=1;
   TR1=1;
   TR0=1;
	
 while(1)
	{
	if(s1==0)	
	     {
		delay(5);
		if(s1==0)
		{ n=1;}
		}
		while(!s1);
		if(s2==0)	
	     {
		delay(5);
		if(s2==0)
		{ n=4;}
		}
		while(!s2);
		if(s3==0)	
	     {
		delay(5);
		if(s3==0)
		{ n=6;}
		}
		while(!s3);
		if(s4==0)	
	     {
		delay(5);
		if(s4==0)
		{ n=8;}
		}
		while(!s4);

				display();
			}
}

	
 void T1_int() interrupt 3

{		
         TR0=0;	
		 TH1=0x0f;
		 TL1=0x00;
		 if(!(--cnt))
		 	{	  
					 // TL0=1;
				 count=(TH0*256+TL0);
			
				 if(n==1)
				   	{ 	swan=wan=qian=bai=shi=ge=fen=den=nen=0;
					    //swan==nen=den=0;
						count=count/0.644538/0.988;
				    	fen=(int)(count/1.00474*100)%100/10;
				   //	den=(int)(count/1.00474*100)%10;
				    	count=count/1.006474;
				    	wan=count/10000;
				   	    qian=(count-wan*10000)/1000;
				    	bai=(count-wan*10000-qian*1000)/100;
				    	shi=(count-wan*10000-qian*1000-bai*100)/10;
				     	ge=count%10;
					} 

				 count=count/1.006474/1.2713/0.94287;
               if(n==4)
					{
					  dianya();	 
			         }
			 if(n==6)
				{    
			        dianliu() ;
				   
			         }
			
			  if(n==8)			
					{	   
					      dianzu();
			         }
					TH0=0;
					TL0=0;
					cnt=0x0f;
				
					}
			TR0=1;

} 	
void display()
{	  
			    // write_com(0x80+0);write_data(table[bwan]);
		         write_com(0x80+0);write_data(table[swan]);
                 write_com(0x80+1);write_data(table[wan]);
		         write_com(0x80+2);write_data(table[qian]);
			     write_com(0x80+3);write_data(table[bai]);
			     write_com(0x80+4);write_data(table[shi]);
				 write_com(0x80+5);write_data(table[ge]);
		         write_com(0x80+6);write_data(table[12]);

		     write_com(0x80+7);
		        
			switch(fen) 
		 {  
	         case 0: write_data(table[0]);break;
		     case 1: write_data(table[1]);break;
			 case 2: write_data(table[2]);break;
			 case 3: write_data(table[3]);break;
			 case 4: write_data(table[4]);break;
			 case 5: write_data(table[5]);break;
			 case 6: write_data(table[6]);break;
			 case 7: write_data(table[7]);break;
			 case 8: write_data(table[8]);break;
			 case 9: write_data(table[9]);break;
			 }
			 write_com(0x80+8);	switch(den) 
		 {  
	         case 0: write_data(table[0]);break;
		     case 1: write_data(table[1]);break;
			 case 2: write_data(table[2]);break;
			 case 3: write_data(table[3]);break;
			 case 4: write_data(table[4]);break;
			 case 5: write_data(table[5]);break;
			 case 6: write_data(table[6]);break;
			 case 7: write_data(table[7]);break;
			 case 8: write_data(table[8]);break;
			 case 9: write_data(table[9]);break;
			 } 
	        write_com(0x80+9);write_data(table[nen]);
			 
           for(num=12;num<14;num++)
           {
		   write_com(0x80+num);
           write_data(table[num+n-3]);
		   }

}
void  dianzu() 
{
         swan=wan=qian=bai=shi=ge=fen=den=nen=0;

			count=(5000000.0/count-500.0000)+42.888;
					
			 if(count<100)
				{
					  count=count-25.1111;
								 
				 
			   }
			   else
			   {

				   if(count>10000)
					  {
					 count=count/0.96515;
					 }
				   else
				      count=count-20.0;
				}
			if(count>60000)	
			  	{  count=1000000;   }	
                     fen=(int)(count/1.00474*100)%100/10;
					 den=(int)(count/1.00474*100)%10;
					 wan=count/10000;
					qian=(count-wan*10000)/1000;
			  		bai=(count-wan*10000-qian*1000)/100;
						  	
			     	count=count-wan*10000-qian*1000-bai*100;
		            shi=count/10;
			    	ge=(count-shi*10)%10;
}
void dianliu()
{
 swan=wan=qian=bai=shi=ge=fen=den=nen=0;
				     //count=count/1.006474/1.2713;
			     	shi=count/10000;
			    	ge=(count-shi*10000)/1000;
			        if(ge>1)
			         {
				     if(ge>5)
			           {   	  
					   	   if(ge>7)
						       {
						           count=count-382.85;
							       fen=(count-shi*10000-ge*1000)/100;
				                   den=(count-shi*10000-ge*1000-fen*100)/10;
			    	               nen=count%10;   
							   }
                        else
						{

					   		  count=count-200.85;
					          fen=(count-shi*10000-ge*1000)/100;
							  den=(count-shi*10000-ge*1000-fen*100)/10;
			    	          nen=count%10;
							         
							}

		               }
					 else
						{	 
						      count=count-100.85;
					          fen=(count-shi*10000-ge*1000)/100;
							  den=(count-shi*10000-ge*1000-fen*100)/10;
			    	          nen=count%10;
					    }

				      }
		        	else{
						   count=count-2.0;
				          fen=(count-shi*10000-ge*1000)/100;
				          den=(count-shi*10000-ge*1000-fen*100)/10;
			              nen=count%10; 
				}
		}
void dianya()
{
          swan=wan=qian=bai=shi=ge=fen=den=nen=0;
					      //count=count/1.006474/1.2713;
			     	      shi=count/10000;
			    	      ge=(count-shi*10000)/1000;
			       if(ge>5)
			           {   	  
					   	   if(ge>7)
						      {
						           count=count-382.85;
							       fen=(count-shi*10000-ge*1000)/100;
				                   den=(count-shi*10000-ge*1000-fen*100)/10;
			    	               nen=count%10;   
								}
                          else{
					   		     count=count-44.223;
					             fen=(count-shi*10000-ge*1000)/100;
							     if(ge==5&&fen>6)
							     {   
								    count=count-369.85 ;
								    fen=(count-shi*10000-ge*1000)/100;
								    den=(count-shi*10000-ge*1000-fen*100)/10;
			    	                nen=count%10; 
								 
								 }
								 else
								 {

				                  den=(count-shi*10000-ge*1000-fen*100)/10;
			    	              nen=count%10;
							     }    
							  }

		               }
			else{
					
				          fen=(count-shi*10000-ge*1000)/100;
				          den=(count-shi*10000-ge*1000-fen*100)/10;
			              nen=count%10; 
				}
	}

⌨️ 快捷键说明

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