590 likes | 736 Views
项目四存储器扩展和输入输出口应用. 项目四、存储器扩展和输入/输出接口应用 任务1.4*4矩阵键盘及键值显示. 能力目标 1.掌握键盘的各个键和各段程序的对应关系 2.能用矩阵键盘实现各个键相应的功能 学习内容 1.学习一般按钮的电气特性 2.了解矩阵键盘的结构 3.了解逐项扫描的的概念 4.通过散转表建立的键值和键功能的关系. 一、任务要求 给每个键按照行的从左到右,列的从上到下,按顺序标定键值,具体的标定值从键值0~ 键值 F, 当按下任意这16个键中的一个键,数码管能显示相应的键值。 二、任务分析 1、通过行扫描确定该行中有无键按下
E N D
项目四、存储器扩展和输入/输出接口应用 任务1.4*4矩阵键盘及键值显示 能力目标 1.掌握键盘的各个键和各段程序的对应关系 2.能用矩阵键盘实现各个键相应的功能 学习内容 1.学习一般按钮的电气特性 2.了解矩阵键盘的结构 3.了解逐项扫描的的概念 4.通过散转表建立的键值和键功能的关系
一、任务要求 给每个键按照行的从左到右,列的从上到下,按顺序标定键值,具体的标定值从键值0~ 键值F,当按下任意这16个键中的一个键,数码管能显示相应的键值。 二、任务分析 1、通过行扫描确定该行中有无键按下 2、通过列扫描确定该列中有无键按下 3、计数出键值 4、根据键值散转到相应的程序
三、学习知识 (一)按钮的电气特性 1、键盘的结构 2、键盘的类型:编码键盘非编码键盘 3、键输入中存在的问题及解决方法 (1)键抖动 (2)重键(两个或多个键同时按下) (二)独立式键盘接口及程序 1、独立式键盘结构
START: MOV A,P1 ;读入键盘状态 MOV R0,A ;保存键盘状态 LCALL DL10 ;延时10ms消抖 MOVX A,@DPTR ;再读键盘状态 CJNE A,R0,DODO ;再次结果不同,是抖动转DODO KEY-1: CJNE A,#0FEH,KEY-2 ;K1键未按下,转KEY-2 LJMP KEY-1 ;是K1键按下,转KEY-1 KEY-2: CJNE A,#0FDH,KEY-3 ;K2键未按下,转KEY-3 LJMP KEY-2 ;K2键按下,转KEY-2 KEY-3: CJNE A,#0FBH,KEY-4 ;K3键未按下,转KEY-4 LJMP KEY-3 ;K3键按下,转KEY-3 KEY-4: CJNE A,#0F7H,KEY-5 ;K4键未按下,转KEY-5 LJMP KEY-4 ;K4键按下,转KEY-4 2、独立式按键的软件设计
KEY-5: CJNE A,#0EFH,KEY-6 ;K5键未按下,转KEY-6 LJMP KEY-5 ;K5键按下,转KEY-5 KEY-6: CJNE A,#0DFH,KEY-7 ;K6键未按下,转KEY-7 LJMP KEY-6 ;K6键按下,转KEY-6 KEY-7: CJNE A,#0DFH,KEY-8 ;K7键未按下,转KEY-8 LJMP KEY-7 ;K7键按下,转KEY-7 KEY-8: CJNE A,#0DFH,DODO ;K8键未下,转DODO LJMP KEY-8 ;K8键按下,转KEY-8 DODO: RET ;重键或无键按下,不处理返回 DL10: ﹍﹍ ;延时程序略
(三)行列式键盘的及接口 1、行列式键盘工作原理 行列式键盘又叫矩阵键盘,如图所示,按键设置在行列的交叉点上,如用4×4的行列结构可构成16个键的键盘。在按键数量较多时,矩阵键盘可节省I/O口线。
2、键的识别 对于行列式键盘,按键处理程序采用逐行逐列扫描。 (1)逐行扫描。 其方法为扫描口P3.4-P3.7(列线)的状态输出高电平,逐行从P3.0-P3.3(行线)读数据,若此行为“1”,则次行有键盘闭合,否则(为0)转向下一行扫描。 (2)逐列扫描 在(1)中被判定那行有键按下时,则采用逐列扫描,此时行列电平交换。 从P3.0-P3.3(行线)输出全为高电平,逐列从P3.4-P3.7(列线)读数据,如某一列的数据为高电平,则存下列号,否则转向下一列。
(3)计算键值。键号=行号×列数+列号,假如9号键按下,它所在的行号为2,列号为1,键盘的列数是固定值4,则该键值的键值为2×4+1=9。(3)计算键值。键号=行号×列数+列号,假如9号键按下,它所在的行号为2,列号为1,键盘的列数是固定值4,则该键值的键值为2×4+1=9。 (4)根据键值查段码 如“0”的段码为3FH(0011,1111B)dp,h,g,f,e,d,c,b,a(对于共阴极数码管而言,共阳极则是它的反码) (5)键值显示 通过查表输出各数值的段码数值。
开始 逐行扫描 否 有键按下? 是 保存行号 逐列扫描 保存列号 根据行号和列号计算键值 根据键值查表得到对应段码 输出段码显示 3、4×4矩阵键盘按键、显示程序流程图。
(四)中断扫描方式 中断扫描方式又分为两种:定时中断扫描方式和键盘按键中断扫描方式。 定时中断扫描方式是利用单片机内部定时器产生定时中断(例如100ms),CPU响应中断请求时,对键盘进行行扫描和键值识别。 缺点:多为空扫描,浪费CPU资源。 另外一种中断扫描方式是根据键盘按键中断扫描方式。见图4-5键盘按键中断扫描方式。
四、任务实施 1、硬件设计 用查询法按图读取行列键盘键码,图中P3.0~P3.3 用于控制行线,P3.4~P3.7用于控制列线。行、列线通过上拉电阻接+5V,没有键按下时,被钳在高电平状态。通过发送扫描字确定键码。
开始 逐行扫描 有键按下 保存行号 逐列扫描 保存列号 根据行号和列号计算键值 根据键值查表得到对应段码 输出段码显示 图4-7 4×4矩阵键盘按键、显示程序流程图
LINE EQU 30H ROW EQU 31H VAL EQU 32H ORG 00H START: MOV DPTR,#TABLE ;段码表首地址 MOV P2,#00H ;数码管显示初始化 LSCAN: MOV P3,#0F0H ;列线置高电平,行线置高电平 L: JNB P3.0, L2 ;逐行扫描 LCALL DELAY JNB P3.0, L2 MOV LINE,#00H ;存行号 LJMP RSCAN L2: JNB P3.1, L3 LCALL DELAY
JNB P3.1, L3 MOV LINE,#01H ;存行号 LJMP RSCAN L3: JNB P3.2, L4 LCALL DELAY JNB P3.2, L4 MOV LINE,#02H ;存行号 LJMP RSCAN L4: JNB P3.3,L1 LCALL DELAY JNB P3.3, L1 MOV LINE,#03H ;存行号 RSCAN: MOV P3,#0FH ;行线列线电平互换 C1: JNB P3.4,C2 ;逐列扫描 MOV ROW,#00H ;存列号 LJMP CALCU
C2: JNB P3.5,C3 MOV ROW,#01H ;存列号 LJMP CALCU C3: JNB P3.6,C4 MOV ROW,#02H ;存列号 LJMP CALCU C4: JNB P3.7,C1 MOV ROW,#03H ;存列号 CALCU: MOV A,LINE ;根据行号和列号计算键值 MOV B,#04H MUL AB ADD A,ROW MOV VAL,A ;存键值 MOVC A,@A+DPTR ;要据键值查段码 MOV P2,A ;输出段码显示 LJMP LSCAN
DELAY: MOV R6,#20 D1: MOV R7,#250 DJNZ R7,$ DJNZ R6,D1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H END
3、仿真调试 将由上述源程序生成的4×4矩阵键盘按键、显示程序.hex加载于图4-6 4×4矩阵键盘扫描电路中CPU后台,用PROTEUS进行仿真测试,按不同的键,数码管显示不同的键值。 当按下键“6”时
五、总结与提高 1、键盘与CPU的连接及各自特点: 2、键盘扫描控制方式及各自优缺点: (1)程序控制扫描方式 当主程序运行到该程序段时,依次扫描键盘,判断有否键输入。 (2)定时控制扫描方式 定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。 (3)中断控制方式 克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率 。
项目四、存储器扩展和输入/输出接口应用 任务2.彩灯控制(8255I/O口扩展设计) 能力目标 1.能用8255可编程芯片进行I/O口硬件扩展 2.能对8255编写相应的控制字实现I/O口设置 3.能进行彩灯控制电路综合调试 学习内容 1.了解8255内部结构和8255的工作方式 2.学习8255和8031的连接方式 3.8255可编程芯片控制字的设置 4.MCS-51外部总线的扩展
一、任务要求 将8255的PB口作为输入口,PA口作为输出口,当PB口的按键闭合时,对应于PA口的灯点亮,否则对应于PA口的灯暗。 二、任务分析 首先必须将8255的PA口定义为输出口、PB口定义为输入口,然后根据PB口按键闭合情况,决定PB口的输入值,将PB口的输入值通过内部存储器再送至PA口输出端,决定PA口彩灯的亮灭情况。
三、学习知识 (一)8255可编程芯片内部结构
(二)8255的引脚介绍 8255是一个具有40个引脚的DIP封装的芯片, 引脚图见下图。
引脚功能介绍如下: (1) PA0~PA7:A口,具有8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。 (2) PB0~PB7:B口,具有8位数据输出锁存器/缓冲器和8位数据输入缓冲器(不锁存)。 (3) PC0~PC7:C口,具有8位数据输出锁存器/缓冲器和8位数据输入缓冲器(不锁存),该口可分为两个4位口使用,它除了作为输入/输出口外,还可以作为A口、B口选通工作方式操作时的状态控制信号。
(4) :读控制端,低电平有效,允许从8255读取数据或状态字。 (5) :写控制端,低电平有效,允许向8255写入数据或控制字。 (6) :片选端,低电平有效。 (7) A0、A1:口地址选择端,通过A0、A1可选中8255的四个寄存器,每个寄存器口地址见下表。 (8) RESET:复位控制端,当RESET=1时,8255复位,通常与单片机的复位端直接相连。
(三)8255的操作方式 1、读/写控制逻辑操作选择
2、8255三种工作方式的功能 8255有三种工作方式,分别是方式0、方式1和方式2,它们是通过程序对控制口送控制字来选择的,下面分别介绍三种工作方式: (1)方式0:基本I/O方式。 (2)方式1:单向选通I/O方式。 (3)方式2:双向总线方式。
3、8255的编程选择控制字 8255的传输方式和工作方式的选择是通过对控制口输入控制字的方式实现的。8255的控制字有两种:方式选择控制字和C口位操作控制字。
4、AT89C51与8255的接口电路 在89C51单片机的I/O口上扩展8255芯片,硬件连接图比较简单。在图中,8255的片选及口地址选择线A0、A1分别由单片机的P0.7、P0.0、P0.1经地址锁存后提供,故8255的A、B、C口及控制口的地址分别为FF7CH、FF7DH、FF7EH、FF7FH(当然这不是惟一的连接方法,与单片机不同的地址线相连,8255的口地址也不会相同)。数据线直接与单片机的数据线相连, 、 也直接连在单片机的 、 端。
例、如图4-13所示,用8255扩展单片机并行I/O口并读、写数据。要求8255工作在方式0,且A口作为输入,B口、C口作为输出。例、如图4-13所示,用8255扩展单片机并行I/O口并读、写数据。要求8255工作在方式0,且A口作为输入,B口、C口作为输出。 分析:从图4-13可知,8255的A、B、C、控制口的地址分别为FF7CH、FF7DH、FF7EH、FF7FH。编程时,应先按题目要求对8255初始化设置每个口的工作方式,然后再使数据输入、输出。程序如下:
MOV A,#90H ;A、B、C口方式0,A口输入,B口、C口输出 MOV DPTR,#0FF7FH; MOVX @DPTR,A ;方式控制字→控制寄存器 MOV DPTR,#0FF7CH MOVX A,@DPTR ;从A口读取数据 MOV DPTR,#0FF7DH MOV A,#DATA1 MOVX @DPTR,A ;将数据DATA1从B口输出 MOV DPTR,#0FF7EH MOV A,#DATA2 MOVX @DPTR,A ;将数据DATA2从C口输出
MOV DPTR,#0FF7FH ;控制口地址→DPTR MOV A,#0BH ;PC5置1的控制字→A MOVX @DPTR,A ;控制字→控制口,PC5=1 MOV A,#0AH ;PC5复位的控制字→A MOVX @DPTR,A ;控制字→控制口,PC5=0 例、对C口的位操作,把PC5置1,再把PC5复位,程序如下:
(四)MCS-51外部总线的扩展 图4-14 MCS-51系统扩展结构
1、程序存储器的扩展 (1)典型程序存储器扩展芯片 1)A0~A12为13根地址输入线。 2) D0~D7为8根数据输出线。 3)/CE为片选线,低电平有效。 4)/OE为数据输出选通控制输入线。当CE有效时,被寻址单元的内容才能被读出。 5)Vpp为编程电源。当芯片编程时,该端加上编程电压(+25V或+12V),正常使用时,该端口加+5V电源。 6)PGM为编程脉冲输入线。 2764芯片程序存储器引脚
(2)程序存储器的扩展 1)单片机程序存储器的扩展 图4-17 程序存储器与8031单片机的连接
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7~P0.0 × × × 0 0 0 0 0 00000000 … 1 1 1 1 1 11111111 由于8031单片机无片内程序存储器,因此必须外接程序存储器,以构成最小系统。如图4-17所示为8031与2764芯片的连接图,图中经锁存器74LS373输出的是2764芯片所需的低8位地址,2764芯片的高5位由8031单片机的P2.0~P2.4端口实现,存储区域地址为:
由于只扩展一片,所以P2.7、P2.6、P2.5端口都可选为0,则用16进制表示2764芯片的地址范围是0000H~1FFFH。这种方法常用于系统只有一片程序存储器扩展的情况。由于只扩展一片,所以P2.7、P2.6、P2.5端口都可选为0,则用16进制表示2764芯片的地址范围是0000H~1FFFH。这种方法常用于系统只有一片程序存储器扩展的情况。
2)多片程序存储器的扩展 ①线选法 图4-18 线选法存储器扩展
如图所示4-18为采用线选法扩展2片2764芯片的外部程序存储器,图中采用P2.6、P2.5端口两根地址线分别连接1#、2#2764芯片的片选信号/CE端。采用线选法选中2个芯片,当P2.6、P2.5端口分别为低电平时,选中各自对应芯片,该扩展电路的各存储器地址如下:如图所示4-18为采用线选法扩展2片2764芯片的外部程序存储器,图中采用P2.6、P2.5端口两根地址线分别连接1#、2#2764芯片的片选信号/CE端。采用线选法选中2个芯片,当P2.6、P2.5端口分别为低电平时,选中各自对应芯片,该扩展电路的各存储器地址如下:
1#扩展芯片内部的第一个存储单元地址为: P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7~P0.0 × × 0 0 0 0 0 0 00000000 最后一个单元地址为: … × × 0 1 1 1 1 1 11111111 其中P2.7、P2.6端口对于芯片来说可以是任意状态,通常取“1”,芯片1#的存储空间地址为:C000H~DFFFH。 2#扩展芯片内部的第一个存储单元地址为: P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7~P0.0 × 0 × 0 0 0 0 0 00000000 最后一个单元地址为: … × 0 × 1 1 1 1 1 11111111 其中P2.7、P2.5端口对于芯片来说可以是任意状态,通常取“1”,芯片2#的存储空间地址为:A000H~BFFFH。
②译码法 译码法就是将片选线经译码器与系统的高位地址连接,如图4-19所示。 图4-19 译码法存储器扩展
输入端 输出端 G B A Y0 Y1 Y2 Y3 1 × × 1 1 1 1 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 0 表4-3 74LS139真值表
2764芯片 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 1# 0 0 0 × × × × × × × × × × × × × 2# 0 0 1 × × × × × × × × × × × × × A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 表4-4 译码法存储器扩展地址线与各个2764芯片的对应关系
由此可知这个扩展电路两片2764存储器的地址分别为:1#芯片的地址译码的范围是0000H~1FFFH,2#芯片的地址译码的范围是2000H~3FFFH, 由此可知这个扩展电路两片2764存储器的地址分别为:1#芯片的地址译码的范围是0000H~1FFFH,2#芯片的地址译码的范围是2000H~3FFFH, 这种方法的特点是存储器地址是连续的。在系统以及成本允许的条件下,建议采用这种存储器扩展方式。
2.6264数据存储器 (1)典型数据存储器的扩展 6264芯片引脚图4-20如下图所示。 图4-20 6264的引脚图