《单片机技术及应用项目化教程》课件第3章_第1页
《单片机技术及应用项目化教程》课件第3章_第2页
《单片机技术及应用项目化教程》课件第3章_第3页
《单片机技术及应用项目化教程》课件第3章_第4页
《单片机技术及应用项目化教程》课件第3章_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

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

文档简介

项目三键盘及显示接口的应用

任务1八路抢答器的设计与制作任务2数字秒表的设计任务3密码锁的设计任务4简单的LED点阵显示

——用LED点阵模拟显示电梯的楼层扩展任务液晶显示器接口设计

——用字符液晶向朋友问好

任务1八路抢答器的设计与制作

知识目标:掌握独立式键盘和LED数码管显示器的应用特性,掌握键盘去抖动的方法及键盘程序编写的步骤。

能力目标:会使用Proteus设计独立键盘与单片机的接口电路及一位LED数码管显示器与单片机的接口电路,能熟练使用开发环境进行简单程序的输入和调试,并会编写八路抢答器的控制程序。

1.任务要求

设计制作八个独立按键电路和一位静态数码管显示电路,和单片机最小系统开发板,构成八路抢答器小系统。实现如下功能:当按下K1时,数码管显示1,按下K2时,数码管显示2,…,按下K8时,数码管显示8,如果同时有两个或两个以上的按键按下,数码管不显示,从而实现八路抢答器的功能。

2.硬件电路的设计与制作

1)键盘概述

键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。键盘分为编码键盘和非编码键盘,一般单片机系统中采用非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单、使用灵活等特点,因此被广泛应用于单片机系统。

按钮开关的抖动问题:组成键盘的按钮有触点式和非触点式两种。单片机中应用的按钮一般是机械触点,当按键动作时,会出现抖动现象,要对按键进行消抖处理。下面以图3-1单个按键电路为例介绍抖动的产生及如何消除。

当开关S未被按下时,P1.0口输入为高电平,当开关S闭合后,P1.0口输入为低电平。由于按钮是机械触点,当机械触点断开、闭合时,会有抖动,P1.0口输入端的波形如图3-2所示。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。图3-1单个按键构成的键盘电路图3-2按键的电压抖动为使CPU能正确地读出P1.0口的状态,对每一次按钮只作一次响应,就必须考虑如何去除抖动,常用的去抖动的办法有两种:硬件办法和软件办法。单片机中常用较简单的软件法,其流程图如图3-3所示。即在单片机获得P1.0口为低的信息后,不是立即认定S已被按下,而是延时10ms或更长一些时间后再次检测P1.0口,如果仍为低,说明S的确按下了,这实际上是避开了按钮按下时的抖动时间。而在检测到按钮释放后(P1.0为高)再延时5~10ms,消除后沿的抖动,然后再对键值处理。不过一般情况下,我们常常不对按钮释放的后沿进行处理,实践证明,也能满足一定的要求。当然,实际应用中,对按钮的要求也是千差万别,要根据不一样的需要来编制处理程序,但以上是消除键抖动的原则。图3-3软件去抖动流程图软件去抖就是在检测到有按键按下时执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后;再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键是处于闭合状态。

2)独立式键盘

在设计独立式键盘电路时,每个按键的一端与Px口的一个引脚相连,另一端接地。CPU可以通过检测Px的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下,如图3-4所示。图3-4独立式键盘其典型的程序结构如下:

KEY: MOVA,#0FFH;对P0口写“1”,为输入作准备

MOVP1,A

MOVA,P1 ;输入按键状态

JNB ACC.0,KEY0 ;若K0按键按下,则转KEY0处理程序

JNB ACC.1,KEY1 ;若K1按键按下,则转KEY1处理程序

…独立键盘控制流水灯的程序:

ORG 0000H

AJMP KEY

ORG 0050H

KEY: MOV P1,#0FFH

MOV A,#0FFH

MOV P2,A

MOV A,P2

JNB ACC.0,KEY0

SJMP KEY

KEY0: MOV P1,A

SJMP KEY

END独立式键盘的结构比较简单,但每个按键都占用了一个口线,因此只适用于按键数量比较少的情况。

在单片机应用系统中,通常要使用显示器作为输出设备显示系统的状态,常用的显示器有LED数码显示器、点阵显示器及液晶显示器三种。

LED数码显示器内部的发光二极管有共阴极和共阳极两种连接方法,如图3-5所示。

3) LED数码显示器及其接口电路

LED(LightEmittingDiode)是发光二极管的缩写,LED数码显示器是由若干段发光二极管构成的,当某些段的发光二极管导通时,显示对应的字符。LED显示器控制简单,使用方便,在单片机中应用非常普遍。

7段发光二极管再加上一个小数点位,共计8段,提供给LED显示器的字形码正好一个字节,各字形码的对应关系如下:图3-5LED数码显示器内部的连接方法若为共阴极接法,则输入高电平使发光二极管点亮;若为共阳极接法,则输入低电平使发光二极管点亮。使用LED显示器时,要注意区分两种不同的接法。为了显示数字或符号,要为LED显示器提供代码(字形码),在两种接法中字形码是不同的。

用LED显示器显示十六进制数的字形码见表3-1。表3-1字形码

LED显示器的显示方式分为静态显示和动态显示两种。

静态显示:实际使用的LED显示器通常由多位构成,对多位LED显示器的控制包括字形控制(显示什么字符)和字位控制(哪些位显示)。在静态显示方式下,每一位显示器的字形控制线是独立的,分别接到一个8位I/O接口上,字位控制线连在一起,接地或 +5V。八路抢答器即为一位数码管构成的静态显示电路,如图3-6所示。图3-6八路抢答器电路图

3.软件程序的设计

程序清单如下:

ORG 0000H

LJMP MAIN

ORG 0050H

MAIN: JB P1.0,NEXT1

MOV A,#1

SJMP AA

NEXT1: JB P1.1,NEXT2

MOV A,#2

SJMP AA

NEXT2: JB P1.2,NEXT3

MOV A,#3

SJMP AA

NEXT3: JB P1.3,NEXT4

MOV A,#4

SJMP AA

NEXT4: JB P1.4,NEXT5

MOV A,#5

SJMP AA

NEXT5: JB P1.5,NEXT6

MOV A,#6

SJMP AA

NEXT6: JB P1.6,NEXT7

MOV A,#7

SJMP AA

NEXT7: JB P1.7,MAIN

MOV A,#8

AA: MOV DPTR,#SEG

MOVC A,@A+DPTR

MOV P2,A

SLJMP $

SEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END任务2数字秒表的设计

知识目标:掌握单片机中断系统结构及工作原理;掌握单片机中断程序的编写方法;掌握单片机定时计数器的工作方式;掌握单片机定时计数器不同工作方式程序的编写方法;掌握数码管动态扫描的原理及软件编写。

能力目标:单片机开发工具及软件使用;设计并制作2位LED动态显示电路;动态显示程序、中断程序和定时/计数程序的编写及调试;编写程序实现数字秒表的功能。

1.任务要求

设计制作三个独立按键电路和二位动态数码管显示电路,构成数字秒表小系统。实现如下功能:当按下K1时,数码管开始计时,K2按键按下,数码管停止计时,K3按下时,秒表清零。

2.中断系统

1)中断的基本概念

(1)中断源是指引起中断的事件。

(2)中断的优点:

① CPU与外设并行工作。

②实时处理。

③故障处理。

(3)中断处理过程主要包括:中断请求、中断响应、中断服务、中断返回,如图3-7所示。

中断源是中断响应的必备条件。

中断功能包括:硬件电路和软件程序。

中断程序包括:中断控制和中断服务程序。

中断控制包括:触发方式、允许中断响应(设置IE)、优先级控制(设置IP)。图3-7中断处理过程

2)中断源和中断请求标志

(1)中断源包括:2个外部、3个内部。

2个外部包括:INTO非P3.2口、INT1非P3.3口。

3个外部包括:定时T0P3.4口、计数T1P3.5口、串行口中断RXDP3.0口、RXDP3.1口。

(2) TCON中的中断标志位:

TR0/TR1是T0/T1的启动控制位,当TR0 = 0时,T0不能计数,当TR1 = 0时,T1不能计数。

TF0是T0的溢出中断标志位。当TR0 = 1时,一直保持CPU的响应中断。

TI0是INT1非触发方式,当IT0 = 0时是低电平触发方式,当IT0 = 1时是下降沿触发方式。

IE0是外部中断INT0非的中断标志位。

SCON的中断标志位:

D1是串行口发送中断源,RI是串行口接收中断源。

(3)中断允许控制寄存器IE:

EX1外部中断,ET1定时,ES串行口中断。

要想哪位中断,哪位就得置一。必备EA=1!

4) IP中断优先级控制寄存器

PX0、PX1是外部中断,PT0、PT1是定时,PS是串行口优先级控制位。控制高优先级令PX0 = 1,控制低优先级令PX0 = 0。

系统复位时均为低优先级,同级按自然顺序排列,出现高级,先高后低。优先级从高到低是D0到D7。

响应次序为:定时器0→外中断1→外中断0→实时器1→串行中断。

中段系统结构框图如图3-8所示。图3-8中断系统结构框图

3)中断的响应过程

(1)中断响应条件:

①有中断源发出中断请求。

②中断总允许位EA=1,即CPU开放中断;且申请中断的中断源对应的中断允许位为1,即没有被屏蔽。

③没有更高级或同级的中断正在处理中。

④执行完当前指令。若当前指令为返回指令RET、RETI或访问IE、IP的指令,CPU必须在执行完当前指令后,再继续执行一条指令,然后才响应中断。

(2) CPU响应中断的过程:

在每个机器周期的S5P2期间,各中断标志采样相应的中断源。CPU则在下一机器周期的S6期间按优先级的顺序查询各中断标志。若查询某中断标志为1,则按优先级的高低进行处理,即响应中断。

响应中断后,执行硬件生成的长调用指令“LCALL”,将程序计数器PC的内容压入堆栈保护,先低位地址,后高位地址,栈指针加2。

将对应中断源的中断矢量地址装入程序计数器PC,使程序转向该中断矢量地址,去执行中断服务程序。中断服务程序由中断矢量地址开始执行,直到遇到RETI指令为止。

执行RETI指令,撤销中断申请,弹出断点地址送入PC,先弹出高位地址,后弹出低位地址,栈指针减2,恢复原程序的执行。

(3) CPU响应中断的过程中,硬件完成以下功能:

①保留断点,执行硬件中断服务子程序调用,并把当前程序计数器PC的内容压入堆栈;

②自动清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);

③把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC,从而转入相应的中断服务程序。

4)中断系统的程序设计

(1)主程序:

①主程序的起始地址。

MCS-51系列单片机复位后,(PC) = 0000H,而0003H~002BH分别为各中断源的入口地址。所以编程时应在0000H处写一跳转指令(一般为长跳转指令),使CPU在执行程序时,从0000H跳过各中断源的入口地址。主程序则是以跳转的目标地址作为起始地址开始编写,一般从0030H开始。起始地址程序:

ORG

0000H

LJMP

START

ORG

0003H

LJMP

INT0 ;转外中断0

ORG

000BH

RETI

②主程序的初始化内容。

所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定。应对IE、IP进行初始化编程,以开放CPU中断,允许某些中断源中断和设置中断优先级等。

(2)中断服务程序:

中断服务程序是一种具有特定功能的独立程序段,它为中断源的特定要求服务,以中断返回指令结束。在中断响应过程中,断点的保护主要由硬件电路来完成。对用户来说,在编写中断服务程序时,主要需考虑现场的保护与恢复。

①中断服务程序的起始地址。

MCS-51系列单片机的中断系统对五个中断源分别规定了各自的入口地址,但这些入口地址相距很近(仅8个字节),一般在相应的入口处定一条跳转指令,并以跳转指令的目标地址作为中断服务程序的起始地址进行编程。②中断服务程序编写中的注意事项。

a.视需要确定是否保护现场。

b.及时清除那些不能被硬件自动清除的中断请求标志,以免产生错误的中断。

c.中断服务程序中的压栈(PUSH)与出栈(POP)指令必须成对使用,以确保中断服务程序的正确返回。

主程序和中断服务程序之间的参数传递与主程序和子程序的参数传递方式相同。

5)中断的应用

利用一个按键来控制灯的闪亮和闪灭,程序清单如下:

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INSER

ORG 0030H

MAIN: SETB EX0

SETB IT0

SETB EA

MOV P0,#0FFH

MOV A,#0FFH

MOV 30H,#0FFH

X0: JZ X1

CPL P0.0

SETB P0.0

SJMP X0

X1: LCALL SHAN

SJMP X0

INSER: MOV A,30H

CPL A

MOV 30H,A

RETI

SHAN: CLR P0.0

LCALL DEALAY

SETB P0.0

LCALL DEALAY

RET

DEALAY: MOV R3,#10

DLI: MOV R4,#100

DLZ: MOV R5,#123

NOP

DJNZ R5,$

DJNZ R4,DLZ

DJNZ R3,DLI

RET

END

3.定时器/计数器

定时器/计数器的作用:定时或延时控制、对外部事件的检测、计数等。

MCS-51系列8031、8051单片机有两个16位定时器/计数器(即T0和T1),8032、8052单片机有3个16位定时器/计数器(即T0、T1和T2)。

计数功能就是对外部输入脉冲的计数;定时功能也是对脉冲进行计数完成的,计数的是MCS-51内部产生的标准脉冲,通过计数脉冲个数实现定时。所以,定时器和计数器本质上是一致的,在以后的叙述中将定时器/计数器笼统称为定时器。定时器的结构及工作原理如下:

定时器由两个16位的定时器T0和T1,以及它们的工作方式寄存器TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。

定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。

定时器/计数器T1、T0是两个可编程寄存器。每个定时器内部结构实际上就是一个可编程的加法计数器,由编程来设置它工作在定时状态还是计数状态。其两种工作模式如下:

(1)计数器工作模式—对外部事件进行计数。计数脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。当输入信号发生由1至0的负跳变(下降沿)时,计数器(TH0,TL0或TH1,TL1)的值增1。计数的最高频率一般为振荡频率的1/24。

(2)定时器工作模式——通过计数实现。计数脉冲来自内部时钟脉冲,每个机器周期计数值增1,每个机器周期=12个振荡周期,因此计数频率为振荡频率的1/12。所以定时时间 = 计数值 × 机器周期。相关的控制寄存器有工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态。单片机复位时,两个寄存器的所有位都被清0。

TMOD,该方式控制寄存器的构成如下:

GATE是门控位。GATE = 0,内部启动,TR1 = 1;GATE = 1,外部启动,TR1 = 1且INT1非 = 1。C/T非为0时,T非有效,起定时作用;C/T非为1时,C有效,起计数作用。

M1、M0是工作方式选择位,其工作方式的控制如表3-2所示。

注:Tcy—机器周期、T—要定时的时间、T/Tcy—要记录机器周期的个数、S—要记录的脉冲个数。其中,方式2、8位常数自动重新装载;方式3仅适用于T0,T0分成两个8位计数器,T1停止计数。表3-2TMOD工作方式

TCON控制定时器的启动和停止,其构成如下:

注:TF1、TF0—计数溢出标志位,定时器T0或T1计数溢出时,由硬件自动将此位置“1”;TFx可以由程序查询,也是定时中断的请求源。

TR1、TR0—计数运行控制位,若TRx = 1则启动定时器/计数器工作;若TRx = 0则停止定时器/计数器工作。

TH0、TL0—存放定时器T0的初值或计数结果,TH0存放高8位,TL0存放低8位;

TH1、TL1—存放定时器T1的初值或计数结果,TH1存放高8位,TL1存放低8位。

定时器的编程和应用:

(1)确定工作方式字。对TMOD寄存器正确赋值。

(2)确定定时初值。计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1。初值计算如表3-2所示。

(3)根据需要,对IE置初值,开放定时器中断。

(4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。

TIMER EQU30H

ORG 0000H

MAIN: MOV TMOD,#00H ;TMOD设置T0为方式0

MOV TL0,#18H ;TL0初值

MOV TH0,#0E0H ;TH0初值

SETB TR0 ;TCON启动T0

LOOP: JBC TF0,NEXT1 ;TCON查询方式

SJMP LOOP

NEXT1: MOV TL0,#18H

MOV TH0,#0E0H

INC TIMER ;计时内存+1

SJMP LOOP ;重复循环

END

4.数字秒表的电路设计

根据任务要求完成数字秒表的硬件电路设计,如图3-9所示。图3-9秒表电路原理图

5.软件设计

(1)根据定时器工作方式确定TMOD设置。

选择定时器T0,方式1,16位定时/计数器,TMOD值为01H。

(2)根据时钟频率确定定时器初值TH0、TL0。

时钟频率为12MHz,此定时器最大定时时间是:1微秒 × 65 536 = 65.536毫秒。

选择定时时间是50毫秒,以方便于通过软件生成秒。由此TH、TL的值为65 536-50000 = 15536 = 3CB0H,即TH = 3CH、TL = B0H。软件程序如下:

ORG 00H

AJMP MAIN

ORG 0BH

AJMP TOINT

ORG 30H

MAIN: MOV 40H,#0

MOV R0,#20

MOV TOMD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

SETB ET0

SETB TR0

MOV DPTR,#TABLE

K1: LCALL DISP

SETB EA

JB P2.7,K2

JNB P2.7,$

SJMP K1

K2: JB P2.6,K3

JNB P2.6,$

CLR TR0

SJMP K2

K3: JB P2.5,K1

JNB P2.5,$

MOV 40H,#0

CLR TR0

LCALL DISP

SJMP K1

TOINT: MOV TH0,#3CH

MOV TL0,#0B0H

DJNZ R0,RTI

MOV R0,#20

MOV A,#40H

CJNE A,#99,ADD1

MOV 40H,#00H

AJMP RTI

ADD1: ADD A,#1

MOV 40H,A

RTI: RETI

DISP: CLR EA

MOV A,40H

MOV B,#10

DIV AB

MOV 20H,A

MOV 21H,B

SETB P2.1

CLR P2.0

MOV A,20H

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

SETB P2.0

CLR P2.1

MOV A,21H

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

RET

DELAY: MOV R6,#10H

DL0: MOV R5,#0FFH

DJNZ R5,$

DJNZ R6,DL0

RET

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H

DB 92H,82H,0F8H,90H

END

任务3密码锁的设计

知识目标:理解矩阵键盘和动态显示电路的工作原理;熟悉矩阵键盘的硬件结构;掌握键盘扫描程序设计方法;掌握多位LED动态显示程序的设计方法。

能力目标:设计并制作4 × 4矩阵键盘电路;编写调试键盘扫描程序;设计并制作4位LED动态显示电路;编写调试动态显示程序;应用外围电路构成密码锁硬件电路;软、硬件联调实现密码锁的功能。

1.任务要求

设计制作4 × 4行列式键盘电路、四位七段数码管显示电路显示6位密码和两个红绿LED指示灯显示电路。密码正确绿灯亮,密码错误红灯亮,连续输入三次错误密码蜂鸣器响报警。

2.矩阵式键盘

单片机系统中,若使用按键较多时,通常采用矩阵式键盘,其结构如图3-10所示。由图可知,一个4 × 4的行、列结构,可以构成一个含有16个按键的键盘,节省了很多I/O口。图3-10矩阵式键盘每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N × M个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。

对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照图3-10所示的4 × 4键盘,说明线反转法工作原理。首先辨别键盘中有无键按下,若有则单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。

判断键盘中哪一个键被按下是通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。键盘扫描程序具体实现方法:判断有无键按下,求出按键的键值。

1)判断有无键按下

(1) P1.0~P1.3输出0,然后读P1口;

(2) P1.4~P1.7全为1,则键盘上没有键按下;

(3)若P1.4~P1.7不全为1,则有键按下。

MOV A,#0F0H

MOV P1,A

NOP

MOV A,P1

KEY0: ORL A,#0FH

CJNE A,#0FFH,KEY1

MOV KEYVALUE,#0FFH

RET

2)求按键的键值

(1)对键盘的列线进行扫描,P1.0~P1.3循环输出1110、1101、1011和0111,依次读P1口,若高4位全为1,则断定该列上没有键按下;

(2)否则,该列上就有键按下,并且就是行线为0、列线为0的交叉点,行号和列号按公式:rol*4+col计算得到按下键的键值。

KEY1: LCALL DELY

MOV B,#00

MOV R7,#0FEH

KEY2: MOV A,R7

MOV P1,A

NOP

MOV A,P1

ORL A,#0FH

INC B

MOV R6,B

CJNE R6,#04,KEY3

CJNE A,#0FFH,KEY4

KEYVALUE,#0FFH

RET

KEY3: CJNE A,#0FFH,KEY4

MOV A,R7

RL A

MOV R7,A

SJMP KEY2

KEY4: DEC B

PUSH B

MOV B,#00

SETB C

KEY5: RRC A

INC B

JC KEY5

DEG B

MOV DPTR,#KEYN

POP A;(B)

RL A;*2

MOV R6,A

RL A;*2

ADD A,R6

MOV R7,A

PUSH DPH

PUSH DPL

POP A

CLR C

ADD A,R7

MOV DPL,A

POP A

ADDC A,#00H

MOV DPH,A

MOV A,B

MOVC A,@A+DPTR

MOV KEYVALUE,A

RET

KEYN:

DB 31H,32H,33H,34H;1234

DB 35H,36H,37H,38H;5678

DB 39H,30H,40H,41H;90AB

DB 42H,43H,44H,45H;CDEF

3.

LED动态显示

数码管的显示方式分为静态显示和动态显示两类。

静态显示驱动:每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5 × 8 = 40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路复杂性。动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的显示方式之一,动态驱动是将所有数码管的8个显示笔划的同名端“a,b,c,d,e,f,g,dp”连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示字形,没有选通的不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,形成动态扫描显示。

4.密码锁的硬件电路设计

1)矩阵键盘电路设计

为了减少键盘与单片机接口时所占用的I/O线的数目,本设计使用矩阵键盘,4 × 4行列式键盘结构,如图3-11所示。图3-114 × 4行列式键盘原理图

2) LED显示电路

本设计的显示电路采用动态显示的方式,即使用单片机的P00-P07作为段选码口,P22-P27为位选码口,采用六位密码,将前、末位数码空置。电路原理图如图3-12所示。

从单片机P00-P07输出的信号是六位七段数码管的段选信号,直接送到七段数码管的段选地址中,控制七段数码管显示的码型;从单片机P22-P27输出的信号是六位七段数码管的位选信号,送到六位七段数码管的片选地址中,控制六位七段数码管的显示个数和哪一个管子显示。图3-12四位七段数码管显示电路的电路原理图

3)开锁电路

本设计中,用红绿LED灯指示密码输入的正确与否,红色管亮,表示密码错误,绿色管亮,表示密码正确。电路原理图如图3-13所示。图3-13发光二极管(开锁)电路原理图

4)软件设计

对于电子密码锁的设计,需要解决3个问题:键盘输入、数码管显示、单片机电路以及密码比较与处理的有关程序设计。通过行列键盘扫描程序获取所按键的行、列号,得到键值。键值编码规则如下:将字节的高四位(D7、D6、D5、D4)表示列号(4、3、2、1),低四位(D3、D2、D1、D0)表示行号(4、3、2、1),比如11H(00010001)表示第1行第1列,21H(00100001)表示第1行第2列,以此类推,可得其他键值的编码。根据获取的键值编码,选择相应的功能,驱动数码管的指示灯显示。如图3-14所示主程序流程图中,计数器0、1初始化后,六位数码管显示888888,然后通过扫描键盘,判断是否有键按下。这个时候若没有键按下,则要继续扫描,不断重复循环过程,直到发现有键按下,程序才能根据按键的功能进行相应的处理,当6位密码输入完毕,按下“确认键”,则数码管关闭显示,进入密码比较环节,根据比较的结果,指示灯输出不同的状态,指示灯点亮的时间由定时器1控制。数码管的动态扫描显示由定时器0控制。当程序中断时,程序保存现场,并重装TH0、TL0的初值,然后判断是否进行数码管显示,如是则调用数码管显示函数,最后中断返回。定时器1用于指示灯点亮时间的控制。当程序中断时,程序保存现场,并重装TH1、TL1的初值,然后判断输入密码的时间是否大于20,即有没有到1s,若到1s,则关闭指示灯,6位数码管显示为“888888”,同时关闭定时器1;若没到1s,则继续累加,最后中断返回。中断服务子程序流程图如图3-15所示。图3-14主程序流程图图3-15中断服务子程序流程图把本项目设计制作的硬件电路,再结合蜂鸣器电路和单片机最小系统电路构成密码锁硬件电路,通过软、硬件联调实现密码锁功能。

软件程序如下:

(1)主程序。

ORG 0000H

AJMP START

ORG 000BH

AJMP DP01

START: SETB RS1

MOV R0,#40H

MOV R1,#4

MOV R2,#80H

CLR RS1

SETB P1.0

SETB P1.1

SETB P1.2

MOV TMOD,#01H;T0设为16位定时计数器

MOV TL0,#018H

MOV TH0,#0FCH

SETB TR0

SETB ET0

SETB EA

MOV R4,#04H ;设置初始密码,从30h开始

MOV R0,#30H ;

PASSWORD0: MOV A,#00H;左上第一个健

MOV @R0,A

INC R0

DJNZ R4,PASSWORD0

MOV R4,#04H ;设置初始密码,从30h开始

MOV R0,#40H ;

PASSWORD: MOV A,#00H ;左上第一个健

MOV @R0,A

INC R0

DJNZ R4,PASSWORD

DETPW: MOV R4,#04H ;输入密码

MOV R1,#40H

AGAIN: ACALL INPUT ;扫描键盘输入子程序

; MOV A,R7

IN: MOV @R1,A

CLR P1.1

ACALL DELAY

ACALL DELAY

SETB P1.1

INC R1

DJNZ R4,AGAIN

COMP: MOV R4,#04H ;比较密码

MOV R0,#30H

AGAI: MOV 50H,@R0

MOV A,R0;

ADD A,#10H

MOV R0,A

MOV A,@R0

CJNE A,50H,ONCEMORE

MOV A,R0

SUBB A,#10H

MOV R0,A

INC R0

DJNZ R4,AGAI

CLR P1.0 ;输出开锁电平

;ACALL DELAY

;ACALL DELAY

;CLR P1.0

HERE: ;LCALL DP01

AJMP HERE

ONCEMORE: CLR P1.2 ;错误输入警告

THERE:

;LCALL DP01

AJMP THERE

(2)延时子程序。

DELAY: MOV R5,#13

DELAY1: MOV A,#0FFH

LOOP: DEC A

JNZ LOOP

DJNZ R5,DELAY1

RET

(3)扫描键盘输入子程序。

INPUT: MOV P3,#0FH ;对输入应锁存写1

MOV A,P3

CJNE A,#0FH,K11 ;有键按下

LCALL DP01

K10: AJMP INPUT ;无键按下

K11: ACALL DELAY ;延时去抖动

MOV P3,#0FH

MOV A,P3 ;再读取键盘状况

CJNE A,#0FH,K12 ;确有键按下

SJMP K10 ;误动作

K12: MOV B,A ;存行值

MOV P3,#0EFH ;检测第一行

MOV A,P3

CJNE A,#0EFH,K13

MOV P3,#0DFH ;检测第二行

MOV A,P3

CJNE A,#0DFH,K13

MOV P3,#0BFH ;检测第三行

MOV A,P3

CJNE A,#0BFH,K13

MOV P3,#07FH ;检测第四行

MOV A,P3

CJNE A,#07FH,K13

AJMP K10 ;多键同时按下

K13: ANL A,#0F0H ;得行值

ORL A,B ;得按下的行值

MOV B,A ;暂存键值

MOV R6,#16 ;16个键

MOV R2,#0 ;键码初值

MOV DPTR,#K1TAB ;键码表首址

K14: MOV A,R2

MOVC A,@A+DPTR ;从键值表中取键值

CJNE A,B,K16 ;与按下键的键值比较

MOV P3,#0FH

K15: MOV A,P3

CJNE A,#0FH,K15;等彩旗

ACALL DELAY ;延时去抖动

MOV A,R2 ;得键码

RET

K16: INC R2

DJNZ R6,K14

AJMP K10

K1TAB: DB 0EEH,0DEH,0BEH,07EH

DB 0EDH,0DDH,0BDH,07DH

DB 0EBH,0DBH,0BBH,07BH

DB 0E7H,0D7H,0B7H,077H

DP01: SETB RS1

MOV 70H,A

PUSH DPL

PUSH DPH

MOV TL0,#018H

MOV TH0,#0FCH

SETB TR0

MOV DPTR,#TAB

DP00: MOV A,@R0

MOVC A,@A+DPTR

MOV P0,#0FFH

CPL A

MOV P2,A ;字形码

MOV A,R2

CPL A

MOV P0,A

MOV A,R2

RR A

MOV R2,A

INC R0

DJNZ R1,PP

MOV R0,#40H

MOV R1,#4

MOV R2,#80H

PP: CLR RS1

POP DPH

POP DPL

MOV A,70H

RETI

TAB: DB 3FH,06H,5BH,4FH,66H,6DH

DB 7DH,07H,7FH,6FH,77H,7CH

DB 58H,5EH,7BH,71H,00H,40H

END任务4简单的LED点阵显示

—用LED点阵模拟显示电梯的楼层

知识目标:掌握8

×

8的点阵发光管模块的构造以及行列驱动电路;了解LED点阵显示的基本原理和实现方法。

能力目标:掌握单片机I/O口的应用,会设计LED矩阵接口电路和控制程序。

1.任务要求

显示电梯楼层1~6,通过各个楼层的行程开关控制显示楼层的号码。

2. LED点阵显示器介绍

点阵LED显示器是把一些LED组合在同一个包装中,常见的规格有5 × 7、8 × 8、16 × 16等几种。通常,若要显示阿拉伯数字、英文字母、特殊符号等,则可采用5 × 7的点阵即可够用,若要显示中文字,则需要4片8 × 8的点阵组成16 × 16的点阵显示器才能显示一个中文字。LED电子显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的显示系统,是目前国际上极为先进的显示媒体。由于它具有发光效率高、使用寿命长、组态灵活、色彩丰富、工作性能稳定以及对室内室外环境适应能力强等优点而日渐成为显示媒体中的佼佼者。目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。根据LED汉字显示主要内容:点阵显示原理与应用LED点阵显示屏广泛应用于汽车报站器,广告屏等。如图3-16所示8 × 8LED点阵是最基本的点阵显示模块,理解8 × 8LED点阵的工作原理就可以基本掌握LED点阵显示技术。8 × 8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。要实现显示图形或字体,只需考虑其显示方式,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效地控制各显示点的亮灭。这样,就可以通过编写程序动态扫描显示要求的汉字。图3-16LED点阵显示示意图

3.简单的LED点阵显示电路设计

LED点阵显示电路原理图设计如图3-17所示。图3-17LED点阵显示电路设计图

4.软件设计

软件程序如下:

ORG 0000H

LOOP: JB P1.0,NEX1

MOV A,#0

LCALL DSPLAY

NEXT1: JB P1.0,NEXT2

MOV A,#1

LCALL DSPLAY

NEXT2: JB P1.0,NEX3

MOV A,#2

LCALL DSPLAY

NEXT3: JB P1.0,NEXT4

MOV A,#3

LCALL DSPLAY

NEXT4: JB P1.0,NEXT5

MOV A,#4

LCALL DSPLAY

NEXT5: JB P1.0,LOOP

MOV A,#5

LCALL DSPLAY

LJMP LOOP

DSPLAY: MOV DPTR,#CHAR

MOV R7,#0FEH

RL A

RL A

RL A

MOV R6,A

DSL1: MOV A,R6

MOV A,@A+DPTR

MOV P0,A

MOV P2,R7

LCALL DELY ;延时

MOV A,R7

SETB C

RLC A

MOV R7,A

INC DPTR

CJNE A,#0FFH,DSL1

RET

CHAR: DB 18H,24H,24H,24H,24H,24H,24H,18H ;0

DB 00H,18H,1cH,18H,18H,18H,18H,18H ;1

DB 00H,1eH,30H,30H,1cH,06H,06H,3EH ;2

DB

00H,1eH,30H,30H,1cH,30H,30H,1eH ;3

DB

00H,30H,38H,34H,32H,3eH,30H,30H

;4

DB

00H,72H,51H,51H,51H,4eH,00H,00H

;5

DB 00H,3eH,49H,49H,49H,26H,00H,00H ;6扩展任务液晶显示器接口设计

——用字符液晶向朋友问好

知识目标:掌握液晶显示器接口设计的基本原理和方法。

能力目标:掌握单片机I/O口的应用,会设计单片机与液晶显示器模块的接口电路和控制程序。

1.任务要求

要求设计出单片机与液晶显示器模块的接口电路和控制程序,以便能在液晶显示器上显示出字符。

2.液晶显示器模块介绍

液晶显示器(LCD)具有显示功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,在低功耗等单片机系统中被广泛采用。LCD可分为段位式LCD、字符式LCD

温馨提示

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

评论

0/150

提交评论