单片机无源蜂鸣器的程序,请求解释下这个程序从第一个for开始的意思!

单片机无源蜂鸣器的程序,请求解释下这个程序从第一个for开始的意思!,第1张

#include//包含51的头文件

sbit BEEP=P1^5//sbit是位定义的意思,即使用beep来代表单片P1端口的第5个IO口

void beep()//蜂鸣器子函数,方便调用,

{

unsigned char i , j//设置无符号字符型变量i;和J

for (i=0i<100i++)//定义一个for循环,每次完整地执行for里面的所有语句,i就自增1,直到i=10

{ //当i=100是,for循环就结束

BEEP=!BEEP//BEEP取反//蜂鸣器发生原理,进行电平取反,散蔽滚冲余原来为高电平,下一次执行就变成低电平

for (j = 0 j<200 j++)//需要产生方波这个是延时程序

}

BEEP=1//关闭蜂鸣器蜂鸣器电平不并段发生变化的时候,蜂鸣器无法发声。

}

蜂鸣器一直响很容易实现,无源蜂鸣竖吵者器给电平就可以控制发声了,程序如余薯下:

FMQ EQU P3.2

ORG 0000H

LJMP 碰袭MAIN

ORG 0030H

MAIN:

    MOV A,#0FEH

    CLR FMQ

LOOP:

    MOV P1,A

    RL A

    LCALL DELAY

    SJMP LOOP

DELAY:

    MOV R2,#200

DLY:

    MOV R3,#250

    DJNZ R3,$

    DJNZ R2,DLY

    RET

    END

#include<reg51.h>

#define uchar unsigned char

sbit k1=P1^0

sbit k2=P1^1

sbit k3=P1^2

sbit k4=P1^3

sbit fmq=P1^7

uchar cnt,sec

vodi t0isr() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

cnt++

if(cnt>=20)

    {

    cnt=0

    sec--

    if(sec==0)

        {

        TR0=0

        fmq=1

        }

    }

}

main()

{

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

ET0=1

EA=1

while(1)   

    {

    if(k1==0)

        {

        sec=1

        cnt=0

        TR0=1

        while(k1==0)

        fmq=0

        }

    if(k2==0)

        {

        sec=2

        cnt=0

        TR0=1

        while(k1==0)

        fmq=0

        }

    if(k3==0)

        {

        sec=3

        cnt=0

       念搜返 TR0=1

        while(k3==0)

        fmq=0

        }

    if(k4==0)

        {

        sec=4

        cnt=0

        仔饥TR0=1

        while(k1==0)

        fmq=0

        }

    漏凯}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8279842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存