求单片机设计8个led灯同时闪烁,并且led灯亮的时候控制蜂鸣器发生,led灯灭的时候关闭蜂鸣器的程序,谢谢

求单片机设计8个led灯同时闪烁,并且led灯亮的时候控制蜂鸣器发生,led灯灭的时候关闭蜂鸣器的程序,谢谢,第1张

ORG  0

CALL  PRG1 ; 亮且发音

CALL  PRG2 ; 灭且静音

SJMP 0

;-----------------

PRG1:

MOV  P0, #0  ; 8个led灯亮

MOV  R2, #200

LP1:

CPL  P10   ; 蜂鸣器响

DJNZ R6, $

DJNZ R7, $ - 2

DJNZ R2, LP1

MOV  P0, #255  ; 8个led灯灭

RET

;-----------------

PRG2:

MOV  P0, #255  ; 8个led灯不亮

MOV  R2, #200

LP2:

SETB  P10   ; 蜂鸣器不响

DJNZ R6, $

DJNZ R7, $ - 2

DJNZ R2, LP2

MOV  P0, #255  ; 8个led灯灭

RET

;-----------------

END

plc中蜂鸣器长鸣一次程序,首先要确定蜂鸣器是否已经连接到PLC控制器上,并且检查电源是否正常。

如果电源正常,可以尝试检查PLC程序,看看是否有蜂鸣器的控制程序。

如果没有,可以尝试添加蜂鸣器的控制程序,并确保蜂鸣器的输出信号正确连接到PLC控制器上。

最后,可以尝试运行PLC程序,看看蜂鸣器是否能够正常工作。

      蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有PWM波控制蜂鸣器的频率。脉冲就是高低电平的切换,如下图:一个方波脉冲

我们用单片机的IO口实现一种这样高低电平的方波,驱动蜂鸣器发音。我们板子上配的就是交流蜂鸣器。

     接下来我们看一下蜂鸣器的硬件电路:

蜂鸣器通过三极管驱动。我们利用杜邦线将蜂鸣器的一端J8连接到板子上P15管脚上。

 示例程序:

  #include "reg52h"

  #include "intrinsh"

  typedef unsigned char uint8;

  typedef unsigned int  uint16;

  sbit beep = P1^5;

  void delay(uint16 i)

  {

  while(i--);

  }

  void main()

  {

while(1)

{

beep = ~beep;

delay(10);

}

  }

该程序实现蜂鸣器的响和停,程序较为简单,可以在此基础上进行扩展。

/

(1)实现一四人抢答器,有人抢答成功后,其他人再抢答无效;

(2)通过蜂鸣器响1秒来提示抢答成功,并在数码管上显示抢答者的序号;

(3)主持人通过按键清除抢答信息,并开始 30 秒的答题倒计时,当倒计时

结束时,通过蜂鸣器响 1 秒来提示回答问题时间到,此时可以开始新一轮的抢答

/

module qiangda(rst,clk,ina,inb,inc,ind,judge,clk_1hz,wei,duan,beep,wei1,duan1,clk_1khz);

input clk,clk_1hz;

input ina,inb,inc,ind,judge;

output[3:0] wei;

output[7:0] duan;

input rst,clk_1khz;

output [3:0] wei1;

output [7:0] duan1;

output beep;

reg[3:0] wei;

reg[7:0] duan;

reg flag;

reg [5:0] shi,ge,data;

reg [4:0] count;

reg [3:0] wei1;

reg [7:0] duan1;

reg beep;

reg yu;

reg [1:0] count3;

always @(posedge clk)

begin

if(!rst)    //系统复位,个人认为复位不够完整

begin

yu = 0;

end

if(!judge) //主持人控制按键

begin

flag=0; //允许抢答

wei=4'b1111; //数码管全不亮

                      //个人认为分成duan1和duan,wei1和wei的数码管数据总线不经济

duan=8'hff;

yu=1; //重新开始倒计时

end

else

begin

if(ge==6'b000000&&shi==6'b000000) //处于等待状态,实际上是等主持人按键(!judge),

;

else

begin

if(!ina) //若a抢答

begin

if(!flag) //若无人抢答成功

begin

wei=4'b1101;

duan=8'hf9; //数码管显示1,代表a抢答成功

flag=1; //抢答标志位有效

end

end

else if(!inb) //b抢答处理电路

begin

if(!flag)

begin

wei=4'b1101;

duan=8'ha4; //数码管显示2,代表b抢答成功

flag=1;

end

end

else if(!inc)

begin

if(!flag)

begin

wei=4'b1101;

duan=8'hb0; //数码管显示3

flag=1;

end

end

else if(!ind)

begin

if(!flag)

begin

wei=4'b1101;

duan=8'h99; //数码管显示4

flag=1;

end

end

end

end

end

always@(posedge clk_1hz or negedge rst)

begin

if(!rst)

begin

count = 0;

end

else if(count >= 5'd30) //计时达到30秒,停止计时

count = count;

else if(yu==1) //触发条件yu=1时,重新开始计数那不是变成从30开始数?感觉该段有些问题

count = count+5'b1;

end

//以下always过程块为shi和ge的译码电路,完成倒计时功能

always @(count)

begin

if(count>=5'b10101) //count>20时

begin

shi = 5'b00000; //shi=0

ge = 5'b11110-count; //ge = 30-count

end

else if(count>=5'b01011) //10<count<=20时

begin

shi=5'b00001; //shi=1

ge=5'b10100-count; //ge = 20-count

end

else if(count>=5'b00001) //0<count<=10时

begin

shi=5'b00010; //shi=2

ge=5'b01010-count; //ge = 10-count

end

else //其它情况,ie count = 0

begin

shi=5'b00011; //shi=3

ge=5'b0; //ge = 0

end

end

//以下always过程块为蜂鸣器发声驱动电路

always@(posedge clk_1hz)

if(flag|(shi==0&&ge==0)) //flag==1,有人抢答成功

//shi==0&&ge==0,倒计时结束

begin //上述两种情况下蜂鸣器响一秒

if(count3==2'b1)

begin

beep<=0;

count3<=count3;

end

else

begin

beep<=1;

count3<=count3+2'b1;

end

end

else

begin

beep<=0;

count3<=0;

end

//以下always过程块是数码管动态刷新电路,动态显示倒计时信息(shi和ge)

always @(clk_1khz)

begin

if(!rst)

wei1 = 4'b0000;

else if(clk_1khz)

begin

wei1=4'b0111;

data=ge;

end

else

begin

wei1=4'b1011;

data=shi;

end

end

always @(data) //数字显示译码,共阳极数码管(duan1)

begin

case(data)

6'b000000: duan1=8'b1100_0000;

6'b000001: duan1=8'b1111_1001;

6'b000010: duan1=8'b1010_0100;

6'b000011: duan1=8'b1011_0000;

6'b000100: duan1=8'b1001_1001;

6'b000101: duan1=8'b1001_0010;

6'b000110: duan1=8'b1000_0010;

6'b000111: duan1=8'b1111_1000;

6'b001000: duan1=8'b1000_0000;

6'b001001: duan1=8'b1001_0000;

default:duan1=8'b1111_1111;

endcase

end

endmodule

很简单的

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

sbit fengmingqi=P0^0; //声明IO口

void delay(uint x)//延时子函数

{

uint i,j;

for(i=x;i>0;i--)

for(j=50;j>0;j--);

}

void main(void)

{

while(1) //循环

{

fengmingqi=1; //p00口高电平,蜂鸣器发声

delay(500); //延时

fengmingqi=0; //p00口低电平,蜂鸣器不发声

delay(500); //延时

}

}

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

sbit SPK=P1^0;

sbit K1=P1^7;

//发声函数,注意这里是用扬声器,不能用普通的蜂鸣器

void Alarm(uchar t)

{

uchari,j;

for(i=0;i<200;i++)

{

SPK=~SPK;

for(j=0;j<t;j++); //由参数t行成不同的频率产生不同的声音

}

}

voidmain()

{

SPK=0;

while(1)

{

if(K1==1)

{

Alarm(90);

Alarm(120);

}

}

}

以上就是关于求单片机设计8个led灯同时闪烁,并且led灯亮的时候控制蜂鸣器发生,led灯灭的时候关闭蜂鸣器的程序,谢谢全部的内容,包括:求单片机设计8个led灯同时闪烁,并且led灯亮的时候控制蜂鸣器发生,led灯灭的时候关闭蜂鸣器的程序,谢谢、plc中蜂鸣器长鸣一次程序、51单片机之蜂鸣器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9865457.html

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

发表评论

登录后才能评论

评论列表(0条)

保存