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

📄 jishuan.c

📁 单片机应用下的计算器
💻 C
字号:
		#include <AT89X51.H> 
#include<stdio.h>
#include<math.h>
#include<absacc.h>

  

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 

0x7f,0x6f,0x00}; 

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char a[8];
unsigned char i,j;
unsigned char temp,x,count;
unsigned char key,k;
unsigned long sun=0,chu=0,xian=0;
bit wei=0;







void main(void) 

{ 

  TMOD=0x01; 

  TH0=(65536-4000) / 256; 

  TL0=(65536-4000) % 256; 

  TR0=1; 

  ET0=1; 

  EA=1;
   
   
   
   
   
  count=0;
  
  

  for( k=4;;k++) 

    { 

      P3=dispbitcode[k]; 
      
      temp=P3; 

      temp=temp & 0x0f; 

      if (temp!=0x0f) 

        { 

          for(i=50;i>0;i--) 

          for(j=200;j>0;j--); 

          temp=P3; 

          temp=temp & 0x0f; 

          if (temp!=0x0f) 

            { 

              temp=P3; 

              temp=temp & 0x0f;              
          
              switch(temp) 

                { 

                  case 0x0e: 
                  
                   if (k==4)
                    key=7;

                   if (k==5)
                    key=4;

                   if (k==6)
                    key=1;

                   if (k==7)
                    key=15;

                    break; 

                  case 0x0d:
 
                   if (k==4)
                    key=8;

                   if (k==5)
                    key=5;

                   if (k==6)
                    key=2;

                   if (k==7)
                    key=0; 

                    break; 

                  case 0x0b: 
                
                   if (k==4)
                    key=9;
                
                   if (k==5)
                    key=6;

                   if (k==6)
                    key=3;

                   if (k==7)
                    key=14; 

                    break; 

                  case 0x07: 

                   if (k==4)
                    key=10; 

                   if (k==5)
                    key=11;

                   if (k==6)
                    key=12;

                   if (k==7)
                    key=13;

                    break;
                  


 

                }
				
				 while(temp!=0x0f) 

                { 

                  temp=P3; 

                  temp=temp & 0x0f;              

                } 
 
               }
              }
			  else
			      key=16;
             if (k==7)
                k=3;
          if ((key>=0) && (key<10))
             { 
             sun=sun*10+key;
             xian=sun;  
             }
          if ((key>9) && (key<15))
             {
              switch(count)
			  {
                case 0:
                 count=key;
                 chu=sun;
                 sun=0;
            
                break;

               case 10:
                
                 count=key;
                 xian=chu/sun;
                 chu=xian;
                 sun=0;
                break;

              case 11:
                
                 count=key;

                 xian=chu*sun;

                 chu=xian;

                 sun=0;

                break;

              case 12:
                
                 count=key;

                 xian=chu-sun;

                 chu=xian;

                 sun=0;
                break;

              case 13:
                
                 count=key;

                 xian=chu+sun;

                 chu=xian;

                 sun=0;
                break;

              case 14:
                

                 count=key;

                break;

              
				}
             }
		  if (key==15)
		      {
			   count=0;

                 sun=0;

                 chu=0;

                 xian=0;
			  }

			
 
         }
	}
void t0(void) interrupt 1 using 0 

{ 
  TR0=0;

  TH0=(65536-4000) / 256; 

  TL0=(65536-4000) % 256;
  a[7]=xian/10000000;
  a[6]=xian%10000000/1000000;
  a[5]=xian%1000000/100000;
  a[4]=xian%100000/10000;
  a[3]=xian%10000/1000;
  a[2]=xian%1000/100;
  a[1]=xian%100/10;
  a[0]=xian%10;
  if (wei==0)
      {
	  wei=1;
      while(!(a[7-x]>0))
	      	{
			 
			 if (x>6)
			     break;
			     else
				  x++;
			}
	   }
  P1=0xff;
  P2=dispcode[a[7-x]];
  P1=dispbitcode[x];
  x++;
  if(x>7)
	{
    x=0;
	wei=0;
	}
  	TR0=1; 
	 
} 


⌨️ 快捷键说明

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