用51单片机做的一个红外摇控电机的风扇


直接可以运行,端口都与设置好,也明确了端口可以灵活的更改,通俗易懂,代码都有解释
资源截图
代码片段和文件信息
/*******************************************************************************
* 单片机答辩

*******************************************************************************/

#include “reg52.h“  //此文件中定义了单片机的一些特殊功能寄存器
#define uchar unsigned char
#define uint  unsigned int

typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;

sbit IRIN=P3^2;    //红外
u8 IrValue[6];
u8 Time;

#define MotorIN P1 //步进电机控制接口定义
uchar MotorRS;//转速
uchar MotorPD[4] ={0x080x040x020x01};//正转
uchar MotorND[4]={0x010x020x040x08};//反转

sbit Dcmotor=P2^0; //直流电机定义
u16 Htemp;
u16 Ltemp;

u8 DisplaySmg;
u8 code Smgduan[3]={0xcf0xa40xb0}; //


void delay(u16 i) //i=1 10微秒
{
while(i--);
}

 void Delay_xms(uint x)
{
 uint ij;
 for(i=0;i for(j=0;j<112;j++);
}
  

void MotorCW()  //顺时针转动
{
 uchar i;
 for(i=0;i<4;i++)
  {
   MotorIN=MotorPD[i];
   Delay_xms(MotorRS);//转速调节
  }
}
void MotorCCW() //逆时针移动
{
 uchar i;
 for(i=0;i<4;i++)
  {
   MotorIN=MotorND[i];
   Delay_xms(MotorRS);//转速调节
  }
}
//停止转动
void MotorStop(void)
{
 MotorIN=0x00;
}

void IrInit()   //初始化红外线接收
{
IT0=1;//下降沿触发
EX0=1;//打开中断0允许
EA=1; //打开总中断
IRIN=1;//初始化端口
}
void timer0init()    //定时器0初始化
{
TMOD=0x01;
TH0=Htemp;
TL0=Ltemp;
ET0=1;
EA=1;
}
void timer0() interrupt 1
{
TH0=Htemp;
TL0=Ltemp;
Dcmotor=~Dcmotor;
}

void main() //主函数
{
    uint i=0;

int c=0;

    int MS=1;

int Derection=0;
IrInit();
timer0init();

MotorRS=20;

Dcmotor=0;
while(1)
{

    if(IrValue[2]/16==4&&IrValue[2]%16==5) 
{
MS++;

if(MS%2==0){
c=1;
IrValue[2]=12;

}
else{
IrValue[2]=20;
c=0;
}
}

else if(IrValue[2]==20)  
{
DisplaySmg=0x00;
P2=0;
P0=0;
TR0=0;
  }

else if(c==1)
{
if((IrValue[2]/16==1&&IrValue[2]%16==6)||Derection==1)
{
   if(IrValue[2]/16==1&&IrValue[2]%16==6) 
{
if(Derection==1)
{
  Derection=0;
}
else
{
  Derection=1;
}
IrValue[2]=10;
}  
   else
    {
    i++;
    if(i<100) MotorCW();

else if(i==100) 
{
Delay_xms(400);
MotorStop();
}

else if(i<200&&i>100)
{
MotorCCW();
}

else i=0;
   }
}
        
      if((IrValue[2]/16==0&&IrValue[2]%16==12))
{
         DisplaySmg=Smgduan[0];
Htemp=0xfc;
Ltemp=0x18;
TR0=1;

     }
     else if((IrValue[2]/16==1&&IrValue[2]%16==8))
{
         DisplaySmg=Smgduan[1];
Htemp=0xfd;
Ltemp=0x12;
TR0=1;

     }
      else if((IrValue[2]/16==5&&IrValue[2]%16==14))
{

         DisplaySmg=Smgduan[2];
TR0=0;
Dcmotor=1;

       }
}
else;

P0=DisplaySmg;


}
}

void ReadIr() interrupt 0
{
u8 jk;
u16 err;
Time=0;  
delay(700); //7ms
if(IRIN==0) //确认

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1410048  2018-04-01 16:37  基于红外电风扇系统设计-单片机20150610046黄冠杰.doc

     文件       4092  2018-04-01 17:44  基于红外电风扇系统设计-单片机main.c

     文件      13081  2017-06-02 15:17  基于红外电风扇系统设计-单片机main.LST

     文件      10466  2017-06-02 15:17  基于红外电风扇系统设计-单片机main.OBJ

     文件       8976  2017-06-02 15:17  基于红外电风扇系统设计-单片机 emplate

     文件       3045  2017-06-02 15:17  基于红外电风扇系统设计-单片机 emplate.hex

     文件         44  2017-06-02 15:17  基于红外电风扇系统设计-单片机 emplate.lnp

     文件      14858  2017-06-02 15:17  基于红外电风扇系统设计-单片机 emplate.M51

     文件        207  2018-04-03 10:52  基于红外电风扇系统设计-单片机 emplate.plg

    .......     55762  2018-04-03 10:53  基于红外电风扇系统设计-单片机 emplate.uvopt

     文件      13229  2017-05-25 22:07  基于红外电风扇系统设计-单片机 emplate.uvproj

    .......     55770  2017-12-19 00:59  基于红外电风扇系统设计-单片机 emplate_uvopt.bak

     文件      13259  2016-05-17 10:17  基于红外电风扇系统设计-单片机 emplate_uvproj.bak

     目录          0  2018-04-03 10:53  基于红外电风扇系统设计-单片机

----------- ---------  ---------- -----  ----

              1602837                    14


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)