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

📄 lcd_calm.c

📁 用LCD显示器的计算器
💻 C
字号:
					   #include <AT89X51.H> 
#include<stdio.h>
#include<math.h>
#include<absacc.h>

  
unsigned char code dispcode[]="0123456789";

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;
unsigned long bian=0;
sbit RS=P1^5;
sbit RW=P1^6;
sbit EN=P1^7;
void delay(unsigned char);
void init();
void wc51r(unsigned char j);
void wc51ddr(unsigned char j);







void main(void) 

{ 

  TMOD=0x01; 

  TH0=(65536-10000) / 256; 

  TL0=(65536-10000) % 256; 

  TR0=1; 

  ET0=1; 

  EA=1;

 
  init();
  wc51r(0x80);

  
   
   
   
   
   
  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;
  
  if (bian!=xian)
  {
  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;
  
  
    x=0;
	
	wc51r(0x01);
	wc51r(0x80);

  
  
      while(!(a[7-x]>0))
	      	{
			 
			 if (x>6)
			     break;
			     else
				  x++;
			}
	   
   for(;x<8;x++)
  {
   wc51ddr(dispcode[a[7-x]]);
   }
  
   bian=xian;
    
	}
  
  	TR0=1; 
	 
} 






void init()
{
wc51r(0x01);

wc51r(0x38);

wc51r(0x0f);

wc51r(0x06);

}


void wc51r(unsigned char i)
{
EN=0;RS=0;RW=0;
EN=1;
P2=i;
EN=0;
delay(5);

}
void wc51ddr(unsigned char i)
{
EN=0;RS=1;RW=0;
EN=1;
P2=i;
EN=0;
delay(5);

}
void delay(unsigned char p)
{   unsigned char y=0;
    for(;p>0;p--)
    { for(y=0;y<125;y++)
        {;}
    }
}

⌨️ 快捷键说明

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