单片机学习小组
直播中

李健

7年用户 162经验值
私信 关注

电视机万能遥控器控制直流电机正反转程序

//*****************************************************************
//author:su and me
//date:2008-12-22
//一电视机万能遥控器按一电机正转,按二反转,按三电机停转,遥控解码程序,网上
//程序,加上修改和补充,成形。
//*****************************************************************
#include
#define byte unsigned char
#define dbyte unsigned int
#define DELAY854USdelay(21)
#define DELAY934USdelay(23)
#define DELAY1014USdelay(25)
#define DELAY2414USdelay(60)
***it  hs0038_io=P3^2;
***it P20=P2^0;
***it P21=P2^1;
***it P22=P2^2;
***it P23=P2^3;
byte  temp_data;
byte  x,y,z;
byte  data decode[4];//定义4个数组,用来存储代码

void delay(byte temp)//精确延时时间time=(40*temp+14)us
{
byte j,i;
for(j=0;j
for(i=0;i<10;i++);
}
void mov_zhen()
{
P20=1;//6
P21=0;//8
P22=0;//7
P23=0;//5
}
void mov_fan()
{
P20=0;
P21=0;
P22=1;
P23=0;
}
void mov_stop()
{
P20=0;
P21=0;
P22=0;
P23=0;
}

void main()
{
IT0=1;
EX0=1;
EA=1;
temp_data=0;
while(1)
{
    if (decode[2]==24)mov_zhen();
    if (decode[2]==25)mov_fan();
    if (decode[2]==26)mov_stop();
}
void t0(void) interrupt 0 using 2//外部中断0的函数
{
EA=0;
    for(x=0;x<10;x++)//九毫秒分为10个0.9毫秒0
    {
     //延时0.854毫秒
     DELAY854US;
if (hs0038_io==1) //每隔0.854毫秒检测一次
{
x=10;//如果检测到高电平,读取失败
break;//推出
}
     else if(x==9)//如果达到10个0.854毫秒的时间
        {
            while(hs0038_io==0);//如果此时是低电平等待
            DELAY2414US;延时2.414毫秒
            if(hs0038_io==0)//如果检测到低电平
               break;//退出
            else
               DELAY2414US;//延时2.414毫秒
//#####################################################################
            for(y=0;y<4;y++)//引导码正确,开始读取数据,总共四个字节
            {
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
            for(z=0;z<8;z++)//每个字节为八位
                {
                while(hs0038_io==0);//如果为低电平则等待
                //延时0.911毫秒。0.9毫秒约为0.6毫秒和1.6毫秒的平均值
                DELAY854US;
                if(hs0038_io)
                {
                   temp_data|=(1<
                   DELAY1014US;
                 }
                 else
                   temp_data&=(~(1<
                }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
              decode[y]=temp_data;//把读到的一个字节保存在数组当中
             }
//#####################################################################
       }
   }
   EA=1;
}

更多回帖

发帖
×
20
完善资料,
赚取积分