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

📄 yuns1.c

📁 基于51单片机四则运算程序一个;MSP430程序4个
💻 C
字号:
/*************************************************************/
/* Filename: yuns1.c
  功能: 实现键入两个数,然后再根据键入的算子来实现加、减、乘、除   
/*程序于2007年11月29日在程序yuns.c基础上修改 */			
/**************************************************************/	  
#include<reg52.h>	
#include<stdio.h>
#include<math.h>
#define uchar unsigned char
#define uint  unsigned int  
uchar code value[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
                   ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00,0xff};//段选码	  
uchar data tab1[6]={0,0,0,0,0,0};
uchar data tab2[6]={0,0,0,0,0,0}; 
void delay(void);
void delay1(void);
void delay2(void);
uchar keyscan();
void  show(h);
void  over_error(h);
void  add1(int m,int n);
void  sub1(int m,int n);
void  mul1(int m,int n);
void  div1(int m,int n);
//====================================
void main()
{
 uchar i=0,j=0,l=0,p=0,q=0,k=0;	//k是键盘的换回值 ,i是输入的第一个数长度跟踪 ,j是输入第二数长度  			 							    

 uchar  ok=0,add=0, sub=0, mul=0, div=0;  //分别 是确认 , 加,减,乘,除的标志位 
 long  m=0, n=0;                         //分别是第一、二个数的真实值 	   
 while(1)
{	  
	k=keyscan();
	delay1();
	delay1();
	if(k!=15)	  // 不是按的“=” 键  
   {		 				  
	  if((add||sub||mul||div)==1)  
	 {  						      
	   switch(k)
	   {
	    case 0:  tab2[j]=0; j++;break;
	    case 1:  tab2[j]=1; j++;break;
	    case 2:  tab2[j]=2; j++;break;
	    case 3:  tab2[j]=3; j++;break;
	    case 4:  tab2[j]=4; j++;break;
	    case 5:  tab2[j]=5; j++;break;
	    case 6:  tab2[j]=6; j++;break;
	    case 7:  tab2[j]=7; j++;break;
	    case 8:  tab2[j]=8; j++;break;
	    case 9:  tab2[j]=9; j++;break;    								    
	    default : break;
	    }
		if(j==0)
	   {
			P0=value[15]; 
	   }	    
	    else if(j==1)
	         {
			  	P2=0x0fe;
				P0=value[tab2[0]];
		      	delay1();
			  }  
	    else if(j==2)
	         {
				P2=0x0fe;
				P0=value[tab2[1]];
	 	 	    delay1();
	
		        P2=0x0fd;
				P0=value[tab2[0]];
		        delay1();
			  }
	   
	    else if(j==3)
	         {
			 	P2=0x0fe;
			 	P0=value[tab2[2]]; 	 
		     	delay1();
	
		    	P2=0x0fd;
				P0=value[tab2[1]];
		        delay1();
	
		        P2=0x0fb;
				P0=value[tab2[0]];
		        delay1();
			 }
	    else if(j==4)
	         {
			 	P2=0x0fe;			 
			 	P0=value[tab2[0]];
	 	      	delay1();
		 		P2=0x0fd;
				P0=value[tab2[1]];
		        delay1();
		 		P2=0x0fb;
				P0=value[tab2[2]];
	            delay1();
		 		P2=0x0f7;
				P0=value[tab2[3]];
		        delay1();
			 }
	   else if(j==5)
	         {
			 	P2=0x0fe;
				P0=value[tab2[0]];
	 	        delay1();
	
		        P2=0x0fd;
				P0=value[tab2[1]];
		        delay1();
	
		        P2=0x0fb;
				P0=value[tab2[2]];
	            delay1();
	
		        P2=0x0f7;
				P0=value[tab2[3]];
		        delay1();
	
		        P2=0x0ef;
				P0=value[tab2[4]];
		        delay1();	 
		     } 
	   else	 if(j==6)
	        {
		  		P2=0x0fe;
				P0=value[tab2[0]];
	 	 		delay1();
	
		    	P2=0x0fd;
				P0=value[tab2[1]];
		 		delay1();
	
		  		P2=0x0fb;
				P0=value[tab2[2]];
	        	delay1();
	
		 		P2=0x0f7;
				P0=value[tab2[3]];
		 		delay1();
	
		 		P2=0x0ef;
				P0=value[tab2[4]];
		 		delay1();
	
		  		P2=0x0df;
				P0=value[tab2[5]];
		  		delay1();
		    } 
	   
	   else 
	   {
	   		P0=value[15]; 
	   } 
	    
	   
	
	}
	 //=============================================
	 
	else	     // 这是第一个数,  
	{  		  
	   switch(k)
	   {
	   	 case 0:  tab1[i]=0; i++;break; 
	  	 case 1:  tab1[i]=1; i++;break;
	     case 2:  tab1[i]=2; i++;break;
	   	 case 3:  tab1[i]=3; i++;break;
	     case 4:  tab1[i]=4; i++;break;
	     case 5:  tab1[i]=5; i++;break;
	     case 6:  tab1[i]=6; i++;break;
	     case 7:  tab1[i]=7; i++;break;
	     case 8:  tab1[i]=8; i++;break;
	     case 9:  tab1[i]=9; i++;break;      
	     case 10:  add++; break; 
	     case 11:  sub++; break;
	     case 12:  mul++; break;
	     case 13:  div++; break;
	     default : break;	   
	   }
	  
	   if(i==1)
	   {
	   		P2=0x0fe;
			P0=value[tab1[0]];
		 	delay1();
	   }  
	   else if(i==2)
	        {
			 	P2=0x0fe;
				P0=value[tab1[0]];
	      		delay1();
		 		P2=0x0fd;
				P0=value[tab1[1]];
		        delay1();
			 }
	   else if(i==3)
	        {
				P2=0x0fe;
				P0=value[tab1[0]];
	            delay1();
		        P2=0x0fd;
				P0=value[tab1[1]];
	            delay1();
		        P2=0x0fb;
				P0=value[tab1[2]];
		        delay1();
			 }
	   else if(i==4)
	        {
				P2=0x0fe;
				P0=value[tab1[0]];
	            delay1();
	
		        P2=0x0fd;
				P0=value[tab1[1]];
	            delay1();
	
		        P2=0x0fb;
				P0=value[tab1[2]];
	            delay1();
	
		        P2=0x0f7;
				P0=value[tab1[3]];  
		 		delay1();
			 }
	   else if(i==5)
	        {
		 	 	P2=0x0fe;
				P0=value[tab1[0]];
	     	 	delay1();
	
		 	 	P2=0x0fd;
				P0=value[tab1[1]];
	      	 	delay1();
	
			 	P2=0x0fb;
				P0=value[tab1[2]];
	     	 	delay1();
	
		 		P2=0x0f7;
				P0=value[tab1[3]];  
				delay1();
	
				P2=0x0ef;
				P0=value[tab1[4]];  
		 		delay1(); 			 		 	 
		     }
	
	   else if(i==6)
	        {
		 		P2=0x0fe;
				P0=value[tab1[0]];
	     		delay1();
	
		 		P2=0x0fd;
				P0=value[tab1[1]];
	      		delay1();
	
				P2=0x0fb;
				P0=value[tab1[2]];
	     		delay1();
	
		 		P2=0x0f7;
				P0=value[tab1[3]];  
				delay1();
	
				P2=0x0ef;
				P0=value[tab1[4]];  
		 		delay1();
				 
				P2=0x0df;
				P0=value[tab1[5]];      //显示第一组数字 
		 		delay1(); 			 				 		 	 
		     }
	   else 
	   { 
	  	 P0=value[15];
	   }
	   	   	   
	 }
	
	}	
	 
   else	  //说明已经按下了“=”	 键  	
   {
      //计算第一个数的真值 ,因为按键都是放在数组里的,如:第一个数放在tab1[]里	
	  for (p=0;p<i;p++)	 		 
	 {					 //将tab1[]中的每一个数变成实际代表的数值 
	  	for(q=p;q<i-1;q++)
	    {
			tab1[p]=tab1[p]*10;
		}
	 }
	
	p=0;   // 下面还要用到P,所以将P清零 
	for(p=0;p<i;p++)
	{
	    m=m+tab1[p];  // 用m表示整个实际数值 
	}
	
	p=0; 
	q=0;
	 
	for(p=0;p<j;p++)	  //计算第二个数的真值 		  
   {
   		for(q=p;q<j-1;q++)
	   {
	    	tab2[p]=tab2[p]*10;
	   }
	}
	p=0;
	for(p=0;p<i;p++)
   {	
     	n=n+tab2[p];
   }
   					 
   if(add==1)	   
  {
 	  add1(m,n);
  }
  else if(sub==1) 
	   {
	  		sub1(m,n);
	   } 
  else if(mul==1)   
	   {    
	   		mul1(m,n);
	    }
  else if(div==1)    
       { 	
		div1(m,n); 
		}
  else  show(0);
	}
	
  }
 
}

//==============================================
void delay(void)   /*延时程序  */
{							    
    uchar i;
	for(i=0;i<200;i++){;}
	
}
//=================
void delay1(void)   /*延时程序  */
{							    
    uint i;
	for(i=0;i<6000;i++){;}
	
}

void delay2(void)   /*延时程序  */
{							    
    uint i;
	for(i=0;i<500;i++){;}
	
}
//===============	键盘扫描    
uchar keyscan(void)
{ 
  uchar KEY=0;
  uchar codeh,codel,H=0,L=0;
  P1=0xf0; 
  if((P1&0xf0)!=0xf0)
  {
  
    delay();
	if ((P1&0xf0)!=0xf0)
	{
	  codeh=0xfe;
	 
	  do{
	    P1=codeh;
		if((P1&0xf0)!=0xf0)
		 {
	    	codel=~P1;
		    L=codel>>5;
		    if(L==4)L=3;
		    H<<=2;
		    KEY=H+L;
		    return(KEY);
	  	 }
	    else
		{ 
		  	codeh=(codeh<<1)|0x01;
		    H++;
		 }
	  }	 while((codeh&0x10)!=0xf0) ;
	
	}
  }
  return(-1);
}



//===========================
//加法运算 
void  add1(int m,int n)  
{
	long  h;
    h=m+n;
    over_error(h);
}

//============================
//减法运算 
void  sub1(int m,int n)     
{ 
	int h;
    h=m-n;
    over_error(h);
}

//=============================
//乘法运算 
void  mul1(int m,int n)   
{   
    long h;
    h=m*n;
    over_error(h);
}
//=============================
//除法运算 
void  div1(int m,int n)    
{  
	int h;

    if (n==0)
	{
	 	P0=value[15];  //错误处理  
		P2=0xfe;
	}

	h=m/n;        
    over_error(h);

} 

//=============================
void  show(h1)
{ 
	uchar show[6];

   	if (h1<0) 
   {
    	P2=0x0fe;	 
		P0=value[16]; //第一数码管显示“-” 

    	h1=abs(h1);  //对负数取绝对值 
   	}
   else 
   {	      	
        P2 = 0xfe;
		P0 =value[17];    //计算的结果为正数,那么第一个数码管不亮	     	 
   } 															 
	
	   	  if((h1>=0)&&(h1<10))	 //结果为一位数,只要一个数码管		 
		  {
		  	P2=0x0fd;	 
		  	P0=value[h1];          
		  }
	     else 
		  if((h1>=10)&&(h1<100))  //结果为二位数 
		  {
		  	 show[1]=h1/10;
		     show[0]=h1%10;
	
		     while(1)
		    {
		    	P0=value[show[1]]; 
	        	P2=0x0fd;
	        	delay2();
	
	        	P0=value[show[0]]; 
	       		P2=0x0fb;
	        	delay2();
		    }	
		  } 
		 else 
		 if((h1>=100)&&(h1<1000))  //结果为三位数 
		 {
			 show[2]=h1/100;
	  	     show[1]=(h1/10)%10;
		     show[0]=h1%10;
	
			 while(1)	
			{
			 	P0=value[show[2]]; 
	            P2=0x0fd;
	            delay2();
	
	            P0=value[show[1]]; 
	            P2=0x0fb;
	            delay2();
	
	            P0=value[show[0]]; 
	            P2=0x0f7;
	            delay2();
			 }
		  }
		 else 
		 if((h1>=1000)&&(h1<10000))
		 {		 
		     show[3]=h1/1000;
		     show[2]=(h1/100)%10;
		     show[1]=(h1/10)%10;
		     show[0]=h1%10;	
			 while(1)	
			{
			    P0=value[show[3]]; 
	            P2=0x0fd;
	            delay2();
	
			    P0=value[show[2]]; 
			    P2=0x0fb;
			    delay2();
	
			    P0=value[show[1]]; 
			    P2=0x0f7;
			    delay2();
	
			    P0=value[show[0]]; 
			    P2=0x0ef;
			    delay2();
			 }		 
		 }
		 else 
		 if((h1>=10000)&&(h1<100000))
		 {		 
		     show[4]=(h1/10000);
			 show[3]=(h1/1000)%10;
		     show[2]=(h1/100)%10;
		     show[1]=(h1/10)%10;
		     show[0]=h1%10;	
			 while(1)	
			{
			    P0=value[show[4]]; 
	            P2=0x0fd;
	            delay2();
	
			    P0=value[show[3]]; 
			    P2=0x0fb;
			    delay2();
	
			    P0=value[show[2]]; 
			    P2=0x0f7;
			    delay2();
	
			    P0=value[show[1]]; 
			    P2=0x0ef;
			    delay2();
	
				P0=value[show[0]]; 
			    P2=0x0df;
			    delay2();
			 }		 
		 } 
	/*	 else 
		 if((h1>=100000)&&(h1<1000000))
		 {		 
		     show[5]=(h1/100000);
			 show[4]=(h1/10000)%10;
			 show[3]=(h1/1000)%10;
		     show[2]=(h1/100)%10;
		     show[1]=(h1/10)%10;
		     show[0]=h1%10;	
			 while(1)	
			{
			    P0=value[show[5]]; 
	            P2=0x0fe;
	            delay2();
	
			    P0=value[show[4]]; 
			    P2=0x0fd;
			    delay2();
	
			    P0=value[show[3]]; 
			    P2=0x0fb;
			    delay2();
	
			    P0=value[show[2]]; 
			    P2=0x0f7;
			    delay2();
	
				P0=value[show[1]]; 
			    P2=0x0ef;
			    delay2();
	
				P0=value[show[0]]; 
			    P2=0x0df;
			    delay2();
			 }		 
		 }    */
	
		else   
		{
		 	P0=value[15];  	
		}

 }	
 
/****************************************/	   
//溢出处理函数    
//功能:加、减、乘、除结果超过计算范围是的处理 
//让一个数码管全亮 
/***************************************/
void   over_error(h)
{
 	if ((h > 99999) && (h< -99999))   //溢出处理 
	{
	 	P2 = 0xfe;
		P0 = value[18];
	}
   else
   {
   		show(h);
   } 
}

⌨️ 快捷键说明

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