找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7911|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+BK4802N寬頻率范圍對(duì)講機(jī)的制作 附源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:795562 發(fā)表于 2021-1-3 16:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
東戳戳西戳戳,戳出一篇利用MCU控制對(duì)講機(jī)制作的源程序,苦于無(wú)硬件連線圖無(wú)法仿制。求助大神們,可否從程序上面畫出硬件連線圖?
附上源程序,供大家琢磨。因?yàn)檫@個(gè)對(duì)講機(jī)工作頻率范圍很寬,好像可以工作在短波10米范圍。原數(shù)據(jù)手冊(cè)上寫有支持19~33Mhz,并附上芯片的數(shù)據(jù)手冊(cè)。
并求大神畫出MCU控制的硬件連接圖,和如何修改程序?yàn)楣ぷ黝l率段為29.6Mhz范圍?

單片機(jī)源程序如下:
  1. #include "STC8F.h"
  2. #include "intrins.h"
  3. #include "IICANDDELAY.h"
  4. #include "codetab.h"
  5. sbit set=P3^7;//must connect not more than 8.2K resistor to GND
  6. //MCU and BK4802N share 3.3v VCC(STC8MCU must using 3.3v VCC)
  7. //BK4802N pin19-pin22 must connect to 3.3v.
  8. sbit ppt=P5^4;//ppt must be connected to BK4802N pin23.
  9. sbit test=P5^5;//test(p5.5) connect a LED to GND to indict 4802n IIC RUN.
  10. //DEFAULT FERQ:TX=RX=439.725mh.uSING "BK4802NCalc.exe to calculate.
  11. int rxfreq[]={
  12. 0x52BE,0xF850,0x0000};
  13. int txfreq[]={
  14. 0x52C5,0x925F,0x0000};
  15. char txinf[]="TX...";
  16. char rxinf[]="RX...";
  17. char blankinf[]="        ";
  18. char newtxfreq[6];
  19. char newrxfreq[6];
  20. unsigned char newtxfreqinf[6];
  21. //char newrxfreqinf[6];
  22. int rxreg[]={ //rx setting for register
  23. 0x0300,
  24. 0x8e04,
  25. 0xF140,
  26. 0xED00,
  27. 0x17E0,
  28. 0xe0e0,
  29. 0x8543,
  30. 0x0700,
  31. 0xA066,
  32. 0xFFFF,
  33. 0xFFE0,
  34. 0x07a0,
  35. 0x9E3C,
  36. 0x1F00,
  37. 0xD1D1,
  38. 0x200F,
  39. 0x01FF,
  40. 0xE000,
  41. 0x0340
  42. };
  43. int txreg[]={//tx setting for register
  44. 0x7C00,
  45. 0x0c04,
  46. 0xF140,
  47. 0xED00,
  48. 0x3fE0,
  49. 0xe0e0,
  50. 0x8543,
  51. 0x0700,
  52. 0xA066,
  53. 0xFFFF,
  54. 0xffe0,
  55. 0x061f,
  56. 0x9e3c,
  57. 0x1f00,
  58. 0xd1C1,
  59. 0x200f,
  60. 0x01FF,
  61. 0xE000,
  62. 0x0c00
  63. };

  64. void setchannel(char k)//setting new trx freq from EEPROM in MCU
  65.          {
  66.                  
  67.                  int i;
  68.                  
  69.                          for(i=0;i<6;i++)
  70.                          {
  71.                                 newrxfreq[i]=IapRead(i+6+k*32);
  72.                           newtxfreq[i]=IapRead(i+k*32);
  73.                          }
  74.          }
  75. void setchannelinf(char k)//setting new trx freq information display on OLED  from EEPROM in MCU
  76.          {
  77.                  
  78.                  int i;
  79.                  
  80.                          for(i=0;i<6;i++)
  81.                          {
  82.                                 newtxfreqinf[i]=IapRead(i+16+k*32);
  83.                          }
  84.          }
  85. void main()
  86. {
  87.         unsigned char i,f;// i do for 'for',f do for store channel No.
  88.         unsigned char k=0;//k is do for trx
  89.         //Start
  90.         test=1;
  91.   Delay50ms();
  92.         OLED_Init(); //OLED初始化
  93.                         for(i=0; i<8; i++)//通過(guò)點(diǎn)整顯示漢字 -- i表示字表數(shù)組的位置
  94.                 {
  95.                         OLED_P16x16Ch(i*16,0,i);//In the name of the Moon ,I will punish you.
  96.                          OLED_P16x16Ch(i*16,2,i+8);         //Moon promise power, make up!
  97.                 }
  98.                 OLED_P8x16Str(0,6,"BG7QKU");
  99.                 delay(10000);
  100.                 OLED_CLS();//清屏
  101.                 test=0;
  102.                 OLED_P8x16Str(0,0,"BG7QKU");
  103.                 for(i=0; i<8; i++)
  104.                  {
  105.                          OLED_P16x16Ch(i*16,6,i);
  106.                  }
  107.                 writing(0x90,23,0xa8,0XD0);//Init rx reg23.
  108.                 if(P11==0)//if default or not?
  109.                 {
  110.                         for(i=4;i<=22;i++)
  111.                         {
  112.                          writing(0x90,i,HIGHBYTE(rxreg[i-4]),LOWBYTE(rxreg[i-4]));//init default reg. ro rx
  113.                         }
  114.                         for(i=5;i>2;i--)
  115.                         {
  116.                                 writing(0x90,i-3,HIGHBYTE(rxfreq[i-3]),LOWBYTE(rxfreq[i-3]));//init default reg. to rx freq
  117.                         }
  118.                         OLED_P8x16Str(0,4,"439.725");
  119.                         OLED_P8x16Str(0,2,rxinf);
  120.                 }
  121.                
  122.                 else
  123.                 {
  124.                         f=IapRead(0x0200);//read store channel No.
  125.                         if (f>3)
  126.                                 f=0;
  127.                         setchannel(f);
  128.                         setchannelinf(f);      
  129.                         OLED_P8x16Str(0,4,newtxfreqinf);
  130.                         k=1;
  131.                 }
  132.                        
  133.                 test=1;       
  134.                 while(1)
  135.                 {
  136.                         if(set==1)//teat channel change key
  137.                         {
  138.                                 Delay30ms();//kill swim
  139.                                 if(set==1)
  140.                                 {
  141.                                  Delay30ms();//down to LOW to set channel
  142.                                 if(set==0)
  143.                                 {
  144.                                         f++;
  145.                                         if(f>3)
  146.                                                 f=0;
  147.                                         IapErase(0x0200);//erase EEPROM before write
  148.                                         IapProgram(0x0200,f);//write EEPORM
  149.                                         setchannel(f);
  150.                                   setchannelinf(f);
  151.                                   OLED_P8x16Str(0,4,newtxfreqinf);
  152.                                        
  153.                             k=1;
  154.                                 }
  155.                          }
  156.                         }
  157.                         //Only using default freq
  158.                         if(ppt==1&&k==0&&P11==0)//Set to TX if PTT =HIGH.
  159.                         {
  160.                           test=0;
  161.                                 Delay30ms();
  162.                                 if(ppt==1)
  163.                                 {
  164.                                         Delay30ms();
  165.                                           for(i=4;i<=22;i++)
  166.                 {
  167.                                    writing(0x90,i,HIGHBYTE(txreg[i-4]),LOWBYTE(txreg[i-4]));
  168.                             }
  169.                        
  170.                       for(i=5;i>2;i--)
  171.                       {
  172.                              writing(0x90,i-3,HIGHBYTE(txfreq[i-3]),LOWBYTE(txfreq[i-3]));
  173.                       }
  174.                                         Delay30ms();
  175.                                         OLED_P8x16Str(0,2,blankinf);
  176.                                         OLED_P8x16Str(0,2,"439.725");
  177.                                         test=1;
  178.                                         k=1;
  179.                                 }
  180.                         }
  181.                                 if(ppt==0&&k==1&&P11==0)//Set to RX.
  182.                                 {
  183.                                         test=0;
  184.                                         Delay30ms();
  185.                                 if(ppt==0)
  186.                                 {
  187.                                         Delay30ms();
  188.                                         writing(0x90,23,0xa8,0XD0);
  189.                                           for(i=4;i<=22;i++)
  190.                {
  191.                                    writing(0x90,i,HIGHBYTE(rxreg[i-4]),LOWBYTE(rxreg[i-4]));
  192.                             }
  193.                        
  194.                       for(i=5;i>2;i--)
  195.                       {
  196.                              writing(0x90,i-3,HIGHBYTE(rxfreq[i-3]),LOWBYTE(rxfreq[i-3]));
  197.                       }
  198.                                         Delay30ms();
  199.                                         OLED_P8x16Str(0,2,blankinf);
  200.                                         OLED_P8x16Str(0,2,"439.725");
  201.                       test=1;
  202.                                         k=0;
  203.                           }
  204.                    }
  205.                         //Using pre-set freq
  206.                         if(ppt==1&&k==0&&P11==1)//Set to TX if PTT =HIGH.
  207.                         {
  208.         test=0;
  209.                                 Delay30ms();
  210.                                 if(ppt==1)
  211.                                 {
  212.                                         setchannel(f);
  213.                                   setchannelinf(f);
  214.                                         test=0;
  215.                                         OLED_P8x16Str(0,4,newtxfreqinf);
  216.                                         Delay30ms();
  217.                                           for(i=4;i<=22;i++)
  218.                {
  219.                                    writing(0x90,i,HIGHBYTE(txreg[i-4]),LOWBYTE(txreg[i-4]));
  220.                             }
  221.                        
  222.                       for(i=5;i>2;i--)
  223.                       {
  224.                              writing(0x90,i-3,newtxfreq[2*(i-3)],newtxfreq[2*(i-3)+1]);
  225.                       }
  226.                                         Delay30ms();
  227.                                         OLED_P8x16Str(0,2,blankinf);
  228.                                         OLED_P8x16Str(0,2,txinf);
  229.                                         test=1;
  230.                                         k=1;
  231.                                 }
  232.                         }
  233.                                 if(ppt==0&&k==1&&P11==1)//Set to RX.
  234.                                 {

  235.                                         Delay30ms();
  236.                                 if(ppt==0)
  237.                                 {

  238.                                         test=0;

  239.                                         Delay30ms();
  240.                                         writing(0x90,23,0xa8,0XD0);
  241.                                           for(i=4;i<=22;i++)
  242.                {
  243.                                    writing(0x90,i,HIGHBYTE(rxreg[i-4]),LOWBYTE(rxreg[i-4]));
  244.                             }
  245.                        
  246.                       for(i=5;i>2;i--)
  247.                       {
  248.                              writing(0x90,i-3,newrxfreq[2*(i-3)],newrxfreq[2*(i-3)+1]);
  249.                       }
  250.                                         Delay30ms();
  251.                                         OLED_P8x16Str(0,2,blankinf);
  252.                                         OLED_P8x16Str(0,2,rxinf);
  253.                                         test=1;
  254.                                         k=0;
  255.                           }
  256.                    }
  257.                 }
  258. }
復(fù)制代碼

所有資料51hei提供下載:
第三個(gè)程序,增加到16個(gè)信道,以及顯示月野兔開(kāi)機(jī)圖片.zip (4.13 MB, 下載次數(shù): 110)
BK4802_datasheet.pdf (753.36 KB, 下載次數(shù): 114)

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

使用道具 舉報(bào)

沙發(fā)
ID:795562 發(fā)表于 2021-1-3 16:34 | 只看該作者
這個(gè)是原作者寫的論壇帖子,一并附上。求解單片機(jī)和BK4802的連線控制圖

自己研究的STC單片機(jī)控制對(duì)講芯片程序 摘錄.docx

418.23 KB, 下載次數(shù): 121, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

板凳
ID:390569 發(fā)表于 2022-11-14 12:03 來(lái)自手機(jī) | 只看該作者
這是我寫的源程序,可以在我github上搜索作者“BG7QKU”,我在上面相關(guān)研究成果(后來(lái)升級(jí)修改成為了DIY小玩意
回復(fù)

使用道具 舉報(bào)

地板
ID:230742 發(fā)表于 2022-11-15 11:57 | 只看該作者
快兩年遇上原作者了。緣分啊。
回復(fù)

使用道具 舉報(bào)

5#
ID:1041279 發(fā)表于 2023-8-8 11:41 | 只看該作者
現(xiàn)在BK4802的資料都找不到了
回復(fù)

使用道具 舉報(bào)

6#
ID:69038 發(fā)表于 2023-8-9 08:39 | 只看該作者
kendu1982 發(fā)表于 2023-8-8 11:41
現(xiàn)在BK4802的資料都找不到了

我有。好多年前收的
回復(fù)

使用道具 舉報(bào)

7#
ID:1041279 發(fā)表于 2023-8-9 11:04 | 只看該作者
zhuls 發(fā)表于 2023-8-9 08:39
我有。好多年前收的

謝謝!樓主的程序夠用了,PDF在這里還有

BK4802_datasheet.pdf

753.36 KB, 下載次數(shù): 59, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

8#
ID:1010505 發(fā)表于 2024-4-25 23:05 | 只看該作者
mark下,還有可以傳數(shù)據(jù)的型號(hào),不過(guò)資料好像不好找
回復(fù)

使用道具 舉報(bào)

9#
ID:122152 發(fā)表于 2024-4-26 14:36 | 只看該作者
好資料謝謝提供!
回復(fù)

使用道具 舉報(bào)

10#
ID:369845 發(fā)表于 2024-6-8 18:20 | 只看該作者
kendu1982 發(fā)表于 2023-8-9 11:04
謝謝!樓主的程序夠用了,PDF在這里還有

感謝!終于找到了比較全的datasheet了,我之前看半導(dǎo)小芯的datasheet,內(nèi)容有刪減。
回復(fù)

使用道具 舉報(bào)

11#
ID:283207 發(fā)表于 2024-6-24 14:21 | 只看該作者
感謝原作者和搬運(yùn)者,mark下,有空再仔細(xì)研究
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表