找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2900|回复: 0
打印 上一主题 下一主题
收起左侧

单片机红外通信控制继电器源程序

[复制链接]
跳转到指定楼层
楼主
可以参考的一个程序

  1. /***************************************************************************
  2.     本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序)
  3.     程序功能:
  4.         1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示);
  5.         2、对特别的几个键,有相应的现象出现:
  6.         (1)电源键,使继电器工作或断开;
  7.         (2)静音键,使蜂鸣器响或不响;
  8.         (3)快进键让LED灯向右出现一次走马灯现象;
  9.         (4)快退键让LED灯向左出现一次走马灯现象;
  10.         (5)按0~9,数码管显示所按的键号;
  11.         (6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会
  12. 改变台号。
  13.     (7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。
  14. ******************************************************************************/
  15. #include "reg51.h"//头文件:

  16. #define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名

  17. sbit hwx=P3^3;                //红外接收数据引脚,也是外部中断1的I/O口
  18. sbit SMG_q = P1^0;        //定义数码管阳级控制脚(千位)
  19. sbit SMG_b = P1^1;        //定义数码管阳级控制脚(百位)
  20. sbit SMG_s = P1^2;        //定义数码管阳级控制脚(十位)
  21. sbit SMG_g = P1^3;        //定义数码管阳级控制脚(个位)
  22. sbit JDQ=P1^4;                //继电器
  23. sbit Beep =  P1^5 ;        //蜂鸣器

  24. code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  25.                                                         0x88,0x8c,0xc6,0xa1,0x86,0x8e};        //共阳数码管段值表 0-9 a-f

  26. unsigned char ly_disdate[4]={0,0,0,0};
  27. unsigned char ly_lhj[4],i;
  28. bit ly_flag=1;
  29. void display();

  30. void delay(void);

  31. void Delay10ms(unsigned int c)
  32. {
  33.     unsigned char a,b;
  34.     for(c;c>0;c--)
  35.         for(b=38;b>0;b--)
  36.             for(a=130;a>0;a--);
  37. }

  38. void main(void)//主函数
  39. {
  40.         EA=1;
  41.         EX1=1;
  42.         IT1=1;
  43.         TMOD=0X10;
  44.         JDQ=1;
  45.         ly_flag=0;
  46.         while(1){       
  47.                 if(ly_flag){
  48.                         ly_flag=0;
  49.                         if ((ly_lhj[2]==0x45))
  50.                         {
  51.                                 JDQ=~JDQ;
  52.                         }
  53.                         if ((ly_lhj[2]==0x47))
  54.                         {
  55.                                 Beep=~Beep;
  56.                         }
  57.                         if ((ly_lhj[2]==0x40))
  58.                         {
  59.                                 LED8=0xfe;
  60.                                 for(i=0;i<8;i++)
  61.                                 {                                         
  62.                                         Delay10ms(10);
  63.                                         LED8=LED8<<1;
  64.                                 }
  65.                                 LED8=0xff;
  66.                         }
  67.                         if ((ly_lhj[2]==0x43))
  68.                         {
  69.                                 LED8=0x7f;
  70.                                 for(i=0;i<8;i++)
  71.                                 {                                         
  72.                                         Delay10ms(10);
  73.                                         LED8=LED8>>1;
  74.                                 }
  75.                                 LED8=0xff;
  76.                         }
  77.                         if ((ly_lhj[2]==0x16))
  78.                         {
  79.                                 ly_disdate[0]=0;                       
  80.                         }
  81.                         if ((ly_lhj[2]==0x0c))
  82.                         {
  83.                                 ly_disdate[0]=1;                       
  84.                         }                       
  85.                         if ((ly_lhj[2]==0x18))
  86.                         {
  87.                                 ly_disdate[0]=2;                       
  88.                         }                       
  89.                         if ((ly_lhj[2]==0x5e))
  90.                         {
  91.                                 ly_disdate[0]=3;                       
  92.                         }                       
  93.                         if ((ly_lhj[2]==0x08))
  94.                         {
  95.                                 ly_disdate[0]=4;                       
  96.                         }                       
  97.                         if ((ly_lhj[2]==0x1c))
  98.                         {
  99.                                 ly_disdate[0]=5;                       
  100.                         }                       
  101.                         if ((ly_lhj[2]==0x5a))
  102.                         {
  103.                                 ly_disdate[0]=6;                       
  104.                         }                       
  105.                         if ((ly_lhj[2]==0x42))
  106.                         {
  107.                                 ly_disdate[0]=7;                       
  108.                         }                       
  109.                         if ((ly_lhj[2]==0x52))
  110.                         {
  111.                                 ly_disdate[0]=8;                       
  112.                         }                       
  113.                         if ((ly_lhj[2]==0x4a))
  114.                         {
  115.                                 ly_disdate[0]=9;                       
  116.                         }                       
  117.                         ly_disdate[2]=ly_lhj[2]/16;
  118.                         ly_disdate[3]=ly_lhj[2]%16;
  119.                 }
  120.                 display();
  121.         }               
  122. }

  123. void hongwai(void)   interrupt 2
  124. {
  125.         unsigned char i,ia;
  126.         TL1=0;
  127.         TH1=0;
  128.         TR1=1;
  129.         while(!hwx);
  130.         TR1=0;
  131.         if(TH1<30||TH1>40)
  132. {
  133.                 return;
  134. }
  135.         TH1=0;
  136.         TR1=1;
  137.         while(hwx)                        //
  138.         {
  139.                 delay();
  140.                 if(TH1>22)
  141.                         return;               
  142.         }
  143.         TR1=0;
  144.         if(TH1<12)
  145.                 return;

  146.         for(i=0;i<4;i++)
  147.         {
  148.                 for(ia=0;ia<8;ia++)
  149.                 {                               
  150.                         while(!hwx);
  151.                        
  152.                         TH1=0;
  153.                         TR1=1;
  154.                         while(hwx)
  155.                         {
  156.                                 delay();
  157.                                 if(TH1>15)               
  158.                                         return;               
  159.                         }
  160.                         TR1=0;
  161.                         ly_lhj[i]>>=1;
  162.                         if(TH1>4)
  163.                                 ly_lhj[i]|=0x80;
  164.                 }
  165.         }
  166.         ly_flag=1;
  167.         TF1=0;
  168. }

  169. void display()

  170. {
  171.         SMG_q=0;                        //选择千位数码管(亮)
  172.         P0=table[ly_disdate[0]];        //
  173.         delay();                        //
  174.         P0=0XFF;                        //
  175.         SMG_q=1;                        //(灭)

  176.         SMG_s=0;                        //选择十位数码管
  177.         P0=table[ly_disdate[2]];        //
  178.         delay();                        //
  179.         P0=0XFF;                        //
  180.         SMG_s=1;                        //


  181. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
hwx.rar (1.54 KB, 下载次数: 30)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表