- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PWM调整LED亮度设计报告1
PWM调整LED亮度设计
一.实验任务
学习PWM原理,用Verilog硬件描述语言设计PWM逻辑电路,实现PWM信号占空比可调,通过按键调整PWM信号的占空比,将此PWM信号输出驱动LED,观察不同占空比时LED的亮度如何变化。
在实验箱上实现按键调整LED亮度,数码管显示PWM信号的占空比。
二.实验思路
首先给定一定计数周期T的标准时钟脉冲,然后定义另外一个计数器da来控制高低电平的占空比,使标准时钟变为一个高低电平占空比不一致的非标准脉冲,包含一个高电平、一个低电平,随着da的增大高电平的占空比随时间逐渐增大,低电平的占空比随时间逐渐减小,显示到二极管上即是二极管逐渐变亮。
电路原理框图参考:计数器c决定信号的周期,da决定高低电平的占空比。
实验步骤
分频模块给定标准时钟脉冲,产生相应的周期信号da:
module div_clkone(clr,clk,p,led,da);
input clr,clk;
input [7:0]p;
output led;
output [7:0]da;
reg [7:0]da;
reg led;
always@(negedge clr or posedge clk) begin
if(!clr) led=0;
else begin if(da==8h99) da=0;
else if(da==8h?9)da=da+4h7;
else da=da+1;
if(dap) led=1b1;
else led=1b0;
end
end
endmodule
由按键控制信号q,从而控制高低电平的占空比module buff(clr,clk,up,down,p);
input up,down,clr,clk;
output [7:0]p;
reg [7:0]p;
always@(negedge clr or posedge clk) begin
if(!clr) p=8h50;
else begin if(up) begin if(p==8h99) p=8h01;
else if(p==8h?9)p=p+4h7;
else p=p+1;end
else if(down) begin if(p==1) p=8h99;
else if(p==8h?0)p=p-4h7;
else p=p-1;end
end
end
endmodule
波形如图所示:
比较c和da,dac时二极管亮否则二极管灭:
if(!clr)led=0;
else if(cda)led=1;
else led=0;
数码管驱动和译码:
module scan(clk,q);
input clk;
output [2:0]q;
reg [2:0]q;
always @(posedge clk)
begin
q=q+1;
end
endmodule
module mux81(a,b,c,d,e,f,g,h,sel,out);
input [2:0]sel;
input [3:0]a,b,c,d,e,f,g,h;
output [3:0]out;
wire [3:0]out;
assign out= (sel==0)? a :
(sel==1)? b :
(sel==2)? c :
(sel==3)? d :
(sel==4)? e :
(sel==5)? f :
(sel==6)? g :h;
endmodule
module deled(in,a,b,c,d,e,f,g,dp);
input [3:0]in;
output a,b,c,d,e,f,g,dp;
wire a,b,c,d,e,f,g,dp;
assign {dp,a,b,c,d,e,f,g} =
(in==4b0000)? 8:
(in==4b0001)? 8:
(in==4b0010)? 8:
(in==4b0011)? 8:
(in==4b0100)? 8b
文档评论(0)