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

📄 calculator.c

📁 简单的用单片机编写的程序实现一位的数的加减乘除
💻 C
字号:
#include<AT89X52.h>//仅完成个位的四则运算,并可以处理负数结果
signed char code  a[]={0x3f,0x06,0x5b,0x4f,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f,0x00,0x40};
unsigned char code tv[]={0xfe,0xfd,0xfb,0xf7};
signed int data led[4];
signed int data tvdata=0;
signed int n=0;//输入状态变量
signed int s=0;//存输入值
signed int t=0;//计算状态参量
signed int x=0;//存第一个数
signed int y=0;//存第二个数
signed int z=0;//输出结果

void delay(void)
   {
    unsigned int i;
    for(i=0;i<100;i++);
   }

kp_scan()//获取键盘值
{
 unsigned char i,j;
 P1=0xff;
 P1=0x0f;
 i=P1;
 P1=0xff;
 P1=0xf0;
 j=P1;
 return(i+j);
}

led_show()
{
 signed int i,k,m;
 if(tvdata>=0&&tvdata<999)//正数显示
   {
     led[0]=10;//正数时符号位为空
     led[1]=tvdata/100;//取百位
     led[2]=tvdata%100/10;//取十位
     led[3]=tvdata%10;//取个位

     for(k=0;k<4;k++)
     {
        i=led[k];
       P0=a[i];
      i=led[k];
     P2=tv[k];
      delay();
     }
    }
 if(tvdata<0&&tvdata>-999)//负数显示
   {
    m=tvdata;
     m=-m;
     led[0]=11;//显示负号
     led[1]=m/100;//取百位
     led[2]=m%100/10;//取十位
     led[3]=m%10;//取个位

     for(k=0;k<4;k++)
     {
   i=led[k];
    P0=a[i];
  i=led[k];
  P2=tv[k];
  delay();
   }
   }
}

result(t,y,x)
{
  signed int z;
  if(t==1)//加法
    {
    z=x+y;
    }
  if(t==2)//减法
    {
   z=x-y;
   }
  if(t==3)//乘法
  {
   z=x*y;
   }
  if(t==4&&y!=0)//除法
    {
   z=x/y;
   }
  else if(t==4&&y==0)//除0错误
    {
    z=999;//超出显示数值范围
    }
  else
   {
     ;
    }
  return(z);
} 
  

main()
{

 while(1)
     {
     tvdata=kp_scan();
     if(tvdata!=0xff)//保持显示数值		      
     {  
 s=tvdata;
       } 
switch(tvdata)
{
         case 0xd7:{tvdata=0;s=0;y=s;}break;
         case 0xeb:{tvdata=1;s=1;y=s;}break;
         case 0xdb:{tvdata=2;s=2;y=s;}break;
         case 0xbb:{tvdata=3;s=3;y=s;}break;
         case 0xed:{tvdata=4;s=4;y=s;}break;
         case 0xdd:{tvdata=5;s=5;y=s;}break;
         case 0xbd:{tvdata=6;s=6;y=s;}break;
         case 0xee:{tvdata=7;s=7;y=s;}break;
         case 0xde:{tvdata=8;s=8;y=s;}break;	 
         case 0xbe:{tvdata=9;s=9;y=s;}break; 
         case 0xe7:{tvdata=0;s=0;y=0;z=0;}break;//ON/C键
         case 0x77:{s=0;x=y;t=1;}break;//加法键
         case 0x7b:{s=0;x=y;t=2;}break;//减法键		 
         case 0x7d:{s=0;x=y;t=3;}break;//乘法键
         case 0x7e:{s=0;x=y;t=4;}break;//除法键
         case 0xb7:{s=result(t,y,x);}break;//等于键
       default: ;
       }
        tvdata=s;
       led_show();
      }
}

⌨️ 快捷键说明

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