这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 51单片机做的门铃,只能响一次。不知道是哪里的问题?

共1条 1/1 1 跳转至

51单片机做的门铃,只能响一次。不知道是哪里的问题?

工程师
2021-05-04 22:18:10     打赏

大家好!我用51单片机做的门铃,增加掉电模式后门铃只能响一次后就不响了,请问各位是程序哪错了? 


以下是我的主要源码:


include<STC89C5xRC.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P1^0;
uchar ding,dong,flag,stop,k1;
uint n;

void delay(uint i)
{
        while(i--);
}

void time0init()          //定时器0初始化
{
        TMOD=0X01;         //定时器0 方式1
        TH0=0Xff;
        TL0=0X06; //定时250us
//        TR0=1;
        EA=1;
        ET0=1;
                                IT0=1;    //外部中断0触发方式:0低电平有效,1下降沿有效。
                                EX0=1;    //外部中断0中断允许位:0禁止中断,1允许中断。
}
void biaohaoinit()           //各个标号初始化
{
        ding=0;                //叮声音  计数标志
        dong=0;                //咚声音  计数标志
        n=0;                //定时0.5s标志
        flag=0;
        stop=0;    //结束标志
                                k1=1;
}
void main()
{
        time0init();
        biaohaoinit();
        while(1)
        {
                if(k1==0)           //判断按键是否按下
                {
                        stop=0x00;
                        k1=1;
                        TR0=1;                                                //打开定时器0
                        while(!stop);    /*!stop的意思是取反,意思就是stop值为0,那么这里判断就是1,
                                                                                         就一直循环执行这条语句,当stop值为1时,这里的!stop参数就是0,条件不成立,
                                                                                         就退出这个while循环,继续执行下一条语句了。*/
                        ET0=0;
      PCON = 0X02;
                        delay(2000);
                        _nop_();
                        _nop_();
                }  
        }        
}

void zhongduan0() interrupt 0
{
        PCON = 0;
        k1=0;
        stop=0x00;
        ET0=1;
}

void time0() interrupt 1
{
                n++;
                TH0=0Xff;
                TL0=0X06; //250us
                stop=0;
                if(n==2000)                //定时0.5s  叮响0.5秒,咚响0.5秒
                {
                                                n=0;
                                                if(flag==0)
                                                {
                                                                                flag=~flag;
                                                }
                                                else
                                                {
                                                                                flag=0;
                                                                                stop=1;
                                                                                TR0=0;          //关闭定时器0
                                                }
                }
                if(flag==0)
                {                                           //通过改变定时计数时间可以改变门铃的声音
                                                ding++;                          //叮
                                                if(ding==1)
                                                {
                                                                                ding=0;
                                                                                beep=~beep;
                                                }
                }
                else
                {
                                                dong++;
                                                if(dong==2)                  //咚
                                                {
                                                                                dong=0;
                                                                                beep=~beep;
                                                }        
                }

}





关键词: 门铃     单片机     BUG    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]