专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机连续按键检测C51程序

作者:佚名   来源:本站原创   点击数:  更新时间:2010年06月03日   【字体:

        这几天闲来无事,翻腾出以前的仿真器和编程器,找出几片STC12c2052。写了个修改中继功能的小程序,主要实现:

1、在5秒内连续按三下发射键才能打开中继。

2、打开中继后,中继在每一句话后延时10s,10s内没有说话的,中继关闭。

3、每一句语音后面自动加上“滴滴”,每一组语音结束自动加上“滴滴滴”。

       用华为450C试了试,发现450C的静噪点不好取,明天用2K电阻连接插头第一脚试试能不能模拟出低电平静噪信号。控制的话应该是把PNP三极管的上面一脚(B)拉低即可。

       单片机附带上无语音静音控制输出和“滴滴”声音输出。

       不能加附件,就把源程序贴上:
 

/* 本程序主要实现功能: 1、2s之内连续按键3次打开中继。 2、接收到一次信号后延时8s后关闭发射机。*/
/* 3、每次语音结束 滴滴 ,每个循环结束 滴滴滴滴*/

           #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;                  /* 发射超时标志*/
              ZHOUQI=0;                   /* 一组通话周期标志*/
             
     YSJ=0;
     CSJ=0;
                         
              P1=0x80;
              P3=0x00;
     

     TMOD=0x11;      /*  定时器0、1皆工作于方式1 */
              

     EA=1;
     ET0=1;
     ET1=1 ;   

aaa:          while(P1_7==1)              /* 等待 接收到信号  */
              {   }
              if (ZHOUQI==0)              /* 接收到信号,周期标志为0 */
              {
                    TH1=0x3c;        /* 12M晶振,定时0.05s */
           TL1=0xb0;
     TR1=1;      /*开启超时计时*/
         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;                                /*延时定时器启动*/
      TL0=0xb0;
      TR0=1;
      
      while(ZHOUQI==0 && P1_7==1) { }

      if (P1_7==0)  
        {         
       TR0=0;
       while(P1_7==0){ }    /* 松键时开始计时*/
       YSJ=0;   
       didi(2);                   /*一个周期内,一句话完成,响两声*/
       goto bbb;
        }

      if(ZHOUQI==1)
         {
        didi(3);       /*一个周期完成,响三声*/
        P1_6=0;
        TR0=0;
        ZHOUQI=0;
        goto aaa;
      }
    }
    
   } 
/*--------------------------delay()延时程序--------------------*/    
    
   

  void delay(int x)      
    {
  int a;

  for (a=0;a

	  
	  
  
  
关闭窗口

相关文章