找回密码
 立即注册

QQ登录

只需一步,快速开始

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

M16单片机l红外线解码程序+led数码管显示

[复制链接]
跳转到指定楼层
楼主
ID:292438 发表于 2018-3-15 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自己用icc+M16写的一个led显示+红外线解码程序


一个特别功能 也是他们常用的功能 按键处理程序 按一下只变一个数 
按住1s左右(自己设置)快速变化  进一步的功能正开发中 
下一步 就是3771+39610 步进电机驱动程序 希望大家多多支持哦!
哦对了 里面的图片是用flash8做的         原理图是用protues6.9 画的 仿真上有点问题 实际电路中 是正常的

单片机源码:
  1. /*
  2. 01-05 22:30       2007-1-6 23:04
  3. infrared
  4. //ICC-AVR application builder : 2006-12-16 0:17:05         2006-12-18 20:04       IR_CDOE
  5. // Target : M16
  6. // Crystal: 16.000Mhz //注册大小写识别        开始必须为字母 红外线
  7. */
  8. #include <iom16v.h>
  9. #include <macros.h>
  10. #include "led.h"
  11. #include "IR_DATA.H"
  12. #define IR       6
  13. //#include "delay.h"
  14. //用户码
  15. #define          CUSTOMCODE          9
  16. //按键码
  17. #define          POWER_ON            221
  18. #define          STAND_BY            220
  19. #define          DMX                 216
  20. #define          AUTO                212
  21. #define          AUDIO               208
  22. #define        FADETIME_UP           217
  23. #define        FADETIME_DOWN         209
  24. #define        PATTERN_UP            218
  25. #define        PATTERN_DOWN          210

  26. //                值            0         1                                                 10        11       12        13        14        15
  27. //                         0         1         2         3         4          5        6         7         8        9          d          f            
  28. char LED_DATA[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xa1,0X0e,0x00,0xff,0xef,0x3f}; //11 FOR "d"
  29. char iPos,iPreBit,iNowBit,iHight,iLow,iIrMode,iBitCount,bIrCmdOk,bCmdOk,iCmd,iIrData[6];
  30. char JS_001=0,JS_002=0;
  31. long       JS_003=0;
  32. char JS_004=0;
  33. char JS_005=0;
  34. char JS_006=0;
  35. char JS_007=0;
  36. char JS_008=0;
  37. long       TIMER1_ICP_T,TIMER1_ICP_T1,TIMER1_ICP_T2;
  38. char       LED_DISPLAY_V1=10;              // 初始值       显示 为 d001
  39. char       LED_DISPLAY_V2=0;
  40. char       LED_DISPLAY_V3=0;
  41. char       LED_DISPLAY_V4=1;
  42. char       LED_DISPLAY_V5=14;
  43. long        JS_PRESS_ON_UP=0;
  44. long        JS_PRESS_ON_DOWN=0;
  45. char        JS_TIMER1_ICP_INPUT=0;
  46. char        OUT_22_LOW;
  47. char       JS_PRESS_ON_UP_1=0;
  48. char       JS_PRESS_ON_UP_10000=0;
  49. char       JS_PRESS_DWON_ON_1=0;
  50. char       JS_PRESS_ON_DOWN_10000=0;
  51. int         JS_PRESS_ON_UP_FAST=0;
  52. int         JS_PRESS_OFF_UP=0;
  53. char       JS_MODE_MODE=0;
  54. char       JS_MENU_MODE=0;
  55. char       JS_UP_MODE=0;
  56. char       JS_DOWN_MODE=0;
  57. int         JS_PRESS_OFF_DOWN;
  58. int         JS_PRESS_ON_DOWN_FAST;
  59. char       JS_PRESS_DOWN_ON_1;
  60. char       ICP_TIME=0,ICP_TIME_T1=0;
  61. char START_ICP_JS_TLOW=0;
  62. char ICP_INT_SN=0;               //ICP 产生中断标志位
  63. char KEY_BANK=0;
  64. char KEY_PAN_MODE_1=0;
  65. char KEY_PAN_MODE_2=0;
  66. char KEY_PAN_MODE_3=0;
  67. char KEY_PAN_3=0;
  68. char KEY_PAN_4=0;
  69. char KEY_PAN_5=0;
  70. char KEY_PAN_6=0;
  71. char KEY_PAN_7=0;
  72. char KEY_PAN_8=0;
  73. char PAN_ICP_INPUT_CHECK=0,JS_ICP_INT=0;
  74. char N_001=1,SUM=0;
  75. char IR_CUSTOM_CODE=0;IR_DATA_CODE=0;
  76. // 共阳极用
  77. void port_init(void)
  78. {
  79. PORTA = 0xFF;
  80. DDRA       = 0xFF;
  81. PORTB = 0x1F;
  82. DDRB       = 0x1F;
  83. PORTC = 0x1F; //m103 output only
  84. DDRC       = 0x10;
  85. PORTD = 0x00;
  86. DDRD       = 0x00;
  87. }
  88. //Watchdog initialize
  89. // prescale: 16K
  90. //void watchdog_init(void)
  91. //{
  92. //WDR(); //this prevents a timout on enabling
  93. //WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
  94. //}      
  95. //Watchdog initialize
  96. // prescale: 2048K
  97. void watchdog_init(void)
  98. {
  99. WDR(); //this prevents a timout on enabling
  100. WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
  101. }
  102. #pragma interrupt_handler eeprom_ready_isr:16
  103. void eeprom_ready_isr(void)
  104. {
  105. //eeprom ready event
  106. }
  107. /////////////////////////TIMER0/////////////////////////////////////////////////////////////
  108. //TIMER0 initialize - prescale:8
  109. // WGM: Normal
  110. // desired value: 100uSec
  111. // actual value: 100.000uSec (0.0%)
  112. void timer0_init(void)
  113. {
  114. TCCR0 = 0x00; //stop
  115. TCNT0 = 0xCE; //set count
  116. OCR0       = 0x32;       //set compare
  117. TCCR0 = 0x02; //start timer
  118. }
  119. #pragma interrupt_handler timer0_ovf_isr:10
  120. void timer0_ovf_isr(void)
  121. {
  122.        TCNT0 = 0xCE; //reload counter value       100us
  123.        LED_SCAN();
  124.        KEY_CHK();
  125.        CheckIR();  
  126.         JS_003=++JS_003;                     //KEY_CHECK
  127.         TEST();
  128.         //display_times();              //TEST USE
  129.   
  130.   
  131.    
  132. }
  133. /////////////////test/////////////////////////////////////
  134. void       TEST()
  135. {
  136.        //LED_DISPLAY_V4=8;               //TEST
  137.        if (JS_003==10000)
  138.                 {
  139.                 LED_DISPLAY_V5=14;
  140.             
  141.                 }  
  142.          else if (JS_003==20000)  
  143.               {
  144.               JS_003=0;  
  145.               LED_DISPLAY_V5=13;
  146.               }
  147. }
  148. /////////////////////////timer2///////////////////////////////////////////////////////////////////
  149. //TIMER2 initialize - prescale:32
  150. // WGM: Normal
  151. // desired value: 10uSec
  152. // actual value: 10.000uSec (0.0%)
  153. void timer2_init(void)
  154. {
  155. TCCR2 = 0x00; //stop
  156. ASSR       = 0x00; //set async mode
  157. TCNT2 = 0xFB; //setup
  158. OCR2       = 0x05;
  159. TCCR2 = 0x03; //start
  160. }
  161. #pragma interrupt_handler timer2_ovf_isr:5
  162. void timer2_ovf_isr(void)        //10us
  163. {
  164. TCNT2 = 0xFB; //reload counter value
  165. //ICP_INT_JS();
  166. //ICP_INT_CLR_JS();

  167. }
  168. /////////////////////////KEY_CHK/////////////////////////////////////////////////////////////
  169. void KEY_CHK()
  170. {
  171.    
  172. KEY_CHK_MODE();                       // 调用        KEY_CHK_MODE
  173. KEY_CHK_MENU();                       // 调用        KEY_CHK_MENU
  174. KEY_CHK_UP();                         // 调用        KEY_CHK_UP
  175. KEY_CHK_DOWN();                       // 调用        KEY_CHK_DOWN  
  176. }
  177. //////////////////////////MODE///////////////////////////////////////////////////////////
  178. void KEY_CHK_MODE()                        //100us /times
  179. {
  180.          KEY_BANK=KEY_INPUT;                    // 取PINC值
  181.          KEY_BANK&=0X01;                        // 取mode 值
  182. if (KEY_BANK==0)          //有按下 执行   
  183.         {           //TEST--------OK------------->>>>  
  184.             KEY_BANK=1;               
  185.             JS_004=++JS_004;
  186.             if (JS_004==1)
  187.                              {
  188.               //LED_DISPLAY_V1=11;
  189.              LED_DISPLAY_V2=0;
  190.              LED_DISPLAY_V3=0;
  191.              LED_DISPLAY_V4=1;        
  192.                              }
  193.             else if (JS_004==2)
  194.                               {
  195.                                        JS_004&=0;
  196.                                 //LED_DISPLAY_V1=10;
  197.                  LED_DISPLAY_V2=0;
  198.               LED_DISPLAY_V3=0;
  199.               LED_DISPLAY_V4=1;
  200.                               }
  201.         }
  202.         else
  203.            KEY_BANK=0;
  204.    
  205. }
  206. void KEY_PRESS_CHECK_OFF()
  207. {
  208.             KEY_BANK=KEY_INPUT;           // 取PINC值
  209.             KEY_BANK&=0X01;   
  210.           if       (KEY_BANK==0)               // V1有按下
  211.               KEY_PAN_MODE_3=1;
  212.           else                            // V1没有按下  
  213.               KEY_PAN_MODE_3=0;
  214. }
  215. ///////////////////////////////MENU/////////////////////////////////////////////////////////////////
  216. void KEY_CHK_MENU()
  217. {
  218. }
  219. ///////////////////////////////UP///////////////////////////////////////////////////////////////////////
  220. void KEY_CHK_UP()
  221. {
  222.          KEY_BANK=KEY_INPUT;                    // 取PINC值
  223.          KEY_BANK=KEY_BANK>>2;
  224.          KEY_BANK&=0X01;                        // 取DOWN 值
  225.        if (KEY_BANK==0)                   //press on       do it
  226.            {   
  227.            
  228.                 JS_PRESS_OFF_UP==0;  
  229.            
  230.             if (JS_PRESS_ON_UP_1==0)                 //press on       yes        first times
  231.                 {
  232.                 JS_PRESS_ON_UP_1=1;
  233.                 JS_PRESS_ON_UP=0;
  234.                 JS_PRESS_ON_UP_FAST=0;      
  235.                 JS_PRESS_ON_UP_10000=0;
  236.                 LED_DISPLAY_UP_DMX512();
  237.            
  238.                    // JS_UP_MODE=++JS_UP_MODE;
  239.                    //        if (JS_UP_MODE==4)
  240.                    //        JS_UP_MODE=0;
  241.                 }  
  242.              else
  243.              {
  244.                     if (JS_PRESS_ON_UP_10000==1)
  245.                         {
  246.                                            if (JS_PRESS_ON_UP_FAST==2000)
  247.                                              {
  248.                             JS_PRESS_ON_UP_FAST=0;         
  249.                             LED_DISPLAY_UP_DMX512();
  250.                             }
  251.                             else
  252.                            JS_PRESS_ON_UP_FAST=++JS_PRESS_ON_UP_FAST;   
  253.                         }
  254.                   
  255.                     if (JS_PRESS_ON_UP==30000)
  256.                          {
  257.                          JS_PRESS_ON_UP=0;         
  258.                          JS_PRESS_ON_UP_10000=1;
  259.                          }
  260.                     else
  261.                         JS_PRESS_ON_UP=++JS_PRESS_ON_UP;                  
  262.               }      
  263.           }
  264.        else             //unpress     
  265.                 {
  266.                     JS_PRESS_ON_UP=0;
  267.                     JS_PRESS_ON_UP_10000=0;
  268.                     JS_PRESS_ON_UP_FAST=0;     
  269.                     JS_PRESS_OFF_UP=++JS_PRESS_OFF_UP;
  270.                   if (JS_PRESS_OFF_UP==2000)
  271.                                {
  272.                                 JS_PRESS_ON_UP_1=0;
  273.                                 JS_PRESS_OFF_UP=0;         
  274.                                }
  275.           }     
  276.                         
  277. }
  278.   
复制代码


led显示+红外线解码程序.doc

59 KB, 下载次数: 13, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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