文档库 最新最全的文档下载
当前位置:文档库 › FPGA常见错误

FPGA常见错误

FPGA常见错误
FPGA常见错误

Quartus警告分析 warning 超级实用

1.Found clock-sensitive change during active clock edge at time

原因:vector source file中时钟敏感信号(如:数据,允许端,清零,同步加载等)在时钟的边缘同时变化.而时钟敏感信号是不能在时钟边沿变化的.其后果为导致结果不正确.

措施:编辑vector source file

2.Verilog HDL assignment warning at : truncated with size to match size of target (

原因:在HDL设计中对目标的位数进行了设定,如:reg[4:0] a;而默认为32位, 将位数裁定到合适的大小

措施:如果结果正确,无须加以修正,如果不想看到这个警告,可以改变设定的位

3.All reachable assignments to data_out(10) assign '0', register removed by optimization

原因:经过综合器优化后,输出端口已经不起作用了

4.Following 9 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results

原因:第9脚,空或接地或接上了电源

措施:有时候定义了输出端口,但输出端直接赋‘0’,便会被接地,赋‘1’接电源. 如果你的设计中这些端口就是这样用的,那便可以不理会这些warning

5.Found pins ing as undefined clocks and/or memory enables

原因:是你作为时钟的PIN没有约束信息.可以对相应的PIN做一下设定就行了. 主要是指你的某些管脚在电路当中起到了时钟管脚的作用,比如flip-flop的

clk 管脚,而此管脚没有时钟约束,因此QuartusII把“clk”作为未定义的时钟. 措施:如果clk不是时钟,可以加“not clock”的约束;如果是,可以在clock setting当中加入;在某些对时钟要求不很高的情况下,可以忽略此警告或在这

里改:Assignments>Timinganalysissettings...>Individual clocks...>... 6.Timing characteristics of device EPM570T144C5 are preliminary

原因:因为MAXII 是比較新的元件在 QuartusII 中的時序并不是正式版的,要

等 Service Pack

措施:只影响 Quartus 的 Waveform

7.Warning: Clock latency analysis for PLL offsets is supported for the current device family, but is not enabled

措施:将setting中的timing Requirements&Option-->More Timing

Setting-->setting-->Enable Clock Latency中的on改成OFF

8.Found clock high time violation at 14.8 ns on register

"|counter|lpm_counter:count1_rtl_0|dffs[11]"

原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间

措施:在中间加个寄存器可能可以解决问题

9.warning: circuit may not operate.detected 46 non-operational paths clocked by clock clk44 with clock skew larger than data delay

原因:时钟抖动大于数据延时,当时钟很快,而if等类的层次过多就会出现这种问题,但这个问题多是在器件的最高频率中才会出现

措施:setting-->timing Requirements&Options-->Default required fmax 改小一些,如改到50MHZ

10. Design contains input pin(s) that do not drive logic

原因:输入引脚没有驱动逻辑(驱动其他引脚),所有的输入引脚需要有输入逻辑措施:如果这种情况是故意的,无须理会,如果非故意,输入逻辑驱动.

11.Warning:Found clock high time violation at 8.9ns on node 'TEST3.CLK' 原因:FF中输入的PLS的保持时间过短

措施:在FF中设置较高的时钟频率

12.Warning: Found 10 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew

原因:如果你用的 CPLD 只有一组全局时钟时,用全局时钟分频产生的另一个时钟在布线中当作信号处理,不能保证低的时钟歪斜(SKEW).会造成在这个时钟上工作的时序电路不可靠,甚至每次布线产生的问题都不一样.

措施:如果用有两组以上全局时钟的 FPGA 芯片,可以把第二个全局时钟作为另一个时钟用,可以解决这个问题.

13.Critical Warning: Timing requirements were not met. See Report window for details.

原因:时序要求未满足,

措施:双击Compilation Report-->Time Analyzer-->红色部分(如clock setup:'clk'等)-->左键单击list path,查看fmax的SLACK REPORT再根据提示解决,有可能是程序的算法问题

14.Can't achieve minimum setup and hold requirement along path(s). See Report window for details.

原因:时序分析发现一定数量的路径违背了最小的建立和保持时间,与时钟歪斜有关,一般是由于多时钟引起的措施:利用Compilation Report-->Time Analyzer-->红色部分(如clock hold:'clk'等),在slack中观察是hold time 为负值还是setup time 为负值, 然后在:Assignment-->Assignment

Editor-->To中增加时钟名(from

node finder),Assignment Name中增加和多时钟有关的Multicycle 和Multicycle Hold选项,如hold time为负,可使Multicycle hold的值

>multicycle,如设为2和1.

15: Can't analyze file -- file E://quartusii/*/*.v is missing

原因:试图编译一个不存在的文件,该文件可能被改名或者删除了

措施:不管他,没什么影响

16.Warning: Can't find signal in vector source file for input pin whole|clk10m

原因:因为你的波形仿真文件( vector source file )中并没有把所有的输入

信号(input pin)加进去,对于每一个输入都需要有激励源的

17.Error: Can't name logic scfifo0 of instance "inst"--function has same name as current design file

原因:模块的名字和project的名字重名了

措施:把两个名字之一改一下,一般改模块的名字

18.Warning: Using design file lpm_fifo0.v, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project Info: Found entity 1: lpm_fifo0

原因:模块不是在本项目生成的,而是直接copy了别的项目的原理图和源程序

而生成的,而不是用QUARTUS将文件添加进本项目

措施:无须理会,不影响使用

19.Timing characteristics of device are preliminary

原因:目前版本的QuartusII只对该器件提供初步的时序特征分析

措施:如果坚持用目前的器件,无须理会该警告.关于进一步的时序特征分析会

在后续版本的Quartus得到完善.

20.Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family

原因:用analyze_latches_as_synchronous_elements setting可以让 Quaruts II来分析同步锁存,但目前的器件不支持这个特性措施:无须理会.时序分析可

能将锁存器分析成回路.但并不一定分析正确.其后果可能会导致显示提醒用户: 改变设计来消除锁存器

21.Warning:Found xx output pins without output pin load capacitance assignment

原因:没有给输出管教指定负载电容

措施:该功能用于估算TCO和功耗,可以不理会,也可以在Assignment Editor 中为相应的输出管脚指定负载电容,以消除警告

22.Warning: Found 6 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew

原因:使用了行波时钟或门控时钟,把触发器的输出当时钟用就会报行波时钟, 将组合逻辑的输出当时钟用就会报门控时钟

措施:不要把触发器的输出当时钟,不要将组合逻辑的输出当时钟,如果本身如

此设计,则无须理会该警告

23.Warning (10268): Verilog HDL information at lcd7106.v(63): Always Construct contains both blocking and non-blocking assignments

原因: 一个always模块中同时有阻塞和非阻塞的赋值

24.Warning: Can't find signal in vector source file for input pin

|whole|clk10m

原因:这个时因为你的波形仿真文件( vector source file )中并没有把所有的输入信号(input pin)加进去,对于每一个输入都需要有激励源的

在QuartusII下进行编译和仿真的时候,会出现一堆warning,有的可以忽略,有的却需要注意,虽然按F1可以了解关于该警告的帮助,但有时候帮助解释的仍

然不清楚,大家群策群力,把自己知道和了解的一些关于警告的问题都说出来讨论一下,免得后来的人走弯路.上面是我收集整理的一些,有些是自己的经验,有些是网友的,希望能给大家一点帮助,如有不对的地方,请指正,如果觉得好,请版主给点威望吧,谢谢

1.Found clock-sensitive change during active clock edge at time

原因:vector source file中时钟敏感信号(如:数据,允许端,清零,同步加载等)在时钟的边缘同时变化。而时钟敏感信号是不能在时钟边沿变化的。其后果为导致结果不正确。

措施:编辑vector source file

2.Verilog HDL assignment warning at : truncated value with size to match size of target (

原因:在HDL设计中对目标的位数进行了设定,如:reg[4:0] a;而默认为32位,将位数裁定到合适的大小

措施:如果结果正确,无须加以修正,如果不想看到这个警告,可以改变设定的位数

3.All reachable assignments to data_out(10) assign '0', register removed by optimization

原因:经过综合器优化后,输出端口已经不起作用了

4.Following 9 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results

原因:第9脚,空或接地或接上了电源

措施:有时候定义了输出端口,但输出端直接赋‘0’,便会被接地,赋‘1’接电源。如果你的设计中这些端口就是这样用的,那便可以不理会这些 warning

5.Found pins functioning as undefined clocks and/or memory enables

原因:是你作为时钟的PIN没有约束信息。可以对相应的PIN做一下设定就行了。主要是指你的某些管脚在电路当中起到了时钟管脚的

作用,比如flip-flop的clk管脚,而此管脚没有时钟约束,因此QuartusII

把“clk”作为未定义的时钟。

措施:如果clk不是时钟,可以加“not clock”的约束;如果是,可以在clock setting当中加入;在某些对时钟要求不很高的情况下,可以忽略此警告或在这里修改:Assignments>Timing analysis settings...>Individual clocks...>...

注意在Applies to node中只用选择时钟引脚一项即可,required fmax一般比所要求频率高5%即可,无须太紧或太松。

6.Timing characteristics of device EPM570T144C5 are preliminary

原因:因为MAXII 是比較新的元件在 QuartusII 中的時序並不是正式版的,要

等 Service Pack

措施:只影响 Quartus 的 Waveform

7.Warning: Clock latency analysis for PLL offsets is supported for the current device family, but is not enabled

措施:将setting中的timing Requirements&Option-->More Timing

Setting-->setting-->Enable Clock Latency中的on改成OFF

8.Found clock high time violation at 14.8 ns on register

"|counter|lpm_counter:count1_rtl_0|dffs[11]"

原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间

措施:在中间加个寄存器可能可以解决问题

9.warning: circuit may not operate.detected 46 non-operational paths clocked by clock clk44 with clock skew larger than data delay

原因:时钟抖动大于数据延时,当时钟很快,而if等类的层次过多就会出现这种问题,但这个问题多是在器件的最高频率中才会出现

措施:setting-->timing Requirements&Options-->Default required fmax 改小一些,如改到50MHZ

10.Design contains input pin(s) that do not drive logic

原因:输入引脚没有驱动逻辑(驱动其他引脚),所有的输入引脚需要有输入逻辑措施:如果这种情况是故意的,无须理会,如果非故意,输入逻辑驱动.

11.Warning:Found clock high time violation at 8.9ns on node 'TEST3.CLK' 原因:FF中输入的PLS的保持时间过短

措施:在FF中设置较高的时钟频率

12.Warning: Found 10 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew

原因:如果你用的 CPLD 只有一组全局时钟时,用全局时钟分频产生的另一个时钟在布线中当作信号处理,不能保证低的时钟歪斜(SKEW)。会造成在这个时钟上工作的时序电路不可靠,甚至每次布线产生的问题都不一样。

措施:如果用有两组以上全局时钟的 FPGA 芯片,可以把第二个全局时钟作为另一个时钟用,可以解决这个问题。

13.Critical Warning: Timing requirements were not met. See Report window for details.

原因:时序要求未满足,

措施:双击Compilation Report-->Time Analyzer-->红色部分(如clock setup:'clk'等)-->左键单击list path,查看fmax的SLACK REPORT再根据提示解决,有可能是程序的算法问题或fmax设置问题

14.Warning: Can't find signal in vector source file for input pin

|whole|clk10m

原因:这个时因为你的波形仿真文件( vector source file )中并没有把所有的输入信号(input pin)加进去,对于每一个输入都需要有激励源的

15.Can't achieve minimum setup and hold requirement along path(s). See Report window for details.

原因:时序分析发现一定数量的路径违背了最小的建立和保持时间,与时钟歪斜有关,一般是由于多时钟引起的

措施:利用Compilation Report-->Time Analyzer-->红色部分(如clock hold:'clk'等),在slack中观察是hold time为负值还是setup time 为负值,然后在:Assignment-->Assignment Editor-->To中增加时钟名(from node finder),Assignment Name中增加和多时钟有关的Multicycle 和Multicycle Hold选项,如hold time为负,可使Multicycle hold的值>multicycle,如设为2和1。

16: Can't analyze file -- file E://quartusii/*/*.v is missing

原因:试图编译一个不存在的文件,该文件可能被改名或者删除了

措施:不管他,没什么影响

17.Warning: Can't find signal in vector source file for input pin

|whole|clk10m

原因:因为你的波形仿真文件( vector source file )中并没有把所有的输入信号(input pin)加进去,对于每一个输入都需要有激励源的

18.Error: Can't name logic function scfifo0 of instance "inst" -- function has same name as current design file

原因:模块的名字和project的名字重名了

措施:把两个名字之一改一下,一般改模块的名字

19. Warning: Using design file lpm_fifo0.v, which is not specified as

a design file for the current project, but contains definitions for 1 design units and 1 entities in project Info: Found entity 1: lpm_fifo0

原因:模块不是在本项目生成的,而是直接copy了别的项目的原理图和源程序而生成的,而不是用QUARTUS将文件添加进本项目

措施:无须理会,不影响使用

20. Timing characteristics of device are preliminary

原因:目前版本的QuartusII只对该器件提供初步的时序特征分析

措施:如果坚持用目前的器件,无须理会该警告。关于进一步的时序特征分析会在后续版本的Quartus得到完善。

21. Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family

原因:用analyze_latches_as_synchronous_elements setting可以让Quaruts II来分析同步锁存,但目前的器件不支持这个特性

措施:无须理会。时序分析可能将锁存器分析成回路。但并不一定分析正确。其后果可能会导致显示提醒用户:改变设计来消除锁存器,但实际其实无关紧要

22.Warning:Found xx output pins without output pin load capacitance assignment

原因:没有给输出管教指定负载电容

解决方法:该功能用于估算TCO和功耗,可以不理会,也可以在Assignment Editor中为相应的输出管脚指定负载电容,以消除警告

第六讲 独立按键和矩阵键盘 第七讲 数码管要点

第六讲独立按键和矩阵键盘 按键是什么东西,我想这个就不必由我向各位阐述了。嗯,如你所见,按键种类繁多,功能有简有繁,极大的充斥着我们的生活。但是无论如何,所有的按键其实都有一个原型,来源于同一种原理,所有的按键无论多复杂,多华丽,都是从这样一个原型发展而成的。好比你就算长的再帅,你也是只猩猩变来的,呵呵。我们平日所见到的绝大部分的按键,其实都可以归类为一种,叫“接触式按键”。下图为一个典型的接触式按键(又称轻触开关)。 需要特别说明的是,这里说的“接触”,是指机械层面上的接触,而不是感光或者某些特殊涂层(比如触摸屏)一类的接触。所以,按键的工作特性其实是一种机械特性,下文会详细说明。 , 如上图,请对照图一想象,1、2、3、4 分别对应按键的四个引脚,其中蓝色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿色

的线是却永久导通的。各位明白了么,其实是两个相同的结构连在一起了。我们只要将需要按键开关作用的线路分别接在1、3 和2、4 的任意取一组合,概括起来就是(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到我们预期的开关作用。 相信以上说明使大家对按键的工作原理有了个比较清晰的认识了,现在来说说一个小知识。先看下图(图4): 首先说明的是,上图的连法是不允许的,因为当按键按下之后,电源和地短接,会将导线直接烧毁。但是此处用作特例,假设导线不会烧毁。现在来提出一个问题,当按键按下以后,请问如果这时用万用表测量导线上任何一处的电压,得到的结果是VCC 还是GND 的电压? 答案是:GND,即表示测出的电压为0V。为什么呢,因为导线上,对于两端的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:有零即为零,只有全为一是才为一。理解了这点,按键的工作前提就有了。 键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。在这一讲中我们介绍一下单片机中键盘使用。 单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该IO口赋一高电平,然后让单片机不断地检测该I/O口是杏变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。 我们先来说一下,按键常常遇到的问题—抖动问题。

单片机独立按键和矩阵按键

单片机按键(独立按键和矩阵按键) 独立按键 常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如图8-6 所示。 图8-6 独立式按键原理图 4 条输入线接到单片机的IO 口上,当按键K1 按下时,+5V 通过电阻R1 然后再通过按键K1 最终进入GND 形成一条通路,那么这条线路的全部电压都加到了R1 这个电阻上,KeyIn1 这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V 就应该是等电位,是一个高电平。我们就可以通过KeyIn1 这个IO 口的高低电平来判断是否有按键按下。 这个电路中按键的原理我们清楚了,但是实际上单片机IO 口内部,也有一个上拉电阻的存在。我们的按键是接到了P2 口上,P2 口上电默认是准双向IO 口,我们来简单了解一下这个准双向IO 口的电路,如图8-7 所示。

图8-7 准双向IO 口结构图 首先说明一点,就是我们现在绝大多数单片机的IO 口都是使用MOS 管而非三极管,但用在这里的MOS 管其原理和三极管是一样的,因此在这里我用三极管替代它来进行原理讲解,把前面讲过的三极管的知识搬过来,一切都是适用的,有助于理解。 图8-7 方框内的电路都是指单片机内部部分,方框外的就是我们外接的上拉电阻和按键。这个地方大家要注意一下,就是当我们要读取外部按键信号的时候,单片机必须先给该引脚写“1”,也就是高电平,这样我们才能正确读取到外部按键信号,我们来分析一下缘由。 当内部输出是高电平,经过一个反向器变成低电平,NPN 三极管不会导通,那么单片机IO 口从内部来看,由于上拉电阻R 的存在,所以是一个高电平。当外部没有按键按下将电平拉低的话,VCC 也是+5V,它们之间虽然有2 个电阻,但是没有压差,就不会有电流,线上所有的位置都是高电平,这个时候我们就可以正常读取到按键的状态了。 当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么

单片机矩阵键盘

单片机 4*4 矩阵键盘 在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢?大家看下面电路图,单片机的整一个8位端口可以构成4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐行查询法它是一种最常用的多按键识别方法。因此,我们就以行扫描法为例介绍矩阵式键盘的工作原理。 首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。再其次,判断闭合键所在的具体位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是: 依次将列线置为低电平,即在置某一根列线为低电平时,其它列线为高电平。同时再逐行检测各行线的电平状态;若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。下面图5-5是4*4矩阵式按键接法的软件算法操作流程。 图5-4(4*4矩阵式按键的接法) 下面程序按照上述算法流程去编写的,其电路如图5-6,只是在图5-5的基础上多加了P0端口的8只LED灯。从键盘中检测到一个键值,然后将这个值写到LED数码管上显示。

单片机12-2、3独立按键和矩阵键盘(实训)

福建交通职业技术学院(教案)首页

课程: 单片机技术及应用 10~11 学年 第_2_学期 第 12 周 5 月 12 日 教 学 内 容 备 注 实训环境和器材 1、单片机实训操作台1张; 2、单片机实验板1套(含下载器); 3、计算机1台; 4、电源、通讯电缆、下载线等配件。 5、软件环境:Proteus Professional 7.1仿真软件、Keil 7.50A 编程软件 一、独立按键扫描 查询方式方式按键扫描:一般情况下,一个按键按下的时候,总是在按下的时刻存在着一 定的干扰信号, 按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号图如图所示。 从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时 5ms 以 上 ,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下, 若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才 是由于干扰信号引起的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别 过程。从而提高了系统的可靠性。 电路图: P32 P34 软件程序: 该程序实现独立按键去控制 LED 灯 的亮灭,并讲叙了对按键的处理方法。 独立按键相应的IO 口平时为高电平,一旦按键按下,单片机便检测到低电平。

课程:单片机技术及应用 10~11学年第_2_学期第 12 周 5 月 12 日 教学内容备注 #include #define uchar unsigned char #define uint unsigned int sbit KEY1 = P3^2; sbit KEY2 = P3^3; sbit KEY3 = P3^4; sbit LED1 = P0^0; sbit LED2 = P0^1; sbit LED3 = P0^2; /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i

独立按键和矩阵按键

第八章独立按键和矩阵按键 我们和单片机之间进行信息交互,主要包含两大类,输入设备和输出设备。前边讲的LED小灯、数码管、点阵都是输出设备,这节课我们学习一下最常用的输入设备——按键。在本节课的学习过程中我们还会穿插介绍一点硬件设计的基础知识。 8.1 单片机最小系统电路解析 8.1.1 电源 我们在学习过程中,很多指标都是直接用的概念指标,比如我们说+5V代表1,GND代表0等等这些。但在实际电路中是没有这么精准的,那这些指标允许范围是什么呢?随着我们所学的内容不断增多,大家要慢慢培养一种阅读手册的能力。 比如我们使用STC89C52RC单片机的时候,我们找到他的手册的11页,第二个选项,工作电压:5.5V-3.4V(5V单片机),这个地方就说明我们这个单片机正常的工作电压是个范围值,只要电源VCC在5.5V到3.4V之间都可以正常工作,电压超过5.5V是绝对不允许的,会烧坏单片机,电压如果低于3.4V,单片机不会损坏,但是也不能正常工作。而在这个范围内,最典型、最常用的电压值就是5V,这就是后面括号里“5V单片机”这个名称的由来。除此之外,还有一种常用的工作电压范围是2.7V-3.6V、典型值是3.3V的单片机,也就是所谓的“3.3V单片机”了。日后随着大家接触的东西慢慢增多,对这点会有更深刻的理解。 现在我们再顺便多了解一点,大家打开74HC138的数据手册,会发现74HC138手册的第二页也有一个表格,上边写了74HC138的工作电压范围,最小值是4.75V,额定值是5V,最大值是5.25V,可以得知它的工作电压范围是4.75V-5.25V。这个地方讲这些目的是让大家清楚的了解,我们获取器件工作参数的一个最重要,也是最权威的途径,就是通过器件的数据手册。 8.1.2 晶振 晶振通常分为无源晶振和有源晶振两种类型,无源晶振一般称之为crystal(晶体),而有源晶振则叫做oscillator(振荡器)。 有源晶振是一个完整的谐振振荡器,他是利用石英晶体的压电效应来起振,所以有源晶振需要供电,当我们把有源晶振电路做好后,不需要外接电路,它就可以主动产生振荡频率,并且可以提供高精度的频率基准,信号质量比无源信号好。 而无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能振荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。相对价格来说,无源晶振要比有源晶振价格便宜很多。无源晶振两侧通常都会有两个电容,一般其容值都选在10pF~40pF之间,如果手册中有具体电容大小的要求则要根据要求来选电容,如果手册没有要求,我们用20pF 就是比较好的选择,这是一个长久以来的经验值,具有极其普遍的适用性。 我们来认识下比较常用的两种晶振的样貌,如图8-1和图8-2所示。

单片机实验四 独立键盘与矩阵键盘操作

单片机实验四独立按键和矩阵键盘操作 [实验要求] 独立按键操作: 试操作P3.4~P3.7控制的四个独立按键中的某一个, 每按一次, 数码管上显示数字作一次加1或减1变化, 显示数字在0~9之间. 矩阵键盘操作: 依次按下4*4 矩阵键盘上从第1 到第20 个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。[实验原理] (1) 按键识别去抖动原理: 我们在手动按键的时候, 由于机械抖动或是其它一些非人为的因素很有可能造成误识别, 一般手动按下一次键然后接着释放, 按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。 (2) 独立按键识别: 判断是否按下键盘,当单片机上电时所有I/O 口为高电平,参照实验电路图, S2 键一端接地另一端接P3.4,所以当键被按下时P3.4 口直接接地,此时检测P3.4 肯定为低电平。 (3) 矩阵键盘识别: 参照实验电路图, 矩阵键盘的四行分别与P3.0-P3.3 连接,四列分别与P3.4-P3.7 连接。如识别第1列按键, 可给P3.4送低电平,其余为高电平, 把P3口数据读回, 判断其第4位是否全为1, 如果全为1,则该列无键按下, 可继续判断下1列, 如有某位为0, 则有键按下,并可根据其位置识别按键所在行,从而确定该按键位置和键值. 其它各列按键识别类同. [实验目的] (1)掌握独立按键的识别方法. (2)掌握按键去抖动的基本原理。 (3)了解矩阵键盘检测的操作方法。 (4)进一步巩固掌握数码管的显示操作方法.

矩阵键盘简易计算器

《微处理器系统与接口技术》课程实践报告 计算器 班级: 学号: 学生姓名: 指导老师: 日期: 2014.7.5 ******电子与信息工程学院

目录 1、设计题目:计算器 (3) 2、设计目的 (3) 3、计算器总体设计框图 (3) 4、计算器详细设计过程 (4) 4.1输入模块 (4) 4.2键盘输入电路 (5) 4.3主程序模块 (6) 5、分析与调试 (6) 7、运行结果 (8) 8、结束语 (8) 8、参考文献 (8) 9、源程序附录 (9) 9.1主程序 (9) 9.2延时函数delay (12) 9.3显示函数display (12) 9.4键盘扫描函数 (14) 9.5预定义函数 (15)

1、设计题目:计算器 2、设计目的 此次课程实践题目是基于单片机简单计数器的设计,本此设计使用的是Intel公司MCS-51系列的8051AH单片机。设计的计算器可以实现2位小数的加、减、乘、除运算以及整数的乘方运算,其中用4*4矩阵键盘来输入待参与运算的数据和运算符;八位数码管动态显示输入待参与运算的数据以及运算后产生的结果,每个硬件模块的调用过程中涉及到了函数入口及出口参数说明,函数调用关系描述等。 3、计算器总体设计框图 计算器以MCS-51系列的8051AH单片机作为整个系统的控制核心,应用其强大的I/O功能和计算速度,构成整个计算器。通过矩阵键盘输入运算数据和符号,送入单片机进行数据处理。经单片机运算后控制LED数码管的输出。整体框图如图1所示: 图3 整体框图 本系统硬件主要由矩阵键盘、独立键盘I/O输入输出、数码管显示等主要部分组成。各模块的主要功能如下: (1)矩阵键盘将十六进制编码的数字送到单片机。 (2) 单片机扫描键盘信号并接收,对输入的键盘信号进行处理 (3) LED以动态扫描的方式移位显示每次输入的数据和最后的运算结果。实践设计的具体流程图如下图2所示:

44矩阵式按键的接法

在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢?大家看下面电路图,单片机的整一个8位端口可以构成 4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成 20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐行查询法它是一种最常用的多按键识别方法。因此,我们就以行扫描法为例介绍矩阵式键盘的工作原理。 图5-4(4*4矩阵式按键的接法) 首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。再其次,判断闭合键所在的具体位置。在确认有键按下后 ,即可进入确定具体闭合键的过程。其方法是: 依次将列线置为低电平,即在置某一根列线为低电平时,其它列线为高电平。同时再逐行检测各行线的电平状态;若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。下面图5-5是4*4矩阵式按键接法的软件算法操作流程。

基于MCS-51单片机的独立按键和矩阵按键检测实验

实验三基于MCS-51单片机的独立按键和矩阵按键检测实验 一、支撑课程目标 目标1:掌握微机和单片机的基本原理、编程技术、中断技术、系统扩展、定时器、串行接口和其他输入/输出接口技术,并且了解典型的单片机应用系统的设计思想和实现方法。 目标2:初步具备自行拟定实验步骤、检查和故障排除、分析和综合实验结果以及撰写实验报告的能力。 目标4:掌握MCS-51单片机/STM32F103单片机系统仿真工具和仿真流程,了解常用实验仪器、设备的基本工作原理,了解其正确使用方法,具备利用电子仪器设备和专业仿真软件对复杂工程问题进行分析和设计的能力。 二、实验类型:验证型( )、设计型(√)、研究创新型() 三、预期学生学习的成果 1、具有典型按键检测电路原理及消除抖动的必要性的认知。 2、理解程序设计消除抖动的实现过程。 3、掌握独立按键的程序查询检测编程实现。 4、掌握独立按键的中断检测编程实现。 5、理解矩阵键盘的行列扫描检测原理,具有矩阵键盘软硬件设计综合能力。 四、实验原理 1、典型按键检测电路 典型的按键检测电路具备检测按键的条件:检测引脚处在键按下前和后,要有电平变化,否则按键无法检测。 电路组成包括电源、上拉电阻、按键、接地组成,按下前,检测引脚高电平,按下后检测引脚低电平。电阻防止按下电源短路,如图1(a)。 GND (a)(b) 图 1 按键典型电路及对应检测电压 2、按键抖动及消除 如图1(b),理想条件下,按键未按下,在检测I/O端口是高电平,按下以后,检测I/O端口是低电平,手松后,按键弹起,检测I/O端口是高电平。整个按键过程出现高电平到低电平又到高电平,有下降

51单片机学习之5独立按键和矩阵键盘

51单片机学习之5-独立按键和矩阵键盘第14集 键盘的原理 键盘分编码键盘(例如电脑键盘)和非编码键盘(自己用程序去识别)。 非编码键盘分:独立式非编码键盘(独立按键)、行列式非编码键盘(4*4阵列键盘) 独立键盘的电路图。 因为51单片机的IO口不是双向口而是准双向口,要让IO口具备输入功能,必须将IO口置1,置1之后当按键按下时IO口的电平会被拉低,即被置0。当检测到IO 口为0时即可判断该按键已经按下。按键按下时会有一

个抖动的过程(弹片会抖动),由于单片机检测IO口速度非常快,超过弹片抖动的频率,所以当单片机检测到 IO口为0时需延时一小段时间再检测IO是否为0,如果仍为0就确认该按钮被按下。因为IO口里面有上拉电阻,所以当松开按钮时,IO口又被拉高。 例程: #include; #defineuintunsignedint #defineucharunsignedchar sbitKey=P3^4; //按键 sbitLed=P1^0; //Led灯 voiddelay(uintz); /********主函数********/ voidmain() { while(1) { if(!Key)

{ delay(10); //消抖操作 if(!Key) Led=0; //按下时Led亮 else Led=1; } } } voiddelay(uintz) { uintx,y; for(x=z;x>;0;x--) for(y=110;y>;0;y--); } 第15集 4*4矩阵键盘 上图中,1个按键占用一个IO口,如果有16个按键就占用了16个IO口。为了减少IO口的使用,就需要用矩阵的方式连线。如下图

实验5 独立键盘和矩阵键盘

实验5 独立键盘和矩阵键盘 一、实验目的 1、学会用C语言进行独立按键应用程序的设计。 2、学会用C语言进行矩阵按键应用程序的设计。 二、实验内容 1、独立按键:对四个独立按键编写程序:当按k1时,8个LED同时100ms闪烁;当按k2时,8个LED从左到右流水灯显示;当按k3时,8个LED从右到左流水灯显示;当按k4时,8各LED同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭; 2、矩阵按键:采用键盘扫描方式,顺序按下矩阵键盘后,在一个数码管上顺序显示0~F,采用静态显示即可。 3、提高部分(独立按键、定时器、数码管动态扫描):编写程序,实现下面的功能。 用数码管的两位显示一个十进制数,变化范围为00~59,开始时显示00,每按一次k1,数值加1;每按一次k2,数值减1;每按一次k3,数值归零;按下k4,利用定时器功能使数值开始自动每秒加1;再按一次k4,数值停止自动加1,保持显示原数。 三、实验步骤 1、硬件连接 (1)使用MicroUSB数据线,将实验开发板与微型计算 机连接起来; (2)在实验开发板上,用数据线将相应接口连接起来; 2、程序烧入软件的使用 使用普中ISP软件将HEX文件下载至单片机芯片内。 查看结果是否正确。 四、实验结果——源代码 1. #include "reg5 2.h" typedef unsigned char u8; typedef unsigned int u16;

#define LED P2 sbit key1=P3^1; sbit key2=P3^0; sbit key3=P3^2; sbit key4=P3^3; const char tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; u8 code begMid[]={0x7e, 0xbd,0xdb,0xe7, 0xdb, 0xbd, 0x7e}; void Delay(u16 i) { while(i--);} void KeyDown() { u8 i; if(key2==0) { Delay(1000); if(key2==0) { for(i=0;i<8;i++) { LED=tab[i]; Delay(50000); } while(!key2); } LED=0xff; } else if(key1==0) { Delay(1000); if(key1==0)

相关文档
相关文档 最新文档