久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4546|回復: 0
打印 上一主題 下一主題
收起左側

msp430單片機 ir.c紅外驅動文件

[復制鏈接]
跳轉到指定樓層
樓主
ID:76127 發表于 2015-4-18 03:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. /********************************************************************
  2. //DM430-L型核心板紅外遙控器解碼參考程序,對遙控器按鍵進行識別,然后將鍵值顯示到數碼管上
  3. //紅外遙控器為NEC編碼格式,38K調制,解碼時直接讀取鍵值,用戶碼00FF
  4. //由于采取的是IO電平直接判斷方式讀取,會有不穩定的現象,按鍵時頻率不要過快
  5. //鍵值直接顯示在LED燈上,二進制代碼的形式顯示,比如00,LED燈全亮,01,D1滅,其余全亮
  6. //時間:2014.03.01
  7. ********************************************************************/
  8. #include <msp430x16x.h>
  9. #include "Config.h"                  //開發板配置頭文件,主要配置IO端口信息
  10. #include"1602.c"
  11. //***********************************************************************
  12. //   遙控器鍵碼
  13. //***********************************************************************
  14. #define KEY_0     0x16                 //鍵0
  15. #define KEY_1     0x0C                 //鍵1
  16. #define KEY_2     0x18                 //鍵2
  17. #define KEY_3     0x5E                 //鍵3
  18. #define KEY_4     0x08                 //鍵4
  19. #define KEY_5     0x1C                 //鍵5
  20. #define KEY_6     0x5A                 //鍵6
  21. #define KEY_7     0x42                 //鍵7
  22. #define KEY_8     0x52                 //鍵8
  23. #define KEY_9     0x4A                 //鍵9
  24. #define prex      0x44                 //電源
  25. #define nex       0x40                 //模式
  26. #define play_pause 0x43                 //靜音
  27. #define ch_       0x45                //模式
  28. #define ch        0x46
  29. #define cha       0x47                 //模式
  30. #define __         0x07
  31. #define _a        0x15
  32. #define eq        0x09
  33. #define _100a      0x19
  34. #define _200a      0x0d
  35. uchar KEY_VAL=0;
  36. uchar code_value=0;
  37. uchar key_code[4];
  38. uchar x=5,y=0, code[21];
  39. uchar a=5,b=5,c=5,d=0;
  40. ulong shu;
  41. //***********************************************************************
  42. //               MSP430IO口初始化
  43. //***********************************************************************
  44. void Port_Init1()
  45. {
  46. //  LED8DIR  = 0xFF;                      //設置IO口方向為輸出
  47. //  LED8 = 0xFF;                      //P2口初始設置為FF
  48.   
  49.   RED_L;
  50.   RED_IN;
  51. }
  52. //*************************************************************************
  53. //   遙控器鍵值賦功能值子程序
  54. //*************************************************************************
  55. void Key_Icode(void)
  56. {void  Display_Key1();
  57.   void Display_Key();
  58.   void find();
  59.    switch(key_code[2])                    //第3個字節是數據,第4個字節是反碼
  60.    {                                      //為了更穩定,可以加上第4個字節數據的判斷
  61.    case KEY_0:KEY_VAL=0; Display_Key(KEY_VAL); break;
  62.    case KEY_1:KEY_VAL=1; Display_Key(KEY_VAL); break;
  63.    case KEY_2:KEY_VAL=2; Display_Key(KEY_VAL); break;
  64.    case KEY_3:KEY_VAL=3; Display_Key(KEY_VAL); break;
  65.    case KEY_4:KEY_VAL=4; Display_Key(KEY_VAL); break;
  66.    case KEY_5:KEY_VAL=5; Display_Key(KEY_VAL); break;
  67.    case KEY_6:KEY_VAL=6;  Display_Key(KEY_VAL); ;break;
  68.    case KEY_7:KEY_VAL=7; Display_Key(KEY_VAL); break;
  69.    case KEY_8:KEY_VAL=8; Display_Key(KEY_VAL); break;
  70.    case KEY_9:KEY_VAL=9; Display_Key(KEY_VAL); break;
  71.    case prex:LCD_write_str(0,0,"prex:");break;
  72.    case nex :LCD_write_str(0,0,"next:");break;
  73.    case play_pause:LCD_init();break;
  74.    case ch_:code[5]='/';Display_Key1(code[5]); break;
  75.    case ch: code[5]='=';Display_Key1(code[5]);break;
  76.    case cha:code[5]='*';Display_Key1(code[5]);break;
  77.    case eq: LCD_init();LCD_write_str(0,0,"start");x=5;break;
  78.    case _a:code[5]='+';Display_Key1(code[5]);break;
  79.    case __:code[5]='-';Display_Key1(code[5]);break;
  80.    case _100a:code[5]=0xa2;LCD_write_str(x,y,"100+");x+=4;find();break;
  81.    case _200a:code[5]=0xa3;LCD_write_str(x,y,"200+");x+=4;find();break;
  82.    default:KEY_VAL=10;break;
  83.    }
  84.   
  85. }
  86. void cauculate()
  87. {if(a==0)a=5;
  88. if(b==0)b=5;
  89. if(c==0)c=5;
  90. if(d==21)d=0;
  91. }
  92. //*************************************************************************
  93. //     顯示采集到的數據到LED燈
  94. //*************************************************************************
  95. void Display_Key(uint data_KEY)
  96. {
  97.   LCD_write_char(x,y,KEY_VAL+0x30); delay_ms(5);      //鍵值顯示到LED燈上,二進制的形式顯示,只識別0~9  
  98.   x++;
  99.   if((x==16)&(y==0))
  100.   { x=0;y=1;}
  101.   if((x==16)&(y==1))
  102.   {x=5;y=0;LCD_init();
  103.   }
  104. }
  105. void Display_Key1(uint data_KEY)
  106. {
  107.   LCD_write_char(x,y,code[5]); delay_ms(5);      //鍵值顯示到LED燈上,二進制的形式顯示,只識別0~9  
  108.   if((x==16)&(y==0))
  109.   { x=0;y=1;}
  110.   if((x==16)&(y==1))
  111.   {x=5;y=0;LCD_init();
  112.   }
  113. }
  114. void find()
  115. {if((x==16)&(y==0)){x=0;y=1;}
  116. if((x==16)&(y==1)){x=5;y=0;}
  117. }
  118. //*************************************************************************
  119. // 遙控器解碼子程序
  120. //*************************************************************************
  121. void Red_Code()
  122. {
  123. uchar i,j,k = 0;
  124. for(i = 0;i < 19;i++)
  125. {
  126.   delay_us(400);           //延時400us
  127.   if(RED_R)                //9ms內有高電平,則判斷為干擾,退出處理程序
  128.   {
  129.       return;
  130.   }
  131. }
  132. while(!RED_R);            //等待9ms低電平過去

  133. for(i=0;i<5;i++)          //是否連發碼
  134. {
  135.   delay_us(500);
  136.   if(!RED_R)
  137.    {
  138.      return;
  139.    }
  140. }

  141. while(RED_R);               //等待4.5ms高電平過去
  142. for(i = 0;i < 4;i++)        //接收4個字節的數據
  143. {
  144.   for(j = 0;j < 8;j++)      //每個字節的數據8位
  145.   {
  146.   
  147.    while(!RED_R);           //等待變高電平
  148.    while(RED_R)             //計算高電平時間
  149.    {
  150.     delay_us(100);
  151.     k++;
  152.     if(k >22)               //高電平時間過長,則退出處理程序
  153.     {
  154.      return;        
  155.     }
  156.    
  157.    }
  158.    code_value>>=1;          //接受一位數據
  159.    if(k >= 7)
  160.    {
  161.     code_value|=0x80;       //高電平時間大于0.56,則為數據1
  162.    }
  163.    k = 0;                  //計時清零
  164.   }
  165.   key_code[i]=code_value;  //四個字節的數據
  166. }
  167.   Key_Icode();             //調用賦值函數
  168. // Display_Key(KEY_VAL);     //顯示按鍵值

  169.   delay_ms(50);
  170. }
  171. //***********************************************************************
  172. //            主程序
  173. //***********************************************************************
  174. void main(void)
  175. {   
  176.   WDT_Init();                         //看門狗初始化
  177.   Clock_Init();                       //時鐘初始化
  178.   Port_Init();
  179.    Port_Init1();
  180.   //端口初始化,用于控制IO口輸入或輸出
  181. // ADC_Init();                         //初始化ADC配置
  182.   delay_ms(100);                      //延時100ms
  183.   LCD_init();                         //液晶參數初始化設置
  184.   LCD_clear();                        //清屏
  185.   LCD_Desk();
  186.   _EINT();  

  187.     while(1)
  188. {
  189.     Red_Code();                       //調用遙控器解碼子程序
  190. }
  191. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天干干 | 日韩精品无码一区二区三区 | 国产精品精品视频一区二区三区 | av一级久久 | 中文字幕1区2区 | 亚洲乱码国产乱码精品精98午夜 | 伊人亚洲 | 国产高清在线 | 欧美国产日韩在线观看 | av影音在线 | 久热伊人| 一级毛片免费 | 欧美一区成人 | 亚洲 欧美 在线 一区 | 一级黄色毛片免费 | 国产ts人妖另类 | 中文字幕一区二区三区精彩视频 | 欧美日韩视频一区二区 | 很黄很污的网站 | 男女午夜激情视频 | 一区二区三区亚洲 | 一区二区三区不卡视频 | 久久久久久国产精品 | 奇米av | 99久久国产 | 又黑又粗又长的欧美一区 | 成人激情视频免费在线观看 | 欧美四虎 | 国产精品国产成人国产三级 | 日本a网站 | 97精品超碰一区二区三区 | 91在线视频播放 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 一级a毛片| 欧美精品一区三区 | 正在播放一区二区 | 做a视频 | 亚洲一区亚洲二区 | 一级在线毛片 | 欧美一区二区在线观看 | 超碰精品在线观看 |