找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4389|回复: 0
收起左侧

msp430单片机红外解码1838.c驱动程序

[复制链接]
ID:76127 发表于 2015-4-18 03:45 | 显示全部楼层 |阅读模式
  1. //***********************************************************************
  2. //   遥控器键码
  3. //***********************************************************************
  4. #define KEY_0     0x16                 //键0
  5. #define KEY_1     0x0C                 //键1
  6. #define KEY_2     0x18                 //键2
  7. #define KEY_3     0x5E                 //键3
  8. #define KEY_4     0x08                 //键4
  9. #define KEY_5     0x1C                 //键5
  10. #define KEY_6     0x5A                 //键6
  11. #define KEY_7     0x42                 //键7
  12. #define KEY_8     0x52                 //键8
  13. #define KEY_9     0x4A                 //键9
  14. #define KEY_POWER 0x45                 //电源
  15. #define KEY_MODE  0x46                 //模式
  16. #define KEY_SOUND 0x47                 //静音
  17. #define ch_       0x45                //模式
  18. #define ch        0x46
  19. #define cha       0x47                 //模式
  20. uchar KEY_VAL=0;
  21. uchar code_value=0;
  22. uchar key_code[4],code='_';
  23. //***********************************************************************
  24. //               MSP430IO口初始化
  25. //***********************************************************************
  26. /*void Port_Init()
  27. {
  28.   LED8DIR  = 0xFF;                      //设置IO口方向为输出
  29.   LED8 = 0xFF;                      //P2口初始设置为FF
  30.   
  31.   RED_L;
  32.   RED_IN;
  33. }*/
  34. //*************************************************************************
  35. //   遥控器键值赋功能值子程序
  36. //*************************************************************************
  37. void Key_Icode(void)
  38. {
  39.    switch(key_code[2])                    //第3个字节是数据,第4个字节是反码
  40.    {                                      //为了更稳定,可以加上第4个字节数据的判断
  41.    case KEY_0:KEY_VAL=0;break;
  42.    case KEY_1:KEY_VAL=1;break;
  43.    case KEY_2:KEY_VAL=2;break;
  44.    case KEY_3:KEY_VAL=3;break;
  45.    case KEY_4:KEY_VAL=4;break;
  46.    case KEY_5:KEY_VAL=5;break;
  47.    case KEY_6:KEY_VAL=6;break;
  48.    case KEY_7:KEY_VAL=7;break;
  49.    case KEY_8:KEY_VAL=8;break;
  50.    case KEY_9:KEY_VAL=9;break;
  51.    case ch_ :code='-';break;
  52.    case ch :code='_';break;
  53.    case cha :code='+';break;
  54.    default:KEY_VAL=10;break;
  55.    }
  56.   
  57. }

  58. //*************************************************************************
  59. //     显示采集到的数据到LED灯
  60. //*************************************************************************
  61. void Display_Key(uint data_KEY)
  62. {if(code=='_');  
  63.        //键值显示到LED灯上,二进制的形式显示,只识别0~9
  64. }
  65. //*************************************************************************
  66. // 遥控器解码子程序
  67. //*************************************************************************
  68. void Red_Code()
  69. {
  70. uchar i,j,k = 0;
  71. for(i = 0;i < 19;i++)
  72. {
  73.   delay_us(400);           //延时400us
  74.   if(RED_R)                //9ms内有高电平,则判断为干扰,退出处理程序
  75.   {
  76.       return;
  77.   }
  78. }
  79. while(!RED_R);            //等待9ms低电平过去

  80. for(i=0;i<5;i++)          //是否连发码
  81. {
  82.   delay_us(500);
  83.   if(!RED_R)
  84.    {
  85.      return;
  86.    }
  87. }

  88. while(RED_R);               //等待4.5ms高电平过去
  89. for(i = 0;i < 4;i++)        //接收4个字节的数据
  90. {
  91.   for(j = 0;j < 8;j++)      //每个字节的数据8位
  92.   {
  93.   
  94.    while(!RED_R);           //等待变高电平
  95.    while(RED_R)             //计算高电平时间
  96.    {
  97.     delay_us(100);
  98.     k++;
  99.     if(k >22)               //高电平时间过长,则退出处理程序
  100.     {
  101.      return;        
  102.     }
  103.    
  104.    }
  105.    code_value>>=1;          //接受一位数据
  106.    if(k >= 7)
  107.    {
  108.     code_value|=0x80;       //高电平时间大于0.56,则为数据1
  109.    }
  110.    k = 0;                  //计时清零
  111.   }
  112.   key_code[i]=code_value;  //四个字节的数据
  113. }
  114.   Key_Icode();             //调用赋值函数
  115. //  Display_Key(KEY_VAL);     //显示按键值

  116.   delay_ms(50);
  117. }
  118. //***********************************************************************
  119. //            主程序
  120. //***********************************************************************
  121. /*void main(void)
  122. {   
  123.   WDT_Init();                         //看门狗初始化
  124.   Clock_Init();                       //时钟初始化
  125.   Port_Init();                        //端口初始化,用于控制IO口输入或输出

  126.     while(1)
  127. {
  128.     Red_Code();                       //调用遥控器解码子程序
  129. }
  130. }*/
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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