久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3403|回復: 3
打印 上一主題 下一主題
收起左側

一個簡單單片機IR收發程序

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 cokesu 于 2020-3-30 14:05 編輯

ir讀取的程序經過修改也可以用做紅外解碼


這個程序的主要用途是單線通信,用于兩個單片機傳送數據,只能單向通信。IRSEND() 和IRREAD()函數都需要放在定時器的125us中斷中,SDATA[5]這個數組為發送的數據其中SDATA[4]這個是用于校驗的如果不需要可以把IR_DELAY狀態下的SDATA[4]進行修改,并且把IRREAD()函數里的IR_FINISH狀態下的校驗程序刪掉,IRData[5];這個數組為讀回來的數據。這個是任意兩個單片機都可以是用只需把對應管腳修改為自己單片機的寄存器即可。補充一下發送IRSEND.c里面發送完5個數據以后可以直接跳轉到IR_DELAY無需執行IR_LAST,之前項目需要41位數據所以臨時添加而已,IRREAD.c只會讀40位而已,所以IRSEND.c的IR_LAST狀態的函數可以屏蔽掉,發送完5個數據直接跳轉到IR_DELAY即可

單片機源程序如下:
  1. #include "IRSEND.h"
  2. unsigned char SDATA[5] = {0,0,0,0,0};
  3. unsigned char SNDATA[5] = {0,0,0,0,0};
  4. unsigned char gSendBitCount = 0;    //發送的位計數
  5. unsigned char gSendCount = 0;       //發送個數計數
  6. unsigned char gSendTimeCount = 0;   //發送計時
  7. unsigned char gIRSendMode = 0;      //發送模式
  8. unsigned char gFinishCount = 0;
  9. void IRSENDInit()
  10. {
  11.         _IRSENDOUT_;
  12.         _IRSENDUP_;
  13.         _DATAH_;
  14. }

  15. void IRSEND()   //125us
  16. {
  17.         switch(gIRSendMode)
  18.         {
  19.                 case IR_DELAY:
  20.                         _DATAH_;
  21.                         gSendTimeCount++;
  22.                         if(gSendTimeCount >= _DELAY_)
  23.                         {
  24.                                 gSendTimeCount = 0;
  25.                                 gSendBitCount = 0;
  26.                                 gSendCount = 0;
  27.                                 SNDATA[0] = SDATA[0];
  28.                                 SNDATA[1] = SDATA[1];
  29.                                 SNDATA[2] = SDATA[2];
  30.                                 SNDATA[3] = SDATA[3];
  31.                                 SNDATA[4] = (unsigned char)(~(SDATA[0]+SDATA[1]+SDATA[2]+SDATA[3]+0xbb));
  32.                                 gIRSendMode = IR_SEND;
  33.                         }
  34.                 break;
  35.                 case IR_SEND:
  36.                         gSendTimeCount++;
  37.                         if(gSendTimeCount >= _ROUND_)
  38.                         {
  39.                                 gSendTimeCount = 0;
  40.                                 gSendBitCount++;           //已發送1位
  41.                                 SNDATA[gSendCount] <<= 1;  //數據移位
  42.                                 if(gSendBitCount >= 8)     //已發送8位
  43.                                 {
  44.                                         gSendBitCount = 0;
  45.                                         gSendCount++;
  46.                                         if(gSendCount >= 5)
  47.                                         {
  48.                                                 gSendTimeCount = 0;
  49.                                                 gSendBitCount = 0;
  50.                                                 gSendCount = 0;
  51.                                 //                _DATAH_;
  52.                                                 gIRSendMode = IR_LAST;
  53.                                                 goto _2;
  54.                                         }
  55.                                 }
  56.                         }
  57.                         if((SNDATA[gSendCount] & B10000000) != 0)        //如果等于1
  58.                         {
  59.                                 if(gSendTimeCount < _DATAHTIME_)
  60.                                 {
  61.                                         _DATAL_;
  62.                                 }
  63.                                 else
  64.                                 {
  65.                                         _DATAH_;
  66.                                 }
  67.                         }
  68.                         else
  69.                         {
  70.                                 if(gSendTimeCount < _DATALTIME_)
  71.                                 {
  72.                                         _DATAL_;
  73.                                 }
  74.                                 else
  75.                                 {
  76.                                         _DATAH_;
  77.                                 }
  78.                         }
  79.                         _2:
  80.                 break;
  81.                         
  82.                 case IR_LAST:
  83.                         if(gFinishCount <= _DATAHTIME_)
  84.                         {
  85.                                 _DATAL_;
  86.                         }
  87.                         else
  88.                         {
  89.                                 _DATAH_;
  90.                         }
  91.                         gFinishCount++;
  92.                         if(gFinishCount >= _ROUND_)
  93.                         {
  94.                                 gFinishCount = 0;
  95.                                 gIRSendMode = IR_DELAY;
  96.                         }
  97.                 break;
  98.         }
  99. }
復制代碼

所有資料51hei提供下載:
IR通信.zip (3.17 KB, 下載次數: 16)



評分

參與人數 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:128463 發表于 2020-4-23 08:55 | 只看該作者
謝謝分享!!
回復

使用道具 舉報

板凳
ID:735888 發表于 2020-4-23 10:33 | 只看該作者
試試看看能否好用
回復

使用道具 舉報

地板
ID:610198 發表于 2020-6-24 15:39 | 只看該作者
還不錯 ,下載了~
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: a国产视频 | 91视频在线 | 黑人精品欧美一区二区蜜桃 | 人人人艹 | 99久久婷婷国产综合精品电影 | 国产一级片在线观看视频 | 6080亚洲精品一区二区 | 欧美另类视频在线 | 韩国精品在线 | 男人天堂久久久 | 国产精品夜夜夜一区二区三区尤 | 亚洲一区导航 | 99re在线观看| 国产高清一区二区 | 国产精品久久久久久久久久久久冷 | 久久精品一| 久久久久久久久毛片 | 午夜精品一区二区三区三上悠亚 | 精品国产不卡一区二区三区 | 欧美激情精品久久久久久变态 | 久久久国产一区二区三区 | k8久久久一区二区三区 | 国产精品伦理一区二区三区 | 亚洲精品一 | 成人影院在线视频 | 日韩欧美三区 | 亚洲精品在线视频 | 亚洲香蕉在线视频 | 亚洲国产成人av好男人在线观看 | 欧美日韩精品一区二区 | 亚洲视频一区二区三区 | 日韩二 | 人人天天操 | 欧美一区二区三区视频 | 久久国产精99精产国高潮 | 国产一区二区久久久 | 一级片在线播放 | 精品国产精品一区二区夜夜嗨 | 国产成人久久av免费高清密臂 | 夜夜艹天天干 | 麻豆changesxxx国产 |