当前位置:文档之家› 按键控制流水灯系统

按键控制流水灯系统

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

本设计选用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 0000HLJMP START ;初始化ORG 0003HLJMP KEY ;转中断服务程序ORG 0100HSTART: MOV SP, #60H ;置堆栈指针SETB IT0 ;边沿触发MOV IP, #01H ;高优先级中断SETB EA ;开中断SETB EX0 ;允许中断(2)主程序状态初始化,求显示数据的字型码,扫描键盘,调用其他功能的程序;主程序:MAIN: MOV A, #16 ;状态初始化MOV DPTR, #LED_SEGMOVC A, @A+DPTRMOV DPTR, #04FFHMOVX @DPTR, AMOV DPTR, #0CFFHMOVX @DPTR, AMOV DPTR, #14FFHMOV A, #00HMOVX @DPTR, A ;状态初始化MOV 43H, #00HCLR P2.6SCAN: LCALL KY0 ;开始扫描按键LCALL XfunctionLCALL RerealLCALL Judge1LJMP SCAN ;重新扫描(3)扫描程序(键盘识别和处理)置列线为输入,行线为输出,并输出0,读取列线状态,并取反,暂存列线状态,判断有无按键按下,如果有,置行线为输入,列线为输出,输入0,再读行线并取反,暂存,消除抖动,判断按键是否释放,计算键值(行号的4倍+列号);键盘扫描程序:KY0: MOV P1,#0F0HMOV A , P1CPL AANL A, #0F0HMOV R1, AJZ KY0KY1: MOV P1,#0FHMOV A, P1CPL AANL A, #0FHMOV R2,AJZ GRETJBC F0,WAITSETB F0LCALL DELAYSJMP KY0 GRET: RETWAIT: MOV A, P1CPL AANL A, #0FHJNZ WAITKY2: MOV A, R1MOV R1, #03HMOV R3, #03HCLR CKY3: RLC AJC KY4DEC R1DJNZ R3 ,KY3 KY4: MOV A, R2MOV R2, #00HMOV R3, #03HCLR CKY5: RRC AJC KY6INC R2DJNZ R3, KY5 KY6: MOV A, R2CLR CRLC AADD A, R1MOV 40H, ARET(4)按键功能判断程序:Xfunction: MOV A, 40HCLR CSUBB A, #8JNC A1MOV A, #0LCALL TransformRETA1: MOV A, 40HSUBB A, #9JNC A2MOV A, #1LCALL TransformRETA2: MOV A, 40HSUBB A, #12JNC A3MOV A, #16LCALL TransformRETA3: MOV A, 40HSUBB A, #13JNC A4MOV A, #2LCALL TransformRETA4: MOV A, 40HSUBB A, #14JNC A5MOV A, #3LCALL TransformRETA5: MOV A, 40HSUBB A, #15JNCA6MOV A, #4LCALL TransformRETA6: MOV A, #16LCALL TransformRET(5)显示程序在数码管显示屏1上显示出当前按下的键号,在数码管显示屏2上显示出当前发光二极管正在运行的功能号。

;显示程序:Rereal: MOV DPTR, #04FFHMOV A, 41HMOVX @DPTR, A ;显示按键号MOV DPTR, #0CFFHMOV A, 42HMOVX @DPTR, A ;显示功能号RET(6)键值与显示码转换程序转换按下的键所对应的的键值与显示屏所显示的码型的程序,每个数码管的8个显示字段控制端分别与并行的锁存芯片输出端相连,只要输出字型码,数码管就立即显示出相应的字符。

Transform: MOV DPTR, #LED_SEG ;字型表首地址MOVC A, @A+DPTRMOV 42H, AMOV A, 40HMOVC A, @A+DPTRMOV 41H, ARET(7)字型码表共阴极数码管字型编码,显示字型码所对应的的字段点亮,熄灭,转化为功能编号,按键编号通过显示屏显示。

;字形码表:LED_SEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H ; '0,1,2,3,4,5,6,7'DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ;'8,9,A,B,C,D,E,F'DB 40H ;'_';灯码表:LED: DB 01H, 02H, 03H, 04H, 05H, 06H, 07H ;'0,1,2,3,4,5,6,7'(8)按键号功能选择程序;按键号功能选择程序1 Judge1: MOV A, 40HCLR CSUBB A, #8JNC AaaLCALL XfunctionLCALL RerealLCALL Function0RETAaa: MOV A, 40HSUBB A, #9JNC BbbLCALL XfunctionLCALL RerealLCALL Function1 Bbb: RET;按键号功能选择程序2:Judge2: MOV A, 40HCJNE A, #0CH, ThreeLCALL Function12RETThree: CJNE A, #0D H, FourLCALL Function13RETFour: CJNE A, #0EH, FiveLCALL Function14 Five: RET(9)功能程序四个小的功能程序子模块分别对应1—7号键,8号键,12号键,13号键,14号键的功能,具体如下:0—7键为普通亮灭控制键,对应8个发光二极管,每个按键按一下,对应的灯亮,再按一次,对应的灯熄灭。

;功能程序0Function0: CLR P2.6MOV DPTR, #LED ;普通显示MOV A , 40HMOVC A , @A+DPTRXRL A, 43HMOV 43H, AMOV DPTR, #14FFHMOVX @DPTR, ARET8键:按一下,8个灯逐个点亮,熄灭,循环左移三次。

;功能程序1Function1: CLR P2.6MOV R5, #3 ;外循环次数3次MOV A, #01HMOV DPTR, #14FFHOut1: MOV R4, #8 ;内循环次数8次IN1: MOVX @DPTR, ALCALL DELYRL A ;循环左移实现灯逐个点亮DJNZ R4, IN1DJNZ R5, Out1RET12键:按一下,灯全部点亮,闪烁20次,返回原来状态。

;功能程序2Function12: LCALL XfunctionMOV A, #0FFHMOV DPTR , #14FFHMOVX @DPTR, ALCALL Blink ;调用闪烁程序RET13键:按一下,从左至右,每次点亮一个灯并保持,至灯全部点亮,再逐个熄灭。

;功能程序3Function13: LCALL XfunctionLCALL RerealMOV A, #00HMOV R1, #08H ;点亮8个,循环8次MOV R2, #08H ;熄灭8个,循环8次MOV DPTR, #14FFHBB1: MOVX @DPTR, ASETB C ;将进位置1RLC A ;带进位循环左移DJNZ R1, BB1BB2: MOVX @DPTR, ACLR C ;将进位Cy清零RRC A ;DJNZ R2, BB2RET14键:左右两侧灯逐对向中间点亮,熄灭,当灯对相遇后,向相反方向进行,循环两次返回。

相关主题