這幾天閑來(lái)無(wú)事,翻騰出以前的仿真器和編程器,找出幾片STC12c2052。寫(xiě)了個(gè)修改中繼功能的小程序,主要實(shí)現(xiàn):
1、在5秒內(nèi)連續(xù)按三下發(fā)射鍵才能打開(kāi)中繼。
2、打開(kāi)中繼后,中繼在每一句話后延時(shí)10s,10s內(nèi)沒(méi)有說(shuō)話的,中繼關(guān)閉。
3、每一句語(yǔ)音后面自動(dòng)加上“滴滴”,每一組語(yǔ)音結(jié)束自動(dòng)加上“滴滴滴”。
用華為450C試了試,發(fā)現(xiàn)450C的靜噪點(diǎn)不好取,明天用2K電阻連接插頭第一腳試試能不能模擬出低電平靜噪信號(hào)。控制的話應(yīng)該是把PNP三極管的上面一腳(B)拉低即可。
單片機(jī)附帶上無(wú)語(yǔ)音靜音控制輸出和“滴滴”聲音輸出。
不能加附件,就把源程序貼上:
/* 本程序主要實(shí)現(xiàn)功能: 1、2s之內(nèi)連續(xù)按鍵3次打開(kāi)中繼。 2、接收到一次信號(hào)后延時(shí)8s后關(guān)閉發(fā)射機(jī)。*/
/* 3、每次語(yǔ)音結(jié)束 滴滴 ,每個(gè)循環(huán)結(jié)束 滴滴滴滴*/
#include
#include
#define FV 100
#define MC 400
void delay(int);
void didi(int);
void timer0();
void timer1();
bit CHAOSHI,ZHOUQI;
sbit P1_6 = P3^4;
sbit P1_7 = P1^7;
sbit P1_5 = P1^5;
int YSJ;
int CSJ;
/* ------------------- 主程序入口------------------------*/
main()
{
CHAOSHI=0; /* 發(fā)射超時(shí)標(biāo)志*/
ZHOUQI=0; /* 一組通話周期標(biāo)志*/
YSJ=0;
CSJ=0;
P1=0x80;
P3=0x00;
TMOD=0x11; /* 定時(shí)器0、1皆工作于方式1 */
EA=1;
ET0=1;
ET1=1 ;
aaa: while(P1_7==1) /* 等待 接收到信號(hào) */
{ }
if (ZHOUQI==0) /* 接收到信號(hào),周期標(biāo)志為0 */
{
TH1=0x3c; /* 12M晶振,定時(shí)0.05s */
TL1=0xb0;
TR1=1; /*開(kāi)啟超時(shí)計(jì)時(shí)*/
while(P1_7==0 && CHAOSHI==0) { } /*等待松鍵高電平*/
while(P1_7==1 && CHAOSHI==0) { } /*等待掐鍵低電平*/
while(P1_7==0 && CHAOSHI==0) { } /*等待松鍵高電平*/
while(P1_7==1 && CHAOSHI==0) { } /*等待掐鍵低電平*/
while(P1_7==0 && CHAOSHI==0) { } /*等待松鍵高電平*/
if(CHAOSHI==1)
{ CHAOSHI=0;
goto aaa;
}
P1_6=1;
bbb: TH0=0x3c; /*延時(shí)定時(shí)器啟動(dòng)*/
TL0=0xb0;
TR0=1;
while(ZHOUQI==0 && P1_7==1) { }
if (P1_7==0)
{
TR0=0;
while(P1_7==0){ } /* 松鍵時(shí)開(kāi)始計(jì)時(shí)*/
YSJ=0;
didi(2); /*一個(gè)周期內(nèi),一句話完成,響兩聲*/
goto bbb;
}
if(ZHOUQI==1)
{
didi(3); /*一個(gè)周期完成,響三聲*/
P1_6=0;
TR0=0;
ZHOUQI=0;
goto aaa;
}
}
}
/*--------------------------delay()延時(shí)程序--------------------*/
void delay(int x)
{
int a;
for (a=0;a
