资源描述:
《FPGA防手抖键盘课程设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、针耳机科曇修配课程设计报告课程计算机组成原理题目基于ISE防手抖4*3键盘设计年级2009级专业计算机科学与技术学号09061059学生蓝潇莹任课教师罗铁祥2012年2月28日验收时间2012年2月28日星期二验收地点9栋308指导教师罗铁祥小组成员具体分工备注无基于ISE防手抖4*3键盘设计课程设计题目利用X订inx的ISE工具,用ver订og语言完成电路的定制,对时钟进行分频,防止手抖动时对于按键的影响。分别进行行列扫描,确定按键的位置,对4个7段显示器进行循环刷新,造成同时显示的现象。实验目的:1、通过此次实验对Spartan3芯片上的各个功能部件
2、,有更加深刻的理解。2、更加熟练的使用ver订og语言来编写能完成一定功能的硬件实验。3、通过这次实验,学会运用对时钟脉冲的分频来解决不用部件对时钟的不用需求。实验原理:1、8根线都接到FPGA的10±,其中4根“列”线配置成高阻态,4根行线配置成输入并且下拉(下拉可以内部配,也可以外接)。然后4根列线依次输出高电平1,同时查询4根行线,就知道哪一个按键被按下了。PIN1bbbdooaFror#a,qo"qq表264*3键盘引脚配置2、提供4个LED七段数码管,可显示数字,直接与FPGA相连•其控制方法为扫描式,如图所示,若要控制左边第一个七节灯管输出'
3、2,的字型,可以先输出”0010010”到CA~DP,然后输出”0111”到A1~A4即可.a.亡匕3匕段数码管段排列其控制方法为扫描式,若要控制左边第一个七段数码管输出'2,的字型,可以先输出”11011010”到CA~DP,然后输出”0111”到A1~A4即可.本实验基于的是Xilinx公司的Xilinx_ISE_DS_13.21、主程序部分modulelan(kbrow,scan,data,elk,rst,kbcol,seg7_out);output[3:0]kbrow;〃用于行扫描output[6:0]seg7_out;//用于七段显示器显示ou
4、tput[3:0]scan;〃用于七段显示器的定位output[3:0]data;//用于记录数据课题设计方案inputelk,rst;input[2:0]kbcol;//用于列扫描reg[3:0]data;reg[3:0]data_reg;reg[3:0]kbrow;reg[6:0]seg7_out;reg[3:0]scan;reg[1:0]sta;//用于循环扫描键盘reg[7:0]seg7;regcin;reg[l:0]count;//用于循环扫描七段显示器regclk_500khz;//分频后的时钟脉冲regflag;//有无按键寄存器reg[7
5、:0]ent;//用于分频循环次数regins;always©(posedgeelk)//分频开始beginif(!rst)cnt<=8,b0000_0000;elseif(cnt>=8,bllll_llll)elk500khz=~clk500khz;MB~~relsecnt〈二cnt+1;endalways^(posedgeclk_500khz)beginif(!rst)//复位begindata<=4,bOOOO;seg7<=,blllllll;scan<=4,blllO;ins<=rbO;flag<=l;endelsebegincase(scan)
6、//七段显示屏显示4fblllO:beginif(ins==l)scan<=4'bll01;elsescan〈二scan;end4'bll01:beginif(ins==l)scan<=4,blOll;elsescan<=scan;end4fbiOil:beginif(ins==l)scan〈=4,bOlll;elsescan<=scan;end4'b0111:beginif(ins==l)scan〈=4"blllO;elsescan<=scan;endendcasecount<=count+l;case(count)2'bOO://设置变量循环扫描键盘
7、beginkbrow<=,bl110;sta<=,bOOjend2'bOl:beginkbrow<=,bl101;sta<=,bOl;end2'blO:beginkbrow<=,blOll;sta<=,blO;end2'bll:beginkbrow<=,bOlll;sta<=,bll;endendcasecase(sta)//键盘扫描开始2fbOO:begincase(kbcol)3'bllO:beginseg7<=,bOOOOllO;data_reg<=4,bOOll;flag<=0;end3'bl01:beginseg7<=,bOOlOOlO;dat
8、a_reg<=4,bOOlO;flag<=0;end3'bOll:beginse