找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1543|回復: 2
打印 上一主題 下一主題
收起左側(cè)

請問我這個單片機程序為什么總是不能實現(xiàn)紅外通信呢?

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:865791 發(fā)表于 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.             }//接收數(shù)據(jù)      
  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2020-12-23 09:22 | 只看該作者
僅程序無法判別,程序也許會對但用在不同的單片機上因速度結(jié)果會不同。
回復

使用道具 舉報

板凳
ID:861234 發(fā)表于 2020-12-23 10:19 | 只看該作者
建議找別人的程序用心學習下,然后再對比自己的程序去改進
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表