找回密码
 立即注册

QQ登录

只需一步,快速开始

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

avr单片机红外解码程序+1602显示结果源程序

[复制链接]
跳转到指定楼层
楼主
ID:435101 发表于 2019-6-18 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include <iom16v.h>
  2. #include <macros.h>  
  3. #include "1602.h"
  4. #define uint  unsigned int
  5. #define uchar unsigned char
  6. #define Set_Bit(val, bitn)    (val |=(1<<(bitn)))
  7. #define Clr_Bit(val, bitn)    (val&=~(1<<(bitn)))
  8. #define Get_Bit(val, bitn)    (val &(1<<(bitn)) )
  9. #define Cpl_Bit(val, bitn)    (val^=(1<<(bitn)) )

  10.   uchar adc_0[]={"IRCodeADD:"};
  11.   uchar adc_1[]={"IRCodeDAT:"};

  12. //*****************************************0
  13. //函数声明
  14. void ICEInit(void);
  15. uchar bitcnt;
  16. uint newFall;
  17. uint oldFall;
  18. uint data0;
  19. uint data1;


  20. void ICEInit(void) //T/C1初始化
  21. {
  22.     TIMSK=0X20; //使能捕获中断
  23.     TCCR1A=0X00;//T/C1时钟与系统相同,本文使用系统AVR内部自带8MHz振荡源.T/C1时钟周期为1μs
  24.     TCCR1B=0X82; //使能噪音抑制,下降沿触发中断
  25. }
  26. void main(void)
  27. {   
  28.    DDRA = 0xff;      
  29.    PORTA = 0x00;      
  30.    DDRB = 0xFF;   
  31.    PORTB = 0xFF;
  32.    ICEInit();

  33.    LcdInit();   
  34.    WriteChar(1,0,10,adc_0);
  35.    WriteChar(2,0,10,adc_1);
  36.    SEI();
  37.   while(1);
  38.   }
  39.   

  40. #pragma interrupt_handler CAPT_ISR:iv_TIMER1_CAPT

  41. void CAPT_ISR(void)
  42. {
  43.   uchar a;
  44.   uint temp;
  45.   newFall=ICR1;
  46.   temp=newFall-oldFall; //计算脉冲加间隔的时间
  47.   oldFall=newFall;
  48.    
  49. if(temp>1024 && temp<1225) // "0"信号
  50.    {
  51.     temp=0;
  52.    }

  53. else if(temp>2145 && temp<2345) //“1”信号
  54.    {
  55.     temp=1;
  56.    }

  57. else if(temp>13400 && temp<13600) //header信号

  58. {
  59.     bitcnt=0;
  60.     data0=0;
  61.     data1=0;
  62. return; //返回,等待下次开始接收
  63. }

  64. else ///干扰信号
  65. {
  66.     return;
  67. }

  68.   bitcnt++;
  69.     if(bitcnt<16) //开始接收前16位
  70. {
  71.   data0=data0|(uint)temp;
  72.   data0=data0<<1;
  73. }
  74. else if(bitcnt==16)
  75. {
  76. data0=data0|(uint)temp;
  77. }
  78. else if(bitcnt<32) //开始接收后16位
  79. {
  80. data1=data1|(uint)temp;
  81. data1=data1<<1;
  82. }
  83. else if(bitcnt==32) //接收完最后一位
  84. {

  85.           data1=data1|(uint)temp;
  86.                   WriteNum(1,10,ASCII[(uchar)(data0>>8)/16]);
  87.                   WriteNum(1,11,ASCII[(uchar)(data0>>8)%16]);
  88.                   WriteNum(1,12,ASCII[(uchar)data0/16]);
  89.                   WriteNum(1,13,ASCII[(uchar)data0%16]);
  90.                   WriteNum(2,10,ASCII[(uchar)(data1>>8)/16]);
  91.                   WriteNum(2,11,ASCII[(uchar)(data1>>8)%16]);
  92.                   WriteNum(2,12,ASCII[(uchar)data1/16]);
  93.                   WriteNum(2,13,ASCII[(uchar)data1%16]);
  94. }

  95. }
复制代码

所有资料51hei提供下载:
红外解码程序 1602显示结果.rar (38.35 KB, 下载次数: 10)


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

使用道具 举报

沙发
ID:1 发表于 2019-6-18 14:24 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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