多功能手持数字示波表Word.docx

上传人:b****1 文档编号:1471541 上传时间:2022-10-22 格式:DOCX 页数:26 大小:62.19KB
下载 相关 举报
多功能手持数字示波表Word.docx_第1页
第1页 / 共26页
多功能手持数字示波表Word.docx_第2页
第2页 / 共26页
多功能手持数字示波表Word.docx_第3页
第3页 / 共26页
多功能手持数字示波表Word.docx_第4页
第4页 / 共26页
多功能手持数字示波表Word.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

多功能手持数字示波表Word.docx

《多功能手持数字示波表Word.docx》由会员分享,可在线阅读,更多相关《多功能手持数字示波表Word.docx(26页珍藏版)》请在冰豆网上搜索。

多功能手持数字示波表Word.docx

多功能手持数字示波表Word

软件设计

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)

begindiv_buf<=20'h00

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1