51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
学习型遥控器
作者:佚名  发布时间:2009/11/14  阅读次数:1105  字体大小: 【】 【】【

/*********************************************************************/
//                                         remote.c
//                                       学习型遥控器
//                                       LRM 2004.10.12          
/*********************************************************************/
//使用AT89C52单片机,12MHZ晶振,
//
#pragma src(E:\remote.asm)
#include "reg51.h"
#include "intrins.h"         //_nop_();延时函数用
//
#define char unsigned char
#define int unsigned int
//
sbit   studylamp=P1^6;               //学习状态指示灯
sbit   lamp=P1^7;                         //发射指示灯
sbit   studykey=P3^2;                 //学习键(中断口)
sbit   remotein=P3^4;                 //遥控信号输入口
sbit   remoteout=P3^5;                 // 遥控输出口
sbit   txkey=P1^0     ;                     //发射键
//
//
int i,j,m=255,n,k,s;
char idata   remotedata[206];//存肪冲宽度数据用
int     head;                     //存起始位用
int     remdata;
//
//
////
/*********1毫秒延时程序**********/
delay1ms(int t)
{
for(i=0;i<t;i++)
     for(j=0;j<120;j++)
     ;
}
//
//
/***********初始化函数**********/
clearmen()
{
studylamp=0;                     //关学习灯
lamp=0;                               //关发射指示
remoteout=0;                     //关遥控输出
remotein=1;                       //
for(i=0;i<206;i++)         //清内存
{remotedata[i]=0x00;}
IE=0x00;
IP=0x01;
TMOD=0x22;                         //8位自动重装模式
PCON=0X00;
TH1=0xf3;                           //40KHZ初值
TL1=0xf3;
IT0=1;
EX0=1;                               //外中断允许
EA=1;                                 //开总中断
}
//
//
/**********键功能函数************/
keywork()
{
  if(txkey==0)
  {
       while(txkey==0);         //等待键释放
       ET1=1;TR1=1;                 //发起始位
       for(i=head;i>0;i--){;}
  remoteout=0;ET1=0;TR1=0;
  n=0;
  while(1)
  {
           if(remotedata[n]==0x00){delay1ms(10);break;}//数据为0结束
     for(i=remotedata[n];i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
     lamp=~lamp;n++;//偶地址不发脉冲
//
     ET1=1;TR1=1;   //奇地址发调制脉冲
           for(i=remotedata[n];i>0;i--){;}
     remoteout=0;ET1=0;TR1=0;n++;
  }
   }
}
//
//
/***********主函数***************/
main()
{
clearmen();                   //初始化
while(1)
  {
   keywork();             //按键扫描
   }
}
//
//
/*********40KHZ发生器***********/
//定时中断T1
void time_intt1(void) interrupt 3
{
  remoteout=~remoteout;
}
//
//
/***********学习函数 ***********/
//外中断0
void intt0(void) interrupt 0
{
ET1=0;TR1=0;EX0=0;EA=0;
head=0;studylamp=1;lamp=0;
while(studykey==0);                     //等待键释放
while(remotein==1);                     //等待遥控码输入
head=0;                                             //读入起始位
while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();head++;}
n=0;remdata=0x0000;
while(1)
   {
             while(remotein==1){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}
       if(remdata>m)                                   //高电平>5毫秒退出
       {remotedata[n]=0x00;EX0=1;EA=1;goto end;}
       remotedata[n]=remdata;n++;         //存高电平脉宽数据
             remdata=0x0000;                                   //脉宽计数器清零
       while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}   //低电平计数
       remotedata[n]=remdata;n++;remdata=0x00;//存低电平脉宽数据
     }
end: lamp=1;studylamp=0;
}
//
//*********************结束**************************//

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号