ir_read.c

来自「本设计采用的是winbond 51单片机,对红外进行解码,并通过串口发送数据给P」· C语言 代码 · 共 94 行

C
94
字号
#include<W79e632.h>
#define uchar unsigned char
#define uint  unsigned int
sbit warting=P3^5;   //待机状态
sbit working=P3^4;  //工作状态
sbit level=P3^2;
sbit red=P1^0;
sbit yellow=P1^1;
sbit green=P1^2;
//code def[]={0X47,0X4B,0X37,0XCF,0X57,0X97,0X17,0XE7,0X67,0XF7,0X2B};
//code ain[]={1,2,3,4,5,6,7,8,9,0,power,};
void system_ini(void);
void delay_time(uint z);
void test_led(void);
void send_char_com(uchar x);
void ini_serialcomm(void);
uchar i=0;
uchar t=0;
uchar z;
uchar flag=0;
uchar user_data=0;
uchar user_data_not=0;
uchar user_code=0;
uchar user_code_not=0;
void main(void)
{  
     warting=0;
     system_ini();
}
void system_ini(void)
{
   IT0=0;                                //INT0为低电平触发
   EX0=1;                              //外部中断允许
   EA=1;                               //开总中断
   
}

void int0_intrupt()interrupt 0 using 1
{  
 static uchar ir_cnt=0,ir_key;
 uchar x;
if(level) goto  ini;
//==================

while(0==level);
 x=0;
 while(level && (x<200))
  { 
    x++;
    TMOD=0X01;//40us
    TH0=0XFF;TL0=0X9C;
    TR0=1;EA=1;
    while(TF0==0);
    TF0=0;
 }
//======================================== 
ir_cnt++;
     if(x<=20)   { ir_key&=0x7F;}//w_wod('0');}
else if(x<=60)   { ir_key|=0x80;}//w_wod('1');}
else  {ir_cnt=0;/* w_wod('V');*/ goto ini;}
ir_key>>=1;


if(7==ir_cnt)    user_code=ir_key;
if(ir_cnt==14)   user_code_not=ir_key; 
if(ir_cnt==21)   {user_data=ir_key;flag=1;red=0;}
if(ir_cnt==28)   user_data_not=ir_key;
   ini:EA=1;
   ini_serialcomm();
   if(flag)
    {
     send_char_com(user_data);
     flag=0;
    }
}
//向串口发送一个字符
void send_char_com(uchar z)  
{
    SBUF=z;
    while(TI==0);
    TI=0;
}
void ini_serialcomm(void)
{
    SCON  = 0x50;       //SCON: 使用模式1,异步通信10bit,波特率可变,具有接收功能 
    TMOD  = 0x20;       //TMOD: 选择定时器1,采用模式2,8位自动重装
    PCON  = 0x00;       //SMOD=1;串口在模式1,2,3下的波特率不加倍 
    TH1   = 0xFE;       // bound=38400bit/s fosc=30MHz 
    TL1   = 0XFE;
    ES    =0;           //关掉串口中断
    TR1   = 1;          // timer 1 run 
}

⌨️ 快捷键说明

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