用单片机做“叮咚”门铃

用单片机做“叮咚”门铃

     本文介绍用51单片机制作“叮咚”门铃,电路原理图如下所示,当按下开关SP1,AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭。



      程序设计方法

        1.我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时。

        2.在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,回到**初状态。

        3.“叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。

汇编源程序:

            T5HZ  EQU 30H

            T7HZ  EQU 31H

            T05SA  EQU 32H

            T05SB EQU 33H

            FLAG BIT 00H

            STOP  BIT 01H

            SP1  BIT P3.7

            ORG 00H

            LJMP START

            ORG 0BH

            LJMP INT_T0

START:      MOV TMOD,#02H

            MOV TH0,#06H

            MOV TL0,#06H

            SETB ET0

            SETB EA

NSP:        JB SP1,NSP

            LCALL DELY10MS

            JB SP1,NSP

            SETB TR0

            MOV T5HZ,#00H

            MOV T7HZ,#00H

            MOV T05SA,#00H

            MOV T05SB,#00H

            CLR FLAG

            CLR STOP

            JNB STOP,$

            LJMP NSP

DELY10MS:   MOV R6,#20

D1:         MOV R7,#248

            DJNZ R7,$

            DJNZ R6,D1

            RET

INT_T0:     INC T05SA

            MOV A,T05SA

            CJNE A,#100,NEXT

            MOV T05SA,#00H

            INC T05SB

            MOV A,T05SB

            CJNE A,#20,NEXT

            MOV T05SB,#00H

            JB FLAG,STP

            CPL FLAG

            LJMP NEXT

STP:        SETB STOP

            CLR TR0

            LJMP DONE

NEXT:       JB FLAG,S5HZ

            INC T7HZ

            MOV A,T7HZ

            CJNE A,#03H,DONE

            MOV T7HZ,#00H

            CPL P1.0

            LJMP DONE

S5HZ:       INC T5HZ

            MOV A,T5HZ

            CJNE A,#04H,DONE

            MOV T5HZ,#00H

            CPL P1.0

            LJMP DONE

DONE:       RETI

            END

C语言源程序:

#include AT89X51.H

unsigned char t5hz;

unsigned char t7hz;

unsigned int tcnt;

bit stop;

bit flag;

void main(void)

{

        unsigned char i,j;

        TMOD=0x02;

        TH0=0x06;

        TL0=0x06;

        ET0=1;

        EA=1;

        while(1)

        {

                if(P3_7==0)

                {

                        for(i=10;i0;i--)

                        for(j=248;j0;j--);

                        if(P3_7==0)

                        {

                                t5hz=0;

                                t7hz=0;

                                tcnt=0;

                                flag=0;

                                stop=0;

                                TR0=1;

                                while(stop==0);

                        }

                }

        }

}

void t0(voidinterrupt 1 using 0

{

        tcnt++;

        if(tcnt==2000)

        {

                tcnt=0;

                if(flag==0)

                {

                        flag=~flag;

                }

                else

                {

                        stop=1;

                        TR0=0;

                }

        }

        if(flag==0)

        {

                t7hz++;

                if(t7hz==3)

                {

                        t7hz=0;

                        P1_0=~P1_0;

                }

        }

        else

        {

                t5hz++;

                if(t5hz==4)

                {

                        t5hz=0;

                        P1_0=~P1_0;

                }

        }

}

网站导航

售前咨询:023-58556299

技术咨询:023-58722688

返回顶部