小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
12
返回列表 发新帖
楼主: suyijiang

12864驱动板

[复制链接]
 楼主| 发表于 2015-10-20 10:33:06 | 显示全部楼层
红外头文件
  1. #ifndef  _HW_H_
  2. #define  _HW_H_

  3. #include "bell.h"
  4. #include "delay.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. uchar key0,key1,key2,key3,key4,key5,key6,key7,key8,key9;
  8. uchar key_add,key_minish,key_manue,key_ok,key_up,key_down,key_alarm,key_voioff,key_voion;



  9. bit  ala_flag=0;  //闹钟使能标志位
  10. sbit IRIN = P3^2; //红外接收器数据线

  11. sbit K5  = P2^4; //按键K5-闹钟的打开与关闭

  12. uchar IRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10};
  13. /***************************************************************
  14.             外部中断0响应函数,完成对红外遥控的解码
  15. -------------------------协议--------------------------   
  16. ----开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
  17. ----接着是26位前导脉冲,用于识别该型号的摇控。                                 
  18. ----然后是发送8位数据的原码,接着又发送8位数据的反码.
  19. ----最后是一个长脉冲,和开始位一样,拉低9ms和一个4.5ms脉冲表示结束。
  20. ----每个按键不同这处只在于那8位数据的原码和反码,因些只须要识别
  21. ----8位原码就可以识别按键了
  22. ****************************************************************/

  23. void IR_IN() interrupt 0 //using 0
  24. {
  25.   uchar j,k,N=0;
  26.      EX0 = 0;   
  27.          delayA(15);

  28.          if (IRIN==1)
  29.      { EX0 =1;
  30.            return;
  31.           }
  32.                   //确认IR信号出现
  33.   while (!IRIN)   //等IR变为高电平,跳过9ms的前导低电平信号。
  34. {delayA(1);}

  35. for (j=0;j<4;j++)  //收集四组数据
  36.      {
  37.       for (k=0;k<8;k++) //每组数据有8位
  38.                   {
  39.                            while (IRIN)  //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
  40.                      {delayA(1);}//
  41.                     while (!IRIN) //等 IR 变为高电平
  42.                            {delayA(1);}  //
  43.                      while (IRIN)   //计算IR高电平时长
  44.                       {
  45.                       delayA(1);
  46.                       N++;           
  47.                       if (N>=30)
  48.                                  { EX0=1;
  49.                                  return;}       //0.14ms计数过长自动离开。
  50.                       }                 //高电平计数完毕               
  51.               IRCOM[j]=IRCOM[j] >> 1;   //数据最高位补“
  52.               if (N>=8)
  53.                  {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
  54.               N=0;
  55.              }//end for k
  56.     }//end for j
  57.    
  58.     if (IRCOM[2]!=~IRCOM[3])   //接收时间是否正确
  59.     {
  60.       EX0=1;
  61.       return;
  62.     }
  63. //        EX0=1;
  64. /*================红外编码处理====================*/  
  65.      switch(IRCOM[2])
  66.             {
  67. /*                case 0x00: key0=1;                  break;   //1
  68.                 case 0x01: key1=1;                  break;   //2
  69.                 case 0x02: key2=1;                  break;   //3
  70.                 case 0x03: key3=1;                  break;   //4
  71.                 case 0x04: key4=1;                  break;   //5
  72.                 case 0x05: key5=1;                  break;   //6
  73.                 case 0x06: key6=1;                  break;   //7
  74.                 case 0x07: key7=1;                  break;   //8
  75.                 case 0x08: key8=1;                         break;   //9
  76.                 case 0x09: key9=1;                  break;   //0
  77. */
  78.         /*        case 0x13: key_minish=1;          break;   //-
  79.                 case 0x12: key_add=1;                  break;   //+
  80.                 case 0x18: key_manue=1;          break;   //菜单
  81.                 case 0x19: key_ok=1;                  break;   //OK
  82.                 case 0x15: key_alarm=1;     break;   //关闹钟的开与关*/

  83.                 case 0x07: key_minish=1;          break;   //-
  84.                 case 0x05: key_add=1;                  break;   //+
  85.                 case 0x06: key_manue=1;          break;   //菜单
  86.                 case 0x02: key_ok=1;                  break;   //OK
  87.                 case 0x0a: key_alarm=1;     break;   //关闹钟的开与关
  88. /*
  89.                 case 0x18: key_up=1;        break;   //上
  90.                 case 0x19: key_down=1;      break;   //下
  91.                
  92.                 case 0x15: key_voioff=1;    break;   //静音
  93.                 case 0x17: key_voion=1;     break;   //声音
  94. */
  95.                 default:    break;   //别的键按下
  96.         }
  97.     if(K5==0||key_alarm==1)//闹钟的开与关的设置标志位
  98.            {
  99.                 DelayM(20);
  100.                 if(K5==0||key_alarm==1)
  101.                   { beep();
  102.                         while(!K5);//松手检测
  103.                         key_alarm=0;
  104.                         ala_flag=~ala_flag;
  105.                   }
  106.                 while(!K5);//松手检测
  107.                 key_alarm=0;
  108.            }

  109.      EX0 = 1; //开中断
  110. }

  111. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 10:34:12 | 显示全部楼层
源码都有啦,希望成功。IO口自己定义。时钟晶振12M
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 15:59:52 | 显示全部楼层
最近在做12864作显示的万年历,做出来啦所有发出帖子供大家使用。
回复 支持 反对

使用道具 举报

发表于 2015-10-23 14:02:04 | 显示全部楼层
look{:soso_e103:}
回复 支持 反对

使用道具 举报

发表于 2016-2-4 09:36:52 | 显示全部楼层
支持一下 支持一下
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-23 22:30 , Processed in 1.061126 second(s), 16 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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