前些天买的BF-C1对讲机(拆机图传送门:
http://bbs.mydigit.cn/read.php?tid=2275323),
实测了一下,在建筑密集的小区,一方在室内,能有效通话的距离也就500多米。
想起手头还有一个433MHz的吸盘天线,改了SMA外螺纹内孔的头,等有时间出去测试下。
想要一个人完成测试,于是有了标题的构思,自动发播装置。
因为对讲机不是设计用来连续发播的,持续发播会发热,本身也有连续发播时间限制(2分钟),
于是用单片机搭了个定时发播的电路,占空比从1/2(发5秒停5秒)到1/6(发5秒停25秒)五档可调。
用MP3做音源,在外收听即可。上图:
整体外观
电路板
“死特惨”15F104E
电路板背面
3.5mm和2.5mm大小两个插头
连上电源和音源就可以自动间歇发播了。
电路板上的按钮用于调节占空比,按照1/2,1/3,1/4,1/5,1/6的顺序循环切换。
特设继电器“敲击式”反馈——脑洞大开的人机交互方式——
按钮松开1秒钟开始,继电器以每500ms吸合100ms的规律做“敲击”动作,敲击次数即为占空比的分母,
敲完2秒钟后,进入工作状态。
也就是说,按完按钮,只要数一下继电器敲了几次,就知道当前占空比了——敲了2次就是1/2,3次就是1/3……
手绘电路图:
代码<Main.c>
代码<KEY.C>
- //==============================
- //按键驱动
- sbit KEY_0 = P3^3;
- //sbit KEY_1 = P3^6;
- //sbit KEY_2 = P3^7;
- unsigned char KEY_SB[3]={0,0,0},KEY_SBH[3]={0,0,0};
- void KEY_Scan()
- {
- unsigned char i,Key[3];
- static unsigned char k[3]={1,1,1},m[3]={1,1,1},kc[3]={0,0,0},VerifyCycles=8;
- static unsigned int RepDly[3]={0,0,0};
- Key[0] = KEY_0;
- // Key[1] = KEY_1;
- // Key[2] = KEY_2;
- for(i=0;i<1;i++)
- {
- if (k[i] == Key[i]) kc[i] = 0;
- else if (kc[i]++>VerifyCycles) k[i] = Key[i];
-
- if (!k[i] && m[i]) KEY_SB[i]++;
- if (k[i]) KEY_SBH[i] = 0; else KEY_SBH[i] = 1;
-
- if (KEY_SBH[i]) RepDly[i]++; else RepDly[i] = 0;
- if (RepDly[i] > 250)
- {
- KEY_SB[i]++;
- RepDly[i] = 200;
- }
- m[i] = k[i];
- }
- }
谢谢观赏!