您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子表微控器设计FPGA课程设计报告
西安邮电学院FPGA课程设计报告题目:电子表微控器设计院系:电子工程学院专业班级:微电子0901学生姓名:邢青青导师姓名:黄海生起止时间:2012/6/18至2012/6/29年月日基于FPGA的电子表微控器设计一实验目的:设计一个简单的电子表微控器。用FPGA开发板的按键作为电子表的时间初值设置控制信号,数码管当前时间值输出。用按键选择分别输出:分、秒、1/10秒。二功能描述:1用开发板的拨码开关作为电子表时间初值设置控制信号,首先设置初始时间,并用数码管显示出当前时间,共用5个数码管,分别显示分,秒,和1/10秒,其中,分和秒均用两个数码管表示高低位,1/10秒用一个数码管表示。2当复位信号有效时(复位信号低有效),系统清零,并且将所有时间都清零,不管是显示状态还是调整状态。3拨码开关是总控制开关,为低时才可以修改即设置新时间,为高是显示当前时间,包括修改后的时间。4按键1是1/10秒的初值设置和修改控制键。5按键2是秒的初值设置和修改控制键。6按键3是分的初值设置和修改控制键。7用数码管显示开始和修改后的时间。8结构框图:三输入输出信号描述:其中:Clk:输入信号,系统时钟,为50MHZ。Reset:异步复位信号,当下降沿来临时有效,此时系统清零,所有输出均为0。Key:模式选择键,用拨码开关实现。当为低电平时,修改当前时间;当为高电平时,输出并用数码管显示当前时间。此操作在复位端无效时进行,若复位端有效,则输出和显示均为0。Button1:输入信号,按键1是1/10秒的初值设置和修改控制键,当满10后进一。Button2:输入信号,按键2是秒的初值设置和修改控制键,当满60后进一。Button3:输入信号,按键3是分的初值设置和修改控制键,当满60后进一。Clk1,2:内部输出信号,为分频后的输出时钟,clk1控制按键消抖模块,clk2控制时钟显示模块。Fen:内部变量,分的输出。Miao:内部变量,秒的输出。1/10miao:,内部变量,用于1/10秒的输出。Count:用于计数。LED:是八位输出,用于显示时间。其中分和秒的显示均用两个数码管,一个显示高位,一个显示低位,当低位显示到9时,向高位进一,直到高位为6时清零。而1/10秒特用两个数码管分别输出,同样低位为9时向秒位进一,1/10秒的数码管清零。四功能模块描述:1根据设计思想,大体要分以下几个模块,顶层结构框图如图:2顶层模块划分:(1)时钟模块:a在这个模块中有1/10秒,秒,分,通过这几个时间来反映做出来的电子表,用板子里面的50MHZ产生出10HZ的分频(即0.1秒)作为1/10秒,从而进行计时。b初值设置开关(总开关):总开关用拨码开关控制,当拨到低电平(0)时,1/10秒,秒,分都停止,开始修改时间;当拨到高电平(1)时,说明时间设置完毕,时钟开始正常显示和计时。按键1(修改1/10秒):按一次,1/10秒加1,加到10清零。按键2(修改秒):按一次,秒加1,加到60清零。按键3(修改分):按一次,分加1,加到60清零。(2)按键消抖模块:这个模块完成的是按键的消抖,使用系统自带50MHZ时钟分频得到的25MHZ,再进行按键采样,人一般的反应时间在50ms左右,所以采样的计数设置为25MHZ*50ms。(3)LED显示模块:将计时模块所计数,输出到LED的输入端,从而来控制LED灯的显示,即对应的哪一段该亮那一段该灭,以此来显示时间。(4)时钟分频模块:将板子的50MHZ时钟经过分频,从而得到10HZ时钟,用于电子表计时,分频得到25MHZ,用于按键消抖模块时对按键采样的频率。3子模块详细设计:(1)键盘模块设计:Key:用它作为时钟的总开关,拨码开关,当它低电平(0)有效时,开始设置电子表的初值,否则,显示当前时间。当按键1为1时显示1/10秒,当按键2为1时显示秒,当按键3为1时显示分。Reset:作为电子表的复位,当它为低电平时,把电子表的1/10秒,秒,分清零。Button1:作为1/10秒的初值设置控制键(每按键一次,1/10秒加1,到9时在返回到0并且向秒进位1)。Button2:作为秒的初值设置和修改控制键(每按键一次,秒加1,累加到59时,返回到0并且向分进位1)。Button3:作为分的初值设置和修改控制键(每按键一次,分加1,累加到59时返回到0)。(2)时钟模块设计:1.利用板子中晶振产生的50MHZ频率,把它分频成0.1秒即10HZ。2.上面分频得到的0.1秒就是电子表的最小时间单位,当1/10秒从0开始走到9时,向秒进位1的同时,从9跳转到0,重新开始从零计时。3.秒从0开始计数,当从1/10秒得到进位时,秒加1,直到计数计到59时,向分进位1的同时,从59跳转到0,重新开始从零计时。4.分从0开始计数,当从秒得到进位时,分加1,直到计数计到59时,跳转到0,从零开始重新计时。(3)LED数码管显示模块:首先显示初值1/10秒,秒,分,如果有修改,那么LED液晶显示当前的时间值。数码管编码:输入输出01000000111110012010010030110000400110115001001060000010711110008000000090010000其他xxxxxxx五程序清单:1分频器:(1)源代码:modulefenpinqi(clk,clk1,clk2,reset);inputclk,reset;outputclk1,clk2;regclk1,clk2;reg[22:0]count1;Reg[1:0]count2;always@(posedgeclkornegedgereset)//clk1beginif(!reset)begincount1=0;clk1=0;endelsebeginif(count1[22:0]==23'd2499999)begincount1=0;clk1=~clk1;endelsebegincount1[22:0]=count1[22:0]+1'b1;endendEndalways@(posedgeclkornegedgereset)//clk2beginif(!reset)beginCount2=0;Clk2=0;endelsebeginif(count2[1:0]==2'd2)beginCount2=0;Clk2=~clk2;endelsebeginCount2[1:0]=count2[1:0]+1'b1;endendendendmodule(2)分频时钟:Clk12时钟显示:代码:moduleclock(reset,clk1,key,button1,button2,button3,fen,miao,one_miao);inputclk1,reset;inputbutton1,button2,button3,key;output[7:0]fen,miao;output[3:0]one_miao;reg[7:0]fen,miao;reg[3:0]one_miao;always@(posedgeclk1ornegedgereset)//reset?????beginif(!reset)beginone_miao=0;fen=0;miao=0;endelse//reset??//reset=1beginif(key)//key=1beginone_miao[3:0]=one_miao[3:0]+1'b1;if(one_miao[3:0]==4'd9)beginone_miao[3:0]=0;miao[3:0]=miao[3:0]+1'b1;if(miao[3:0]==4'd9)beginmiao[3:0]=0;miao[7:4]=miao[7:4]+1'b1;if(miao[7:4]==7'd5)beginmiao[6:0]=0;fen[3:0]=fen[3:0]+1'b1;if(fen[3:0]==4'd9)beginfen[3:0]=0;fen[7:4]=fen[7:4]+1'b1;if(fen[7:4]==4'd5)beginfen[7:4]=0;miao=0;one_miao=0;endendendendendend////else//????elsekey,tiaozhengbeginif(!button1)//beginone_miao[3:0]=one_miao[3:0]+1'b1;if(one_miao[3:0]==4'd9)beginone_miao[3:0]=0;miao[3:0]=miao[3:0]+1'b1;endendif(!button2)beginmiao[3:0]=miao[3:0]+1'b1;if(miao[3:0]==4'd9)beginmiao[3:0]=0;miao[7:4]=miao[7:4]+1'b1;if(miao[7:4]==4'd5)beginmiao[7:0]=0;fen[3:0]=fen[3:0]+1'b1;endendendif(!button3)beginfen[3:0]=fen[3:0]+1'b1;if(fen[3:0]==4'd9)beginfen[3:0]=0;fen[7:4]=fen[7:4]+1'b1;if(fen[7:4]==4'd5)beginfen[7:4]=0;miao=0;one_miao=0;endendendendend//endkeyendendmodule3数码管显示:代码:moduleshumaguan1(dec_in1,dec_out1);input[3:0]dec_in1;output[6:0]dec_out1;reg[6:0]dec_out1;always@(dec_in1[3:0])begincase(dec_in1[3:0])4'd0:dec_out1=7'b1000000;4'd1:dec_out1=7'b1111001;4'd2:dec_out1=7'b0100100;4'd3:dec_out1=7'b0110000;4'd4:dec_out1=7'b0011001;4'd5:dec_out1=7'b0010010;4'd6:dec_out1=7'b0000010;4'd7:dec_out1=7'b1111000;4'd8:dec_out1=7'b0000000;4'd9:dec_out1=7'b0010000;default:dec_out1=7'bx;endcaseendendmodule共用5个同样的数码管,显示分,秒,和1/10秒。数码管波形:4按键消抖模块:modulekey(clk2,key_in,key_out);inputclk2;//50MHzclockininputkey_in;outputkey_out;reg[22:0]count_high;reg[22:0]count_low;regkey_reg;assignkey_out=key_reg;always@(posedgeclk2)//if(key_in==1'b0)count_low=count_low+1;elsecount_low=23'h00_0000;always@(posedgeclk2)//if(key_in==1'b1)count_high=count_high+1;elsecount_high=23'h00_0000;always@(posedgeclk2)//beginif(count_high==23'h25_0000)key_reg=1'b1;elseif(count_low==23'h25_0000)key_reg=1'b0;elsekey_reg=key_reg;endendmodule5顶层模块:moduletop(reset,clk,key,button1,button2,button3,dec_out1,dec_out2,dec_out3,dec_o
本文标题:电子表微控器设计FPGA课程设计报告
链接地址:https://www.777doc.com/doc-2254114 .html