按键控制流水灯系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计摘要

本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。

本设计选用80C51芯片作为核心硬件,组合74LS138译码芯片,4×4键盘,74LS273锁存芯片以及其他必要元器件实现对8个发光二极管和2个数码管显示屏的功能控制。控制过程中用到了51单片机的定时/计数器和中断技术。

本次设计旨在于在理论学习单片机的基础上,通过实际系统的搭建,提高对所学知识的实际应用能力。设计中,我们主要做了方案设计,电路搭建,程序编写,控制仿真,报告撰写等一系列工作。

方案设计说明

设计要求:

(1)利用按键控制流水灯的显示。

(2)利用3×3或者4×4键盘,控制数码管的显示。

(3)利用到定时/计数器。

(4)利用到中断技术。

设计功能:

(1)按键0—7键为普通亮灭控制键,对应8个发光二极管,每个按键按一下,对应的灯亮,再按一次,对应的灯熄灭。

(2)按键8,12,13,14号键为功能控制键。

1)8键:按一下,8个灯逐个点亮,熄灭,循环左移三次。

2)12键:按一下,灯全部点亮,闪烁20次,返回原来状态。

3)13键:按一下,从左至右,每次点亮一个灯并保持,至灯全部点亮,再逐个熄灭。

4)14键:左右两侧灯逐对向中间点亮,熄灭,当灯对相遇后,向相反方向进行,循环两次返回。

(3)数码管显示为两位,一号为按键显示(显示被按下的键号),二号为功能号显示(显示执行的功能,从0—4分别对应1—7号键,8号键,12号键,13号键,14号键的功能)

功能实现方案:

51单片机的P0口(P0.0—P0.7)为低位地址总线,兼做数据总线,连接74LS273锁存器,输出的数据通过其锁存。

单片机P1口(P1.0—P1.7)用作通用I/O口,与键盘连接,其中,高四位(P1.4—P1.7)接为列控制线,低四位(P1.0—P1.3)接行控制线。

单片机P2口(P2.0—P2.5)为高位地址线,接外部74LS138译码芯片。P2口的P2.6引脚控制二极管的闪烁。P2.6口输出的脉冲,由单片机定时/计数器T0通过查询的方式所得到。(T0用于定发光二极管点亮与熄灭的延时时间,延时时间到,输出脉冲)

选用三片74LS273,两片用于数码管显示屏的显示数据锁存,一片用于8个发光二极管的亮灭数据锁存。74LS273芯片除了受到51单片机输出状态的控制,还受触发端CLK的控制,即为上升沿触发,也就是当CP从低电平到高电平时,输入锁存器的数据通过芯片,为0时数据锁存,输入的数据不变。

中断类型为外部事件中断,选取INT0为外部中断触发信号的输入端。对应的中断触发硬件为4×4键盘的按键。在中断的内部,则采用了线反转法对键盘数据进行采集。(使行线为输入,列线为输出,列线全部输出低电平,则航线中变为低电平的行线为按键所在的行;使行线为输出,列线为输入,行线输出全部为低电平,则列线中变为低电平的列线为按键所在的列。)

数码管显示器采用共阴型,静态显示方式。(两个数码管显示屏相互独立,每个数码管的8个显示字段控制端分别与并行的锁存芯片输出端相连,只要输出字型码,数码管就立即显示出相应的字符。)

程序模块构成:

(1)初始化:

初始化程序地址,中断地址,置堆栈指针,设置触发方式为边沿触发,开中断,允许外部事件中断。

ORG 0000H

LJMP START ;初始化

ORG 0003H

LJMP KEY ;转中断服务程序

ORG 0100H

START: MOV SP, #60H ;置堆栈指针

SETB IT0 ;边沿触发

MOV IP, #01H ;高优先级中断

SETB EA ;开中断

SETB EX0 ;允许中断

(2)主程序

状态初始化,求显示数据的字型码,扫描键盘,调用其他功能的程序;主程序:

MAIN: MOV A, #16 ;状态初始化

MOV DPTR, #LED_SEG

MOVC A, @A+DPTR

MOV DPTR, #04FFH

MOVX @DPTR, A

MOV DPTR, #0CFFH

MOVX @DPTR, A

MOV DPTR, #14FFH

MOV A, #00H

MOVX @DPTR, A ;状态初始化

MOV 43H, #00H

CLR P2.6

SCAN: LCALL KY0 ;开始扫描按键

LCALL Xfunction

LCALL Rereal

LCALL Judge1

LJMP SCAN ;重新扫描

(3)扫描程序(键盘识别和处理)

置列线为输入,行线为输出,并输出0,读取列线状态,并取反,

暂存列线状态,判断有无按键按下,如果有,置行线为输入,列线为输出,输入0,再读行线并取反,暂存,消除抖动,判断按键是否释放,计算键值(行号的4倍+列号)

;键盘扫描程序:

KY0: MOV P1,#0F0H

MOV A , P1

CPL A

ANL A, #0F0H

MOV R1, A

JZ KY0

KY1: MOV P1,#0FH

MOV A, P1

CPL A

ANL A, #0FH

MOV R2,A

JZ GRET

JBC F0,WAIT

SETB F0

LCALL DELAY

SJMP KY0 GRET: RET

WAIT: MOV A, P1

CPL A

ANL A, #0FH

JNZ WAIT

KY2: MOV A, R1

MOV R1, #03H

MOV R3, #03H

CLR C

KY3: RLC A

JC KY4

DEC R1

DJNZ R3 ,KY3 KY4: MOV A, R2

MOV R2, #00H

MOV R3, #03H

CLR C

KY5: RRC A

JC KY6

INC R2

DJNZ R3, KY5 KY6: MOV A, R2

CLR C

RLC A

ADD A, R1

MOV 40H, A

RET

(4)按键功能判断程序:

Xfunction: MOV A, 40H

CLR C

SUBB A, #8

JNC A1

MOV A, #0

LCALL Transform

RET

A1: MOV A, 40H

SUBB A, #9

JNC A2

MOV A, #1

LCALL Transform

RET

A2: MOV A, 40H

SUBB A, #12

JNC A3

MOV A, #16

LCALL Transform

RET

相关文档
最新文档