多功能手持数字示波表.doc

上传人:sk****8 文档编号:3177432 上传时间:2019-05-24 格式:DOC 页数:30 大小:161.50KB
下载 相关 举报
多功能手持数字示波表.doc_第1页
第1页 / 共30页
多功能手持数字示波表.doc_第2页
第2页 / 共30页
多功能手持数字示波表.doc_第3页
第3页 / 共30页
多功能手持数字示波表.doc_第4页
第4页 / 共30页
多功能手持数字示波表.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、软件设计1 .软件流程图Verilog HDL 和 C 语言程序相 结合的软件流程图见图 2。图 2 软件流程图2 . 软件设计部分程序源码频率计(Verilog HDL 程序)本程序主要用于测量出输入信号的频率。采用等精度测量的方法,在整个测量范围内误差相同。可以自动切换量程,指示数据小数点的位置和频率单位。当输入信号频率过低时还能发出相应的指示信号,通知 CPU 做出相应控制。通过适度的采样控制减小了测量误差。module frequency(clk,ret,Fx_clr,Fxin,Fout,LF,spoint,flag_MK); input wire clk,ret; input wir

2、e Fxin; /待测频率输入端口input wire Fx_clr; /CPU 的控制信号,控制频率计清零output reg 15:0Fout; /测得的频率值output reg LF; /低频标志,高电平是表示为低频output reg 1:0spoint; /指示小数点的位置output reg 1:0flag_MK; /频率单位:M 标志 K 标志 wire Fx_cph;reg 7:0cp_ch;reg Fend; /测频结束标志reg Fsst; /控制本地标频开始计数的标志 0:开始计数 reg 39:0Ns; /对本地标频的计数reg 23:0LFCH; /低频检测计数器,

3、对底频率和直流做出警报和指示reg 15:0Nx,Nx1; /对待测频率的计数,Nx1 检测低频被测信号的暂存器reg s0,s1,s2,s3,s4,s5,s6,s7,s8,sx1000;always(posedge clk or negedge ret)if(!ret) begin sx1000=1000);s0=40d100_000_000_000); endalways(posedge clk or negedge ret)if(!ret) begin Fend=1b0;flag_MK=2b00;spoint=2b00;Fout=16h0000;endelse begin if(Fend

4、) Fend=1b0; if(Fx_clr) Fend=1b1; if(sx1000) case(s0,s1,s2,s3,s4,s5,s6,s7,s8) /-F-sp-MK9b10_0000_000:Fout,Fend,spoint,flag_MK=Nx,5b1_01_10;9b01_0000_000:Fout,Fend,spoint,flag_MK=Nx,5b1_10_10;9b00_1000_000:Fout,Fend,spoint,flag_MK=Nx,5b1_11_10;9b00_0100_000:Fout,Fend,spoint,flag_MK=Nx,5b1_01_01;9b00_0

5、010_000:Fout,Fend,spoint,flag_MK=Nx,5b1_10_01;9b00_0001_000:Fout,Fend,spoint,flag_MK=Nx,5b1_11_01;9b00_0000_100:Fout,Fend,spoint,flag_MK=Nx,5b1_01_00;9b00_0000_010:Fout,Fend,spoint,flag_MK=Nx,5b1_10_00;9b00_0000_001:Fout,Fend,spoint,flag_MK=Nx,5b1_11_00;endcaseendalways(posedge clk or posedge Fend)i

6、f(Fend) begin LFCH=24h000000;LF=1b0;endelse begin LFCH=LFCH+1b1;if(LFCH=24d100_000_00) begin LF=(Nx1=Nx); LFCH=24h000000; endif(LFCH=24d0) Nx1=Nx;endalways(posedge clk or negedge ret)if(!ret) Fsst=1b0;else if(Fx_cph) Fsst=!Fend; /边沿对齐always(posedge clk or posedge Fend)if(Fend) Ns=40h0000000000;else

7、if(Fsst) Ns=Ns+1b1;assign Fx_cph=(cp_ch=8b11110000); always(posedge clk or posedge Fend)if(Fend) cp_ch=2b00;else cp_ch=cp_ch7:0,Fxin;always(posedge clk or posedge Fend) if(Fend) Nx=16h0000; else if(Fx_cph) Nx=Nx+1b1; endmodule6.3.2 LCD 控制器(Verilog HDL 程序)主要用于转换控制液晶的协议,加快 CPU 的写入和控制,可以做到两时钟并行周期访问。内部有

8、的 PWM 模块用于控制液晶的显示亮度,CPU 只需要向相应的寄存器写入亮度控制数就能控制液晶的亮度。module TFT_LCD_IP(/ Clcok Input 时钟和复位input csi_clk,input csi_reset_n,/ Avalon-MM Slave 总线的连接input avs_chipselect,input 8:0 avs_address, /RS,A2,A1,A0/ 3-2-1-0 位 input avs_write,input 31:0 avs_writedata,input avs_read, output 31:0 avs_readdata, / ip_T

9、FT 液晶的接口output 15:0coe_lcd_data,output coe_lcd_cs,output coe_lcd_rs,output coe_lcd_wr,output reg coe_lcd_pwm,output reg coe_lcd_res,input coe_touch_int,input coe_touch_dout,output reg coe_touch_din,output reg coe_touch_busy,output reg coe_touch_dclk,output reg coe_touch_cs);reg div_se;reg 19:0 div_b

10、uf; /PWM 的前置分频寄存器reg 2:0 count; /脉频计数器reg 2:0 pwm_buf; /占空比(07)reg 31:0 read_data;/总线从外界读取的数据寄存器wire check; /中间检测信号 wire all_cs;assign all_cs=(avs_address7:0=8h00);/ write to ip_TFT form NiosII cpuassign check=avs_write assign coe_lcd_wr=check? 1b1:1b0;assign coe_lcd_cs=(avs_chipselect assign coe_lc

11、d_rs=avs_address8;assign coe_lcd_data=(avs_chipselect /使用一个时钟读取时,触摸板能读出正常数据,但是出现闪屏assign avs_readdata=read_data;always(negedge csi_clk or negedge csi_reset_n) beginif (!csi_reset_n)begin pwm_buf=3b111;coe_lcd_res=1b1; coe_touch_din=1b1;coe_touch_busy=1b1;coe_touch_dclk=1b1;coe_touch_cs=1b1;endelse i

12、f(avs_chipselect 8b0000_0010:coe_lcd_res=avs_writedata0;8b0000_0100:coe_touch_din = avs_writedata0;8b0000_1000:coe_touch_busy = avs_writedata0;8b0001_0000:coe_touch_dclk = avs_writedata0;8b0010_0000:coe_touch_cs = avs_writedata0;8b0100_0000: read_data0= coe_touch_int;8b1000_0000: read_data0= coe_tou

13、ch_dout;endcaseendendalways(posedge csi_clk or negedge csi_reset_n)beginif (!csi_reset_n) begin div_buf=20h00000;div_se=1b0;endelse if(div_buf=20d100000) begin div_buf=20h00000;div_se=1b1;endelse begin div_buf=div_buf+1b1; /计数器计满自动清零div_se=1b0;endendalways(posedge csi_clk or negedge csi_reset_n)begi

14、nif (!csi_reset_n) begin coe_lcd_pwm=1b1;count=3b000;endelse begin if(count=pwm_buf) coe_lcd_pwm=1b0; /遇到与脉宽调制器相同时,输出管脚清零else if(count=3b000) coe_lcd_pwm=1b1; /计满时对管脚置一if(div_se) count=count+1b1; /计数器计满自动清零endend endmodule触摸板控制程序(Verilog HDL 程序)主要用于转换触摸板 AD 的串行协议,使 CPU 能够对其进行并行控制。它在很大程度上减小了 CPU 检测触点

15、的难度,加快了软件的运行速度,避免了高速运行的 CPU 使用延时降低速度去控制低速的触摸板串行 AD 的情况。Module touch_contrl_IP(ret,clk,address,read,readdata,dint,busy,dclk,dcs,dout,din);/-Avalon-MM IO-input ret,clk;input 1:0address;input read;output reg11:0 readdata;/-Avalon-MM 要读出的数据reg 11:0txdata,tydata; /触点的 XY 轴坐标 reg CEND; /触摸板总读写结束标志/-内部逻辑 I

16、O-input dint; /触摸板按下指示管脚input busy; /触摸芯片忙指示脚input dout; /触摸芯片转换的数据output reg dclk; /送给触摸芯片的时钟output reg dcs; /触摸芯片的片选output reg din; /送给触摸芯片的数据脚parameter CHX=8h90,CHY=8hd0;reg declk; /延时后的时钟信号reg 15:0delay; /时钟延时reg 7:0count; /运行计数器reg 7:0CHbuf; /通道选择寄存器reg 7:0wsbuf; /写入数据的寄存器reg 11:0rbuf; /读出数据的寄存器reg 1:0dstate; /通道选择状态寄存器reg 3:0state; /状态控制寄存器reg wr_cs; /写读使能标志位reg wr_end; /数据写读结束标志位/-三态总线接口-always(posedge clk or negedge ret)if(!ret) readdata=12h00000;else if(read) case(address)2d0:readdata0=CEND;2d1:readdata=txdata;2d2:readdata=tydata;default:readdata=CEND;endcase

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。