欢迎来到天天文库
浏览记录
ID:50496914
大小:33.00 KB
页数:3页
时间:2020-03-09
《电子技术综合设计教程 教学课件 作者袁小平 键盘防抖动.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、subdesignkeyscan(inclk,inscan[3..0]:input;outscan[3..0],outrsult[3..0],oe:output;)variablema[15..0],fp,delay[3..0]:dff;outrsult[3..0],st[2..0],outscan[3..0]:dff;mda[3..0],mdb[3..0]:node;begin(ma[],fp).clk=inclk;--分频器,将40MHz的inclk分到1000Hz(fp)ifma[]==1999thenma[]=0
2、;fp=!fp;elsema[]=ma[]+1;fp=fp;endif;(st[],delay[],outscan[],outrsult[]).clk=fp;casest[]iswhen0=>outscan[]=7;outrsult[]=outrsult[];--将扫描线置为”0111”st[]=1;when1=>foriin1to3generate--扫描线循环移位outscan[i]=outscan[i-1];outscan0=outscan3;endgenerate;st[]=2;outrsult[]=outrsu
3、lt[];when2=>outscan[]=outscan[];outrsult[]=outrsult[];ifinscan[]!=15thenst[]=3;--判断是否有键按下,若有跳到3,无跳回1elsest[]=1;endif;when3=>outscan[]=outscan[];outrsult[]=outrsult[];ifdelay[]==12thendelay[]=0;st[]=4;elseifinscan[]==15then--键按下延时去抖delay[]=0;elsedelay[]=delay[]+1;
4、endif;st[]=3;endif;when4=>outscan[]=outscan[];outrsult[]=outrsult[];if(!inscan[]==1)or(!inscan[]==2)or(!inscan[]==4)or(!inscan[]==8)thenst[]=5;--多键按下,丢弃elsest[]=1;endif;when5=>outscan[]=outscan[];outrsult[]=mda[]+mdb[];--取结果st[]=6;when6=>outrsult[]=outrsult[];ifd
5、elay[]==12thendelay[]=0;st[]=1;--按键释放去抖elseifinscan[]!=15thendelay[]=0;elsedelay[]=delay[]+1;endif;endif;oe=vcc;st[]=6;--输出指示(oe=vcc)endcase;table!(outscan[])=>mda[];1=>0;2=>1;4=>2;8=>3;endtable;table!(inscan[])=>mdb[];1=>0;2=>4;4=>8;8=>12;endtable;end;
此文档下载收益归作者所有