標題: 無線通訊之433MHZ單片機模擬2272解碼 [打印本頁]

作者: xueyunmicheng    時間: 2016-1-26 22:58
標題: 無線通訊之433MHZ單片機模擬2272解碼
在網(wǎng)上找了很多教程 范例程序 好像都會有那么一點點問題 不是接收不到數(shù)據(jù) 就是接收到錯誤的數(shù)據(jù)
不過還好 經(jīng)過多次實驗 終于接收到正確的 數(shù)據(jù)了  實驗成果放送 供需要的人參考
單片機 stc89c58rd+  12mhz晶振










定時解碼.rar (35.6 KB, 下載次數(shù): 779)

作者: 51shakura    時間: 2016-1-27 10:55
屏不錯。。。。51黑有你更精彩。!
作者: xueyunmicheng    時間: 2016-1-27 13:53
51shakura 發(fā)表于 2016-1-27 10:55
屏不錯。。。。

25元一個 淘了4個 嘿嘿 拆了一個 送人一個
作者: qq704661078    時間: 2016-1-27 17:15
51黑有你更精彩。!,看樓主的程序是一種享受,調(diào)理清晰,注釋詳細.
  1. #include <STC89C5xRC.H>
  2. #include <intrins.h>    //包含_nop_()延時函數(shù)
  3. #include <absacc.h>                //包含 CBYTE[]  
  4. #include <string.h>                // 包含 strlen (char *)函數(shù)
  5. #include "ASCII816.h"   //標準ASCII庫

  6. #include "12864.h"        //液晶驅(qū)動
  7. #define uchar unsigned char
  8. #define uint  unsigned int


  9. sbit wux=P3^2;

  10. uchar D[3];  
  11. uint temp;
  12. uchar flag,flag1;

  13. uint kk[3];
  14. uint ka;
  15. uchar k;
  16. void jiema()//解碼  
  17. {
  18.         uchar j,i;
  19.         TH0=0;                        //T0作為計時器使用   
  20.         TL0=0;                        //T0作為計時器使用   
  21.         ET0=0;                        //T0溢出不中斷
  22.         while(wux);                //等待低電平
  23.         TR0=1;                        //檢測到低電平開啟T0計時
  24.         while(!wux)                //等待高電平
  25.         {
  26.                 if(TF0==1)                //等待高電平是T0產(chǎn)生溢出      
  27.                 {
  28.                         TF0=0;                //清除溢出標識
  29.                         flag1=1;        //接收錯誤標識置1  
  30.                         TR0=0;                //關(guān)閉T0計時
  31.                         break;                //跳出等待   
  32.                 }
  33.         }   
  34.          
  35.         if(flag1!=1)                        //如果接收正確      
  36.         {
  37.                 flag1=0;                        //清除接收正確標識
  38.                 TR0=0;                                //關(guān)閉計時   
  39.                 temp=TH0;                        //計時時間 = T0計時時間高8位
  40.                 temp=(temp<<8)+TL0;        //計時時間=計時時間左移8位 +  T0計時時間低8位 得到16位計時時間
  41.                 TH0=0;                                //清除T0計時時間高8位   
  42.                 TL0=0;                                //清除T0計時時間低8位
  43.                 if ((temp>10200) && (temp<11000))        //如果計時時間在10200us - 11000us之間 則判定為檢測到正確的同步碼
  44.                 {
  45.                         while(wux);                        //等待低電平
  46.                         TR0=1;                                //檢測到低電平開啟T0計時
  47.                         for(i=0;i<3;i++)        //數(shù)據(jù)接收 因為需要兩位才能判定2262發(fā)送的數(shù)據(jù)是 0還是1 還是懸空碼
  48.                                                                 //一共發(fā)送12位數(shù)據(jù) 地址1 + 地址2 + 數(shù)據(jù) 所以需要循環(huán) 3次
  49.                         {
  50.                                 for(j=8;j>0;j--)        //接收八位數(shù)據(jù)
  51.                                 {
  52.                                         while(!wux);        //等待高電平
  53.                                         TR0=0;                        //檢測到高電平后關(guān)閉T0計時
  54.                                         temp=TH0;                         //計時時間 = T0計時時間高8位
  55.                                         temp=(temp<<8)+TL0;        //計時時間=計時時間左移8位 +  T0計時時間低8位 得到16位計時時間
  56.                                         TH0=0;   
  57.                                         TL0=0;                                //清除T0計時時間
  58.                                         D[i]=D[i]<<1;                //數(shù)據(jù)左移一位 然后在接收
  59.                                         if ((temp>200) && (temp<360))        //測低電平時間 如果為200us-360us之間 為0
  60.                                         {
  61.                                                 D[i]=D[i]|0X00;                                //0               
  62.                                         }
  63.                                         else if ((temp>800) && (temp<1100))        //測低電平時間 如果為800us-1100us之間 為1
  64.                                         {
  65.                                                 D[i]=D[i]|0X01;                                //1       
  66.                                         }
  67.                                         else if ((temp>1100)){return;}        //檢測到大于1100us 則認為已經(jīng)放開按鍵 防止產(chǎn)生誤動作直接跳出
  68.                                         while(wux);                                                //等待低電平后開始計時
  69.                                         TR0=1;                                                        //檢測到低電平開始記錄下一個碼低電平時間
  70.                                 }        
  71.                         }
  72.        
  73.                         if(k==0)        //判定一次接收結(jié)果
  74.                         {
  75.                                 ((uchar *) &ka)[0]=D[0];
  76.                                 ((uchar *) &ka)[1]=D[1];
  77.                         }
  78.                         if((k==1)&&(D[1]==((uchar *) &ka)[1])&&(D[0]==((uchar *) &ka)[0]))        //兩次接收一致則為接收正確
  79.                         {
  80.                                 kk[0]=D[0];
  81.                                 kk[1]=D[1];
  82.                                 kk[2]=D[2];
  83.                                 flag=1;        //開顯示               
  84.                         }
  85.                         k++;if(k>1)k=0;        //加記錄次數(shù)               
  86.                 }  
  87.         }   
  88. }

  89. void Delay20ms()                //@12.000MHz
  90. {
  91.         unsigned char i, j;

  92.         i = 39;
  93.         j = 230;
  94.         do
  95.         {
  96.                 while (--j);
  97.         } while (--i);
  98. }

  99. void main()  
  100. {  
  101.         InitLCD();                        //初始化顯示
  102.         ClearScreen();                //清屏
  103.         SetOnOff(1,0,15);   //開顯示,正常顯示,亮度7  
  104.         TMOD = 0x01;                //設(shè)置定時器模式
  105.         while(1)     
  106.         {
  107.                 flag=0;     
  108.                 if(wux==0)        //如果檢測到低電平            
  109.                 jiema();        //開始解碼
  110.                        
  111.                 if(flag==1)        //   
  112.                 {
  113.                         WRITE_STRING816(4,0, D[0]/16/10,0);
  114.                         WRITE_STRING816(4,8, D[0]/16%10,0);
  115.                         WRITE_STRING816(4,16,D[0]%16/10,0);
  116.                         WRITE_STRING816(4,24,D[0]%16%10,0);
  117.                                
  118.                         WRITE_STRING816(4,40,D[1]/16/10,0);
  119.                         WRITE_STRING816(4,48,D[1]/16%10,0);
  120.                         WRITE_STRING816(4,56,D[1]%16/10,0);
  121.                         WRITE_STRING816(4,64,D[1]%16%10,0);
  122.        
  123.                         WRITE_STRING816(4,80,D[2]/16/10,0);
  124.                         WRITE_STRING816(4,88,D[2]/16%10,0);
  125.                         WRITE_STRING816(4,96,D[2]%16/10,0);
  126.                         WRITE_STRING816(4,104,D[2]%16%10,0);

  127.                         WRITE_STRING816(6,0, kk[0]/16/10,0);
  128.                         WRITE_STRING816(6,8, kk[0]/16%10,0);
  129.                         WRITE_STRING816(6,16,kk[0]%16/10,0);
  130.                         WRITE_STRING816(6,24,kk[0]%16%10,0);
  131.        
  132.                         WRITE_STRING816(6,40, kk[1]/16/10,0);
  133.                         WRITE_STRING816(6,48, kk[1]/16%10,0);
  134.                         WRITE_STRING816(6,56, kk[1]%16/10,0);
  135.                         WRITE_STRING816(6,64, kk[1]%16%10,0);

  136.                         WRITE_STRING816(6,80,kk[2]/16/10,0);
  137.                         WRITE_STRING816(6,88,kk[2]/16%10,0);
  138.                         WRITE_STRING816(6,96,kk[2]%16/10,0);
  139.                         WRITE_STRING816(6,104,kk[2]%16%10,0);


  140.                

  141.                         Delay20ms();        //延時
  142.                         flag=0;                        //關(guān)顯示
  143.                 }         
  144.         }  
  145. }
復(fù)制代碼



作者: cetcnav    時間: 2016-1-29 13:22
這么好的帖子,必須頂起!
作者: yimei11111    時間: 2016-3-5 17:40
很好的程序,很清晰,
作者: yimei11111    時間: 2016-3-5 18:09
樓主您好,我想問下,接收模塊在空閑狀態(tài)就是沒有接收數(shù)據(jù)時,數(shù)據(jù)口是高電平嗎,jiema()里先出現(xiàn)的是while(wux);                //等待低電平
作者: xueyunmicheng    時間: 2016-3-7 00:30
yimei11111 發(fā)表于 2016-3-5 18:09
樓主您好,我想問下,接收模塊在空閑狀態(tài)就是沒有接收數(shù)據(jù)時,數(shù)據(jù)口是高電平嗎,jiema()里先出現(xiàn)的是while ...

模塊會收到很多雜波!電平在不停變化 理想情況下 沒有收到數(shù)據(jù) 時為高電平 收到數(shù)據(jù)為低電平
作者: yimei11111    時間: 2016-3-7 22:40
xueyunmicheng 發(fā)表于 2016-3-7 00:30
模塊會收到很多雜波!電平在不停變化 理想情況下 沒有收到數(shù)據(jù) 時為高電平 收到數(shù)據(jù)為低電平

謝謝樓主,我還想問下,3.3M震蕩電阻的模塊,我計算的頻率32/3.3=9.697KH,周期T=3.3/32=103us,窄脈沖4T=413us,寬脈沖12T=1238us,同步碼低電平124T=12788us,你的程序里寬窄脈沖及同步碼時間有200us-360us,800us-1100us,10200us - 11000us,我想問下你是怎么算的,我那樣的算法不對吧
作者: sdsdzs    時間: 2016-4-2 21:39
這么好的帖子,必須頂起!
作者: sdsdzs    時間: 2016-4-7 21:40
謝謝樓主分享
作者: 騰飛的龍    時間: 2016-4-25 12:23
樓主你好,你的12864和普通的一樣嗎?.H的文件好像不太一樣?
作者: wujj1023    時間: 2016-4-29 14:47
請問樓主用的什么什么接收模塊,超再生還是超外差或者什么?
作者: q4189513    時間: 2016-5-17 14:26
謝謝樓主分享
作者: Rancho13502    時間: 2016-6-15 14:01
謝謝分享,看看能不能用的哈
作者: gxt467138    時間: 2016-6-30 11:07
老兄 硬件圖有沒?
作者: chjx0131    時間: 2016-8-5 20:20
我黑幣不夠了,55555能發(fā)我郵箱嗎?1250175268@qq.com
作者: chjx0131    時間: 2016-8-5 20:22
那個解碼顯示的東東,是怎么弄出來的,可以指點一下嗎?
作者: jjyyjj0131    時間: 2016-8-6 09:13
對新手來說,沒有多少價值~
作者: 唯我    時間: 2016-8-16 15:44
找了很久  希望這個有用
作者: lxlwoniu    時間: 2016-9-21 14:10
牛人
作者: 1670819187    時間: 2017-2-16 11:42
老兄,你真棒,幫了我的大忙
作者: Rambo1996    時間: 2017-2-22 00:13
可以雙向傳輸嗎
作者: Alan_zcb    時間: 2017-3-6 14:13
多謝樓主的無私分享!
作者: xou822    時間: 2017-3-11 18:27
請問這個電源是什么樣的要求

不可能用51的io口直接驅(qū)動吧

樓主的原理圖里面沒有明確的給出vfd供電的情況,麻煩講一下呢
作者: sky2017    時間: 2017-3-31 22:32
我是新手正在學(xué)習(xí)使用433模塊,
作者: cdm    時間: 2017-9-13 09:26
怎么用串口輸出解碼值
作者: jxdianqi    時間: 2017-9-15 23:11
謝謝樓主分享
作者: qwchen    時間: 2017-12-22 16:45
感謝分享,正想做一個433遙控接收程序,沒有頭緒,可以參考這個。
作者: wananzi    時間: 2017-12-29 20:36
感謝分享,買了4套,發(fā)現(xiàn)解碼不正確,參考一下樓主的
作者: cpfmly    時間: 2018-1-23 15:53
學(xué)習(xí)了,有模塊,一直不會玩
作者: ztb096001    時間: 2018-2-5 21:06
這么好的帖子,必須頂起!
作者: chun_hua80    時間: 2018-2-13 12:26
正在研究 謝謝!
作者: wzswp    時間: 2018-2-20 16:22

51黑有你更精彩。!,看樓主的程序是一種享受,調(diào)理清晰,注釋詳細.
作者: 老胖熊    時間: 2018-2-20 20:10
很好的學(xué)習(xí)資料,謝謝樓主。
作者: 邰夏留    時間: 2018-3-27 15:54
我有一個好習(xí)慣,下載了別人的東西就要頂一下?刺斕
作者: cliang223    時間: 2018-3-27 22:42
學(xué)習(xí)下樓主的程序
作者: 殺馬特六年    時間: 2018-5-15 16:57
qq704661078 發(fā)表于 2016-1-27 17:15
51黑有你更精彩。!,看樓主的程序是一種享受,調(diào)理清晰,注釋詳細.

老師您好,想請問一下    “ D[ i]=D[ i]<<1;  //數(shù)據(jù)左移一位 然后在接收”,為什么要左移以為呢?
作者: 殺馬特六年    時間: 2018-5-16 09:00
        老師您好,請問這里D[i]=D[i]<<1;        為什么要左移一位在接受呢
作者: yimankehao    時間: 2018-7-26 12:13
感謝樓主無私奉獻
作者: lovemj42    時間: 2018-8-10 14:24
學(xué)習(xí)學(xué)習(xí)~~~~
作者: zill79    時間: 2018-8-28 20:59
感謝分享,正想做一個433遙控接收程序,沒有頭緒,可以參考這個。
作者: zill79    時間: 2018-8-28 21:00
感謝分享,正想做一個433遙控接收程序,沒有頭緒,可以參考這個。
作者: zill79    時間: 2018-8-28 21:01
好東西,想下載來看看
作者: bhjyqjs    時間: 2018-8-29 15:29
好貼,謝謝分享!
作者: NPC-1024    時間: 2018-9-5 15:06
樓主程序的邏輯很不錯,易讀性挺好,收藏了,有時間試試去~
另外多嘴想問一下樓主有單片機模擬2262編碼的程序么?
作者: 無焰之火    時間: 2018-10-10 15:12
謝謝樓主分享,正在找這方面的資料
作者: dujiajiyi    時間: 2018-10-11 09:25
433模塊的新人
作者: dujiajiyi    時間: 2018-10-11 09:57
請問硬件怎么做

作者: LCY30520    時間: 2018-10-23 16:03
很好啊的   謝謝
作者: a951017    時間: 2019-6-27 13:18
謝謝樓主分享 剛好在學(xué)這個
作者: Cribug    時間: 2019-7-27 10:20
很有幫助,謝謝樓主
作者: man305442734    時間: 2019-8-28 11:26
現(xiàn)在正在學(xué)習(xí),謝謝分享
作者: 380056044    時間: 2019-9-15 17:33
正是想要的。謝謝分享。
作者: primoliuyang    時間: 2019-11-5 19:29
下載研究一下,有沒有原理圖
作者: 小寶貝xbb    時間: 2019-11-6 11:40
不錯,謝謝分享
作者: my_way_old    時間: 2019-11-8 00:47
51  有你更精彩
作者: PKPKPK    時間: 2019-12-7 10:00
樓主好人
作者: 549329815    時間: 2019-12-9 09:53
樓主是個好人
作者: 這是我    時間: 2020-3-9 14:19
剛買了一對433發(fā)射接收板,學(xué)習(xí)了。
作者: 這是我    時間: 2020-3-9 22:31
解的是2262編碼?怎么感覺是ev1572編碼?
作者: 這是我    時間: 2020-3-9 23:01
yimei11111 發(fā)表于 2016-3-7 22:40
謝謝樓主,我還想問下,3.3M震蕩電阻的模塊,我計算的頻率32/3.3=9.697KH,周期T=3.3/32=103us,窄脈沖4T ...

謝謝樓主,我還想問下,3.3M震蕩電阻的模塊,我計算的頻率32/3.3=9.697KH,周期T=3.3/32=103us,窄脈沖4T=413us,寬脈沖12T=1238us,同步碼低電平124T=12788us,你的程序里寬窄脈沖及同步碼時間有200us-360us,800us-1100us,10200us - 11000us,我想問下你是怎么算的,我那樣的算法不對吧
問一下,這個問題有答案了嗎?

作者: feinuo    時間: 2020-11-6 20:48
代碼可讀性很好
作者: xiaolingfu    時間: 2021-1-17 14:50
一直查了解文一塊
作者: fengqisalai    時間: 2021-4-6 11:32
謝謝樓主,學(xué)習(xí)了.有空也做個實驗下
作者: wis98    時間: 2021-6-7 23:01
學(xué)習(xí)下樓主的程序
作者: xiexugang    時間: 2021-6-8 08:25
多謝樓主的奉獻,這才是真正的干貨
作者: YYZZ052    時間: 2021-6-17 14:27
你這什么屏幕,,,,做些測試顯示還可以,,,
作者: lhqsbz    時間: 2021-8-16 16:00
東西不錯哦,要做的時候就來找了。
作者: 絲瓜偵探    時間: 2021-12-10 21:02
可讀性好!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1