中北大学课程设计说明书学生姓名:于微学号:0906044204 学院: 电子与计算机科学技术学院专业: 电子科学与技术题目: 利用按键开关控制点阵进行字母显示指导教师:王红亮职称: 讲师2012 年 6 月 22 日目录1、课程设计目的 (1)2、课程设计内容和要求 (1)2.1、设计内容 (1)2.2、设计要求 (1)3、设计方案及实现情况 (1)3.1、设计思路 (1)3.2、工作原理及框图 (1)3.3、各模块功能描述 (2)3.4、仿真结果 (4)4、课程设计总结 (26)5、参考文献 (27)1、课程设计目的1.学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
2.掌握组合逻辑电路、时序逻辑电路的设计方法。
3.学习掌握可编程器件设计的全过程。
2、课程设计内容和要求2.1、设计内容利用按键开关控制点阵进行字母显示2.2、设计要求1.学习掌握按键开关控制模块、点阵显示模块的工作原理及应用;2. 熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现字母显示;5. 整理设计内容,编写设计说明书。
3、设计方案及实现情况3.1、设计思路根据题目设计要求,本系统拟采用自顶向下设计方法,顶层采用原理图设计方法,将整个系统分为按键开关控制(BUTTON)、16×16点阵显示(LENDISP)两个模块,通过对各模块编写程序实现模块功能,最后将两个模块进行综合实现整个系统的功能,通过按键开关控制点阵进行二十六个字母的显示。
3.2、工作原理及框图图1 系统整体设计原理图系统的输入信号有:系统时钟信号CLK,按键信号(ADD、SUB)。
系统的输出信号有:点阵行驱动输出信号(LEDOUT[0..15]),点阵列选和按键开关扫描公用信号(SEL[3..0])。
系统工作过程为:按键开关按下一次,扫描信号扫描到按键按下时,在点阵上显示对应的字母。
如按键开关按下一次时,点阵显示字母“A”;按下两次时,点阵显示字母“B”……如此,按键开关按下26次就分别对应了26个字母。
3.3、各模块功能描述(1)按键控制模块(BUTTON)按键控制模块的功能是:通过按键的按下与释放产生计数,进行二十六进制计数,以控制二十六个字母的生成。
该模块中,clk为系统时钟,add为加法计数,sub为减法计数,reset为复位。
selout[4..0]为按键扫描后的对应的译码输出。
图2 按键控制模块引脚功能图(2)16×16点阵显示模块(LENDISP)16×16点阵显示模块引脚功能如下图。
其中clk为系统时钟,selin为键盘扫描后的对应的译码输出,和图3中的selout[4..0]对接。
selout[3..0]为点阵列选择信号,ledout[15..0]为点阵行显示。
图3 点阵显示模块引脚功能图3.4、仿真结果1、VHDL语言源程序(1)按键控制模块(BUTTON.VHD)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity anjia isport(add,sub:in std_logic;clk,reset:in std_logic;selout:out std_logic_vector(4 downto 0));end entity anjia;architecture rt1 of anjia issignal seloutn: std_logic_vector(4 downto 0);signal addn:std_logic;signal subn:std_logic;signal resetn:std_logic;beginprocess(clk)beginif(clk'event and clk='1')then --将按键和进(借)位的值在CLK上升沿来时赋给一个新的信号中。
addn<=add;subn<=sub;resetn<=reset;end if;end process;process(clk,add,addn,sub,subn) --个位计数beginif(reset='1' and resetn='0')thenelsif(clk'event and clk='1')thenif (add='1' and addn='0') then --按键上升沿跳变,下同if (seloutn ="11001") thenseloutn <="00000";elseseloutn <= seloutn +1;end if;elsif (sub='1' and subn='0')thenif (seloutn ="00000") thenseloutn <="11001";elseseloutn <= seloutn -1;end if;end if;end if;end process;selout <= seloutn;end architecture rt1;(2) 点阵显示模块(LENDISP.VHD)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity lendisp isport(clk:in std_logic;--clkin:in std_logic_vector(3 downto 0);selin:in std_logic_vector(4 downto 0);selout:out std_logic_vector(3 downto 0);ledout:out std_logic_vector(15 downto 0));architecture ctl of lendisp issignal temp:std_logic_vector(15 downto 0);signal clkin:std_logic_vector(3 downto 0); beginprocess(clk,clkin,selin)beginif (clk'event and clk='1') thenif clkin="1111" thenclkin<="0000";elseclkin<=clkin+1;end if;end if;selout<=clkin;case selin iswhen "00000"=>case clkin iswhen "0000"=>temp<="0000000000000100";when "0001"=>temp<="0000000000000100";when "0010"=>temp<="0000000000001100";when "0011"=>temp<="0000000001111100";when "0100"=>temp<="0000000111111100";when "0101"=>temp<="0000011111100100";when "0110"=>temp<="0001111111000000";when "0111"=>temp<="0001110001000000";when "1000"=>temp<="0001100001000000";when "1001"=>temp<="0000111001000000";when "1010"=>temp<="0000001111000100";when "1101"=>temp<="0000000000001100";when "1110"=>temp<="0000000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "00001"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000010001111000";when "0010"=>temp<="0000111011111000";when "0011"=>temp<="0001111111111100";when "0100"=>temp<="0001111110001100";when "0101"=>temp<="0001000110000100";when "0110"=>temp<="0001000110000100";when "0111"=>temp<="0001000110000100";when "1000"=>temp<="0001000110000100";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001000110000100";when "1011"=>temp<="0001000110000100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0001000000000100";when others=>temp<="0000000000000100";end case;when "00010"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0011"=>temp<="0001000000001100";when "0100"=>temp<="0001000000000100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001100000001100";when "1011"=>temp<="0000110000011000";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111100000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00011"=>case clkin iswhen "0000"=>temp<="0000000010000000";when "0001"=>temp<="0000011111100000";when "0010"=>temp<="0000111111110000";when "0011"=>temp<="0000111111111000";when "0100"=>temp<="0001100000001000";when "0101"=>temp<="0001100000001100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001000000000100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00100"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000110000011000";when "0010"=>temp<="0001100000001100";when "0011"=>temp<="0001100000000100";when "0100"=>temp<="0001001111000100";when "0101"=>temp<="0001000110000100";when "0110"=>temp<="0001000110000100";when "0111"=>temp<="0001000110000100";when "1000"=>temp<="0001000110000100";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00101"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0010"=>temp<="0001100000000000";when "0011"=>temp<="0001001111000000";when "0100"=>temp<="0001001111000000";when "0101"=>temp<="0001000110000000";when "0110"=>temp<="0001000010000000";when "0111"=>temp<="0001000010000000";when "1000"=>temp<="0001000010000100";when "1001"=>temp<="0001000010000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00110"=>case clkin iswhen "0000"=>temp<="0000000001000000";when "0001"=>temp<="0000000001000000";when "0010"=>temp<="0000110001111100";when "0011"=>temp<="0001110001111100";when "0100"=>temp<="0001100001111100";when "0101"=>temp<="0001000001000100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001100000001100";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111100000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "00111"=>case clkin iswhen "0000"=>temp<="0001000000000100";when "0001"=>temp<="0001000000000100";when "0010"=>temp<="0001111111111100";when "0011"=>temp<="0001111111111100";when "0100"=>temp<="0001111111111100";when "0101"=>temp<="0001000010000100";when "0110"=>temp<="0000000010000000";when "0111"=>temp<="0000000010000000";when "1000"=>temp<="0000000010000000";when "1001"=>temp<="0000000010000100";when "1010"=>temp<="0001000010000100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "01000"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0011"=>temp<="0001000000000100";when "0100"=>temp<="0001000000000100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001111111111100";when "0111"=>temp<="0001111111111100";when "1000"=>temp<="0001111111111100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001000000000100";when "1011"=>temp<="0001000000000100";when "1100"=>temp<="0001000000000100";when "1101"=>temp<="0000000000000000";when "1110"=>temp<="0000000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01001"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000000000000000";when "0010"=>temp<="0000000000000000";when "0011"=>temp<="0001000000000000";when "0100"=>temp<="0001111111111100";when "0101"=>temp<="0001111111111110";when "0110"=>temp<="0001111111111110";when "0111"=>temp<="0001000000000011";when "1000"=>temp<="0001000000000001";when "1001"=>temp<="0001000000000001";when "1010"=>temp<="0001000000000001";when "1101"=>temp<="0000000000000111";when "1110"=>temp<="0000000000000010";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01010"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000000000000000";when "0010"=>temp<="0001000000001100";when "0011"=>temp<="0001000000011100";when "0100"=>temp<="0001100000111100";when "0101"=>temp<="0001110001110100";when "0110"=>temp<="0000011011100000";when "0111"=>temp<="0000001111000000";when "1000"=>temp<="0000001110000000";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001000010000100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01011"=>case clkin iswhen "0000"=>temp<="0000000000010000";when "0011"=>temp<="0000000000000100";when "0100"=>temp<="0000000000000100";when "0101"=>temp<="0000000000000100";when "0110"=>temp<="0000000000000100";when "0111"=>temp<="0000000000000100";when "1000"=>temp<="0000000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01100"=>case clkin iswhen "0000"=>temp<="0001000000000100";when "0001"=>temp<="0001111111111100";when "0010"=>temp<="0001111111111100";when "0011"=>temp<="0001111111111100";when "0100"=>temp<="0001111000000100";when "0101"=>temp<="0000011110000100";when "0110"=>temp<="0000000111100000";when "0111"=>temp<="0000000001111000";when "1000"=>temp<="0000000000111100";when "1001"=>temp<="0000000011111100";when "1010"=>temp<="0000011111100000";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "01101"=>case clkin iswhen "0000"=>temp<="0001000000000000";when "0001"=>temp<="0001000000000000";when "0010"=>temp<="0001111111111100";when "0011"=>temp<="0001000000011000";when "0100"=>temp<="0001000000110000";when "0101"=>temp<="0000000001100000";when "0110"=>temp<="0000000011000000";when "0111"=>temp<="0000000110000000";when "1000"=>temp<="0000001100000000";when "1001"=>temp<="0000011000000000";when "1010"=>temp<="0000110000000100";when "1011"=>temp<="0001110000000100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001111111111100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000100";when others=>temp<="0000000000000000";end case;when "01110"=>case clkin iswhen "0000"=>temp<="0000000111000000";when "0011"=>temp<="0000111000111000";when "0100"=>temp<="0001100000001100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001000000000100";when "0111"=>temp<="0001000000000100";when "1000"=>temp<="0001000000000100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001100000001100";when "1011"=>temp<="0001110000011000";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "01111"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000111000000000";when "0010"=>temp<="0000111100000000";when "0011"=>temp<="0001111110000000";when "0100"=>temp<="0001000110000000";when "0101"=>temp<="0001000010000000";when "0110"=>temp<="0001000010000000";when "0111"=>temp<="0001000010000000";when "1000"=>temp<="0001000010000100";when "1001"=>temp<="0001000010000100";when "1010"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0001000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10000"=>case clkin iswhen "0000"=>temp<="0000000111000000";when "0001"=>temp<="0000011111110110";when "0010"=>temp<="0000111111111010";when "0011"=>temp<="0000111001111111";when "0100"=>temp<="0001100000001110";when "0101"=>temp<="0001000000001110";when "0110"=>temp<="0001000000011100";when "0111"=>temp<="0001000000110100";when "1000"=>temp<="0001000000110100";when "1001"=>temp<="0001000000110100";when "1010"=>temp<="0001100000011100";when "1011"=>temp<="0001110000011000";when "1100"=>temp<="0000111111111000";when "1101"=>temp<="0000011111110000";when "1110"=>temp<="0000001111100000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10001"=>case clkin iswhen "0000"=>temp<="0000000000000100";when "0011"=>temp<="0001111100011100";when "0100"=>temp<="0001100100111000";when "0101"=>temp<="0001000111110000";when "0110"=>temp<="0001000111100000";when "0111"=>temp<="0001000011000000";when "1000"=>temp<="0001000010000000";when "1001"=>temp<="0001000010000100";when "1010"=>temp<="0001111111111100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111100";when "1101"=>temp<="0001000000000100";when "1110"=>temp<="0000000000000100";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10010"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0000000000110000";when "0010"=>temp<="0001110001111000";when "0011"=>temp<="0001100001111100";when "0100"=>temp<="0001100011000100";when "0101"=>temp<="0001000011000100";when "0110"=>temp<="0001000010000100";when "0111"=>temp<="0001000110000100";when "1000"=>temp<="0001000110000100";when "1001"=>temp<="0001000110000100";when "1010"=>temp<="0001000100000100";when "1101"=>temp<="0000111000111100";when "1110"=>temp<="0000000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10011"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0001110000000000";when "0010"=>temp<="0001100000000000";when "0011"=>temp<="0001000000000000";when "0100"=>temp<="0001000000000100";when "0101"=>temp<="0001000000000100";when "0110"=>temp<="0001111111111100";when "0111"=>temp<="0001111111111100";when "1000"=>temp<="0001111111111100";when "1001"=>temp<="0001000000000100";when "1010"=>temp<="0001000000000100";when "1011"=>temp<="0001000000000100";when "1100"=>temp<="0001000000000000";when "1101"=>temp<="0001100000000000";when "1110"=>temp<="0000110000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10100"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0011"=>temp<="0001000000001000";when "0100"=>temp<="0001000000001100";when "0101"=>temp<="0000000000000100";when "0110"=>temp<="0000000000000100";when "0111"=>temp<="0000000000000100";when "1000"=>temp<="0000000000000100";when "1001"=>temp<="0000000000000100";when "1010"=>temp<="0001000000001100";when "1011"=>temp<="0001111111111100";when "1100"=>temp<="0001111111111000";when "1101"=>temp<="0001111111110000";when "1110"=>temp<="0001000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10101"=>case clkin iswhen "0000"=>temp<="0000000000000000";when "0001"=>temp<="0001000000000000";when "0010"=>temp<="0001100000000000";when "0011"=>temp<="0001110000000000";when "0100"=>temp<="0001011100000000";when "0101"=>temp<="0000000111000000";when "0110"=>temp<="0000000001110000";when "0111"=>temp<="0000000000011100";when "1000"=>temp<="0000000001111100";when "1001"=>temp<="0000000111111000";when "1010"=>temp<="0001011111100000";when "1101"=>temp<="0001000000000000";when "1110"=>temp<="0001000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10110"=>case clkin iswhen "0000"=>temp<="0001000000000000";when "0001"=>temp<="0001100000000000";when "0010"=>temp<="0001111100000000";when "0011"=>temp<="0001001111100000";when "0100"=>temp<="0000000011111000";when "0101"=>temp<="0000000111111100";when "0110"=>temp<="0001111111110000";when "0111"=>temp<="0001111110000000";when "1000"=>temp<="0001111111000000";when "1001"=>temp<="0001000111110000";when "1010"=>temp<="0000000001111100";when "1011"=>temp<="0010011111111100";when "1100"=>temp<="0011111111000000";when "1101"=>temp<="0011111000000000";when "1110"=>temp<="0010000000000000";when "1111"=>temp<="0000000000000000";when others=>temp<="0000000000000000";end case;when "10111"=>case clkin iswhen "0000"=>temp<="0000000000000100";。