通用文档cpld矩阵键盘doc.docx
- 文档编号:29562858
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:16
- 大小:63.36KB
通用文档cpld矩阵键盘doc.docx
《通用文档cpld矩阵键盘doc.docx》由会员分享,可在线阅读,更多相关《通用文档cpld矩阵键盘doc.docx(16页珍藏版)》请在冰豆网上搜索。
通用文档cpld矩阵键盘doc
矩阵键盘实验
一.实验目的:
1.了解4*4矩阵键盘的工作原理。
2.掌握利用行列扫描法读取按键信息及软件消抖的方法。
3.熟悉掌握VHDL语言和QUARTUS2软件的使用。
4.理解状态机的工作原理和设计方法。
5.掌握利用EDA工具进行自顶向下的电子系统设计方法。
二.实验任务
设计制作一个检测4*4矩阵键盘的按键编码的实验,把实际按键的键值的八位编码先转换成从0000—1111的编码,再译成数码管能识别的八位编码,在数码管动态显示时,4*4矩阵键盘的第一行对应00—03,第二行对应04—07,第三行08—11,第四行对应12—15。
三.实验原理:
1.键盘的工作原理:
按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V电源上。
无按键按下时,行线处于高电平的状态,而当有按键按下时,行线电平与此行线相连的列线电平决定。
2.行列扫描法原理:
第一步,使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
第二步,在第一步判断有键按下后,延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下一步,否则返回第一步重新判断。
第三步,开始扫描按键位置,采用逐行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。
第四步,从寄存器中找到行值和列值并把其合并,得到按键值,对次按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000”至“1111”,再进行译码,最后显示按键号码。
3.数码管动态扫描原理:
数码管的7个段及小数点都是由LED块组成的,显示方式分为静态显示和动态显示两种。
数码管在静态显示方式时,其共阳管的位选信号均为低电平,四个数码管的共用段选线a、b、c、d、e、f、g、dp分别与CPLD的8根I/O口线相连,显示数字时只要给相应的段选线送低电平。
数码管在动态显示方式时,在某一时刻只能有一个数码管被点亮显示数字,其余的处于非选通状态,位选码端口的信号改变时,段选码端口的信号也要做相应的改变,每位显示字符停留显示的时间一般为1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定的数字显示。
四、实验模块电路图及引脚分配
1.矩阵键盘电路图:
(矩阵键盘电路图)
2.数码管电路图:
(数码管电路图)
3.引脚分配:
(1)矩阵键盘:
器件引脚标号
CPLD与引脚此连接引脚号
L1
61
L2
60
L3
58
L4
57
H1
67
H2
65
H3
64
H4
63
(2)数码管:
器件引脚标号
CPLD与此引脚连接引脚号
A
12
B
15
C
16
D
17
E
18
F
20
G
21
DP
22
M1
24
M2
25
M3
27
M4
28
M5
29
M6
30
五、实验步骤:
1.启动Quartus2,新建一个*.vhd文件,通过硬件描述语言VHDL来编写矩阵键盘扫描实验程序。
2.保存文件,编译并检查语法错误。
3.利用Quartus2进行波形仿真,验证所编写的程序是否正确,如果错误,进行相应的修改。
4.把输入、输出量分配给相应的引脚,重新编译。
5.由并口线将计算机与实验板连接在一起,由软件的下载部分将*.pof
下载芯片中。
6.把三挡开关打到7128挡,进行实验验证并观察实验现象。
7.整理实验内容,加深对实验的理解,并写下自己的心得,整理实验器材。
六、实验程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYKEY4_4IS
PORT(CLR,CLK:
INSTD_LOGIC;--CLK40M
H:
INSTD_LOGIC_VECTOR(1TO4);
L:
OUTSTD_LOGIC_VECTOr(1TO4);
SEL:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
LED8D:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYKEY4_4;
ARCHITECTUREARTOFKEY4_4IS
TYPESTIS(S0,S1,S2,S3,S4,S5,S6,S7);
SIGNALS:
ST;
SIGNALCLK1K,CLK10K:
STD_LOGIC;
SIGNALEN:
STD_LOGIC;
SIGNALCNT:
INTEGERRANGE0TO9;
SIGNALD1,D0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALD:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
CLKDIV_1K:
PROCESS(CLR,CLK)
VARIABLECNT:
INTEGERRANGE0TO39999;
VARIABLENCLK:
STD_LOGIC;
BEGIN
IFCLR='1'THEN
CNT:
=0;
NCLK:
='0';
ELSIFCLK'EVENTANDCLK='1'THEN
IFCNT=39999THEN
CNT:
=0;
NCLK:
='1';
ELSE
CNT:
=CNT+1;
NCLK:
='0';
ENDIF;
ENDIF;
CLK1K<=NCLK;
ENDPROCESSCLKDIV_1K;
CLKDIV_10K:
PROCESS(CLR,CLK)
VARIABLECNT:
INTEGERRANGE0TO3999;
VARIABLENCLK:
STD_LOGIC;
BEGIN
IFCLR='1'THEN
CNT:
=0;
NCLK:
='0';
ELSIFCLK'EVENTANDCLK='1'THEN
IFCNT=3999THEN
CNT:
=0;
NCLK:
='1';
ELSE
CNT:
=CNT+1;
NCLK:
='0';
ENDIF;
ENDIF;
CLK10K<=NCLK;
ENDPROCESSCLKDIV_10K;
SM_YS_JSQ:
PROCESS(EN,CLK1K)
VARIABLECOUNT:
INTEGERRANGE0TO9;
BEGIN
IFEN='1'THEN
COUNT:
=0;
ELSIFCLK1K'EVENTANDCLK1K='1'THEN
IFCOUNT=9THEN
COUNT:
=0;
ELSE
COUNT:
=COUNT+1;
ENDIF;
ENDIF;
CNT<=COUNT;
ENDPROCESSSM_YS_JSQ;
SM_KEY:
PROCESS(CLR,CLK10K,H)
VARIABLEEN0:
STD_LOGIC;
VARIABLEL0,KH0,KL0:
STD_LOGIC_VECTOR(1TO4);
VARIABLEJZ0:
STD_LOGIC_VECTOR(7DOWNTO0);
VARIABLEKHL0:
STD_LOGIC_VECTOR(1TO8);
BEGIN
IFCLR='1'THEN
EN0:
='1';
S<=S0;
ELSIFCLK10K'EVENTANDCLK10K='1'THEN
CASESIS
WHENS0=>L0:
="0000";EN0:
='1';
IFH/="1111"THEN
S<=S1;
ELSE
S<=S0;
ENDIF;
WHENS1=>EN0:
='0';
IFCNT=9THEN
S<=S2;
ELSE
S<=S1;
ENDIF;
WHENS2=>EN0:
='1';
IFH/="1111"THEN
S<=S3;
ELSE
S<=S0;
ENDIF;
WHENS3=>EN0:
='0';
CASECNTIS
WHEN1=>L0:
="0111";
WHEN2=>
IFH/="1111"THEN
KH0:
=H;
KL0:
="0111";
S<=S4;
ELSE
S<=S3;
ENDIF;
WHEN3=>L0:
="1011";
WHEN4=>
IFH/="1111"THEN
KH0:
=H;
KL0:
="1011";
S<=S4;
ELSE
S<=S3;
ENDIF;
WHEN5=>L0:
="1101";
WHEN6=>
IFH/="1111"THEN
KH0:
=H;
KL0:
="1101";
S<=S4;
ELSE
S<=S3;
ENDIF;
WHEN7=>L0:
="1110";
WHEN8=>
IFH/="1111"THEN
KH0:
=H;
KL0:
="1110";
S<=S4;
ELSE
S<=S3;
ENDIF;
WHENOTHERS=>NULL;
ENDCASE;
WHENS4=>EN0:
='1';
KHL0:
=KH0&KL0;
S<=S5;
WHENS5=>EN0:
='1';
CASEKHL0IS
WHEN"01110111"=>JZ0:
="00000000";
WHEN"01111011"=>JZ0:
="00000001";
WHEN"01111101"=>JZ0:
="00000010";
WHEN"01111110"=>JZ0:
="00000011";
WHEN"10110111"=>JZ0:
="00000100";
WHEN"10111011"=>JZ0:
="00000101";
WHEN"10111101"=>JZ0:
="00000110";
WHEN"10111110"=>JZ0:
="00000111";
WHEN"11010111"=>JZ0:
="00001000";
WHEN"11011011"=>JZ0:
="00001001";
WHEN"11011101"=>JZ0:
="00010000";
WHEN"11011110"=>JZ0:
="00010001";
WHEN"11100111"=>JZ0:
="00010010";
WHEN"11101011"=>JZ0:
="00010011";
WHEN"11101101"=>JZ0:
="00010100";
WHEN"11101110"=>JZ0:
="00010101";
WHENOTHERS=>NULL;
ENDCASE;
IFH="1111"THEN
S<=S6;
ELSE
S<=S5;
ENDIF;
WHENS6=>EN0:
='0';
IFCNT=9THEN
S<=S7;
ELSE
S<=S6;
ENDIF;
WHENS7=>EN0:
='1';
IFH="1111"THEN
S<=S0;
ELSE
S<=S6;
ENDIF;
ENDCASE;
ENDIF;
EN<=EN0;
L<=L0;
D1<=JZ0(7DOWNTO4);
D0<=JZ0(3DOWNTO0);
ENDPROCESSSM_KEY;
SHOW:
PROCESS(CLK10K,D1,D0)
VARIABLECNT:
INTEGERRANGE0TO3;
VARIABLEQ:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEWEI:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
IFCLK10K'EVENTANDCLK10K='1'THEN
CNT:
=CNT+1;
CASECNTIS
WHEN0=>WEI:
="111110";Q:
=D0;
WHEN2=>WEI:
="111101";Q:
=D1;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
D<=Q;
SEL<=WEI;
ENDPROCESSSHOW;
YM:
PROCESS(D)
BEGIN
CASEDIS
WHEN"0000"=>LED8D<=X"C0";
WHEN"0001"=>LED8D<=X"F9";
WHEN"0010"=>LED8D<=X"A4";
WHEN"0011"=>LED8D<=X"B0";
WHEN"0100"=>LED8D<=X"99";
WHEN"0101"=>LED8D<=X"92";
WHEN"0110"=>LED8D<=X"82";
WHEN"0111"=>LED8D<=X"F8";
WHEN"1000"=>LED8D<=X"80";
WHEN"1001"=>LED8D<=X"90";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSYM;
ENDARCHITECTUREART;
美文欣赏
1、走过春的田野,趟过夏的激流,来到秋天就是安静祥和的世界。
秋天,虽没有玫瑰的芳香,却有秋菊的淡雅,没有繁花似锦,却有硕果累累。
秋天,没有夏日的激情,却有浪漫的温情,没有春的奔放,却有收获的喜悦。
清风落叶舞秋韵,枝头硕果醉秋容。
秋天是甘美的酒,秋天是壮丽的诗,秋天是动人的歌。
2、人的一生就是一个储蓄的过程,在奋斗的时候储存了希望;在耕耘的时候储存了一粒种子;在旅行的时候储存了风景;在微笑的时候储存了快乐。
聪明的人善于储蓄,在漫长而短暂的人生旅途中,学会储蓄每一个闪光的瞬间,然后用它们酿成一杯美好的回忆,在四季的变幻与交替之间,散发浓香,珍藏一生!
3、春天来了,我要把心灵放回萦绕柔肠的远方。
让心灵长出北归大雁的翅膀,乘着吹动彩云的熏风,捧着湿润江南的霡霂,唱着荡漾晨舟的渔歌,沾着充盈夜窗的芬芳,回到久别的家乡。
我翻开解冻的泥土,挖出埋藏在这里的梦,让她沐浴灿烂的阳光,期待她慢慢长出枝蔓,结下向往已久的真爱的果实。
4、好好享受生活吧,每个人都是幸福的。
人生山一程,水一程,轻握一份懂得,将牵挂折叠,将幸福尽收,带着明媚,温暖前行,只要心是温润的,再遥远的路也会走的安然,回眸处,愿阳光时时明媚,愿生活处处晴好。
5、漂然月色,时光随风远逝,悄然又到雨季,花,依旧美;心,依旧静。
月的柔情,夜懂;心的清澈,雨懂;你的深情,我懂。
人生没有绝美,曾经习惯漂浮的你我,曾几何时,向往一种平实的安定,风雨共度,淡然在心,凡尘远路,彼此守护着心的旅程。
沧桑不是自然,而是经历;幸福不是状态,而是感受。
6、疏疏篱落,酒意消,惆怅多。
阑珊灯火,映照旧阁。
红粉朱唇,腔板欲与谁歌?
画脸粉色,凝眸着世间因果;未央歌舞,轮回着缘起缘落。
舞袖舒广青衣薄,何似院落寂寞。
风起,谁人轻叩我柴扉小门,执我之手,听我戏说?
7、经年,未染流殇漠漠清殇。
流年为祭。
琴瑟曲中倦红妆,霓裳舞中残娇靥。
冗长红尘中,一曲浅吟轻诵描绘半世薄凉寂寞,清殇如水。
寂寞琉璃,荒城繁心。
流逝的痕迹深深印骨。
如烟流年中,一抹曼妙娇羞舞尽半世清冷傲然,花祭唯美。
邂逅的情劫,淡淡刻心。
那些碎时光,用来祭奠流年,可好?
8、缘分不是擦肩而过,而是彼此拥抱。
你踮起脚尖,彼此的心就会贴得更近。
生活总不完美,总有辛酸的泪,总有失足的悔,总有幽深的怨,总有抱憾的恨。
生活亦很完美,总让我们泪中带笑,悔中顿悟,怨中藏喜,恨中生爱。
9、海浪在沙滩上一层一层地漫涌上来,又一层一层地徐徐退去。
我与你一起在海水中尽情的戏嬉,海浪翻滚,碧海蓝天,一同感受海的胸怀,一同去领略海的温情。
这无边的海,就如同我们俩无尽的爱,重重的将我们包裹。
10、寂寞的严冬里,到处是单调的枯黄色。
四处一片萧瑟,连往日明净的小河也失去了光彩,黯然无神地躲在冰面下恹恹欲睡。
有母女俩,在散发着丝丝暖意的阳光下,母亲在为女儿梳头。
她温和的把头发理顺。
又轻柔的一缕缕编织着麻花辫。
她脸上写满笑意,似乎满心的慈爱永远装不下,溢到嘴边。
流到眼角,纺织进长长的。
麻花辫。
阳光亲吻着长发,像散上了金粉,闪着飘忽的光辉。
女儿乖巧地依偎在母亲怀里,不停地说着什么,不时把母亲逗出会心的微笑,甜美的亲情融化了冬的寒冷,使萧索的冬景旋转出春天的美丽。
11、太阳终于伸出纤纤玉指,将青山的柔纱轻轻褪去。
青山那坚实的肌胸,挺拔的脊梁坦露在人们的面前,沉静而坚毅。
不时有云雾从它的怀中涌起,散开,成为最美丽的语言。
那阳光下显得凝重的松柏,那苍茫中显现出的点点殷红,那散落在群山峰顶神秘的吻痕,却又增添了青山另外的神秘。
12、原野里那郁郁葱葱的植物,叫我们丝毫感受不到秋天的萧索,勃勃生机与活力仍在田间高山涌动。
谷子的叶是墨绿的,长而大的谷穗沉甸甸地压弯了昨日挺拔的脊梁;高粱仍旧那么苗条,满头漂亮的红缨挥洒出秋的风韵;那纵横原野的林带,编织着深绿浅黄的锦绣,抒写出比之春夏更加丰富的生命色彩。
13、终于,心痛,心碎,心成灰。
终于选择,在月光下,被遗忘。
百转千回,早已物是人非;欲说还休,终于咫尺天涯;此去经年,你我终成陌路。
爱你,终是一朵花开至荼糜的悲伤,一只娥飞奔扑火的悲哀。
14、世界这么大,能遇见,不容易。
心若向阳,何惧忧伤。
人只要生活在这个世界上,就有很多烦恼,痛苦或是快乐,取决于你的内心。
人不是战胜痛苦的强者,便是屈服于痛苦的弱者。
再重的担子,笑着也是挑,哭着也是挑。
再不顺的生活,微笑着撑过去了,就是胜利。
15、孤独与喧嚣无关,摩肩接踵的人群,演绎着身外的花开花谢,没谁陪你挥别走远的流年。
孤独与忙碌迥异,滚滚红尘湮没了心境,可少了终点的奔波,人生终究一样的苍白。
当一个人成长以后,在他已经了解了世界不是由鲜花和掌声构成之后,还能坚持自己的梦想,多么可贵。
16、生活除却一份过往和爱情外,还是需要几多的遐思。
人生并不是单单的由过往和爱情符号所组成的,过往是人生对所有走过岁月的见证;因为简单,才深悟生命之轻,轻若飞花,轻似落霞,轻如雨丝;因为简单,才洞悉心灵之静,静若夜空,静似幽谷,静如小溪。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通用 文档 cpld 矩阵 键盘 doc