最新多功能手持数字示波表.docx
- 文档编号:1515787
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:26
- 大小:62.44KB
最新多功能手持数字示波表.docx
《最新多功能手持数字示波表.docx》由会员分享,可在线阅读,更多相关《最新多功能手持数字示波表.docx(26页珍藏版)》请在冰豆网上搜索。
最新多功能手持数字示波表
多功能手持数字示波表
软件设计
1.软件流程图
VerilogHDL和C语言程序相结合的软件流程图见图2。
图2软件流程图
2.软件设计
部分程序源码
频率计(VerilogHDL程序)
本程序主要用于测量出输入信号的频率。
采用等精度测量的方法,在整个测量范围内误差相同。
可以自动切换量程,指示数据小数点的位置和频率单位。
当输入信号频率过低时还能发出相应的指示信号,通知CPU做出相应控制。
通过适度的采样控制减小了测量误差。
modulefrequency(clk,ret,Fx_clr,Fxin,Fout,LF,spoint,flag_MK);
inputwireclk,ret;
inputwireFxin;//待测频率输入端口
inputwireFx_clr;//CPU的控制信号,控制频率计清零
outputreg[15:
0]Fout;//测得的频率值
outputregLF;//低频标志,高电平是表示为低频
outputreg[1:
0]spoint;//指示小数点的位置
outputreg[1:
0]flag_MK;//频率单位:
M标志K标志
wireFx_cph;
reg[7:
0]cp_ch;
regFend;//测频结束标志
regFsst;//控制本地标频开始计数的标志0:
开始计数
reg[39:
0]Ns;//对本地标频的计数
reg[23:
0]LFCH;//低频检测计数器,对底频率和直流做出警报和指示
reg[15:
0]Nx,Nx1;//对待测频率的计数,Nx1检测低频被测信号的暂存器
regs0,s1,s2,s3,s4,s5,s6,s7,s8,sx1000;
always@(posedgeclkornegedgeret)
if(!
ret)
begin
sx1000<=1'b0;
s0<=1'b0;
s1<=1'b0;
s2<=1'b0;
s3<=1'b0;
s4<=1'b0;
s5<=1'b0;
s6<=1'b0;
s7<=1'b0;
s8<=1'b0;
end
else
begin
sx1000<=(Nx>=1000);
s0<=(Ns==40'd100_0);
s1<=(Ns==40'd100_00);
s2<=(Ns==40'd100_000);
s3<=(Ns==40'd100_000_0);
s4<=(Ns==40'd100_000_00);
s5<=(Ns==40'd100_000_000);
s6<=(Ns==40'd100_000_000_0);
s7<=(Ns==40'd100_000_000_00);
s8<=(Ns>=40'd100_000_000_000);
end
always@(posedgeclkornegedgeret)
if(!
ret)
begin
Fend<=1'b0;
flag_MK<=2'b00;
spoint<=2'b00;
Fout<=16'h0000;
end
else
begin
if(Fend)Fend<=1'b0;
if(Fx_clr)Fend<=1'b1;
if(sx1000)
case({s0,s1,s2,s3,s4,s5,s6,s7,s8})//--F-sp-MK
9'b10_0000_000:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_01_10};
9'b01_0000_000:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_10_10};
9'b00_1000_000:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_11_10};
9'b00_0100_000:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_01_01};
9'b00_0010_000:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_10_01};
9'b00_0001_000:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_11_01};
9'b00_0000_100:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_01_00};
9'b00_0000_010:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_10_00};
9'b00_0000_001:
{Fout,Fend,spoint,flag_MK}<={Nx,5'b1_11_00};
endcase
end
always@(posedgeclkorposedgeFend)
if(Fend)
begin
LFCH<=24'h000000;
LF<=1'b0;
end
else
begin
LFCH<=LFCH+1'b1;
if(LFCH==24'd100_000_00)beginLF<=(Nx1==Nx);LFCH<=24'h000000;end
if(LFCH==24'd0)Nx1<=Nx;
end
always@(posedgeclkornegedgeret)
if(!
ret)Fsst<=1'b0;
elseif(Fx_cph)Fsst<=!
Fend;//边沿对齐
always@(posedgeclkorposedgeFend)
if(Fend)Ns<=40'h0000000000;
elseif(Fsst)Ns<=Ns+1'b1;
assignFx_cph=(cp_ch==8'b11110000);
always@(posedgeclkorposedgeFend)
if(Fend)cp_ch<=2'b00;
elsecp_ch<={cp_ch[7:
0],Fxin};
always@(posedgeclkorposedgeFend)
if(Fend)Nx<=16'h0000;
elseif(Fx_cph)Nx<=Nx+1'b1;
endmodule
6.3.2LCD控制器(VerilogHDL程序)
主要用于转换控制液晶的协议,加快CPU的写入和控制,可以做到两时钟并行周期访问。
内部有的PWM模块用于控制液晶的显示亮度,CPU只需要向相应的寄存器写入亮度控制数就能控制液晶的亮度。
moduleTFT_LCD_IP(
//ClcokInput时钟和复位
inputcsi_clk,
inputcsi_reset_n,
//Avalon-MMSlave总线的连接
inputavs_chipselect,
input[8:
0]avs_address,//[RS],[A2],[A1],[A0]
//3-----2----1----0位
inputavs_write,
input[31:
0]avs_writedata,
inputavs_read,
output[31:
0]avs_readdata,
//ip_TFT液晶的接口
output[15:
0]coe_lcd_data,
outputcoe_lcd_cs,
outputcoe_lcd_rs,
outputcoe_lcd_wr,
outputregcoe_lcd_pwm,
outputregcoe_lcd_res,
inputcoe_touch_int,
inputcoe_touch_dout,
outputregcoe_touch_din,
outputregcoe_touch_busy,
outputregcoe_touch_dclk,
outputregcoe_touch_cs
);
regdiv_se;
reg[19:
0]div_buf;//PWM的前置分频寄存器
reg[2:
0]count;//脉频计数器
reg[2:
0]pwm_buf;//占空比(0~7)
reg[31:
0]read_data;//总线从外界读取的数据寄存器
wirecheck;//中间检测信号
wireall_cs;
assignall_cs=(avs_address[7:
0]==8'h00);
//writetoip_TFTformNiosIIcpu
assigncheck=avs_write&all_cs;
assigncoe_lcd_wr=check?
1'b1:
1'b0;
assigncoe_lcd_cs=(avs_chipselect&all_cs)?
1'b0:
1'b1;
assigncoe_lcd_rs=avs_address[8];
assigncoe_lcd_data=(avs_chipselect&all_cs)?
avs_writedata[15:
0]:
16'hzzzz;
//使用一个时钟读取时,触摸板能读出正常数据,但是出现闪屏
assignavs_readdata=read_data;
always@(negedgecsi_clkornegedgecsi_reset_n)
begin
if(!
csi_reset_n)
begin
pwm_buf<=3'b111;
coe_lcd_res<=1'b1;
coe_touch_din<=1'b1;
coe_touch_busy<=1'b1;
coe_touch_dclk<=1'b1;
coe_touch_cs<=1'b1;
end
elseif(avs_chipselect&(!
all_cs))
begin
case(avs_address[7:
0])
8'b0000_0001:
pwm_buf<=avs_writedata[2:
0];
8'b0000_0010:
coe_lcd_res<=avs_writedata[0];
8'b0000_0100:
coe_touch_din<=avs_writedata[0];
8'b0000_1000:
coe_touch_busy<=avs_writedata[0];
8'b0001_0000:
coe_touch_dclk<=avs_writedata[0];
8'b0010_0000:
coe_touch_cs<=avs_writedata[0];
8'b0100_0000:
read_data[0]<=coe_touch_int;
8'b1000_0000:
read_data[0]<=coe_touch_dout;
endcase
end
end
always@(posedgecsi_clkornegedgecsi_reset_n)
begin
if(!
csi_reset_n)
begindiv_buf<=20'h00000;
div_se<=1'b0;
end
else
if(div_buf==20'd100000)
begindi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 多功能 手持 数字 示波表