实验报告课程名称电子系统设计实验项目名称LCD1602液晶控制实验实验类型设计实验学时4班级20120815学号2012081528姓名余章涛指导教师解武实验室名称497实验时间实验成绩实验过程实验报告总成绩教师签字日期频率计实验报告一.实验要求本实验测量了频率范围在10Hz-1MHz的频率,通过老师所提供的原始程序,在液晶显示屏上观察频率的范围,再通过Verilog语言将各个分模块合并,并且再次观察频率范围。任务一:下载原程序,观察液晶显示屏。任务二:编写Verilog语言,合并模块,下载并观察。二.实验原理本次实验可以采用电路连接(74160,74138,74244,74161,7446)来构成分频。写一些时钟脉冲进行频率控制。下载到试验箱可观察现象。1.Verilog语言编译频率计所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。若在一定的时间间隔T内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:f=N/T所以测量频率就要分别知道N和T的值,由此,测量频率的方法一般有三种:测频方法、测周方法和等精度测量。测频方法这种方法即已知时基信号(频率或周期确定)做门控信号,T为已知量,然后在门控信号有效的时间段内进行输入脉冲的计数。首先,被测信号①(以正弦波为例)经过放大整形后转变成方波脉冲②,其重复频率等于被测信号频率。把方波脉冲②加到闸门的输入端。由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号③去控制门控电路形成门控信号④,门控信号的作用时间T是非常准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的时间内,方波脉冲②才能通过闸门成为被计数的脉冲⑤由计数器计数。闸门开通的时间称为闸门时间,其长度等于门控信号作用时间T。例如,时间基准信号的重复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间——“闸门时间”为1S。在这一段时间内,若计数器计得N=100000个数,根据公式f=N/T,那么被测频率就是100000Hz。如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量范围和测量精度。2.分频器由于晶体振荡器提供的为48M的时钟,而在整个频率计里将用到周期为2s、0.2s和0.02s的闸门信号,还有译码显示的扫描信号1KHz,所以我们在此模块先分频产生1Hz、10Hz、100Hz、1KHz四个分频信号,以留作其它模块用。分频分别采用4个计数器来实现,当计到一定的值时输出的分频信号翻转,最后分别获得4个分频输出。3.闸门选择器该模块用按键主要实现对闸门的选择功能,,通过输入的门选信号来确定输出的闸门,并同时生成清零信号以及锁存信号。4.频率计数器频率计数器的功能为在输入的闸门信号的控制下对输入脉冲时行计数,它是一个六位的模十计数器,再加上一位溢出位。5.锁存器—译码器如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。译码模块在扫描信号的clk_1k的控制下,对多路选择器进行扫描,实现对实现对六位已经锁存的计数结果的扫描输出,由于人眼的视觉暂留效应,每支数码管只需大于25Hz的扫描频率即可实现动态扫描,所以我们用1KHz的扫描信号足以。led_khz为单位标志,如果led_khz为有效时,显示结果的单位为KHz,dp实现了小数点的显示。三.实验程序任务一:下载原程序,观察液晶显示屏。Do1:moduledo1(D,CLK,rst);inputCLK;inputrst;outputD;reg[23:0]COUNT12;regD;always@(posedgeCLK,negedgerst)if(!rst)beginCOUNT12=0;D=1'b0;endelsebeginif(COUNT12==24'd16666666)//if(COUNT12==10'b0000000101)beginD=1'b1;COUNT12=24'd0;endelsebeginCOUNT12=COUNT12+1;endendendmoduleDo2:moduledo2(D,CLK);inputCLK;outputD;reg[13:0]COUNT12;regD;always@(posedgeCLK)if(COUNT12==14'b10011100010000)//if(COUNT12==10'b0000000101)beginD=~D;COUNT12=14'b00000000000000;endelsebeginCOUNT12=COUNT12+1;endEndmoduleDo3:moduledo3(D,CLK,rst);inputCLK;inputrst;outputD;reg[25:0]COUNT12;regD;always@(posedgeCLK,negedgerst)if(!rst)beginCOUNT12=0;D=1'b0;endelsebeginif(COUNT12==26'd50000000)//if(COUNT12==10'b0000000101)beginD=1'b1;COUNT12=26'd0;endelsebeginCOUNT12=COUNT12+1;endendEndmodule任务二:编写Verilog语言,合并模块,下载并观察。(1)divclk.v分频器moduledivclk(clk,clk_10hz,clk_100hz,clk_1khz,clk_10khz);inputclk;outputregclk_10hz,clk_100hz,clk_1khz,clk_10khz;reg[29:0]counter1,counter2,counter3,counter4;initialbegincounter1=0;counter2=0;counter3=0;counter4=0;clk_10hz=0;clk_100hz=0;clk_1khz=0;clk_10khz=0;endalways@(posedgeclk)beginif(counter1==2400000)begincounter1=0;clk_10hz=~clk_10hz;endelsebegincounter1=counter1+1;endif(counter2==240000)begincounter2=0;clk_100hz=~clk_100hz;endelsebegincounter2=counter2+1;endif(counter3==24000)begincounter3=0;clk_1khz=~clk_1khz;endelsebegincounter3=counter3+1;endif(counter4==2400)begincounter4=0;clk_10khz=~clk_10khz;endelsebegincounter4=counter4+1;endendEndmodule(2)gatetest.v闸门选择器modulegatetest(clk_10hz,clk_100hz,clk_1khz,clk_10khz,key1,key2,key3,gate,load,clr_count,keycode);inputclk_10hz,clk_100hz,clk_1khz,clk_10khz;inputkey1,key2,key3;outputreggate,load,clr_count;outputreg[1:0]keycode;regfre10;reg[3:0]lat;initialbeginfre10=0;gate=1;load=1;clr_count=0;lat=0;endalways@(posedgeclk_10khz)beginif((key1==0)&&(key2==1)&&(key3==1))beginfre10=clk_10hz;keycode=0;endelseif((key1==1)&&(key2==0)&&(key3==1))beginfre10=clk_100hz;keycode=1;endelseif((key1==1)&&(key2==1)&&(key3==0))beginfre10=clk_1khz;keycode=2;endelsebeginfre10=0;endendalways@(posedgefre10)beginlat=lat+1;gate=(lat10);load=(lat==11);clr_count=(lat==13);endendmodule(3)counter.v频率计数器modulecounter(reset,clk2,gate,clr_count,cnt0,cnt1,cnt2,cnt3,cnt4,cnt5,ove,keycode);inputreset,clk2,gate,clr_count;input[1:0]keycode;outputreg[3:0]cnt0,cnt1,cnt2,cnt3,cnt4,cnt5;outputregove;initialbegincnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=0;cnt5=0;ove=1;endalways@(posedgeclk2)beginif(!reset)begincnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=0;cnt5=0;endelsebeginif(clr_count)begincnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=0;cnt5=0;ove=1;endelsebeginif(gate==1)beginif((cnt5==9)&&(cnt4==9)&&(cnt3==9)&&(cnt2==9)&&(cnt1==9)&&(cnt0==9))begincnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=0;cnt5=0;if(keycode==0)ove=0;endelsebeginif((cnt4==9)&&(cnt3==9)&&(cnt2==9)&&(cnt1==9)&&(cnt0==9))begincnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=0;cnt5=1+cnt5;if(keycode==1)ove=0;endelsebeginif((cnt3==9)&&(cnt2==9)&&(cnt1==9)&&(cnt0==9))begincnt0=0;cnt1=0;cnt2=0;cnt3=0;cnt4=1+cnt4;cnt5=cnt5;if(keycode==2)ove=0;endelsebeginif((cnt2==9)&&(cnt1==9)&&(cnt0==9))begincnt0=0;cnt1=0;cnt2=0;cnt3=1+cnt3;cnt4=cnt4;cnt5=cnt5;endelsebeginif((cnt1==9)&&(cnt0==9))begincnt0=0;cnt1=0;cnt2=1+cnt2;cnt3=cnt3;cnt4=cnt4;cnt5=cnt5;endelsebeginif((cnt0==9))begincnt0=0;cnt1=1+cnt1;cnt2=cnt2;cnt3