找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问我这个单片机程序为什么总是不能实现红外通信呢?

[复制链接]
跳转到指定楼层
楼主
ID:865791 发表于 2020-12-22 20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg52.h"
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;
  7. sbit RCK=P3^2;

  8. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};

  10. u8 inf[4];
  11. u8 Displaydata[3];
  12. u16 count;

  13. void delay(u16 i)
  14. {
  15.     while(i--);
  16. }
  17. //10us

  18. void inter0(){
  19.     EX0=1;
  20.     IT0=1;
  21.     EA=1;
  22.     RCK=1;
  23. }


  24. void DigDisplay()
  25. {
  26.     u8 i;
  27.     for(i=0;i<3;i++)
  28.     {
  29.         switch(i)
  30.         {
  31.             case(0):
  32.             LSA=1;LSB=1;LSC=1;break;
  33.             case(1):
  34.             LSA=0;LSB=1;LSC=1;break;
  35.             case(2):
  36.             LSA=1;LSB=0;LSC=1;break;
  37.         }
  38.         P0=Displaydata[i];
  39.         delay(100);
  40.         P0=0x00;
  41.     }
  42. }


  43. void main(){
  44.     inter0();
  45.     while(1){
  46.         Displaydata[0] = smgduan[inf[2]/16];
  47.         Displaydata[1] = smgduan[inf[2]%16];
  48.         Displaydata[2] = smgduan[16];
  49.         DigDisplay();

  50.     }
  51. }

  52. void getinf()   interrupt 0
  53. {
  54.     u8 i,j;
  55.     u16 n;
  56.     count=0;
  57.     delay(700);
  58.     if(RCK==0){
  59.         n=1000;
  60.         while((RCK==0)&&(n>0)){
  61.             delay(1);
  62.             n--;
  63.         }
  64.         if(RCK==1)         
  65.         {
  66.             n=600;
  67.             while((RCK==1)&&(n>0))      
  68.             {
  69.                 delay(1);
  70.                 n--;
  71.             }//接收数据      
  72.             for(i=0;i<4;i++){
  73.                 for(j=0;j<8;j++){
  74.                     n=60;
  75.                     while((RCK==0)&&(n>0)){
  76.                         delay(1);
  77.                         n--;
  78.                     }
  79.                     n=250;
  80.                     while((RCK==1)&&(n>0)){
  81.                         delay(1);
  82.                         n--;
  83.                         count++;
  84.                     }
  85.                     inf[i]>>=1;
  86.                     if(count>70){
  87.                         inf[i] |= 0x80;
  88.                     }
  89.                     count=0;
  90.                 }
  91.             }
  92.         }
  93.     }

  94. }
复制代码


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

使用道具 举报

沙发
ID:584814 发表于 2020-12-23 09:22 | 只看该作者
仅程序无法判别,程序也许会对但用在不同的单片机上因速度结果会不同。
回复

使用道具 举报

板凳
ID:861234 发表于 2020-12-23 10:19 | 只看该作者
建议找别人的程序用心学习下,然后再对比自己的程序去改进
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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