基于FPGA的矩阵键盘接口设计

基于FPGA的矩阵键盘接口设计
基于FPGA的矩阵键盘接口设计

基于FPGA的键盘接口设计

专业:电子信息科学与技术系作者:李先仙指导老师:刘强摘要:现场可编程逻辑门阵列FPGA (Field Programmalbe Gate Array)具有掩膜可编程门阵列的通用结构,由逻辑功能块排成阵列组成,并由可编程的互联资源连接这些逻辑功能块以及相应的输入/输出单元来实现不同的设计。在电子产品中,键盘是最基本的输入设备,然而在应用中都采用通用的键盘扫描器件是不现实的,需要单独设计成专用的小键盘。随着电子技术和EDA (Electronic Design Automatic,电子设计自动化)技术的发展,大规模可编程逻辑器件PLD(Programmable Logic Device)、现场可编程门阵列FPGA完全可以取代大规模集成电路芯片,实现计算机可编程接口的功能,并可将若干接口电路的功能集成到一片PLD或FPGA芯片中。鉴于大规模PLD或FPGA的计算机接口电路不仅具有集成度高、体积小和功耗低等优点,而且还具有独特的用户可编程能力,从而实现计算机系统的功能重构。本文设计首先介绍行列式键盘的原理和应用,通过对其接口电路的详细分析;然后利用VHDL硬件描述语言和FPGA器件并采用模块化设计的方法完成了基于FPGA的行列式键盘接口电路的设计;最后通过计算机仿真,对本文设计的行列式键盘接口电路的正确性进行了验证。

关键词:键盘;仿真;VHDL语言;FPGA;模块化设计

Based on FPGA Keyboard Connection Design

Major:Electronic Information Science and Technology

Author: Li Xianxian Instructor: Liu Qiang

Abstract: The Filed Programmmalbe Gate Array,shorted by FPGA,which has a mask-programmable gate array of generic structure and function blocks in the logic array of line,through a programmable logic of internet resources connecting these function blocks and the corresponding input/output modules to achieve different design.In electronic products,the keyboard is the most basic input device,however,it’s unrealistic of using general keyboard scanning device in the application ,we need for the separate designing of the small keyboard. With the development of Electronic and EDA(Electronic Design Automatic)technology,Large Scale Integration chips can be replaced by PLD(Programmable Logic Device)and FPGA ,which can realize the function of the Programmable Interface chips and feature a number of interface circuits integated into one of the PLD or FPGA chips.The computer interface circuit based on the technology of PLD and FPGA not only has the virtue of high integration,low volume and low power loss, but also has the unique programmable function,which can realize reconstruction of the function of computer system.The designing of this article first introduced the determinant keyboard’s theory and application,through to analysis its connection electric circuit in very great detail ,and then used VHDL hardware description language and FPGA device to complete FPGA-based determinant keyboard connection electric circuit design with modular design mathod.Fianally,through the method of simulations to verify the accuracy of the determinant keyboard connection electric circuit of the design.

Key words: Keyboard; Simulalion; VHDL lauguage; FPGA; Modular design

前言

键盘历史非常悠久,早在1714年,就开始相继有英、美、法、意、瑞士等国家的人发明了各种形式的打字机,最早的键盘就是那个时候用在那些技术还不成熟的打字机上的;到了20世纪中期,键盘又多了一个用武之地——作为电脑的基本输入设备,用户通过它向计算机传递信息,它有机械式、电容式、电感式和薄膜式等多种形式,按获取按编码的方式,可分为编码键盘和非编码键盘;根据键盘插口方式分为AT接口键盘和PS/2接口键盘和USB接口键盘,其中AT接口键盘目前已基本被淘汰[1]。然而在应用中都采用通用的键盘扫描器件是不现实的,由可编程逻辑器件组成的数字电路系统中经常需要有输入/输出设备,以用来与用户更好地进行交互。现代EDA(Electronic Design Automation,电子设计自动化)技术提供了一种很好的途径,利用VHDL硬件描述语言和FPGA器件可以很方便地构建键盘接口电路[2]。本文采用VHDL语言设计的基于FPGA的行列式键盘接口设计,行列式键盘是常用的输入/输出设备之一,它结构简单,携带方便,功耗低,能够适用于各种功率要求的场合,功能强大,能有效的提高利用I/O口的利用率。行列式键盘电路的FPGA实现主要解决三个问题,一是如何检测是否有按键按下并防止采集到干扰信号,二是在按键闭合时如何防止抖动,三是如何判断为哪一个按键位动作,并对其进行译码。因此,要解决这些问题,把行列式键盘接口电路分为键盘扫描电路、键盘译码电路、按键标志产生电路、时钟模块以及键盘顶层电路等四个模块来实现。首先利用VHDL硬件描述语言在FPGA芯片上实现键盘接口并利用仿真FPGA软件进行仿真;之后便可利用FPGA实验箱搭建相应的硬件电路,在硬件上实现键盘接口的一些基本功能。

在Altera、Atmel等公司都推出了内嵌微处理器的FPGA,但由于价格、开发手段和方法等因素的影响,在未来一段较长的时间里,还是会更多的采用单片机与FPGA配合的方式设计系统,以发挥单片机的灵活性和FPGA的高速性[3]。

1 VHDL和FPGA概述

1.1 VHDL概述

1.1.1 VHDL的由来和特点

VHDL是Very high speed integrated circuit Hardware Deseription Language的缩写,意思是非常高速集成电路的硬件描述语言,是HDL(Hardware Deseription Language,硬件描述语言)的一种。这是一项由美国国防部所支持的研究计划,目的是为了把电子电路的设计意义以文字或文件的方式保存下来,以便他人能轻易地了解电路的设计意义。由于VHDL电路描述语言所能涵盖的范围很广,从ASIC(Application Specific Integrated Circuit,专用集成电路)的设计到PCB(Printed Circuit Board,印刷电路板)系统的设计,VHDL电路描述语言都能派上用场,所以VHDL语言毫无疑问地成为硬件设计工程师的必备工具[4]。

VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多方面具有硬件特征的语句外,VHDL的语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(即端口)

和内部(即设计实体的内部功能和算法完成部分)。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其它的设计就可以直接调用这个实体[5]。这种将设计实体分成内、外两部分的概念是VHDL系统设计的基本点。具体特点如下:

1) 与其它的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模集成电路的重要保证。

2) VHDL丰富的仿真语言和库函数,使得在大规模集成电路设计的早期就能查验出设计系统的功能可行性,可随时对设计进行功能仿真、时序仿真,使设计者在设计初期就可以对整个工程设计的可行性作出决策,从而缩短了设计周期,减少了研发成本。

3) VHDL语句的行为描述能力和程序结构决定了它具有支持大规模集成电路设计的分解和对已有设计的再利用功能[4]。重复利用他人的IP (Intelligence Property core,知识产权核,一种正式注册产权的电路设计)模块和软核(soft core)是VHDL的特色,设计不必各个都从头再来,只要在更高的层次上把IP模块利用起来,能达到事半功倍的效果。

4) 对于VHDL完成的一个确定的设计,可以利用EDA工具(如MAX+PLUSⅡ)进行逻辑综合和优化,并自动把VHDL描述设计转换成门级网表。这种设计方式突破了传统门级设计中的瓶颈,极大地减少了电路设计的时间和错误发生率,降低了开发成本,缩短了设计周期。

5) VHDL对设计的描述具有相对的独立性,设计者可以不懂硬件的结构,也不必关心最终设计的目标器件是什么而进行独立的设计。正因为VHDL的硬件描述与具体的工艺和硬件结构无关,VHDL 设计程序的硬件实现目标器件有广阔的选择范围。

6) 由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的前提下,只需改变类属参数或函数,就能改变设计的规模和结构[6]。

1.1.2 VHDL的描述风格

在VHDL结构体中,可以用不同的描述方式或者说是建模方法来表达,通常可归纳为行为描述、寄存器传输RTL(Registers Transfer Language)描述和结构描述[7]。

行为描述:行为描述只表示输入与输出间转换的行为,不包含任何结构信息。行为描述主要指顺序语句描述,即通常是指含有进程的非结构化的逻辑描述。

RTL描述:也称为数据流描述,是以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。RTL描述是建立在用并行信号赋值语句(进程)基础上的,RTL描述能比较直观地表达底层逻辑行为。它既含有逻辑单元的结构信息,又隐含表示某种行为,RTL描述主要是指非结构化的并行语句描述。

结构描述:结构描述是基于元件例化或生成语句的应用,表示元件间的互连,其风格最接近实际的硬件结构。

1.1.3 VHDL基本程序结构

一个相对完整的VHDL设计由以下几个部分组成:

库、程序包;

实体;

结构体;

配置;

其各自作用如图1所示:

图1 VHDL基本程序结构

以上四个部分并不是每一个VHDL程序都必须具备的,其中只有一个实体和一个与之对应的结构体是必须的[8]。

1)实体

实体(ENTITY)是VHDL设计中最基本的一个组成部分,VHDL表达的所有设计均与实体有关。实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只定义了该设计所需的全部输入输出信号。

实体的语法格式如下:

ENTITY实体名IS

[GENERIC (常数名:数据类型[:设定值])];---- []表示可选项;

PORT

(列出设计的所有输入与输出);

END 实体名;

2)结构体

所有能被仿真的实体都有结构体(ARCHITECTURE)描述,它描述了实体的结构或行为。在结构体描述中可采用行为描述、结构描述或数据流描述三种不同的描述方式(或称为建模方法),从不同的侧面描述结构体的行为方式。在实际应用中,为了兼顾整个设计的功能、资源、性能几方面的因

素,通常混合使用这三种描述方式。

结构体的语法格式如下:

ARCHITECTURE 结构名OF 实体名IS

{说明语句}

BEGIN

功能描述语句;

END 结构体名[9];

1.2 FPGA概述

FPGA(Field Programmable Gates Array)是现场可编程门阵列,FPGA既具有门阵列器件的高度集成度和通用性,又有可编程器件用户可编程的灵活性。所谓现场可编程,是指用户在自己的实验室内编程[10]。

1.2.1 FPGA结构和特点

FPGA具有类似门阵列或类似ASIC的结构,既有门阵列的高逻辑密度和通用性,又有可编程器件的用户可编程性。它通常包含三类可编程资源:可编程逻辑功能块,可编程I/O块和可编程互联网络。可编程逻辑功能块是实现用户功能的基本单元,它们通常排列成一个阵列,散布于整个芯片;可编程I/O块完成芯片上逻辑与外部封装引脚的接口,常围绕着阵列排列于芯片四周;可编程内部网络互连包括各种长度的连线线段和一些可编程连接开关,它们将各个可编程逻辑块或I/O块连接起来,构成特定功能的电路。不同厂家生产的FPGA在可编程逻辑块的规模、内部互连线的结构和采用的可编程元件上存在较大的差异,因而实现逻辑块的规模、内部互连线的结构和采用的可编程元件上存在较大的差异,因而实现逻辑功能的能力也不同。FPGA具有布线灵活,可用逻辑门数多,布线延迟不可预测的特点。

FPGA一般用于逻辑仿真。设计师设计一个电子电路首先要确定线路(也可以用HDL进行行为级描述,然后做逻辑综合),然后进行软件模拟及优化,以确认所设计电路的功能及性能。然后随着电路规模的不断增大,工作频率的不断提高,将会给电路引入许多分布参数的影响,而这些影响用软件模拟的方法较难直接反映出来,所以有必要做硬件仿真。

FPGA可实现硬件仿真以做成模型机。将软件模拟后的线路经一定处理后下载到FPGA,就可很容易地得到一个模型机,根据这个模型机,设计师就可很直观地测试其逻辑功能及性能指标。目前已有一些优秀的EDA软件可将FPGA中的线路直接映射到标准单元库以制成版图,这样就保证了电路设计的正确性。

FPGA门阵列中的每个节点不像CPLD是单独的门,而是用门、触发器等做成的逻辑单元,并在各个单元之间预先制作了许多连线,所谓编程,就是安排逻辑单元与这些连线之间的关系,依靠连接点的合适配置,实现各逻辑单元之间的互联[11]。

FPGA的主要特点是:寄存器数目多,采用查找表计数,适合时序逻辑设计。但是互连复杂。由于互连采用开关矩阵,因而使得延时估计往往不十分准确。它也有自身的局限性,其一就是器件规模的

限制,其二就是单元延迟比较大。所以,在设计者选定某一FPGA器件后,要求设计者对器件的结构、性能作深入的了解,在体系结构设计时,就必须考虑到器件本身的结构及性能,尽可能使设计的结构满足器件本身的要求。这样就增加了设计的难度。离开对FPGA结构的详细了解,设计人员就不可能优化设计,因而设计人员必须了解FPGA的特性和限制,熟悉FPGA的结构。

在了解FPGA结构特点的基础上,就可以利用VHDL语言描写出高效的电路描述实现性能优化的电路[12]。

1.2.2 基于FPGA的数字集成电路设计过程

基于FPGA的设计流程图如图2所示:

图2 基于FPGA的设计流程图

1)设计输入

设计输入就是设计者对逻辑器件的逻辑功能描述。设计输入通常采用图形输入和VHDL文本输入方式。在设计输入过程中,往往采用层次化设计方法,分模块、分层次地进行设计描述。描述器件总功能的模块放在最上层,称顶层设计;描述器件最基本功能的模块放在最低层,称低层设计;一般在顶层设计中采用图形输入法来描述模块连接关系;在低层设计中采用HDL文本输入法描述模块的逻辑功能。

2)项目编辑

为完成对设计的处理,MAX+PLUSll提供了一个完全集成的编译器(Compiler),可直接完成从网表提取到最后编程文件的生成。在编译过程中生成一系列标准文件可进行时序模拟、适配等。在编

译过程中,若某部个环节出错,编译器会停下来,并告诉错误的原因及位置,直到编译通过。

3)项目校验

完成对设计的功能、时序仿真及进行时序分析、寄存器性能分析。

4)项目编程

将设计的项目下载/配置到所选择的器件FPGA中。

由FPGA的设计流程可知,采用VHDL语言进行FPGA设计或利用FPGA进行ASIC前端设计的功能验证,主要工作是系统模块的划分、对各个模块RTL(Registers Transfer Language)级可综合VHDL 语言的描述、功能及时序的仿真,至此仅完成了系统软件上的仿真。由于仿真激励文件的不完善,所以时序仿真的通过并不代表加载到FPGA片中的成功,只有真正通过了FPGA的硬件调试,才是系统设计的真正成功[6]。

2 行列式键盘介绍

2.1行列式键盘概述

为了减少键盘与单片机接口时所占用I/O口线的数目,在键数较多时,通常都将键盘排列成行列矩阵式,行列式键盘又叫矩阵式键盘。用带有I/O口的线组成行列结构,按键设置在行列的交点上。例如用2*2的行列结构可以构成4个键的键盘,4*4的行列结构可以构成有16个键的键盘。这样,当按键数量平方增长时,I/O口线只是线性增长,这样就可以节省I/O口线。

2.2行列式键盘原理

行列式键盘的电路原理图如图3所示

图3 行列式键盘电路原理图

按键设置在行列线交叉点,行、列线分别连接到按键开关的两端。列线通过上拉电阻接+5V的电压,即列线的输出被钳位到高电平状态。行线与按键的一个引脚相连,列线与按键的另一个引脚相连。

判断键盘中有无按键按下是通过行线送入扫描信号,然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。

设行扫描信号为keydrv3~keydrv0,列线按键输入信号keyin3~keyin0与按键位置的关系如表1所示。

表1 行扫描信号、列按键输入信号与按键位置的关系

3 键盘电路与FPGA 接口实现

3.1系统结构和模块划分

图4 键盘接口电路结构图

由行列式键盘的原理可以知道,要正确地完成按键输入工作必须有按键扫描电路产生keydrv3~keydrv0信号。同时还必须有按键译码电路从keydrv3~keydrv0信号和keyin3~keyin0信号中keydrv3~keydrv0

keyin3~keyin0 对应的按键

1110

1110 1 1101 2 1011 3 0111 4

1101 1110 5 1101 6 1011 7 0111 8

1011 1110 9 1101 0 1011 A 0111 B

0111 1110 C 1101 D 1011 E 0111 F

译码出按键的键值。此外,一般还需要一个按键发生标志信号用于和其他模块接口,通知其它模块键盘上有按键动作发生,并可以从键盘模块中读取按键键值。由于各个模块需要的时钟频率是不一样的,因此时钟产生模块就是用于产生各个模块需要的时钟信号。因此得到键盘接口电路的结构如图4所示。

行列式键盘电路的FPGA实现主要解决三个问题,一是如何检测是否有按键按下并防止采集到干扰信号;二是在按键闭合时如何防止抖动;三是如何判断为哪一个按键位动作,并对其进行译码。因此,要解决这些问题,把行列式键盘接口电路分为键盘扫描电路、键盘译码电路和按键标志产生电路、时钟模块以及键盘顶层电路等四个模块来实现.具体流程图如图5所示[13]。

图5 行列式键盘接口程序流程图

3.2键盘扫描电路模块

3.2.1键盘扫描电路的原理

键盘扫描电路是用于产生keydrv3~keydrv0信号,其变化的顺序依次为1110→1101→1011→0111 →……周而复始地扫描。其停留在每个状态的时间大约为10ms。更短的停留时间是没有必要的,因为人按键的时间大约为10ms,不可能有更快的按键动作发生;另外,更短的停留时间还容易采集到抖动信号,会干扰判断。而太长的停留时间则容易丢失某些较快的按键动作。

图6 键盘扫描电路外部接口

3.2 2键盘扫描电路的语言描述及仿真

键盘扫描电路的VHDL语言描述见附录1。

该程序采用一个状态机来实现扫描电路。该状态机是一个one-hot状态机,并且输出值就是状态机的状态,没有通过一个逻辑电路来做输出译码。这样做的好处是得到的输出信号比较“干净”,没有毛刺。

其仿真波形如图7所示。

图7 键盘扫描电路仿真图

3.3键盘译码电路和按键标志产生电路模块

3.3.1键盘译码电路和按键标志产生电路原理

键盘译码电路是从keydrv3~keydrv0和keyin3~keyin0信号中译码初按键键值的电路,它的真值表见表1所示。按键标志产生电路是产生按键标志信号keypressed的电路。由于这两个电路关系紧密,因此放入同一个模块中实现。其外部接口如图8所示。

图8 键盘译码电路的外部接口

其中clk为全局时钟信号,它是由FPGA芯片的外部晶振给出的。clk在系统中的频率是最高的,其它时钟都由有它分频产生;clk_scan是用于产生扫描信号的时钟信号的,周期为10ms。keydrv为键盘扫描信号,keyin为键盘输入信号,keyvalue为键值(代表按键所在位置),keypressed表示有一个按键被按下,每发生一次按键动作,keypressed就输出一个宽度为全局时钟周期的正脉冲。该信号用于与其它模块握手,负责通知其它模块键盘上有按键发生。其它模块在keypressed有效时,可以读取键值。functionkey信号是表明按键是否为功能键(键A、B、C、D、E和F为功能键)的。functionkey 信号的作用(在很多电路中)是需要区分按键是数字键还是功能键。当按键是功能键时,functionkey 为高电平,否则为低电平。

3.3.2键盘译码电路和按键标志产生电路的语言描述及仿真

键盘译码电路和按键标志产生电路的VHDL语言描述见附录2。

该程序中有三个进程,第一个进程负责译码,值得注意的是WHEN OTHER语句中有没有对temp_pressed和keyvalue信号赋值,这相当于不改变temp_pressed和keyvalue信号的值,即实现了锁存输出。在不需要锁存输出时,在WHEN OTHER语句中,一定要对所有case语句中出现的信号逐

一赋值,以免产生意想不到的结果。第二个进程是负责按键标志产生电路模块,其敏感信号clk_scan 是用于产生扫描信号的时钟,周期为10ms。按键信号temp_pressed首先通过clk_scan信号的上升沿采样。通过采样后,抖动噪声被消除。采样后的信号被分别延迟1~4个clk_scan周期得到4个信号进行或运算得到一个宽约80ms并且与全局时钟一步的按键信号keypressed_asy。这样,一个长时间的按键过程有可能被认为是多次按键,通过这种方法使得一个长时间的按键仍然被认为是一次按键。第三个进程负责把按键同步信号同步化为与全局时钟同步的并且脉宽为一个周期的脉冲[14]。

该电路的仿真结果如图9所示。

图9键盘译码电路仿真波形

通过仿真波形图可以看出,按键动作的抖动不会影响输出的结果;无论一个按键动作持续多久的时间,仍然会被认为是一次按键。

3.4时钟产生模块

3.4.1时钟产生模块原理

时钟产生模块是用于产生扫描时钟的,它的输出提供给键盘扫描模块和按键标志产生模块,其外部接口如图10所示。它的输入是全局时钟,在这里假设全局时钟频率为12MHz。它的输出是周期为100ms的扫描时钟。

图10 时钟产生模块外部接口

3.4.2时钟产生模块的语言描述及仿真

时钟产生模块的VHDL语言描述见附录3。

该程序主要包含有一个计数器模块和一个译码输出模块,该程序是通过计数器模块实现分频的。要从12MHz的全局时钟得到100Hz的时钟,必须进行120000倍的分频。这么大的分频需要仿真时间太久。仿真时一般采用小的分频来替代,(在本程序中采用200分频来仿真)以方便快速观察到结构。等到真正下载到电路上时,就需要采用1200000分频了。另一点值得注意的是译码器的输出采用了寄

存器锁存输出,这是为了消除毛刺。多输入的组合逻辑电路中,某些输入信号在理想情况下应该同时发生变化,但由于延迟路径不同造成这些输入信号发生变化的时间有微小差别(门延迟时间量级),这时得到的输出信号就会有毛刺,这些毛刺有可能会给下一级电路带来问题,使得整个系统运行不稳定。因此,为保证系统的稳健性,一般情况下,都应该给输出信号消去毛刺,是之变得干净。在本程序中,译码器的输入是计数器的输出,计数器各级输出延迟是不一样的,因此译码器输出clk_scan信号波形就会有毛刺。

解决毛刺的方法有两种:

1)设法使得组合逻辑电路的输入每一时刻只有一个发生变化。在本例中就是把计数器从二进制码改为格雷码(Gray Code)计数器。格雷码计数器的特点是相邻的计数值只有一位不同,即每次计数值改变时,只有一位信号会发生变化。这一特点就可以保证没有毛刺产生[15]。

2)把有毛刺的信号通过时钟采样,即通过一个D触发器。本例中就是使用这种方法。这种方法的缺点是信号通过一个D触发器后,就延迟了一个时钟周期。在本例中这种延迟是允许的,然而在有些电路中延迟是不允许的。该电路的仿真结果如图11所示。

图11 时钟产生模块仿真波形图

3.5键盘接口电路顶层电路实现

3.5.1键盘接口电路顶层电路实现原理

键盘接口电路的顶层电路比较简单,基本上只是把键盘扫描模块、键盘译码且按键标志产生模块和时钟产生模块连接起来,其结构如图12所示。

图12 键盘接口电路图

3.5.2键盘接口电路顶层电路的语言描述及仿真

键盘接口电路的VHDL语言描述见附录4。

仿真波形如下图13所示:

图13 键盘接口电路仿真波形

4结束语

经过几个月的努力,我终于完成了对本论文的编写。其中包括研究课题的提出、国内外发展动态的调研、资料的收集、方案的论证、软硬件的设计与调试和最后的测试。本文论述了基于FPGA的键盘接口设计,先介绍VHDL和FPGA的相关知识,然后以行列式键盘为例,介绍了行列式键盘的基本原理及其电路模块的划分,并详细叙述了键盘扫描电路、键盘译码电路、按键标志产生电路、时钟模块以及键盘顶层电路等四个模块的原理及实现过程。在设计中,利用VHDL硬件描述语言在FPGA 芯片上实现键盘接口设计并利用仿真FPGA软件进行仿真,主要解决了三个问题:一是如何检测是否有按键按下并防止采集到干扰信号;二是在按键闭合时如何防止抖动;三是如何判断为哪一个按键位动作,并对其进行译码。

由于本人的理论水平和实践经验有限,错误在所难免,敬请给予批评和指正。

5 参考文献:

[1]杨勇刘佩军主编.微型计算机接口技术(第3版)[M].电子工业出版社,2005,135-142.

[2]张海劲刘强蔡桂玲.用VHDL语言开发可编程逻辑器件[J].光电技术应用,2003,03:16-18.

[3]田源.基于VHDL语言实现FPGA设计[J].火控雷达技术2004,01:58-60.

[4]曾繁泰陈美金主编.VHDL程序设计[M].清华大学出版社,2000,2-16.

[5]张晓军解大陈陈.VHDL语言在电子设计自动化中的应用[J].电力自动化设备2002,05:32-33.

[6]韩进.基于FPGA的计算机可编程外围接口芯片的设计与实现[D].山东科技大学,2003:5-8.

[7]周彩宝刘应学.VHDL语言及其应用[J].计算机工程1998,10:64-65.

[8]吴建国张建勋.VHDL综合系统若干问题处理方法[J].安徽大学学报,2002,02:18-23.

[9]刘淑荣蒋彬.基于VHDL语言的数字电路设计[J].长春工程学院学报,2002,04:60-61.

[10]王开军姜宇柏主编.面向CPLD/FPGA的VHDL设计[M].机械工业出版社,2007,143-148.

[11]罗朝霞高书莉主编.CPLD/FPGA设计及应用[M].人民邮电出版社,2007,10-46.

[12]罗旻沈绪榜高德远.FPGA的VHDL设计策略[J].小型微型计算机系统2003,07:1194-1196.

[13]吕文浩李玉惠李勃.基于FPGA的行列式键盘接口电路设计[J].仪器仪表用户2007,05:64-65.

[14]求是科技.CPLD/FPGA应用开发技术与工程实践[M].人民邮电出版社,2005,368-370.

[15]蒋毅.可编程逻辑器件的应用参考[J].世界电子元器件2005,09:30-32.

6致谢

在做毕业论文的几个月中,我的指导老师和同学不但对我的论文提出了宝贵的意见,而且在各方面都给我很大的支持,使我的论文顺利完成初稿并进入复稿阶段。

首先在这里我要感谢我的指导老师刘强,他不但给我论文思路上的提示,而且帮助我搜集了大量的资料,使我论文的原材料丰富而不复杂,同时他耐心的指导我们在硬件和软件方面的知识,才使我的论文比较顺利的完成,他渊博的知识,耐心的指导,以及务实的研究态度,使我深受感动。

在此,我也要感谢教过我的老师,是他们传授我知识,才能有今天这篇论文的产生,他们在四年不但传授我知识,而且也给我不少人生的指点。同时我要感谢我的同学,他们给我莫大的支持,在我做论文期间,和我一起讨论,给我的论文提了宝贵的意见。

最后,我想感谢大学里一切帮助过我的人,没有他们的帮助,我不可能顺利地毕业,正因为有了这么多帮助我的人,我才能走到今天。衷心地祝福每个人事事顺心,幸福。

附录1

键盘扫描电路的VHDL描述语言

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY keysan IS

PORT(

clk_scan:IN STD_LOGIC; --扫描时钟,周期10ms

keydrv: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --输出扫描信号END keysan;

ARCHITECTURE behavier OF keysan IS

CONSTANT s0: STD_LOGIC_VECTOR(3 DOWNTO 0):="1110"; --定义状态机编码

CONSTANT s1: STD_LOGIC_VECTOR(3 DOWNTO 0):="1101";

CONSTANT s2: STD_LOGIC_VECTOR(3 DOWNTO 0):="1011";

CONSTANT s3: STD_LOGIC_VECTOR(3 DOWNTO 0):="0111";

SIGNAL present_state: STD_LOGIC_VECTOR(3 DOWNTO 0); --状态机现态

SIGNAL next_state: STD_LOGIC_VECTOR(3 DOWNTO 0); --状态机次态

BEGIN

--状态更新进程

PROCESS(clk_scan)

BEGIN

IF(clk_scan'event and clk_scan='1')THEN

present_state<=next_state;

END IF;

END PROCESS;

--状态译码

PROCESS(present_state)

BEGIN

CASE present_state IS

WHEN s0=>next_state<=s1;

WHEN s1=>next_state<=s2;

WHEN s2=>next_state<=s3;

WHEN s3=>next_state<=s0;

WHEN OTHERS=>next_state<=s0;

END CASE;

END PROCESS;

--输出译码

keydrv<=present_state;

END behavier;

附录2

键盘译码电路和按键标志产生电路的VHDL描述语言LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE. std_logic_arith.ALL;

ENTITY keydecoder_deb IS

PORT(

keyin:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入

keydrv: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --扫描输出

clk: IN STD_LOGIC; --全局时钟

ck_scan: IN STD_LOGIC; --扫描时钟

keyvalue: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --键值

keypressed: OUT STD_LOGIC; --有按键被按下标志

functionkey: OUT STD_LOGIC); --功能键标志END keydecoder_deb;

ARCHITECTURE rtl OF keydecoder_deb IS

SIGNAL temp: STD_LOGIC_VECTOR(7 DOWNTO 0);

--用于产生KEYPRESSED

SIGNAL temp_pressed: STD_LOGIC;

--6个寄存器

SIGNAL q1,q2,q3,q4,q5,q6: STD_LOGIC;

--同步化的keypressed

SIGNAL keypressed_asy:STD_LOGIC;

BEGIN

temp<=keydrv&keyin;

--译码进程

PROCESS(temp)

BEGIN

CASE temp IS

WHEN"11101110"=>keyvalue<=CONV_STD_LOGIC_VECTOR(1,4);

temp_pressed<='1';

functionkey<='0';

WHEN"11101101" =>keyvalue<=CONV_STD_LOGIC_VECTOR(2,4);

temp_pressed<='1';

functionkey<='0';

WHEN"11101011" =>keyvalue<=CONV_STD_LOGIC_VECTOR(3,4);

temp_pressed<='1';

functionkey<='0';

WHEN"11100111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(4,4);

temp_pressed<='1';

functionkey<='0';

WHEN"11011110" =>keyvalue<=CONV_STD_LOGIC_VECTOR(5,4);

temp_pressed<='1';

functionkey<='0'; WHEN"11011101" =>keyvalue<=CONV_STD_LOGIC_VECTOR(6,4);

temp_pressed<='1';

functionkey<='0';

WHEN"11011011" =>keyvalue<=CONV_STD_LOGIC_VECTOR(7,4);

temp_pressed<='1';

functionkey<='0';

WHEN"11010111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(8,4);

temp_pressed<='1';

functionkey<='0';

WHEN"10111110" =>keyvalue<=CONV_STD_LOGIC_VECTOR(9,4);

temp_pressed<='1';

functionkey<='0'; WHEN"10111101" =>keyvalue<=CONV_STD_LOGIC_VECTOR(0,4);

temp_pressed<='1';

functionkey<='0';

WHEN"10111011" =>keyvalue<=CONV_STD_LOGIC_VECTOR(10,4);

temp_pressed<='1';

functionkey<='1';

WHEN"10110111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(11,4);

temp_pressed<='1';

functionkey<='1';

WHEN"01111110" =>keyvalue<=CONV_STD_LOGIC_VECTOR(12,4);

temp_pressed<='1';

functionkey<='1';

WHEN"01111101" =>keyvalue<=CONV_STD_LOGIC_VECTOR(13,4);

temp_pressed<='1';

functionkey<='1';

WHEN"01111011" =>keyvalue<=CONV_STD_LOGIC_VECTOR(14,4);

temp_pressed<='1';

functionkey<='1';

WHEN"01110111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(15,4);

temp_pressed<='1';

functionkey<='1';

WHEN OTHERS =>

temp_pressed<='0';

END CASE;

END PROCESS;

--按键标志产生电路

PROCESS(clk_scan)

BEGIN

IF(clk_scan'event and clk_scan='1')THEN

q1<=temp_pressed;

q2<=q1;

q3<=q2;

q4<=q3;

END IF;

keypressed_asy<=q1 OR q2 OR q3 OR q4;

END PROCESS;

--同步化keypressed_asy

PROCESS(clk)

BEGIN

IF(clk'event and clk='1')THEN

q5<= keypressed_asy;

q6<=q5;

END IF;

keypressed<=q5 AND NOT(q6);

END PROCESS;

END rtl;

附录3

时钟产生模块的VHDL描述语言

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE. std_logic_arith.ALL;

ENTITY clk_gen IS

PORT(

clk:IN STD_LOGIC; --全局时钟

clk_scan:OUT STD_LOGIC --扫描时钟

);

END clk_gen;

ARCHITECTURE rtl OF clk_gen IS

SIGNAL cnt:INTEGER RANGE 0 TO 199;

BEGIN

--计数模块

PROCESS(clk)

BEGIN

IF(clk'event and clk='1')THEN

IF(cnt=cnt'high)THEN

cnt<=0;

ELSE

cnt<=cnt+1;

END IF;

END IF;

END PROCESS;

--译码输出

PROCESS(cnt,clk)

BEGIN

IF(clk'event and clk='1') THEN --寄存器锁存输出,目的消除波形上的“毛刺”

IF cnt>=cnt'high/2 THEN

clk_scan<='1';

ELSE

clk_scan<='0';

END IF;

END IF;

END PROCESS;

END rtl;

附录4

键盘接口电路顶层电路的VHDL描述语言

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY key IS

PORT(

clk:IN STD_LOGIC; --全局时钟

keyin:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

keyvalue:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

keypressed: OUT STD_LOGIC;

functionkey: OUT STD_LOGIC;

keydrv:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));

END key;

ARCHITECTURE rtl OF key IS

COMPONENT keysan --键盘扫描模块

port(

clk_scan:IN STD_LOGIC; --扫描时钟,周期10ms

keydrv:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --输出扫描信号END COMPONENT;

COMPONENT clk_gen --时钟产生模块

PORT(

clk:IN STD_LOGIC; --全局时钟

clk_scan:OUT STD_LOGIC); --扫描时钟

END COMPONENT;

COMPONENT keydecoder_deb --键盘译码和按键标志产生模块PORT(

keyin:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入

keydrv:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --扫描输出

clk: IN STD_LOGIC; --全局时钟

clk_scan:IN STD_LOGIC; --扫描时钟

keyvalue:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --键值

keypressed: OUT STD_LOGIC; --有键被按下标志

functionkey: OUT STD_LOGIC); --功能键标志END COMPONENT;

SIGNAL clk_scan:STD_LOGIC;

BEGIN

keysan1:keysan

PORT MAP(clk_scan=>clk_scan,

keydrv=>keydrv);

clk_gen1:clk_gen

PORT MAP(clk=>clk,

clk_scan=> clk_scan);

基于FPGA的多功能数据选择器设计与实现

基于FPGA的多功能数据选择器设计与实现 章军海201022020671 [摘要]传统的数字系统设计采用搭积木式的方法来进行设计,缺乏设计的灵活性。随着可编程逻辑器件(PLD)的出现,传统设计的缺点得以弥补,基于PLD的数字系统设计具有很好的灵活性,便于电路系统的修改与调试。本文采用自顶向下的层次化设计思想,基于FPGA设计了一种多功能数据选择器,实现了逻辑单元可编程、I/O单元可编程和连线可编程功能,并给出了本设计各个层次的原理图和仿真时序图;本文还基于一定的假设,对本设计的速度和资源占用的性能进行了优化。 [关键词]层次化设计;EDA;自顶向下;最大时延 0引言: 在现代数字系统的设计中,EDA(电子设计自动化)技术已经成为一种普遍的工具。基于EDA技术的设计中,通常有两种设计思想,一种是自顶向下的设计思想,一种是自底向上的设计思想[1]。其中,自顶向下的设计采用层次化设计思想,更加符合人们的思维习惯,也容易使设计者对复杂系统进行合理的划分与不断的优化,因此是目前设计思想的主流。基于层次化设计思想,实现逻辑单元、I/O单元和连线可编程可以提高资源的利用效率,并且可以简化数字系统的调试过程,便于复杂数字系统的设计[2][3]。 1系统原理图构架设计 1.1系统整体设计原理 本设计用于实现数据选择器和数据分配器及其复用的I/O端口和连线的可编程却换,提高系统的资源利用效率。系统顶层原理框图如图1所示,系统拥有两个地址选择端口a0、a1,一个功能选择端口ctr,还有五路I/O复用端口。其中,地址选择端口用于决定数据选择器的数据输入端和数据分配器的数据输出端;功能选择端口用于切换数据选择器和数据分配器,以及相应的I/O端口和连线;I/O复用端口数据的输入和输出,其功能表如表一所示。 图1顶层模块原理图 表一顶层系统功能表

郭天祥老师51单片机中矩阵键盘显示程序

3.键盘的应用,第一排。 #include #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; void delay(uint); uchar code table[]= { //段选的数字决定显示的数字,这里的是数字0~15 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,}; uchar num,temp; void main() { dula=0; wela=1; P0=0xc0; //位选6数码管 wela=0; while(1) { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break;

case 0x7e:num=4; break; } } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } dula=1; P0=table[num-1]; dula=0; } } void delay(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

基于FPGA的脉冲发生器的设计

【基础?应用】 基于FP GA 的脉冲发生器的设计 ① 张 涛 (北方交通大学电子信息工程学院,北京100044)【摘 要】 以脉冲发生器为研究对象,介绍了脉冲发生器的基本原理、硬件构成和实现方法,阐述了一种基于DSP -FP G A 数字系统的PWM 控制脉冲生成方法,并给出了仿真及实测实验结果。 【关键词】 脉宽调制;脉冲发生器;可编程门阵列 1 FP G A 简介 FP G A (Field Programmable G ate Array ,可编程门阵列)是美国Xinlinx 公司推出的一种采用单元型结构的新型PLD 器件。它采用CMOS 、SRAM 工艺制作,在结构上与阵列型PLD 不同,它的内部由许多独立的可编程逻辑单元构成,各逻辑单元之间可以灵活地相互连接,具有密度高、速度快、编程灵活和可重新配置等诸多优点。FP G A 已成为当前主流的PLD 器件之一。 1.1 PLD 的主要特点 (1)缩短研制周期。 (2)降低设计成本。用PLD 来设计和改造电子产品可以大幅度地减少印制板的面积和接插件,降低装配和调试费用。 (3)提高设计灵活性和可靠性。大量分立式元器件在向印制板上装配时,往往会发生由于虚焊或接触率近似于线性增加,且线性斜率较小;肝脏中大小不同的散射源对不同频率的声波存在有不同的散射效应。 由于肝脏组织结构的非均匀性、复杂性及其各部分散射相关长度分布的不一致性,其散射谱随深度增加而衰减变化,并非完全呈线性关系,而呈现较复杂的关系变化。 ⑵肝叶边缘部分及表层区域,其结构散射近似呈瑞利散射特征;肝叶表层以下与肝叶中心之间的中间区域,其结构散射呈随机散射特征;肝叶中心区域,其结构散射呈扩散漫射特征,也有较强的反射。 ⑶利用区域结构散射特征谱,不仅可对各特征区域组织微结构作出粗略估计,而且可通过区域散射谱特征的变化,对生物软组织的生理病理变化的判断提供依据。 综上所述,利用超声散射谱分析,可为B 超的形态学图像信息诊断提供一个组织特征的信息,在临床上是有应用前景的。 参考文献 [1]Luigi Landini et al.IEEE Trans on U FFC.1990,37(5):448-456 [2]陈启敏等.声学学报.1995,Vol.21,No.4:692-699 [3]E.J.Feleppa ,et al.IEEE Annual International Conference ,EMB ,1990;12(1):337 (责任编辑:常 平) 2003年4月第19卷第2期 武警工程学院学报JOURNAL OF EN GG COLL EGE OF ARMED POL ICE FORCE Apr.2003Vol.19No.2 ①收稿日期:2002-12-06作者简介:张涛(1968.07-),1994年毕业于西安交通大学工业电器自动化专业,现在北方交通大学电子信息工程学院电子与信息工程专业攻读硕士学位。

基于FPGA的模拟IIC接口设计与实现

研究生课程论文 课程名称基于FPGA的模拟IIC接口设计与实现授课学期2012 学年至2013 学年第一学期学院电子工程学院 专业电子与通信工程 学号2012011603 姓名 任课教师 交稿日期2013.01.10 成绩 阅读教师签名 日期 广西师范大学研究生学院制

基于FPGA的模拟I2C接口设计与实现 摘要:本文论述了I2C总线的基本协议,以及基于FPGA 的模拟I2C 总线接口模块的设计,在QuartusII软件中用Verilog HDL语言编写了部分I2C总线接口功能的程序代码,生成原理图模块。并连接好各个模块,进行了时序仿真。最后,下载到FPGA的板运行测试。 关键词:I2C 接口FPGA Verilog 1课题研究意义、现状及应用分析 目前市场上主流的嵌入式设备主要是微处理器、DSP等,但FPGA 以其独有的高抗干扰性、高安全性正在逐步取得开发公司的青睐,在FPGA上开发I2C势在必行。并且利用EDA 工具设计芯片实现系统的功能,已经成为支撑电子设计的通用平台,并逐步向支持系统级的设计方向发展。模块化的设计思想在软件设计过程中越来越被重视。I2C总线是Philips 公司推出的双向两线串行通讯标准,具有接口线少、通讯效率高等特点。因此,基于FPGA的I2C总线设计有着广泛的应用前景。

2课题总体方案设计及功能模块介绍 本设计主要分三大模块,分别是I2C 总线接口模块、按键输入控制模块、数码管显示模块。I2C总线模块集成了I2C协议用于和总线相接EEPROM的通信;按键输入控制模块用于控制I2C模块的页读、页写、字节读、字节写功能;数码管显示模块用于显示通过I2C总线读取EEPROM中的数据。 3I2C接口设计原理 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10 Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。 3.1总线的构成 I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都

矩阵键盘的工作原理和扫描确认方式

9.3.1 矩阵键盘的工作原理和扫描确认方式 来源:《AVR单片机嵌入式系统原理与应用实践》M16华东师范大学电子系马潮 当键盘中按键数量较多时,为了减少对I/O 口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行或列线上的电平变化可以确定哪个按键被按下。 图9-7 为一个 4 x 3 的行列结构,可以构成12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个16 键的键盘。很明显,在按键数量多的场合,矩阵键盘与独立式按键键盘相比可以节省很多的I/O 口线。 矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态,因此会大量占用MCU 的时间,所以较好的方式也是采用状态机的方法来设计,尽量减少键盘查询过程对MCU 的占用时间。 下面以图9-7 为例,介绍采用行扫描法对矩阵键盘进行判别的思路。图9-7 中,PD0、PD1、PD2 为3 根列线,作为键盘的输入口(工作于输入方式)。PD3、PD4、PD5、PD6 为4根行线,工作于输出方式,由MCU(扫描)控制其输出的电平值。行扫描法也称为逐行扫描查询法,其按键识别的过程如下。 √将全部行线PD3-PD6 置低电平输出,然后读PD0-PD2 三根输入列线中有无低电平出现。只要有低电平出现,则说明有键按下(实际编程时,还要考虑按键的消抖)。如读到的都是高电平,则表示无键按下。 √在确认有键按下后,需要进入确定具体哪一个键闭合的过程。其思路是:依

矩阵键盘控制12864显示最经典程序

#include //这个程序的功能:用4*4的矩阵键盘(接P3口)按键盘k1——k16中的任何一个键ki #include //12864液晶上显示数字i-1 (液晶数据口接P0) #define uint unsigned int//键盘扫描的思想是将行设置为低,列设置为高,来读取P3口的值,就能知道是哪个按键按下了 #define uchar unsigned char #define LCDdata P0 sbit E = P2^7; sbit RW = P2^6; sbit RS = P2^5; void init(); void delayms(uint x); void displaykey(); void write_com(uchar com);//写命令 void write_data(uchar date);//写数据 uchar temp; //--------------主函数----------------- void main() { init();// P3=0xfe;//P3=0xfd;//P3=0xfb;//P3=0xf7; while(1) { displaykey(); } } //-------------液晶初始化---------------- void init() { write_com(0x01); write_com(0x02); write_com(0x06); write_com(0x0e); } //------------毫秒延时--------------- void delayms(uint x) { uchar i; while(x--) {

基于fpga的eeprom设计

二线制I2C CMOS 串行EEPROM 的FPGA设计 姓名:钱大成 学号:080230114 院系:物理院电子系 2011年1月1日

一、课程设计摘要: (1)背景知识: A、基本介绍: 二线制I2C CMOS 串行EEPROM AT24C02/4/8/16 是一种采用CMOS 工艺制成的串行可用电擦除可编程只读存储器。 B、I2C (Inter Integrated Circuit)总线特征介绍: I2C 双向二线制串行总线协议定义如下: 只有在总线处于“非忙”状态时,数据传输才能被初始化。在数据传输期间,只要时钟线为高电平,数据线都必须保持稳定,否则数据线上的任何变化都被当作“启动”或“停止”信号。图1 是被定义的总线状态。· ①总线非忙状态(A 段) 数据线SDA 和时钟线 SCL 都保持高电平。 ②启动数据传输(B 段) 当时钟线(SCL)为高电平状态时,数据线(SDA)由高电平变为低电平的下降沿被认为是“启动”信号。只有出现“启动”信号后,其它的命令才有效。

③停止数据传输(C 段) 当时钟线(SCL)为高电平状态时,数据线(SDA)由低电平变为高电平的上升沿被认为是“停止”信号。随着“停在”信号出现,所有的外部操作都结束。 ④数据有效(D 段) 在出现“启动”信号以后,在时钟线(SCL)为高电平状态时数据线是稳定的,这时数据线的状态就要传送的数据。数据线(SDA)上的数据的改变必须在时钟线为低电平期间完成,每位数据占用一个时钟脉冲。每个数传输都是由“启动”信号开始,结束于“停止”信号。 ⑤应答信号 每个正在接收数据的EEPROM 在接到一个字节的数据后,通常需要发出一个应答信号。而每个正在发送数据的EEPROM 在发出一个字节的数据后,通常需要接收一个应答信号。EEPROM 读写控制器必须产生一个与这个应答位相联系的额外的时钟脉冲。在EEPROM 的读操作中,EEPROM 读写控制器对EEPROM 完成的最后一个字节不产生应答位,但是应该给EEPROM 一个结束信号。 C、3. 二线制I2C CMOS 串行EEPROM读写操作 ① EEPROM 的写操作(字节编程方式) 所谓EEPROM 的写操作(字节编程方式)就是通过读写控制器把一个字节数据发送到EEPROM 中指定地址的存储单元。其过程如下:EEPROM 读写控制器发出“启动”信号后,紧跟着送4 位I2C 总线器件特征编码1010 和3 位EEPROM 芯片地址/页地址XXX 以及写状态的R/W 位(=0),到总线上。这一字节表示在接收到被寻址的EEPROM 产生的一个应答位后,读写控制器将跟着发

单片机课程设计4X4矩阵键盘显示要点

长沙学院 《单片机原理及应用》 课程设计说明书 题目液晶显示4*4矩阵键盘按键号 程序设计 系(部) 电子与通信工程系 专业(班级) 电气1班 姓名龙程 学号2011024109 指导教师刘辉、谢明华、王新辉、马凌 云 起止日期2014.5.19—2014.5.30

长沙学院课程设计鉴定表

《单片机技术及应用》课程设计任务书系(部):电子与电气工程系专业:11级电子一班指导教师:谢明华、刘辉

目录 前言 (5) 一、课程设计目的 (6) 二、设计内容及原理 (6) 2.1 单片机控制系统原理 (6) 2.2阵键盘识别显示系统概述 (6) 2.3键盘电路 (7) 2.4 12864显示器 (8) 2.5整体电路图 (9) 2.6仿真结果 (9) 三、实验心得与体会 (10) 四、实验程序 (10) 参考文献 (18)

前言 单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器 应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作!单片机的数量不仅远超过PC机和其他计算机的总和,甚至比人类的数量还要多。 是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗低,因此倍受工程师青睐,适用于使用电池的电子设备。英国科学家在上世纪制造了第一块液晶显示器即LCD。而第一台可操作的LCD基于动态散射模式(Dynamic Scattering Mode,DSM),是RCA公司乔治·海尔曼带领的小组开发的。 LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。 交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键, 键盘是合理的。

基于FPGA芯片的最小系统设计

黑龙江大学本科生 毕业论文(设计)档案编码: 学院:电子工程学院 专业:电子信息工程 年级:2007 学生姓名:王国凯 毕业论文题目:基于FPGA 的电梯自动控制 系统设计

摘要 本文在介绍了在当前国内外信息技术高速发展的今天,电子系统数字化已成为有目共睹的趋势。从传统的应用中小规模芯片构成电路系统到广泛地应用单片机,直至今天FPGA 在系统设计中的应用,电子设计技术已迈人了一个全新的阶段。FPGA 利用它的现场可编程特性,将原来的电路板级产品集成为芯片级产品,缩小体积,缩短系统研制周期,方便系统升级,具有容量大、逻辑功能强,提高系统的稳定性,而且兼有高速、高可靠性。越来越多的电子设计人员使用芯片进行电子系统的设计,通过基于FPGA 电梯系统开发设计,说明了FAPG 芯片研究的动机和研究意义。 关键词 FPGA;电梯系统;FLEX10K;JTAG;模块设计

Ab s t ract This paper introduces the rapid development of information technology around the world today. Digitalized electronic systems have become the trend. From the traditional application of small and medium-chip circuitry to Microcontroller and FPGA application in system design, electronic design technology is stepping into a new field. By using its field programmable features, FPGA changes the original circuit board-level products to the chip-level integration products. Now FPGA has advantages of reduced the size, shorten development cycle, facilitated in system upgrades, highly capacity, strong logic functions, stable system and high speed. More and more electronic designers use FPGA to design electronic systems. This paper shows the motivation and significance of designing by FPGA through the elevator FPGA system design. Ke ywo r d FPGA; Mini-System; FLEX10K; JTAG;Module design

矩阵键盘显示系统

1 4×4矩阵式键盘识别显示系统概述 矩阵式键盘模式以N个端口连接控制N*N个按键,实时在LED数码管上显示按键信息。显示按键信息,既降低了成本,又提高了精确度,省下了很多的I/O 端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。并且在实际应用中经常要用到输入数字、字母、符号等操作功能,如电子密码锁、电话机键盘、计算器按键等,至少都需要12到16个按键,在这种情况下如果用独立式按键的话,显然太浪费I/O端口资源,为了解决这一问题,我们使用矩阵式键盘。 矩阵式键盘又称行列键盘,它是用N条I/O线作为行线,N条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为N×N个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。 最常见的键盘布局如图1.1所示。一般由16个按键组成,在单片机中正好可以用一个P口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。 图1.1 键盘布局

2系统主要硬件电路设计 2.1单片机控制系统原理 图2.1 单片机控制系统原理框图 2.2单片机主机系统电路 AT89C52单片机是51系列单片机的一个成员,是52单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-52系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C52构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。 图2.2 单片机主机系统图

三维矩阵键盘操作手册

矩阵控制键盘操作说明 键盘概述 控制器是智能电视监控系统中的控制键盘,也是个监控系统中人机对话的主要设备。可作为主控键盘,也可作为分控键盘使用。对整个监控系统中的每个单机进行控制。 键盘功能 1.中文/英文液晶屏显示 2.比例操纵杆(二维、三维可选)可全方位控制云台,三维比例操纵杆可控制摄像机的变倍 3.摄像机可控制光圈开光、聚集远近、变倍大小 4.室外云台的防护罩可除尘和除霜 5.控制矩阵的切换、序切、群组切换、菜单操作等 6.控制高速球的各种功能,如预置点参数、巡视组、看守卫设置、菜单操作等 7.对报警设备进行布/撤防及报警联动控制 8.控制各种协议的云台、解码器、辅助开头设置、自动扫描、 自动面扫及角度设定 9.在菜单中设置各项功能 10.键盘锁定可避免各种误操作,安全性高 11.内置蜂鸣器桌面上直接听到声音,可判断操作是否有效 技术参数 1.控制模式主控、分控 2.可接入分控数16个 3.可接入报警模块数239个 4.最大报警器地址1024个 5.最大可控制摄像机数量1024个 6.最大可控制监视器数量 64个 7.最大可控制解码器数量 1024个 8.电源 AC/DC9V(最低500mA的电源) 9.功率 5W 10.通讯协议Matri、PEL-D、PEL-P、VinPD 11.通讯波特率1200 Bit/S,2400 Bit/S,4800 Bit/S ,9600Bit/S, Start bit1,Data bit8,Stop bit1

接线盒的脚定义 控制线连接图 键盘按键说明 lris Focus Far 聚焦远 Focus Near 聚焦近 Zoom Tele 变倍大 Zoom Wide 变倍小 DVR 设备操作 DVR 功能键 Shift 用户登入 Login 退出键 Exit 报警记录查询 List 进入键盘主菜单 MENU 启动功能 F1/ON 关闭功能 F2/OFF 液晶显示区

矩阵键盘操作说明

矩阵键盘操作说明 一、系统复位 1按数字键0后,按MON键 2输入99后,按NEXT键 二、键盘视频选择 首先是监视器选择然后是摄像机选择 1、按键盘上的CLEAR键,清除键盘数字输入ENTER区中的数字显示 2、输入所选择的监视器号,该数字在键盘数字输入ENTER区中显示 3、按MON键,该监视器号在键盘监视器MONITOR区中显示 4、同时系统主机将返回该监视器对应的图像号,在键盘的摄像机CAMERA区中显示。 5、输入选择的摄像机号,该数字在键盘数字输入ENTER区中显示 6、按CAM键 7、系统主机将返回该图像号,在键盘的摄像机CAMERA区中显示则选择的图像再选择的 监视器上显示 三、图像区域切换 在指定的监视器上运行一个指定区域的图像切换,该功能可以在任何一个监视上浏览切换所有的图像操作步骤如下: 1、按键盘上CLERA键,清除数字输入ENTER区中的数字显示 2、输入所选择的监视器号,该数字在键盘数字输入ENTER区中显示 3、按MON键,该监视器号在键盘监视器MONITOR区中显示 4、输入区域切换中的开始图像号 5、按ON键,确认开始区域的开始图像 6、输入区域切换中的结束图像号 7按OFF键确定区域切换的结束图像 完成后则该监视器开始区域切换依次按照设定的图像号进行切换如要添加一个图像到切换序列中则: 1和设置区域切换的步骤一样重复1-3步,选择一个监视器,该监视必须已存在一个切换队列 2、输入所希望添加的摄像机图像好,该摄像机图像号必须在系统的最大允许摄像机图像号的范围内 3、按组合键ENTER-ON,ENTER键必须在前面,确定添加的图像。 如要在切换队列中删除一个图像: 1、和设置区域切换的步骤一样重复1-3步,选择一个监视器,该监视必须已存在一个切换队列 2输入所希望添加的摄像机图像好,该摄像机图像号必须在这个序列切换范围内。 3、按组合键ENTER-OFF,ENTER必须在前面,确认删除图像。 四、报警设置 单布防 针对需要布防的防区一个一个的布防,防区布防后,根据监视器与防区触点权限表,自动将该防区分配到与之对应的监视器上。一旦报警,则与之相关的报警监视器就可以对这个报警防区进行响应。具体操作如下1、输入防区号 2、按组合键ARM-ON,ARM键必须先按,对该报警防区进行确认。 全布防。撤防即按ARM-OFF键 1、输入数字键0

FPGA设计方案

FPGA课程设计 题目:全天候温度纪录仪的设计与FPGA实现 姓名: 学号: 院系:信息科学与工程学院 专业:计算机技术

摘要 本设计有效的克服了传统的数字温度计的缺点,采用自上而下的设计思路,绘制出了系统结构流程图,最后又在硬件上通过对其进行调试和验证。基于FPGA在Quartus II13.0软件下应用Verilog HDL语言编写程序,采用ALTRA公司Cyclone- IV系列的EP4CE40F23I7 芯片进行了计算机仿真,并给出了相应的仿真结果。该电路能够实现很好的测温功能。 关键字:数字温度计;FPGA;Quartus II130.;Verilog HDL;EP4CE40F2317 Abstract This design effectively overcomes the traditional digital thermometer’s wea knesses and takes a top-down approach to design flow chart of system, and fi nally pass the circuits to the hardware to debug and verify it. This design is b ased on FPGA using Verilog HDL language to write program in Quartus II sof tware, adopting EP4CE40F23I7 chip of Cyclone- IV series of ALTRA company for computer simulation and at the same time showing the corresponding sim ulation result. This circuit is able to carry out excellent temperature- measurem ent function. KeyWords:Digital thermometer;FPGA;Quartus II 13.0;Verilog HDL ;EP4CE40F2317

矩阵键盘显示电路的设计

二、实验原始数据记录 1.实验现象 当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。 2.实验图片记录 湖南科技大学 物理与电子科学学院专业实验报告 实验课程:FPGA 实验原理 实验项目:矩阵键盘显示电路的设计专业:物理与电子科学学院班级:电子信息科学与技术3班姓名:马竞怡学 号: 1308020328 实验日期:年月日

实验报告 一、实验目的内容及步骤 1.实验目的 1)了解普通4×4键盘扫描的原理。2)进一步加深七段码管显示过程的理解。3)了解对输入/输出端口的定义方法。 2..4×4矩阵键盘电路原理图 信号名称 对应FPGA 管脚名 说明 KEY-C0AC18 钜阵键盘的第1列选择KEY-C1AC17钜阵键盘的第2列选择KEY-C2AD17钜阵键盘的第3列选择KEY-C3AC16钜阵键盘的第4列选择KEY-R0AD16钜阵键盘的第1行选择KEY-R1AC15钜阵键盘的第2行选择KEY-R2AD15钜阵键盘的第3行选择KEY-R3 AC14 钜阵键盘的第4行选择 3..实验步骤 1)打开QUARTUSII 软件,新建一个工程。 2)建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3)按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序,用户可参照光 盘中提供的示例程序。 4)编写完VHDL 程序后,保存起来。方法同实验一。 5)对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。 6)编译仿真无误后,依照4X4矩阵键、数码管与FPGA 的管脚连接表(表或参照附 录进行管脚分配。表10-2是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。 7)用下载电缆通过JTAG 口将对应的sof 文件加载到FPGA 中。观察实验结果是否 与自己的编程思想一致。 实验预习报告 一、实验原理及公式 通常在一个键盘中使用了一个瞬时接触开关,并且用如图10-1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图10-2所示的好几个脉冲。弹起的持续时间通常将维持在5ms ~30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。 获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。 (矩阵键盘) 成绩:教师:

单片机矩阵键盘与数码管课程设计

矩阵键盘与数码管显示 摘要 矩阵式键盘乃是目前使用较为广泛的一种键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。4*4矩阵式键盘采用89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程,单片机将检测到的按键信号转换成数字量,显示于数码管显示器,系统灵活性强,易于操作,可靠性能好。单片机简介及主系统电路 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换444器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。单片机在工业控制领域广泛应用,它由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中,本次课程设计我们采用的是AT89C51型号的单片机。 AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,提高了系统的性价比。其最小系统电路图如下:

基于FPGA的简易的ALU设计

本科毕业设计开题报告 题目:基于FPGA的简易的ALU设计 院(系): 班级: 姓名: 学号: 指导教师: 教师职称:讲师

xxxxx学院本科毕业设计开题报告 题目基于FPGA的简易ALU设计来源工程实际 1、研究目的和意义 从20 世纪中叶的无线电时代,到21 世纪以计算机技术为中心的智能化加信息化的现代电子时代,电子系统发生了巨大的变化。现代电子系统愈发庞大和复杂,很多应用要求能够在现场进行实时的高速运算,并对系统进行有效地控制。作为这一需求的解决方案,嵌入式计算机应用系统已成为现代电子系统的核心技术。 早期的嵌入式系统是将通用计算机经改装后嵌入到被测控对象去,实现数据采集、分析处理、状态显示、输出控制等功能。随着大规模集成电路技术的发展,中央处理器CPU、随机存取存储器RAM、只读存储器ROM、输入/输出端口I/O等主要的计算机功能部件可以集成在一块集成电路芯片上,这颗芯片就被称为单片机。与改装普通计算机相比,单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点,因此迅速成为最普及的嵌入式应用系统方案。 通常,我们要实现一些功能可以用单片机来完成,但是,用可编程逻辑FPGA同样可以实现。在计算机中,算术逻辑单元(ALU)是专门执行算术和逻辑运算的数字电路。ALU是计算机中央处理器的最重要组成部分,甚至连最小的微处理器也包含ALU作计数功能。此次我要完成的设计是基于FPGA的四位ALU算数逻辑单元设计。通过对ALU功能的拓展,来实现更快更好的运算功能,相信这一功能的实现将使运算功能更加简单、快捷、准确,从而提高我们今后的学习工作效率。 2、发展情况(文献综述) 算术逻辑单元(arithmetic logic unit,缩写ALU)是进行整数运算的结构。现阶段是用电路来实现,应用在电脑芯片中。 在计算机中,算术逻辑单元(ALU)是专门执行算术和逻辑运算的数字电路。ALU是计算机中央处理器的最重要组成部分,甚至连最小的微处理器也包含ALU作计数功能。在现代CPU和GPU处理器中已含有功能强大和复杂的ALU;一个单一元件也可能含有ALU。 1945年数学家冯诺伊曼在一篇介绍被称为EDV AC的一种新型电脑的基础构成的报告中提出ALU的概念。 早期发展:1946年,冯诺伊曼与同事合作为普林斯顿高等学习学院(IAS)设计计算机。随后IAS计算机成为后来计算机的原形。在论文中,冯诺伊曼提出他相信计算机中所需的部件,其中包括ALU。冯诺伊曼写到,ALU是计算机的必备组成部分,因为已确定计算机一定要完成基本的数学运算,包括加减乘除。于是他相信计算机应该含有专门完成此类运算的部件。 ①数字系统 ALU必须使用与数字电路其他部分使用同样的格式进行数字处理。对现代处理器而言,几乎全都使用二进制补码表示方式。早期的计算机曾使用过很多种数字系统,包括反码、符号数值码,甚至是十进制码,每一位用十个管子。以上这每一种数字系统所对应的ALU都有不同的设计,而这也影响了当前对二进制补码的优先选择,因为二进制补码能简化ALU加法和减法的运算。 ②可行性分析 绝大部分计算机指令都是由ALU执行的。ALU从寄存器中取出数据,数据经过处理将运算结果存入ALU输出寄存器中。其他部件负责在寄存器与内存间传送数据,控制单元控制着ALU,通过控制电路来告诉ALU该执行什么操作。 ③简单运算 大部分ALU都可以完成以下运算∶整数算术运算(加、减,有时还包括乘和除,不过成本

基于FPGA的嵌入式监控系统设计

基于FPGA的嵌入式监控系统设计 来源:无线测温.testeck. 目前,图像监控系统大多采用PC和视频采集卡作为系统主要部分,基于嵌入式技术的图像监控系统设备在我国还只是起步阶段,没有成熟的产品应用。这一现状的根本原因就是我国在开发这类产品时,没有统一的开发标准和共用的开发平台,而且没有可靠的功能和性能测试标准,各个企业的开发技术力量分散,极大的影响了该类产品开发的效率和可靠性。而制造出来的产品同国外同类产品相比,功能相差太大,没有竞争力,市场基本上被国外公司所占领。因此,开发一个该类嵌入式系统势在必行。 系统总体方案 为了实现自动图像报警和图像采集,本文设计了动体检测算法,这是因为绝大多数情况下我们只对监控区域中运动的物体感兴趣,这样可以过滤掉只包含静态背景的图像,从而降低了对有限的嵌入式硬件资源的消耗。由于活动物体大多是人,而且这也是图像监控的目标,为此加入了人体信号探测器,用以辅助动体检测,以达到降低图像报警误报率的目的。本系统主要集成了图像采集、控制和存储等器件或芯片,组成了以FPGA为控制核心的实时图像监控系统。系统

的总体方案如图1所示。 图1 图像监控系统结构图 系统工作流程为:系统上电后,FPGA从外部EEPROM自动加载程序,I2C模块对CIS进行初始化工作参数配置。CIS 向FPGA输入图像数据信号,FPGA将采集的原始数据(RAW)转换成RGB格式,帧缓冲模块(Frame Buffer)每次将相邻两帧图像数据写入SDRAM,然后比较这两帧图像的差值,如果差值大于设定的阈值,并且人体探测器输出高电平,就认为检测到了外界场景的运动,系统会自动将捕获的图像输出到SD卡进行存储。图2给出了系统的工作流程。 图2 系统工作流程图 图3 电源电路原理图 系统硬件设计与实现 图像监控系统处理的数据量较大,同时还要满足实时性要

4×4矩阵键盘的工作原理与编程

ME300B单片机学习开发系统应用之三 ---4×4矩阵键盘的工作原理与编程 本文介绍如何在ME300B型51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。 一、硬件工作原理的简单介绍 该实验使用ME300B上的8位数码管显示电路和4×4矩阵键盘电路。现将这二部分的电路工作原理进行简单的介绍: 1、4×4矩阵键盘的工作原理 矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 K2 P15K3 P16 2、数码管动态扫描显示电路

所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。 在ME300B单片机开发系统中使用数码管来显示信息时,要将JP2的2、3端短接。见图3 二、演示程序的编程方法 1、4×4矩阵键盘的编程方法: 1.1、先读取键盘的状态,得到按键的特征编码。 先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。 举例说明如何得到按键的特征编码: 假设“1”键被按下,找其按键的特征编码。 从P1口的高四位输出低电平,即P1.4-P1.7为输出口。低四位输出高电平,即P1.0-P1.3为输入口。读P1口的低四位状态为“1101”,其值为“0DH”。 再从P1口的高四位输出高电平,即P1.4-P1.7为输入口。低四位输出低电平,即P10-P13为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。 将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。 用同样的方法可以得到其它15个按键的特征编码。

相关文档
最新文档