项目21演示教学_第1页
项目21演示教学_第2页
项目21演示教学_第3页
项目21演示教学_第4页
项目21演示教学_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目二超速报警系统设计与调试任务1速度显示模块内容提要速度显示通常有哪些形式?数码管显示接口电路如何设计?液晶显示接口电路如何设计?数码管显示与液晶显示有何异同?在数码管上显示小数点,有哪些处理方法?按键接口电路如何设计?项目效果图主要内容设计要求1硬件设计2软件设计3拓展要求4设计要求能力目标能掌握51单片机体系结构;能基本应用Keil和Proteus软件;能理解并能运用程序设计的基本框架;能根据设计要求选择元器件。相关知识数码管显示接口电路、I/O口资源,程序框架;数组和子函数的应用;Keil和Proteus软件的基本应用。任务要求设计完成速度显示的控制;画出电路设计的原理图和仿真图;调试控制程序代码;系统联调。硬件电路设计具体可分为硬件电路设计系统方案设计具体电路方案设计总电路原理图设计软件设计流程图设计

程序设计仿真调试

系统方案设计具体电路方案设计-显示电路

动态显示具体电路方案设计-显示电路

静态显示LED数码管

数码管内部由多个发光二极管组成。根据内部二极管连接方式,数码管在结构上又分为共阴极型和共阳极型两种。共阴极型内部发光二极管阴极连在一起,接低电平。共阳极型内部发光二极管阳极连在一起,接高电平。单个数码管内部共有8只发光二极管,7只为字段,可组成字形,第八个为小数点。故单个数码管有人称为七段数码显示,也有人称之为八段显示。如下图示,(a)为数码管引脚及外型图,(b)为共阴极型LED显示器,(c)为共阳极型LED显示器。LED数码管数码管引脚及内部结构图

LED数码管

数码管发光原理分两种情况:

共阴极型如图(b)所示,a、b、c、d、e、f、g各引脚输入高电平有效。只要哪个引脚输入为高电平,对应的二极管就会发亮。共阳极型,如图(c)所示。这种结构数码管的a、b、c、d、e、f、g各引脚输入低电平有效。只要哪个引脚输入低电平,对应的二极管就会发亮。公共端接低电平公共端接高电平LED数码管

通过点亮不同的发光段可组成不同的字形。输入到数码管dp、g、f、e、d、c、b、a的二进制码称为字段码(或称字形码),数码管显示的结果为字形。下表是显示字形与共阳极和共阴极两种接法的字段码对应关系。LED数码管显示字形与段选码关系显示字形共阳极段选码共阴极段选码0C0H3FH1F9H06H2A4H5BH3B0H4FH499H66H592H6DH682H7DH7F8H07H880H7FH990H6FHA88H77Hb83H7CHCC6H39HdA1H5EHE86H79HF8EH71H“灭”FFH00HLED数码管

上表中,各发光段a、b、c、d、e、f、g及dp与数据线的对应关系是D0~D7,即a对应D0、b对应D1、…、依次类推,而dp对应D7。只要把共阳极数码管按照引脚a、b、c、d、e、f、g、dp的顺序分别接于单片机P1口的P2.0~P2.7,如下图所示。由于P2口在输出时具有锁存功能,只要用指令向P2口送出字段码,数码管就可显示出所需字形。LED数码管思考:有时候为了电路板布线方便,数码管与单片机的连接关系并非是“各发光段a、b、c、d、e、f、g及dp与数据线的对应关系是D0~D7”。

当他们的连接关系为“D0-D7分别与数码管的g、f、a、b、e、d、c、dp”时,显示的字形码是什么???单个LED数码管显示电路数码管与P2口接口连接电路

单个LED数码管显示电路

要求设计十秒计时器。包含一位数码管,数值在0~9变化。每位数显示一秒钟。 数码管的显示要用到数组。将字形码存放在数组中。比如chr[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};P2=chr[i];(10>i>=0)这样完成了译码,当i=0时将chr[0]即0x3f送出了,从而实现了0的显示。单个LED数码管显示电路十秒计时器流程图,可用for循环实现。单个LED数码管显示程序voidmain(void){uchari;ucharchr[10]={0x3F,0x06, 0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F}; while(1) { for(i=0;i<10;i++) { P2=chr[i]; delay(); } }}#defineucharunsignedchar#defineuintunsignedint#include<AT89X51.h> voiddelay(){

uchar i;

uint

j;

for(i=0;i<124;++i)

for(j=0;j<1000;++j);}显示接口设计多位数码管显示时工作方式有两种:静态显示方式和动态显示方式。1.静态显示方式:静态显示的特点是每个数码管必须接一个8位锁存器用来锁存待显示的字形码。送入一次字形码显示字形一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。静态显示接口电路有许多种,下图给出了一个并行接口显示电路的实例。

静态显示接口电路如果要求实现显示34chr[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};P2=chr[3];P2=chr[4];练习要求完成60秒的计时。可用一个变量i用来存放时间值,初始值为0。当一秒钟时间到了之后,这个变量的值加一。一直减到59,到60后又变为0,从头开始。要显示这个时间变量,需要将时间的个位和十位上的数值拆分出来。用什么方法呢??1.基本算术运算符基本算术运算符有如下5种:

+(加法)、-(减法)、*(乘法)、/(除法)、%(求余数)1)关于除法运算“/”C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,10/3=3。如果相除的两个数中至少有一个是实型的,则结果为实型。例如,10.0/3=3.333333。

算术运算符

如果商为负值,则取整的方向随系统而异。但大多数系统采取“向零取整”原则,既取整后向零靠拢,换句话说,取其整数部分。例如,-5/3=-1。

2)关于求余数运算“%”

求余数运算要求两侧的操作数均为整型数据,否则出错。例如,5%2=1。可以用除法运算和求余数运算将需要显示数据的个位和十位的数码求出。算术运算符数字拆分例如将69的个位和十位的数字分别拆出。69/10=669%10=9这样便获得了6和9,即可分别送数码管显示了。60秒计时流程图。voidmain(void){

chari; unsignedcharchr[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; while(1) { for(i=0;i<60;i++) { P2=chr[i/10]; P3=chr[i%10]; delay(); } }}显示接口设计2.动态显示:动态显示的特点是将所有数码管的段选线并联在一起,通过控制位选信号来控制数码管的点亮。这样一来,就没有必要每一位数码管配一个锁存器,从而大大简化了硬件电路。数码管采用动态扫描显示,所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的限流电阻。下图给出一种2位LED动态显示电路。动态显示接口电路用动态显示法实现两位数58的显示。动态显示接口程序#defineucharunsignedchar#defineuintunsignedint#include<AT89X51.h> voiddelay(intk){ uchar i; uint j; for(i=0;i<124;++i)

for(j=0;j<k;++j);}voiddisplay(unsignedchart){ unsignedcharn1,n2; unsignedcharchr[10]={0x3F,0x06,0x5B,

0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; n1=t/10;n2=t%10; P3_1=1;P3_0=0; P2=chr[n1]; delay(10); P3_0=1;P3_1=0; P2=chr[n2]; delay(10);}voidmain(void)

{

unsignedchari=58;

while(1)

{

display(i); }}

练习采用动态显示法显示六位数应该如何绘制接口电路和编写程序?display(longzt){charchr[10]={0x3F,0x06,0x5B,0x4F,

0x66,0x6D,0x7D,0x07,0x7F,0x6F};

chari,lie,a[6];

a[5]

=

zt%10;

zt

=

zt/10;

a[4]

=

zt%10;

zt

=

zt/10;

a[3]

=

zt%10;

zt

=

zt/10;

a[2]

=

zt%10;

zt

=

zt/10;

a[1]

=

zt%10;

zt

=

zt/10;

a[0]

=

zt%10;

lie

=

0x01;

for(i=0;i<6;i++)

{

P2=~lie;

P0=chr[a[i]];

delay();

lie=lie<<1;

}}数码管的驱动一般的51系列单片机的I/O口可以输出4mA的拉电流或20mA的灌电流,可以驱动数码管发光。由于灌电流较大,因此对共阳极数码管的驱动能力较大。数码管工作时每段需串联一个限流电阻,另外,电阻值的选取只要保证管子正常发光即可。一般单个数码管电流控制在10~20mA较合适。电流太大会加大耗电量,而电流太小又无法得到足够的发光度。数码管的驱动数码管的驱动当多位数码管采用动态显示方式时,数码管上八段的电流集合到公共段,所以数码管的位线不能直接连接到单片机的I/O口。可通过IO口控制三极管的导通和截止来控制与电源的连接。数码管的驱动数码管的驱动为了增加数码管的亮度,在多位显示时,段码上应加上驱动芯片,增强输出电流。常用显示驱动芯片有:74ls47,74ls48,74ls244,74ls164,74ls595等等。74ls244:三态输出的八缓冲器和线驱动器(20MA)74ls164:8串行输入并行输出的移位寄存器(25MA)

74ls595:8位串入并出输出锁存移位寄存器(35MA)数码管的驱动设计要求具体电路方案设计-键盘电路按键按键的分类按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。

按键

键输入原理在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。3.按键结构与特点微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。按键

机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如下图所示,抖动时间的长短与开关的机械特性有关,一般为5

10ms。按键按键触点的机械抖动按键在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。按键软件上采取的措施是:在检测到有按键按下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。按键

编制键盘程序一个完善的键盘控制程序应具备以下功能:

(1)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。

(2)有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。

按键(3)准确输出按键值(或键号),以满足跳转指令要求。按键独立式按键结构

单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用下图所示。按键

独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。按键独立式按键的软件结构独立式按键的软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。按键

S1~S4四个按键分别接到P3.0、P3.1、P3.2和P3.3,对这些键可以采用查询的方法。If(P3_0==0){delay(10);if(P3_0==0){delay(10);while(P3_0==0);

按键确定按下,可执行功能程序}}按键按键开关的抖动问题单片机中应用的键盘一般是由机械触点构成的。由于按键是机械触点,当机械触点断开、闭合时,会有抖动。

抖动对于人来说是感觉不到的,但对单片机来说,这已是一段“漫长”的时间了。

消除抖动的方法为了使CPU能正确地读出P1.0口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动。软件去除抖动就是在单片机获得P1.0口为低的信息后,不是立即认定S已被按下,而是延时10毫秒或更长一段时间后再次检测P1.0口,如果仍为低,说明S的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(P1.0为高),再对键值处理。练习练习题:单片机P1口连接了8个按键,键值分别为1-8,当按键按下时将该键的键值用数码管显示出来。

8个按键分别接到P1.0~P1.7,采用不断查询的方法,即检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的键处理。按键示例

#include<AT89X51.h>voiddelay(intk){

unsignedchar

i;

unsignedint

j;

for(i=0;i<124;++i)

for(j=0;j<k;++j);}ucharkey(void){

uchara;

P1=0xff;

a=P1;

if(a==0xff)return0;

else

{delay(10);

a=P1;

if(a==0xff)return0;

else

{

while(P1!=0xff);

returna;

}

}}main(

){unsignedcharchr[10]=

{0x3F,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F,0x6F};

unsignedchark;

while(1)

{

k=key();

switch(k)

{

case0:break;

case0xfe:P2=chr[1];break;

case0xfd:P2=chr[2];break;

case0xfb:P2=chr[3];break;

case0xf7:P2=chr[4];

break;

case0xef:P2=chr[5];

break;

case0xdf:P2=chr[6];

break;

case0xbf:P2=chr[7];

break;

case0x7f:P2=chr[8];

break;

}}}按键数量较少时,可以逐个判断按键是否按下。If(P1_0==0){delay(10);if(P1_0==0){delay(10);while(P1_0==0);

按键按下,可执行功能程序}}练习:设计一个包含两个按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论