电子设计竞赛训练教程第四章42键盘显示电路设计 下载本文

中,通常初始化编程在主程序中完成;显示部分一般作为子程序;而键盘读入部分作为中断服务程序编写。在此主要介绍8279的初始化编程。初始化编程是向8279写入工作方式命令字,确定其工作方式及相关操作功能。

1. 8279的命令及格式

8279共有8条命令,均为8位,各命令的格式及功能分述如下: (1)键盘/显示器方式设置命令

此命令用于设置键盘与显示器的工作方式,其各位定义为: D7 D6 D5=000 为此命令的特征位或称命令码。 D4 D3 用来设定显示方式

0 0 8个LED显示器,从左端输入 0 1 16个LED显示器,从左端输入 1 0 8个LED显示器,从右端输入 1 1 16个LED显示器,从右端输入

D2 D1 D0 用来设定键盘、传感器矩阵、显示器操作方式 0 0 0 编码扫描键盘,双键锁定 0 0 1 译码扫描键盘,双键锁定 0 1 0 编码扫描键盘,N键依次读出 0 1 1 译码扫描键盘,N键依次读出 1 0 0 编码扫描传感器矩阵 1 0 1 译码扫描传感器矩阵 1 1 0 选通输入,编码显示扫描 1 1 1 选通输入,译码显示扫描

译码方式即为内部译码方式;编码方式即为外部译码方式。 (2)程序时钟命令

此命令用来设置分频系数,其定义为: D7 D6 D5=001 为此命令的命令码。

D4~D0=2~31 此5位用来设定对外部输入时钟CLK进行分频值,用以产生100kHz的频率信号作为8279的内部时钟,其值可取2~31。例如:假定CLK为2MHz,为取得100kHz的内部时钟信号,则分频系数=2MHz/100kHz=20,应使D4D3D2D1D0=10100B,即十进制数20D。

20

(3)读FIFO/传感器RAM命令

此命令用来设置读FIFO/传感器RAM,其定义为: D7 D6 D5=010 为此命令的命令码。

D4=1 设置FIFO/传感器RAM地址读后自动加1。 D4=0 读后地址保持不变。 D3位没有定义,可为任意。

D2 D1 D0 在传感器方式及选通输入方式时该三位为FIFO RAM的地址。 在键盘扫描方式时,每次读取数据总是按先进先出的原则依次读出的,D4位和此3位无关。

(4)读显示RAM命令

此命令用来设置读显示RAM,各位定义为: D7 D6 D5 =011 为此命令的命令码。 D4位定义同上。

D3 D2 D1 D0:为显示RAM的存储单元地址。当D4设为1时,每次读出显示RAM后地址自动加1,指向下一个单元地址,D4为0时读出后地址保持不变。

(5)写显示RAM命令

此命令用来设置写显示RAM,其各位定义为: D7 D6 D5 =100 为此命令的命令码。 D4~D0 定义同上。 (6)显示禁止写入/熄灭(消隐)命令

此命令用来禁止数据写入显示RAM或向显示RAM写入空格(即熄灭),其各位定义为: D7 D6 D5=101 为此命令的命令码。 D4没有定义,可以任意。

D3 D2位分别A、B组显示RAM或写入屏蔽位,设为“1”时禁止写入。这样可以使得A、B组显示RAM单独送数,而又不影响另一组的显示。

D1 D0两位分别为A、B组的熄灭设置位,若设为1,则对应组的显示输出被熄灭;若设为0则被恢复显示。

(7)清除命令

此命令用来清除显示器RAM和FIFO RAM,其格式为: D7 D6 D5=110 为此命令命令码。

21

D4=1 清除显示RAM有效,与D3 D2配合使用。 D3 D2 用来设定清除显示RAM的方式。 0 x 将显示RAM全部清0

1 0 将显示RAM置为20H(即A组=0010,B组=0000) 1 1 将显示RAM全部置1

若D4=0,则不清除显示RAM,D3 D2位设置无效;但若D0=1,则D3D2的设置仍有效。 D1=1 清除FIFO RAM存储器,并使中断输出线复位;同时传感器RAM的读出地址也被置0。

D0位为中断清除标志位。

(8)中断结束/出错方式设置命令

此命令用来设置中断结束及出错方式,其格式为: D7 D6 D5=111 为此命令的命令码。

D4=1时,对N 键依次读出方式可工作在特殊出错方式(多重按键按下时出错)。对于传感器工作方式,此命令使IRQ变低,而结束中断,并允许FIFO RAM的再次写入。

D3~D0位没有定义,可为任意。

8279这8条命令根据程序的需要可在主程序,显示子程序和中断服务程序中使用。

2. 8279编程举例

下面是一个带键盘设定时间的时钟程序。该程序详细说明了对8279进行编程的方法,同时给出了使用键盘和显示器的方法。在程序设计中首先进行8279初始化,其中包括:指定8279的数据口和控制口、设置键盘/显示器方式、设置分频系数、清除8279内部显示RAM、指向显示的数码管位置等。接着是运行显示程序,通过调用查表子程序将要显示的内容显示在数码管上。最后是运行键盘扫描程序,测试是否有闭合键出现。中断服务子程序主要是每隔一秒中断一次,实现时、分、秒自动加一。 (1)汇编语言程序

汇编语言编写的程序如下: org 0000h ajmp main org 000bh ajmp intt0

22

org 0100h main:mov sp,#60h

mov tmod,#01h ;计数器方式选择 mov th0,#3ch

mov tl0,#0b0h ;T0计数器初始化

mov r7,#20 ;工作寄存器初始化每20次中断(1秒) mov r2,#30h ; mov r3,#59h mov r4,#23h

setb ea ; setb et0 ; setb tr0 ;T0 mov dptr,# 0FFFFh ; mov a,#00h ; movx @dptr,a

mov a,#32h ; movx @dptr,a

mov a,#0dfh ; movx @dptr,a loop:movx a,@dptr

jb acc.7,loop ;disp:mov dptr,# 0FFFFh ; mov a,#80h ; movx @dptr,a

mov a,r4 ; swap a anl a,#0fh lcall table mov dptr,# 0FEFFh movx @dptr,a

初始值设定 开总中断 允许T0溢出中断 开始计数 指向8279控制口 设定8279显示/键盘方式 设定分频系数 清除8279内部显示RAM 显示RAM清除完毕吗? 显示程序段 指向第一位数码管 取r4中的高四位内容并送数码管显示 23

lcall delay

mov a,#81h ;指向第二位数码管 mov dptr,# 0FFFFh movx @dptr,a

mov a,r4 ;取r4中的低四位内容并送数码管显示 anl a,#0fh lcall table mov dptr,# 0FEFFh movx @dptr,a lcall delay

mov a,#82h ; mov dptr,# 0FFFFh movx @dptr,a

mov a,#0f7h ; mov dptr,# 0FEFFh movx @dptr,a

mov a,#83h ; mov dptr,#7001h movx @dptr,a

mov a,r3 ; swap a anl a,#0fh lcall table mov dptr,# 0FEFFh movx @dptr,a acall delay

mov a,#84h ; mov dptr,# 0FFFFh movx @dptr,a

mov a,r3 ;

指向第三位数码管 显示‘.’ 指向第四位数码管 取r3中的高四位内容并送数码管显示 指向第五位数码管 取r3中的低四位内容并送数码管显示

24