|
本帖最后由 HDL 于 2022-9-20 18:52 编辑
PWM载波:必须是超声波,占空比越高,音量越高。
蜂鸣器方波:低电平无载波,高电平有载波,不加载波没有控制音量的功能。
1Khz 蜂鸣器方波:500us低电平+500us高电平。
- `define fosc 50000000 //晶振频率
- module beep( //无源蜂鸣器频率音量发生器模块 (几个蜂鸣器就调用几个)
- input clk, //时钟输入
- input [14:0] hz, //频率 0~32767Hz (0静音)
- input [7:0] volum, //音量 0~255 (0静音 255最大)
- output out //无源蜂鸣器 (高电平触发,静音输出低电平)
- );
- reg beep;
- reg [7:0] j;
- assign out = beep & (j < volum);
- integer i = 0;
- always @(posedge clk) begin
- if(hz != 0 && volum != 0) begin
- i = i + 1;
- if(i >= `fosc/hz/2) begin
- i = 0;
- beep <= !beep;
- end
- end else begin
- i = 0;
- beep <= 0;
- end
- j = j + 1'b1;
- if(&j) begin
- j = 0;
- end
- end
- endmodule
- module main(
- input clk, //Pin17 50Mhz
- output beep //Pin40 无源蜂鸣器(高电平触发)
- );
- beep U1( //模块实例化
- .clk(clk),
- .hz(15'd1000), //频率
- .volum(8'd1), //音量
- .out(beep)
- );
- endmodule
复制代码 |
|