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

📄 jisuanji.txt

📁 单片机实现的简易计算器的代码,用C语言写的!
💻 TXT
字号:


#define	P_IOA_Data 				(volatile unsigned int *)0x7000   

#define P_IOA_Dir 				(volatile unsigned int *)0x7002
#define P_IOA_Attrib 			(volatile unsigned int *)0x7003   // 属性

#define	P_IOB_Data 				(volatile unsigned int *)0x7005   

#define P_IOB_Dir 				(volatile unsigned int *)0x7007
#define P_IOB_Attrib 			(volatile unsigned int *)0x7008   // 属性

#define P_Watchdog_Clear		(volatile unsigned int *)0x7012

void Delay(void);

unsigned int anjian=0xffff,iob,key,r3,i,key,key1,address,add_data=0x0000;
unsigned int a[16]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x0077,0x007c,0x0039,0x005e,0x0079,0x0071}; 
unsigned int b[4]={0xfff7,0xfffb,0xfffd,0xfffe} ;
unsigned int buffer[5]={0x0073,0x0000,0x0000,0x0000,0x0000};
unsigned int data[5]={0x0000,0x0000,0x0000,0x0000,0x0000};
unsigned int add[3]={0x0000};
unsigned int flag=0x0000;


int main(void)
{ 

	*P_IOA_Dir=0xffff;			//设置IOA口为同相低电平输出
	*P_IOA_Attrib=0xffff;
	*P_IOA_Data=0x003f;
	*P_IOB_Dir=0x000f;			//设置IOB口为同相低电平输出4\5为悬浮输入
	*P_IOB_Attrib=0x000f;
	*P_IOB_Data=0x0000;


    i=0;
    
    while(1)
	{    
	           disp();
	           clear();
		       getkey();
               write();
	}
	
}
//////////////////////////////////////////////////////////////////////////////////////////////////////

void  disp(void)
{ for(iob=0;iob<4;iob++)
   	{  
   		    *P_IOB_Data=b[iob] ;
            switch(iob)
         {
        	case 0: *P_IOA_Data=buffer[0];Delay();break;
           	case 1: *P_IOA_Data=buffer[1];Delay();break;
         	case 2: *P_IOA_Data=buffer[2];Delay();break;
         	case 3: *P_IOA_Data=buffer[3];Delay();break;
            default:break;     
          }
     }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
clear()//////////////////////////////////清屏子程序,
{
	for(iob=0;iob<4;iob++)
	{
		 *P_IOB_Data=b[iob];         //扫描4个led端口,显示黑屏代码
		 *P_IOA_Data=0x0000;       
   		 *P_Watchdog_Clear=0x0001;
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
 int  getkey( )
{//1   
	    for(iob=0;iob<4;iob++)
   	{//2 *
   		 *P_IOB_Data=b[iob] ;        
   		 *P_Watchdog_Clear=0x0001;   	
       
    	while((*P_IOB_Data&0x0030)^0x0030)
	    {//3
            key =*P_IOB_Data;
            Delay1();            //延时15ms
            key1=*P_IOB_Data;
            if(key1 ==key)
             {//4
             	key=key&0x0030;
                key1=key1&0x0030;
                b[iob]&=0x000f;
                key1^=b[iob];
                *P_Watchdog_Clear=0x0001;
             	switch(key1)
                 {//5
	                case 0x002e :anjian=0;   break;
		            case 0x002d :anjian=1;   break;
		            case 0x002b :anjian=2;   break;
		            case 0x0027 :anjian=3;   break;
		            case 0x001e :sure();     break;
		            case 0x001d :(flag=0x0003,buffer_data(),clear_data());break;
		            case 0x001b :(flag=0x0002,buffer_data(),clear_data());break;
		            case 0x0017 :(flag=0x0001,buffer_data(),clear_data());break;
		            default:anjian=0xffff; break;     
            	 }//5
             
              }//4
 
        }//3 
        
   	}//2
   	 
}//1
//////////////////////////////////////////////////////////////////////////////////////////////////////
write()
{  
    	 
         if(anjian != 0xffff)
          {///////////////////////////////////////////////////////////////////////////////////////////
            data[0]=data[1];
          	data[1]=data[2];
          	data[2]=data[3];
          	data[3]=anjian;    //扫描按键数据送往数据缓冲区
		   	////////////////////////////////////////////////////////////
          	buffer[0]=a[data[0]];
          	buffer[1]=a[data[1]];
          	buffer[2]=a[data[2]];
		   	buffer[3]=a[data[3]];//输出数据送到缓冲区
		 
		   /////////////////////////////////////////////////////////////
		   	
		   			
		   	address=(data[0]*16*16*16)+(data[1]*16*16)+(data[2]*16)+data[3];
		   	
          }  
		    anjian=0xffff;

            *P_Watchdog_Clear=0x0001;
             
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////
void Delay1(void)
{
	unsigned int uiCount;
	for(uiCount=0;uiCount<3000;uiCount++)
	{*P_Watchdog_Clear=0x0001;}//清看门狗操作
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
void Delay(void)
{
	unsigned int uiCount;
	for(uiCount=0;uiCount < 100; uiCount++)
	{*P_Watchdog_Clear=0x0001;}//清看门狗操作
	
}

//////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////
void cancell()
{
	        buffer[3]=buffer[2];
          	buffer[2]=buffer[1];
          	buffer[1]=buffer[0];
		   	buffer[0]=0x003f;//输出数据送到缓冲区
		   ///////////////////////////////////////////////////////////////////////////////////////////
		   	data[3]=data[2];
          	data[2]=data[1];
          	data[1]=data[0];
		   	data[0]=0x0000;  //扫描按键数据送往数据缓冲区
		   //////////////////////////////////////////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void sure()
{  unsigned int *i,j;
//////////////////////////////////////////////
switch(flag)
                    
{		            case 0x0001 :jia() ; break;
		            case 0x0002 :jian(); break;
		            case 0x0003 :chu(); break;
		             
		            default:anjian=0xffff; break; 
}
//////////////////////////////////////////////

 
   
   
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//加法功能键子程序
jia(void)
{    buffer_data();
     add[2]=add[0]+add[1];
     updata(add[2]);	
}
jian(void)
{    buffer_data();
	 add[2]=add[0]-add[1];
     updata(add[2]);
}
chu(void)
{    buffer_data();
     add[2]=add[0]/add[1];
     updata(add[2]);
}
updata(unsigned int j)
{  
   data[3]=j%10;
   j=j/10;
   data[2]=j%10;
   j=j/10;
   data[1]=j%10;
   j=j/10;
   data[0]=j%10;
   ///////////////////////
   buffer[0]=a[data[0]];
   buffer[1]=a[data[1]];
   buffer[2]=a[data[2]];
   buffer[3]=a[data[3]];//
}

////////////////////////////
clear_data(void)
{
	        data[0]=0x0000;
          	data[1]=0x0000;
          	data[2]=0x0000;
          	data[3]=0x0000;    
		   	////////////////////////////////////////////////////////////
          	buffer[0]=a[data[0]];
          	buffer[1]=a[data[1]];
          	buffer[2]=a[data[2]];
		   	buffer[3]=a[data[3]];
	
}
////////////////////////////
buffer_data(void)
{
	        add_data=(data[0]*10*10*10)+(data[1]*10*10)+(data[2]*10)+data[3];
		   	add[0]=add[1];
		   	add[1]=add_data;
}

⌨️ 快捷键说明

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