普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 1596|回复: 3

红外接收实验的问题

[复制链接]

2

主题

4

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2022-7-25 16:07:21 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 废土小瑀 于 2022-7-30 02:32 编辑

最近学到了 红外接收实验
我自己 写的代码 数码管运行了 红外运行了 但是没法解码 不知道为什么 我对比了 教材的程序 也没有发现什么不同的地方
希望可以帮我看一下具体哪里有问题了
一下是我的程序
main

  1. #include "public.h"
  2. #include "smg.h"
  3. #include "ired.h"

  4. void main()
  5. {
  6.   u8 MUN_wei[3];
  7.   ired_int0();
  8.   while(1)
  9.    {
  10.    MUN_wei[0]=MUN_0_F[ired_data[2]/16];
  11.    MUN_wei[1]=MUN_0_F[ired_data[2]%16];
  12.    MUN_wei[2]=0x76;//H
  13.    SGM_XianShi(MUN_wei,5);        
  14.   }
  15.         
  16. }
复制代码
红外驱动函数
  1. #include "ired.h"
  2. u8 ired_data[4];

  3. void ired_int0(void)//开启外部中断0
  4. {
  5.     IT0=1;//下降沿触发
  6.     EX0=1;
  7.     Ired=1;
  8.     EA=1;
  9. }

  10. void ired()interrupt 0//外部中断0 响应程序
  11. {
  12.     u16 time_temp=0;
  13.     u8 i=0,j=0,ired_high_time=0;
  14.     if(Ired==0)
  15.     {
  16.         time_temp=1000;
  17.         while((!Ired)&&(time_temp))//判断Ired 在10毫秒内是否反转为1
  18.         {
  19.             Delay10us(1);
  20.             time_temp--;
  21.             if(time_temp==0)return;
  22.         }
  23.         if(Ired)
  24.         {
  25.             time_temp=500;
  26.             while(Ired&&time_temp)//判断Ired 在5毫秒内是否反转为0,
  27.             {
  28.                 Delay10us(1);//如果没有反转也会退出等待
  29.                 time_temp--;
  30.                 if(time_temp==0)return;
  31.           }
  32.             for(i=0;i<4;i++)
  33.             //地址码 地址反码 控制码 控制反码
  34.             {
  35.                 for(j=0;j<8;j++)
  36.                 {
  37.                     time_temp=60;
  38.                     while((Ired==0)&&time_temp)//判断每一位前的低电平时长
  39.                     {
  40.                         time_temp--;
  41.                         Delay10us(1);
  42.                         if(time_temp==0)return;
  43.                     }
  44.                     time_temp=20;
  45.                     while(Ired)//1680us超时
  46.                     {
  47.                         Delay10us(10);
  48.                         ired_high_time++;
  49.                         if(ired_high_time>20)return;//1680us超时,这里给的是2000us
  50.                     }
  51.                     ired_data[j]>>=1;//没有判断为逻辑1就直接条做if下次进来直接右移
  52.                     if(ired_high_time>=8)//超过800us就视为ired传入逻辑1
  53.                     {
  54.                         ired_data[j]|=0x80;//高位设置为1
  55.                     }
  56.                     ired_high_time=0;//设置为0方便下次for循环判断
  57.                 }
  58.             }
  59.         }
  60.         if(ired_data[2]!=~ired_data[3])
  61.         {
  62.             for(i=0;i<4;i++)
  63.             {
  64.                 ired_data[i]=0;
  65.             }
  66.             return;
  67.         }            
  68.     }
  69. }
复制代码
不知道哪里出现了问题

我已经指点是怎么回事了!

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有2人回答

回复

使用道具 举报

2

主题

4

帖子

22

积分

新手上路

Rank: 1

积分
22
 楼主| 发表于 2022-7-25 16:08:47 | 显示全部楼层
忘了放显示函数了
  1. #include "smg.h"

  2. u8 MUN_0_F[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  3. void SGM_XianShi(u8 MUN_wei[],u8 SGM_Wei)
  4. {
  5.         u8 n=0;
  6.         for(n=SGM_Wei;n<8;n++)
  7.         {
  8.                         switch (n)
  9.                         {
  10.                                 case 0:w1 = 1; w2 = 1; w3 = 1;break;
  11.                                 case 1:w1 = 0; w2 = 1; w3 = 1;break;
  12.                                 case 2:w1 = 1; w2 = 0; w3 = 1;break;
  13.                                 case 3:w1 = 0; w2 = 0; w3 = 1;break;
  14.                                 case 4:w1 = 1; w2 = 1; w3 = 0;break;
  15.                                 case 5:w1 = 0; w2 = 1; w3 = 0;break;
  16.                                 case 6:w1 = 1; w2 = 0; w3 = 0;break;
  17.                                 case 7:w1 = 0; w2 = 0; w3 = 0;break;
  18.                                
  19.                         }
  20.                         SMG1=MUN_wei[n-SGM_Wei];
  21.                         Delay10us(100);
  22.                         SMG1=0x00;
  23.                 }       

  24.        
  25. }


复制代码
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-8-14 16:03:17 | 显示全部楼层
SGM_XianShi(MUN_wei,5); 不是6吗。SGM_XianShi(MUN_wei,6);
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-28 00:45 , Processed in 0.091973 second(s), 34 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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