今天下午改了艾米的led闪烁的代码,下载到板子上。
想实现蜂鸣器响一秒,不响一秒的效果。
改了led寄存器
改了输出管脚(接在蜂鸣器上)
但是蜂鸣器没有实现蜂鸣器响一秒,不响一秒的效果。
而是响的时间相当短暂,不响的时间倒是有一秒!一直很不解!
不是每一秒信号翻转一次吗?
后来才发现原来蜂鸣器一直给1,一直给0,都是不响的!
是需要PWM来让它响的!
所以不能简单的拿LED闪烁的代码来驱动蜂鸣器!这样是不行的!
以下第一段代码是艾米LED闪烁的代码
第二段是Backkom写的,响一秒,不响一秒的代码!(还在理解中)奉上!!
第一段:
module led1 (clk ,led_show); // 模块名及端口参数
input clk; // 输入端口定义
output led_show;//[7:0]led; // 输出端口定义
reg led = 1'b0 ; // 输出端口定义为寄存器型
reg [25:0] buffer; // 中间变量buffer定义为寄存器型
always@(posedge clk)
begin // 顺序语句,到end止
buffer<=buffer+1'b1; // 计数器buffer按位加1
if(buffer==26'd25000000) //判别buffer中的数值为25000000时,
begin //做输出处理
led <= 1'b1;
end
else if(buffer==26'd50000000)
begin
led <=1'b0;
buffer<=0;
end
end
assign led_show = led;
endmodule
第二段:
module led1 (clk ,led_show);
input clk;
output led_show;
reg led, led1;
reg [25:0] buffer, buffer1;
always@(posedge clk)
begin
if(buffer<=26'd25000000) led<= led1 ;
else led<= 1'b0 ;
end
always@(posedge clk)
begin
buffer1<=buffer1+1'b1;
if(buffer1==26'd25000) begin led1 <= !led1 ; buffer1 <= 26'b0; end
end
always@(posedge clk)
begin
if(buffer<=26'd50000000) buffer<=buffer+1'b1;
else buffer <= 26'b0;
end
assign led_show = led;
endmodule