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

📄 4位计算器.c

📁 单片机计算器 用c写的 用proteus仿真成功 并且实际硬件电路调试也成功 只能计算整数
💻 C
字号:
//P3接4*4键盘 P0接共阴极数码管 p2.0 p2.1 p2.2 p2.3位选
#include <reg51.h>
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p10=P1^0;
int led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x00,0xb9,0xbf,0xb6,0xad,0x8e,0x81};
               // 0    1    2    3    4    5    6    7    8    9    空   显   +    -    *    /    f   
   //规律数码管:led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x00,0xb9,0xbf,0xb6,oxad,ox8e};
   //我的数码管:led[]={0xa0,0xb7,0xc2,0x83,0x95,0x89,0x88,0xb3,0x80,0x81,0xff,0x00,0x97,0xdf,0xcb,0xd6,0xd8};
int i=0,i1,i2,i3,i4;
int one,two,three,u; //定义三个数 其中three是one和two运算的结果 

delay(v)//延时子程序
 { int a,b;
   while(v--)
   { for(a=1;a<=30;a++)
     for(b=1;b<=30;b++);}   }

display(k) //显示子程序//
 { int i11=i1,i22=i2,i33=i3,i44=i4;
   one=1000*i4+100*i3+10*i2+i1;
   if(i44==0||i44>9) {i44=10;if(i33==0||i33>9) {i33=10;if(i22==0||i22>9) i22=10;}}
   while(k--)
   { P0=led[i11];
	 p20=0; p21=0;p22=0;p23=1;
     delay(1);
	 P0=led[i22];
	 p20=0;p21=0;p22=1;p23=0;
     delay(1);
     P0=led[i33];
	 p20=0;p21=1;p22=0;p23=0;
     delay(1);
     P0=led[i44];
	 p20=1;p21=0;p22=0;p23=0;
     delay(1);          } }	
 
leds()  //P1口LED程序
{ int led=1,time=8;
   while(time--)
  { while(led<254)
    { P1=~led;
      led=led<<1;
      delay(20);}
      led=1;       }  
	time=8;
    while(time--)
  { led=254;
    while(led>1)
    { P1=~led;
      led=led>>1;
      delay(20);}
      led=254;       }
	  time=8;
	  while(time--)
	  {P1=0;
	   delay(20);
	   P1=0xff;
	   delay(20);}    }  


keych() //检测是否有键按下子程序//
 { if(P3==0xf0) return(0);
   else while(P3&0xf0!=0xf0) display(2);
   return(1);}

keyscan() // 检测是哪个键按下子程序//
 { int m,n,k[4]={0xfe,0xfd,0xfb,0xf7};
   for(m=0;m<4;m++)
  { P3=k[m];
    n=P3+(m*m+5)*m/6;//此处要注意m为整型
	switch(n)
	{ case 0x7e:i=0+m*4;break;
	  case 0xbe:i=1+m*4;break;
	  case 0xde:i=2+m*4;break;
	  case 0xee:i=3+m*4;break;}
      }   }
   
sum()//运算子程序
 { switch(u)
    { case 0:three=one+two;break;//plus
	  case 1:three=two-one;if(three<0) {three=-three;p10=0;}break;//minus
	  case 2:three=one*two;break;//times
	  case 3:three=two/one;break;}//div
	  i1=three%10;
      i2=three%100/10;
	  i3=three%1000/100;
	  i4=three/1000;
                         }

main()//主程序入口
{ int t1,t2,tr=1;//tr是为了按下+-*/后再按数字是能消掉前面的数字
  while(1)
  { P3=0xf0;
    t2=t1;
    t1=keych();
    if(t2==0&&t1>0) 
	 { if(tr<0) {i1=i2=i3=i4=0;tr=1;}
	   keyscan();
	   if(i<10) {i4=i3;i3=i2;i2=i1;i1=i;}
	   switch(i)
	    { case 10:leds();break;
	      case 11:i=i1;tr=-tr;sum();break;
	      case 12:u=0;delay(5);tr=-tr;two=one;break;//plus
    	  case 13:u=1;delay(5);tr=-tr;two=one;break;//minus
    	  case 14:u=2;delay(5);tr=-tr;two=one;break;//times
          case 15:u=3;delay(5);tr=-tr;two=one;break;//div//
	                             }           }
	  display(2);	         }  }

⌨️ 快捷键说明

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