找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3058|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

電視機萬能遙控器控制直流電機正反轉(zhuǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:83710 發(fā)表于 2015-6-24 21:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//*****************************************************************
//author:su and me
//date:2008-12-22
//一電視機萬能遙控器按一電機正轉(zhuǎn),按二反轉(zhuǎn),按三電機停轉(zhuǎn),遙控解碼程序,網(wǎng)上
//程序,加上修改和補充,成形。
//*****************************************************************
#include <at89x52.h>
#define byte unsigned char
#define dbyte unsigned int
#define DELAY854USdelay(21)
#define DELAY934USdelay(23)
#define DELAY1014USdelay(25)
#define DELAY2414USdelay(60)
sbit  hs0038_io=P3^2;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
byte  temp_data;
byte  x,y,z;
byte  data decode[4];//定義4個數(shù)組,用來存儲代碼

void delay(byte temp)//精確延時時間time=(40*temp+14)us
{
byte j,i;
for(j=0;j<temp;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的函數(shù)
{
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++)//引導(dǎo)碼正確,開始讀取數(shù)據(jù),總共四個字節(jié)
            {
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
            for(z=0;z<8;z++)//每個字節(jié)為八位
                {
                while(hs0038_io==0);//如果為低電平則等待
                //延時0.911毫秒。0.9毫秒約為0.6毫秒和1.6毫秒的平均值
                DELAY854US;
                if(hs0038_io)
                {
                   temp_data|=(1<<z);//如果讀到高電平,則置位相應(yīng)位
                   DELAY1014US;
                 }
                 else
                   temp_data&=(~(1<<z));
                }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
              decode[y]=temp_data;//把讀到的一個字節(jié)保存在數(shù)組當(dāng)中
             }
//#####################################################################
       }
   }
   EA=1;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表