单片机红外遥控

  • F6_212403
    了解作者
  • 47.9KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-14 04:10
    上传日期
单片机红外遥控
红外遥控.zip
  • 红外遥控
  • 红外遥控
    6.7KB
  • 红外遥控.LST
    4.9KB
  • telecontrol.OBJ
    7.1KB
  • 红外遥控.uvopt
    5.5KB
  • 红外遥控.uvgui_Administrator.bak
    72.5KB
  • 红外遥控.plg
    40KB
  • telecontrol.LST
    7.7KB
  • 红外遥控.hex
    1.5KB
  • 红外遥控.lnp
    48B
  • 红外遥控_uvproj.bak
    13.1KB
  • 遥控蜂鸣.c
    6.3KB
  • 红外遥控.M51
    9.7KB
  • 红外遥控_uvopt.bak
    5.5KB
  • 红外遥控.OBJ
    8.8KB
  • 遥控蜂鸣.LST
    10.1KB
  • 遥控蜂鸣.OBJ
    7.8KB
  • 红外遥控.uvproj
    13KB
  • 红外遥控.uvgui.Administrator
    72.5KB
  • 红外遥控.c
    2.2KB
内容介绍
/************************************************* * 遥控器与蜂鸣器 * *************************************************/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P1 替换 sbit LATCH1=P2^0; //定义锁存使能端口 段锁存 sbit LATCH2=P2^1; //位锁存 sbit IR =P3^2; //红外接口标志 sbit beep =P1^5; //蜂鸣器 sbit P35 =P3^5; //这是为了关闭开发板上的点阵实际应用去掉 bit irpro_ok,irok; /************************************************* * 全局变量声明 * *************************************************/ unsigned char code HEYAO_DuanMa[10]={0xc0,0xf9, 0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // 显示段码值0~9 unsigned char irtime; //红外用全局变量 unsigned char IRcord[4]; unsigned char irdata[33]; /************************************************* * 函数声明 * *************************************************/ void delay(void); void Ir_work(void); void Ircordpro(void); /************************************************* * 定时器0中断处理 * *************************************************/ void delay(void) { char i,j; for(i=0;i<120;i++) for(j=0;j<120;j++); } void tim0_isr (void) interrupt 1 using 1 { irtime++; //用于计数2个下降沿之间的时间 } /************************************************* * 外部中断0中断处理 * *************************************************/ void EX0_ISR (void) interrupt 0 //外部中断0服务函数 { static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位 if(startflag) { if(irtime<63&&irtime>=33) //引导码 TC9012的头码,9ms+4.5ms i=0; irdata[i]=irtime; //存储每个电平的持续时间,用于以后判断是0还是1 irtime=0; i++; if(i==33) { irok=1; i=0; } } else { irtime=0; startflag=1; } } /************************************************* * 定时器0初始化 * *************************************************/ void TIM0init(void) //定时器0初始化 { TMOD=0x02; //定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x00; //重载值 TL0=0x00; //初始化值 ET0=1; //开中断 TR0=1; } /************************************************* * 外部中断0初始化 * *************************************************/ void EX0init(void) { IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; //使能外部中断 EA = 1; //开总中断 } /************************************************* * 键值处理 * *************************************************/ void Ir_work(void) //红外键值散转程序 { char i; switch(IRcord[2]) //判断第三个数码值 { case 0X16:DataPort=HEYAO_DuanMa[0];break; //0 显示相应的按键值 case 0X0C:DataPort=HEYAO_DuanMa[1];for(i=0;i<1;i++){beep=0;delay();beep=1;delay();};break;//1 case 0X18:DataPort=HEYAO_DuanMa[2];for(i=0;i<2;i++){beep=0;delay();beep=1;delay();};break;//2 case 0X5E:DataPort=HEYAO_DuanMa[3];for(i=0;i<3;i++){beep=0;delay();beep=1;delay();};break;//3 case 0X08:DataPort=HEYAO_DuanMa[4];for(i=0;i<4;i++){beep=0;delay();beep=1;delay();};break;//4 case 0X1C:DataPort=HEYAO_DuanMa[5];for(i=0;i<5;i++){beep=0;delay();beep=1;delay();};break;//5 case 0X5A:DataPort=HEYAO_DuanMa[6];for(i=0;i<6;i++){beep=0;delay();beep=1;delay();};break;//6 case 0X42:DataPort=HEYAO_DuanMa[7];for(i=0;i<7;i++){beep=0;delay();beep=1;delay();};break;//7 case 0X52:DataPort=HEYAO_DuanMa[8];for(i=0;i<8;i++){beep=0;delay();beep=1;delay();};break;//8 case 0X4A:DataPort=HEYAO_DuanMa[9];for(i=0;i<9;i++){beep=0;delay();beep=1;delay();};break;//9 default:break; } irpro_ok=0; //处理完成标志 } /************************************************* * 红外码值处理 * *************************************************/ void Ircordpro(void) //红外码值处理函数 { unsigned char i, j, k; unsigned char cord,value; k=1; for(i=0;i<4;i++) //处理4个字节 { for(j=1;j<=8;j++) //处理1个字节8位 { cord=irdata[k]; if(cord>7) //大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差 value|=0x80; if(j<8) { value>>=1; } k++; } IRcord[i]=value; value=0; } irpro_ok=1; //处理完毕标志位置1 } /************************************************* * 主函数 * *************************************************/ void main(void) { EX0init(); //初始化外部中断 TIM0init(); //初始化定时器 P35=0; //这是为了关闭开发板上的点阵实际应用去掉 DataPort=0x01; //取位码 第一位数码管选通,即二进制0000 0001 LATCH2=1; //位锁存 LATCH2=0; while(1) //主循环 { if(irok) //如果接收好了进行红外处理 { Ircordpro(); irok=0; } if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等 { Ir_work(); } } }
评论
    相关推荐
    • 单片机课件
      能够帮助同学们快速的了解单片机并对于单片机的一些设计程序有一定的认知
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 爱上单片机
      《爱上单片机》本书是一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章...