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

📄 compute.c

📁 里面包含了多个C语言模块设计题目
💻 C
字号:
#include <AT89X52.h>
#define uint unsigned int 
static unsigned char data dl,temp,de;


static unsigned char data IRCode[3],IRCON,IRCON2;
bit DT=0;
bit flag;      /////////// 0  对应串口  1 遥控

uint num_1=0,k=0,i=0,j,num=0,voicer=1,w,sign,jisuan=0;

uint led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint ledpoint[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;

void wei(void);
void disp0(void);   
void disp1(void);
void disp2(void);   
void disp3(void);
void ledwork(void);
void computer(void);

void voice()
{
    
      for(j=0; j<8000; j++);
      P3_7=0;   
      for(j=0;j<5000;j++);
	  P3_7=1;
    			
}




void main(void)
{

	P3_7=1;
	TMOD= 0x11;  //////T1 ,  T0  16位模式   
    TH0 = 0xB8;
    TL0 = 0x00;
    PT1=1;
	IT0=0; 
    EA=1;	
    ET0=1;     /////// T0中断
    EX0=1;    
    DT=0;          ///////标志
	TR0=1;
	flag=0;        /////////////////串口控制
	

  ET1=1;
  TH1=0xf1;          /*设置初始值,每隔4ms一次中断*/
  TL1=0x90;
  TR1=1;
  

    	do
	      {	

	       if(DT) 
            {
             for(j=0; j<8000; j++); //这里起到按键值正确后会有一个延时,防止重复按键         
             DT = 0;
            }
	        EX0 = 1;	
		    if(voicer==1)
		    {voice();voicer=0;
		     }
		    if(jisuan==1)
		    {computer();jisuan=0;}
	      
		    }

	 	 while(1);
      }


void timer1(void) interrupt 3 using 2
{ TH1=0xf1;          /*设置初始值,每隔4ms一次中断*/
  TL1=0x90;
   i++;
   i=i%4;
   ledwork();
   }





//定时器0定时中断
void Timer0(void) interrupt 1 using 1
{
  if(flag)    //////////遥控控制
  {
     TH0=0xFD;
     TL0=0x1E; //设定时值为800us

	 if(IRCON<3)
     {
       if(IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
       {
         IRCON2++;
         IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
         IRCode[IRCON]=IRCode[IRCON]|P3_2; //每八次填满一个字节,一个字节存放遥控编码4个位
       }
       else
       {
         IRCON++; //填满一个字节,指向下一个变量
         IRCON2=0; //计数清零
       }
    }
    else
    {

      flag=0;           ////////////串口控制
                  /////////////////////////暂时不允许int0中断

    	   
      if((IRCode[1]!=0xFF)&&(IRCode[2]!=0xFF))
     {
        if(IRCode[1]==0x55)
        { 		  
          switch(IRCode[2])
          {
            case 0xAB:               //1-8键控制
			k=1;
            break;
            case 0xAC:
			k=2;
            break;

            case 0xAD: 
			k=3;
            break;

            case 0xB2: 
			k=4;
            break;
            
			case 0xB3: 
			k=5;
            break;
            
			case 0xB4: 
			k=6;
            break;

            case 0xB5: 
			k=7;
            break;
            
			case 0xCA: 
			k=8;
            break;

			case 0xCB:
            k=9;
            break;

			case 0xAA:
            k=0;              //////////////  改变参数显示的类型!  ///实现当前检测根数?
            break;

			case 0x2A:
            k=11;    //////music+++++++++++++++++         // 人工的 触发
            break;
            
			case 0x2B:
    		k=12;    //////music------------------   认为是 Man_or_PC 切换

            break;
            
			case 0x52:
            k=13;    //////对比+++++++
            break;
            
			case 0x53:
            k=14;    //////对比--------
            break;

			case 0x32:
            k=15;    //////色彩+++++++
            break;

			case 0x33:
            k=16;    //////色彩-------
            break;

			case 0x2C:
            k=17;    //////亮度+++++
            break;

			case 0x2D:
            k=18;    //////亮度-------
            break;

            case 0xD2:          //按关闭电源键
            P0 = 0xFF;
            k=10;
            
            break;
              }
		  voicer=1;
          jisuan=1;
		  }
      }   
    }
  }  
}



void Int0(void) interrupt 0 using 0
{
   EX0=0; //外部中断0关闭
   DT=1;

   TR0=0; //先 停止 T0 

   flag=1;     ////////遥控控制

   TH0=0xFD;
   TL0=0x1E; //设定时值为800us

   for(IRCON=0; IRCON<3; IRCON++)
   IRCode[IRCON] = 0;
   IRCON = 0;
   IRCON2 = 0; //计数清零


              
   TR0 = 1;     //再启动///////////记数
}


void computer(void)
     {
       
	 
	    if(k<=9&&k>=0)
        num=num*10+k;
	
         if(k<15&&k>10)
        {
          sign=k;
          num_1=num;
		  num=0;
        }
      if(k==15)

       switch(sign)
        { 
          case 11:num=num_1+num;break; 
          case 12:num=num_1-num;break;
          case 13:num=num_1*num;break;
	      case 14:num=num_1/num;break;  
        }
}


void ledwork(void)   /*数码管工作函数*/
{  wei( );
  if(i==0)   disp0();
  if(i==1&&w>=1)  disp1();
  if(i==2&&w>=2)  disp2();
  if(i==3&&w>=3)  disp3();
  } 


void wei(void)
{   
   if(num>=0&&num<10)
      w=0;
   if(num>9&&num<100)
	  {w=1;i=i%2;}
	if(num>100&&num<1000)
	  {w=2;i=i%3;}
	if(num>=1000)
	  {w=3;i=i%4;}
}



void disp0(void)    /* 数码管0工作函数,控制千位**/
{ 
 
  led1=1;
  led2=1;
  led0=0;
  led3=1;
  P0=led[num%10];
   
}
void disp1(void)  /* 数码管1工作函数,控制百位**/
{

  led1=0;
  led2=1;
  led0=1;
  P0=led[num/10%10];
  
}
void disp2(void)   /* 数码管2工作函数,控制十位**/
{ 

  led2=0; 
  led1=1;
  P0=led[num/100%10]; 
}
void disp3(void)   /* 数码管3工作函数,控制个位*/
{
    led2=1;
    led3=0; 
    P0=led[num/1000%10]; 
}

⌨️ 快捷键说明

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