找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+BK4802N宽频率范围对讲机的制作 附源程序

  [复制链接]
跳转到指定楼层
楼主
ID:795562 发表于 2021-1-3 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
东戳戳西戳戳,戳出一篇利用MCU控制对讲机制作的源程序,苦于无硬件连线图无法仿制。求助大神们,可否从程序上面画出硬件连线图?
附上源程序,供大家琢磨。因为这个对讲机工作频率范围很宽,好像可以工作在短波10米范围。原数据手册上写有支持19~33Mhz,并附上芯片的数据手册。
并求大神画出MCU控制的硬件连接图,和如何修改程序为工作频率段为29.6Mhz范围?

单片机源程序如下:
  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++)//通过点整显示汉字 -- i表示字表数组的位置
  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. }
复制代码

所有资料51hei提供下载:
第三个程序,增加到16个信道,以及显示月野兔开机图片.zip (4.13 MB, 下载次数: 80)
BK4802_datasheet.pdf (753.36 KB, 下载次数: 82)

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

使用道具 举报

沙发
ID:795562 发表于 2021-1-3 16:34 | 只看该作者
这个是原作者写的论坛帖子,一并附上。求解单片机和BK4802的连线控制图

自己研究的STC单片机控制对讲芯片程序 摘录.docx

418.23 KB, 下载次数: 94, 下载积分: 黑币 -5

回复

使用道具 举报

板凳
ID:390569 发表于 2022-11-14 12:03 来自手机 | 只看该作者
这是我写的源程序,可以在我github上搜索作者“BG7QKU”,我在上面相关研究成果(后来升级修改成为了DIY小玩意
回复

使用道具 举报

地板
ID:230742 发表于 2022-11-15 11:57 | 只看该作者
快两年遇上原作者了。缘分啊。
回复

使用道具 举报

5#
ID:1041279 发表于 2023-8-8 11:41 | 只看该作者
现在BK4802的资料都找不到了
回复

使用道具 举报

6#
ID:69038 发表于 2023-8-9 08:39 | 只看该作者
kendu1982 发表于 2023-8-8 11:41
现在BK4802的资料都找不到了

我有。好多年前收的
回复

使用道具 举报

7#
ID:1041279 发表于 2023-8-9 11:04 | 只看该作者
zhuls 发表于 2023-8-9 08:39
我有。好多年前收的

谢谢!楼主的程序够用了,PDF在这里还有

BK4802_datasheet.pdf

753.36 KB, 下载次数: 27, 下载积分: 黑币 -5

回复

使用道具 举报

8#
ID:1010505 发表于 2024-4-25 23:05 | 只看该作者
mark下,还有可以传数据的型号,不过资料好像不好找
回复

使用道具 举报

9#
ID:122152 发表于 2024-4-26 14:36 | 只看该作者
好资料谢谢提供!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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