利用键盘控制数码管进行十六进制数字显示
- 格式:doc
- 大小:2.88 MB
- 文档页数:11
一、数码管显示字符表一个数码管有八段:a,b,c,d,e,f,g,dp(小数点),即由八段发光二极管组成。
因为发光二极管导通的方向是一定的(导通电压一般取为1.7V),这八个发光二极管的公共端有两种:可以分别接+5V(即为共阳极数码管)或接地(即为共阴极数码管);故可分共阳极(公共端接高电平或+5V电压)和共阴极(共低电平或接地)两种数码管。
其中每个段均有0(不导通)和1(导通发光)两种状态,但共阳极数码管和共阴极数码管显然是不同的。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
对于共阳数极码管:各段选为低电平(即0接地时)选中各数码段, 位选为高电平(即1)选中数码管。
对于共阴极数码管:各段选为高电平(即1接+5V时)选中各数码段,位选为低电平(即0)选中数码管。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
字母显示:共阳极的数码管0~f的段编码:unsigned char code table[]={ //共阳极0~f数码管编码0xc0,0xf9,0xa4,0xb0,//0~30x99,0x92,0x82,0xf8,//4~70x80,0x90,0x88,0x83,//8~b0xc6,0xa1,0x86,0x8e //c~f};共阴极的数码管0~f的段编码是:unsigned char code table[]={//共阴极0~f数码管编码0x3f,0x06,0x5b,0x4f, //0~30x66,0x6d,0x7d,0x07, //4~70x7f,0x6f,0x77,0x7c, //8~b 0x39,0x5e,0x79,0x71 //c~f };。
共阳极数码管共阴极数码管文案编辑词条B 添加义项?文案,原指放书的桌子,后来指在桌子上写字的人。
现在指的是公司或企业中从事文字工作的职位,就是以文字来表现已经制定的创意策略。
文案它不同于设计师用画面或其他手段的表现手法,它是一个与广告创意先后相继的表现的过程、发展的过程、深化的过程,多存在于广告公司,企业宣传,新闻策划等。
基本信息中文名称文案外文名称Copy目录1发展历程2主要工作3分类构成4基本要求5工作范围6文案写法7实际应用折叠编辑本段发展历程汉字"文案"(wén àn)是指古代官衙中掌管档案、负责起草文书的幕友,亦指官署中的公文、书信等;在现代,文案的称呼主要用在商业领域,其意义与中国古代所说的文案是有区别的。
在中国古代,文案亦作" 文按"。
公文案卷。
《北堂书钞》卷六八引《汉杂事》:"先是公府掾多不视事,但以文案为务。
"《晋书·桓温传》:"机务不可停废,常行文按宜为限日。
" 唐戴叔伦《答崔载华》诗:"文案日成堆,愁眉拽不开。
"《资治通鉴·晋孝武帝太元十四年》:"诸曹皆得良吏以掌文按。
"《花月痕》第五一回:" 荷生觉得自己是替他掌文案。
"旧时衙门里草拟文牍、掌管档案的幕僚,其地位比一般属吏高。
《老残游记》第四回:"像你老这样抚台央出文案老爷来请进去谈谈,这面子有多大!"夏衍《秋瑾传》序幕:"将这阮财富带回衙门去,要文案给他补一份状子。
"文案音译文案英文:copywriter、copy、copywriting文案拼音:wén àn现代文案的概念:文案来源于广告行业,是"广告文案"的简称,由copy writer翻译而来。
多指以语辞进行广告信息内容表现的形式,有广义和狭义之分,广义的广告文案包括标题、正文、口号的撰写和对广告形象的选择搭配;狭义的广告文案包括标题、正文、口号的撰写。
VHDL 设计一个十六进制计数器一、实验目的1.进一步了解VHDL设计方法2.熟悉数码管和LED的显示二、实验所用仪器及元器件1、计算机2、Quartus II 7.2 (32-Bit)软件3、EP2C5实验箱三、实验内容(1)、设计一个十六进制计数器,用一个数码管、8个彩灯循环显示计数状态。
(2)、有清零信号控制,按下后从零开始。
四、设计思路与过程根据实验要求,需要实现在拨码开关或者按键的控制下实现十六进制计数器。
首先,确定输入输出变量:输入:拨码开关a:清零;时钟clk::提供有效时钟沿;输出SEL-LED:8维向量b:连接8个发光二极管。
输出SEL-DATA :8维向量b:连接8个发光二极管。
其次,确定电路工作状态因为要实现计数十六进制计数器,所以首先要实现在时钟控制下实现计数;还要考虑到清零信号;再次,实现对计术状态的表示;也就是让计数状态用数码管和LED显示出来。
具体程序如下:五、VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count16 ISPORT(CLK5 :IN STD_LOGIC;RST :IN STD_LOGIC;SEG_SEL :OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEG_DA :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);LED :OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END count16;ARCHITECTURE BEHA VE OF count16 ISSIGNAL SHIFT_CNT,TEMP :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CNT_V ALUE :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK5)BEGINIF RST='1' THEN TEMP <="0000";ELSIF CLK5'EVENT AND CLK5='1' THENIF TEMP="1111" THENTEMP <="0000";ELSETEMP<=TEMP+1;END IF;END IF;END PROCESS;SHIFT_CNT<=TEMP;SEG_SEL<="000";PROCESS(SHIFT_CNT)BEGINCASE SHIFT_CNT ISWHEN "0000" => SEG_DA<=x"3F";LED<="00000001";WHEN "0001" => SEG_DA<=x"06";LED<="00000010";WHEN "0010" => SEG_DA<=x"5B";LED<="00000100";WHEN "0011" => SEG_DA<=x"4F";LED<="00001000";WHEN "0100" => SEG_DA<=x"66";LED<="00010000";WHEN "0101" => SEG_DA<=x"6D";LED<="00100000";WHEN "0110" => SEG_DA<=x"7D";LED<="01000000";WHEN "0111" => SEG_DA<=x"07";LED<="10000000";WHEN "1000" => SEG_DA<=x"7F";LED<="00000001";WHEN "1001" => SEG_DA<=x"6F";LED<="00000010";WHEN "1010" => SEG_DA<=x"77";LED<="00000100";WHEN "1011" => SEG_DA<=x"7C";LED<="00001000";WHEN "1100" => SEG_DA<=x"39";LED<="00010000";WHEN "1101" => SEG_DA<=x"5E";LED<="00100000";WHEN "1110" => SEG_DA<=x"79";LED<="01000000";WHEN "1111" => SEG_DA<=x"71";LED<="10000000";END CASE;END PROCESS;END BEHA VE;六、实验 QuarterII原理图:七、仿真波形八、故障及问题分析本次实验整体比较顺利,但仍旧出现了一个个问题:开始时引脚分配有问题,没有找到与EP2C5有关的引脚,后来找到了。
毕业设计毕业设计题目:学生学号:学生姓名:所在系(部):专业及班级:指导教师:完成日期:《电气自动化》专业毕业设计任务书课题名称:定时系统课题类型:模拟课题设计的目的:(1)定时设定由按键部分控制(2)实现定时时间的显示数码管显示:分(十位)分(个位)∶秒(十位)秒(个位)(3)到点响铃(4)系统运行中可重新设定定时值(5)最大实现99分59秒的定时设计的任务及主要内容::第一章概述1 任务设计(1)定时设定由按键部分控制(2)实现定时时间的显示数码管显示:分(十位)分(个位)∶秒(十位)秒(个位)(3)到点响铃(4)系统运行中可重新设定定时值(5)最大实现99分59秒的定时2 总体方案(1)设计框图系统框图如图1(2)设计思路利用89C51单片机作为本系统的中控模块。
上电后,按下功能键进入调时状态,通过各单元电路将按键部分设定的时间通过定时时间显示部分中的LED数码管显示出来,当时间设定完毕后再次按下按键部分的功能键,闹铃模块的蜂鸣器鸣叫0.5S以示定时器开始工作,到点实现响铃,再由按键部分关闹铃。
中途可重新设置定时数值。
复位部分除上电初实现复位外,其余任何时候可按键实现复位。
注:按键部分一共有4个按键,分别为功能键P3.0,秒设定键P3.1(增),分设定键P3.2(增)分设定键P3.3(减)。
3、方案论证(1)定时部分定时部分是本设计的核心部分。
方案:本方案完全用软件实现定时。
原理为:在单片机内部存储器设两个字节分别存放时钟的分、秒信息。
利用键盘部分对定时时间进行设定,由定时显示部分数码管显示,同时定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒个位减1;若秒个位减到0,则判秒十位值是否为0,若不是,则秒个位赋9,秒十位减1;分同理。
该方案具有硬件电路简单的特点。
(2)闹铃器件的选择方案:采用蜂鸣器闹铃,当到设定时间时,单片机向蜂鸣器送出高电平,蜂鸣器发生。
采用蜂鸣器闹铃结构简单,控制方便。
一、介绍STM32是一种32位微控制器,其内部集成了大量专用硬件模块,可用于各种应用领域,包括电子设备、工业控制和通信设备等。
其中,数码管是一种常见的输出设备,用于显示数字和特定符号。
在本文中,我们将探讨如何在STM32上控制数码管显示小数点的16进制数值。
二、STM32数码管控制原理1.数码管数码管是一种由多个发光二极管组成的显示装置,通常用于显示数字和一些特定的符号。
在STM32中,数码管可以通过连接到对应的GPIO引脚来进行控制。
2.16进制数值16进制数是一种常见的计数系统,使用0-9和A-F表示数字0-15。
在控制数码管上显示16进制数值时,需要将每一位数分别转换为对应的二进制形式,然后依次控制数码管显示。
3.STM32数码管控制通过设置STM32的GPIO引脚状态,可以控制数码管的亮灭,从而实现对数码管的控制。
需要根据具体的数码管型号和连线方式来确定对应的GPIO引脚。
三、实现步骤1.确定数码管类型和引脚连接首先需要确定使用的数码管型号和对应的引脚连接方式,以便后续的程序设计和控制。
2.编写控制程序根据数码管的类型和引脚连接方式,编写STM32的控制程序。
首先需要将16进制数值转换为对应的二进制形式,然后根据每一位数的二进制形式设置对应的引脚状态,以控制数码管的显示。
3.调试和验证编写完成控制程序后,需要进行调试和验证。
通过调试工具和逻辑分析仪等设备,检查程序的运行状态和数码管的显示效果,确保程序的正确性。
四、实例演示以下是一个简单的例子,演示如何在STM32上控制数码管显示小数点的16进制数值。
```c#include "stm32f4xx.h"#include <stdio.h>// 数码管引脚定义#define DIGIT1_PIN GPIO_Pin_0#define DIGIT2_PIN GPIO_Pin_1#define DIGIT3_PIN GPIO_Pin_2#define DIGIT4_PIN GPIO_Pin_3#define SEGMENT_A_PIN GPIO_Pin_4#define SEGMENT_B_PIN GPIO_Pin_5#define SEGMENT_C_PIN GPIO_Pin_6#define SEGMENT_D_PIN GPIO_Pin_7// ... 其他引脚定义// 将16进制数值转换为数码管显示void display_hex_number(uint16_t number) { // 转换为对应的二进制形式uint8_t digit1 = (number 0x000F) >> 0; uint8_t digit2 = (number 0x00F0) >> 4;// 设置数码管显示GPIO_SetBits(GPIOA, DIGIT1_PIN);GPIO_ResetBits(GPIOB, SEGMENT_A_PIN); // ... 设置其他引脚状态}int m本人n() {// 初始化GPIO引脚GPIO_Init();// 显示16进制数值display_hex_number(0x1234);while(1) {// 循环执行其他任务}}```在这个例子中,我们通过display_hex_number函数将16进制数值0x1234转换为对应的数码管显示。
按键控制数码管和流水灯设计报告实验报告摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。
七段数码管显示16进制计数器的VHDL设计一、实验目的:1、熟悉QuartusII的使用2、掌握七段数码管的VHDL设计3、掌握16进制计数器的VHDL设计4、元件例化语句的使用二、实验内容:用VHDL语句进行七段数码管、16进制计数器和七段数码管显示16进制计数器的设计,用VHDL写成的七段数码管及16进制计数器进行打包并在七段数码管显示16进制计数器进行调用。
用元件调用语句、例化语句来描述七段数码管显示16进制计数器的顶层文件。
也要用VHDL进行波形的仿真,然后把仿真得到的波形与理论上的真值表进行比较看是否一致。
三、实验条件:(1)、开发软件:QuartusII(2)、实验设备:计算机(3)、所用芯片:Altera公司Cyclone系列的EP1C3T144C8芯片四、实验设计:程序框图七段数码管VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity decl7s isport(d:in std_logic_vector(3 downto 0);led:out std_logic_vector(6 downto 0)); end;architecture a of decl7s isbeginprocess(d)begincase d iswhen"0000"=>led<="0111111"; when"0001"=>led<="0000110"; when"0010"=>led<="1011011"; when"0011"=>led<="1001111"; when"0100"=>led<="1100110"; when"0101"=>led<="1101101"; when"0110"=>led<="1111101"; when"0111"=>led<="0000111"; when"1000"=>led<="1111111"; when"1001"=>led<="1101111"; when"1010"=>led<="1110111"; when"1011"=>led<="1111100"; when"1100"=>led<="0111001"; when"1101"=>led<="1011110"; when"1110"=>led<="1111001"; when"1111"=>led<="1110001";when others=>null;end case;end process;end a;16进制计数器VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT16 isport( CLK,RST,EN: in std_logic;CQ: OUT std_logic_vector(3 downto 0); COUT:OUT std_logic);end CNT16;architecture behav of CNT16 isbeginprocess(CLK,RST,EN)VARIABLE CQI:std_logic_vector(3 downto 0); beginif RST='1' then CQI:=(others=>'0');elsif CLK'event and CLK='1' thenif EN='1'thenif CQI<15 THEN CQI:=CQI+1;end if;else CQI:=(others=>'0');end if;end if;end if;if CQI=15 THEN COUT<='1';else COUT<='0';CQ<=CQI;end process;end architecture behav;七段数码管显示16进制计数器VHDL源程序library ieee;use ieee.std_logic_1164.all;entity qdshmg isPORT (clk1,rst1,en1 : IN STD_LOGIC;cout1: OUT STD_LOGIC;led1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));end;architecture one of qdshmg iscomponent CNT16port( CLK,RST,EN: in std_logic;CQ: OUT std_logic_vector(3 downto 0);COUT:OUT std_logic);end component;component decl7sPORT(d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));end component;SIGNAL e: STD_LOGIC_vector(3 downto 0);BEGINu1 : CNT16 PORT MAP(CLK=>clk1,RST=>rst1,EN=>en1,CQ=>e,COUT=>cout1); u2 : decl7s PORT MAP(d=>e,led=>led1);END ARCHITECTURE one;七段数码管仿真波形:七段数码管显示16进制计数器仿真波形:16进制计数器仿真波形:五、实验结果及总结:16进制计数器的程序并生成仿真波形;1:完成七段数码管的程序并生成仿真波形;2:在同一个文件夹下根据七段数码管的程序和16进制计数器的程序完成七段数码管显示.。
实验二从键盘输入数据并显示实验一、实验目的1.掌握键盘输入字符的方法和十六进制数字字符的ASCII码转换为二进制数的原理。
2.掌握子程序定义和调用的方法。
3.掌握循环移位指令的用法和无符号数比较大小的方法。
二、实验内容1. 从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。
要求输入的数字字符串以回车键结束。
若按下的键不是十六进制数字字符,则显示出错信息。
2. 从键盘上输入4位十六进制数(如果输入的数字超过4个,则以最后输入的4个为准),将其转换为16位二进制数并在显示器上显示出来。
要求输入的数字字符串以回车键结束。
若按下的键不是十六进制数字字符,则显示出错信息。
3.应该Masm for Windows 集成实验环境调试运行并讲解程序,并用屏幕录像软件录制全过程,全程开启摄像头,以MP4G格式上传,完成实验报告的书写。
三、实验程序和结果CRLF MACROMOV AH,02H ;显示器输出MOV DL,0DH ;换行INT 21HMOV AH,02HMOV DL,0AH ;回车INT 21HENDMDATA SEGMENT ;输入MARK DB ?MESSAGE DB 'PLEASE INPUT THEWORDS!',0DH,0AH,'INPUT:$' ; 输入字符串提示ERROR DB 0DH,0AH, 'NO MATCH!',0DH,0AH,'$' ;输入错误提示DATA ENDSSTACK SEGMENTSTA DW 32 DUP(?) ;定义32个空字TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;表明程序代码段与段地址之间的关系START: MOV AX,DATAMOV DS,AX ;将段地址送入段地址寄存器MOV ES,AXMOV SP,TOPHEAD: CRLF ;输出换行回车MOV MARK,0MOV AH,09H ;字符串显示LEA DX,MESSAGEINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送DXCMP MARK,01HJE HEAD ;输入错误,跳转到HEAD重新输入MOV CX,0010H ;16位;循环次数为16MOV BX,DX ;把DX的数据放入BX中,显示777 TTT: ROL BX,1 ;循环左移1位MOV DL,BLAND DL,01H ;屏蔽掉高7位ADD DL,30H ;将二进制转码为ASCII码输出MOV AH,02H ;字符输出INT 21H ;显示二进制位对应的ASCII字符LOOP TTTJMP HEADFINI: MOV AX,4C00H ;终止当前程序,返回调用程序INT 21H ;返回DOSGETNUM PROC NEAR ;子程序,接收键入数值送DXPUSH CXXOR DX,DX ;清零GGG: MOV AH,01HINT 21H ;键盘输入CMP AL,0DHJE PPP ;输入为回车,则进行转换CMP AL,20HJE FINI ;输入为空格,则退回DOSCMP AL,30HJB KKK ;输入有误,显示ERRORSUB AL,30HCMP AL,0AH ;判断是否为0~9JB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FH ;判断是否为A~ZJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20H ;判断是否为a~zGETS: MOV CL,04 ;转换SHL DX,CL ;左移四位,第四位0补齐XOR AH,AH ;AH清零ADD DX,AX ;把输入的数据放入DX中JMP GGGKKK: MOV AH,09H ;显示字符串MOV DX,OFFSET ERRORINT 21HMOV MARK,01H ;将MARK置1PPP: PUSH DX ;压入堆栈CRLF ;回车换行POP DX ;弹出堆栈POP CXRETGETNUM ENDPCODE ENDSEND START(页面不足请附页)四、实验总结和体会本实验做键盘输入并屏幕显示将十六进制转换成等值的二进制数,我们用DOS功能,利用软件中断指令INT 21H实现了键盘的输入显示器的输出以及返回到DOS的命令,并通过判断将正确输入的4位十六进制数转换为二进制数显示到屏幕上,编写程序时我们要注意一点,DOS环境下是不允许汉字输入的,通过本次实验的学习掌握并了解了接收键盘数据的方法,接收到的数据以ASCII码进行放,并了解了将键盘数据显示时需要转换为ASCII码的原理。
中北大学课程设计说明书学生姓名:刘迎军学号:0606024126学院: 电子与计算机科学技术学院专业: 微电子专业题目: 利用键盘控制数码管进行十六进制数字显示指导教师:王红亮职称: 讲师2010年 6月 25日目录1.课程设计目的 (2)2.课程设计内容及要求 (2)2.1设计内容 (2)2.2设计要求 (2)3.设计方案及实现情况 (2)3.1设计思路 (2)3.2工作原理及框图 (3)3.3各模块功能描述 (6)3.4仿真结果 (7)3.5试验箱验证情况 (8)4课程设计总结 (9)5.参考文献 (10)1课程设计目的1.学习操作数字电路设计实验开发系统,掌握数码管显示模块的工作原理及应用。
2.掌握组合逻辑电路、时序逻辑电路的设计方法。
3.学习掌握可编程器件设计的全过程。
2课程设计内容和要求2.1设计内容用VHDL语言编写程序,实现利用键盘控制数码管进行十六进制数字显示。
2.2设计要求1.学习掌握键盘控制模块、数码管显示模块的工作原理及应用;2. 熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;5. 整理设计内容,编写设计说明书。
3设计方案及实现情况3.1设计思路:整体结构如下:图1系统总体结构框图根据题目设计要求,将键盘按下的具体状态通过CPLD的控制在数码管上显示出来,本题目采用自顶向下的设计方法,将系统分为三个个模块,时钟分频模块,键盘扫描和译码显示模块,先用MAX+PLUS II文本设计各个模块,仿真分析无误后,用图形设计输入将三个模块和相应的输入输出进行总的电路设计,编译、仿真、时序分析、器件编程、实验箱硬件验证。
3.2 工作原理及框图将键盘按下的具体状态通过CPLD的控制在数码管上显示出来,本题目采用自顶向下的设计方法,将系统分为三个模块,时钟分频模块和键盘扫描及译码显示模块,先分别用MAX+PLUS II文本设计各个模块的功能及仿真,模块功能好了就可以实现最后的结果了。
3.3 具体程序如下:1)时钟分频程序如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dclk isport(clk:in std_logic;divclk:out std_logic);end dclk;architecture dclk_arch of dclk isbeginprocess(clk)variable cnt:std_logic_vector(1 downto 0); variable a:std_logic;beginif clk'event and clk='1' thenif a='0' thenif cnt="11" thena:='1';elsecnt:=cnt+1;end if;elsif a='1' thenif cnt="00" thena:='0';elsecnt:=cnt-1;end if;end if;end if;divclk<=a;end process;end dclk_arch;2)键盘扫描模块如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt isport( clk:in std_logic;sel2,sel1,sel0:out std_logic); end cnt;architecture cnt_arch of cnt isbeginprocess(clk)variable cn:std_logic_vector(2 downto 0); beginif clk'event and clk='1' thenif cn="111" thencn:="000";elsecn:=cn+1;end if;end if;sel0<=cn(0);sel1<=cn(1);sel2<=cn(2);end process;end cnt_arch;3)译码显示模块如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yima isport(kin3,kin2,kin1,kin0:in std_logic;sel2,sel1,sel0:in std_logic;Y:out std_logic_vector(6 downto 0));end yima;architecture yima_arch of yima issignal a:std_logic_vector(3 downto 0);signal b:std_logic_vector(2 downto 0);begina<=kin3&kin2&kin1&kin0;b<=sel2&sel1&sel0;Y<="1111110"when (b="000" and a="1110" ) else "1011111"when (b="000" and a="1101" ) else "0110000"when (b="001" and a="1110" ) else "1110000"when (b="001" and a="1101" ) else "1101101"when (b="010" and a="1110" ) else "1001110"when (b="010" and a="1011" ) else "1111001"when (b="011" and a="1110" ) else "1111110"when (b="011" and a="1011" ) else "1111111"when (b="100" and a="1101" ) else"1001111"when (b="100" and a="1011" ) else"1111011"when (b="101" and a="1101" ) else"1000111"when (b="101" and a="1011" ) else"0110011"when (b="110" and a="1110" ) else"1110111"when (b="110" and a="1101" ) else"1011011"when (b="111" and a="1110" ) else"0011111"when (b="111" and a="1101" ) else"0000000";end yima_arch根据以上程序生成模块,最后连接成图2所示电路,进而仿真验证时序分析,硬件下载图2 总体原理电路图3.4各模块功能描述(1)时钟分频模块本模块的主要功能是为总体电路提供时钟分频,为键盘扫描和译码奠定基础图3 时钟分频模块。
(2)键盘扫描模块键盘扫描信号的变化顺序为000-001-010-011-100-101-110-111,依次循环变化来扫描八列按键图4 键盘扫描模块(3)键盘译码及显示电路模块当按下某一具体按键的时候,键盘所产生的输出跟扫描信号结合,编译成与相应按键对应的数字或字符的七段显示码,输出到数码管上图5 键盘译码及显示模块硬件连接:将CLK信号和kin0-kin3信号链接到CPLD试验箱上数码管显示器的SEL0-SEL3四个行选信号输入引脚,将译码电路的Y0-Y7连接到试验箱上数码管显示器的 a-g共7个信号输入引脚,根据对CPLD进行的管脚分布连接8个数码管和时钟信号(给一个频率为HZ的时钟信号),完成硬件连线,下载程序到FPGA,观察结果。
3.5 仿真结果本实验结果主要表现在波形的Y[6 ..0]信号的波形输出,实现了键盘控制的十六进制显示(如图五)图6 总体仿真时序图3.5、实验箱验证情况实验箱验证主要是验证管脚分配下(如图五)和程序的最后结果的显示(如图六)。
图7 芯片管脚分配图图8 数码管显示图4 课程设计总结拿到课题的第一课就迅速查看了数码管显示的原理,对键盘控制这个模块却是一点底都没有通过查找相关课本和以前做的相关试验才逐一攻克键盘扫描和译码这两个知识盲点,收获颇丰。
以前看相关知识点的时候总是觉得很容易,但是发现如果不通过亲自实践的话,既不能确定自己是否正确,也不能加深对相关知识的理解,很快就会忘记。
设计的过程中就是对VHDL这门课程的一个总体复习,带着解决具体问题的目的重新回顾这门课,才发现以前没有注意到的细节,温故而知新一点都不错!还有在下载到硬件的时候老是出错,刚开始的时候总是怀疑自己的能力,是不是程序错了,后来发现是硬件的问题,这件事情让我知道了只要自己掌握了相关知识,就要相信自己的能力!5、参考文献1.侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计. 西安:西安电子科技大学出版社,19992.求是科技.CPLD/FPGA应用开发技术与工程实践.北京:人民邮电出版社,20053.罗苑棠.CPLD/FPGA常用模块与综合系统设计实例精讲.北京:电子工业出版社,2007 4.任勇峰,庄新敏.VHDL与硬件实现速成.北京:国防工业出版社,200510。