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

📄 遥控一个数.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,num_2=0,k=0,i=0,n=0,j,num,voicer=1;

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()
{
    uint m;
    for(m=0;m<k;m++)                     /////可以获得 按键的发声次数
    {
	  
      for(j=0; j<8000; j++);
      P3_7=0;   
      for(j=0;j<5000;j++);
	  P3_7=1;
    }			
}








void main(void)
{

	P3_7=1;
	P1_0=0;

	TMOD=0x21;  //////T1 自动装入  8bit   T0  16位模式   
    TH0 = 0xB8;
    TL0 = 0x00;

	IT0=0; 
    EA = 1;	
    ET0 = 1;     /////// T0中断
    EX0 = 1;    
    DT=0;          ///////标志
	TR0=1;
	flag=0;        /////////////////串口控制

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

	 	 while(1);
      }






//定时器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;}
      }   
    }
  }  
}



void Int0(void) interrupt 0 using 2
{
   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;     //再启动///////////记数
}

⌨️ 快捷键说明

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