8279键盘显示C程序
实验五 键盘显示接口芯片8279的应用-1 8279功能介绍

1.8279功能介绍图3.1 8279 引脚图 8279是可编程的键盘、显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO (先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED 数码显示。
(1)数据线DB0→DB7是双向三态数据总线,在接口电路中与系统数据总线相连,用以传送CPU 和8279之间的数据和命令。
(2)地址线/CS=0选中8279,当A0=1时,为命令字及状态字地址;当A0=0时,为片内数据地址,故8279芯片占用2个端口地址。
(3)控制线CLK:8279的时钟输入线。
IRQ:中断请求输出线,高电平有效。
/RD、/WR:读、写输入控制线。
SL0---SL3:扫描输出线,用来作为扫描键盘和显示的代码输出或直接输出线。
RL0---RL7:回复输入线,它们是键盘或传感器矩阵的信号输入线。
SHIFT:来自外部键盘或传感器矩阵的输入信号,它是8279键盘数据的次高位即D6位的状态,该位状态控制键盘上/下档功能。
在传感器方式和选通方式中,该引脚无用。
CNTL/S:控制/选通输入线,高电平有效。
键盘方式时,键盘数据最高位(D7)的信号输入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把RL0---RL7的数据存入FIFO RAM 中。
OUTA0---OUTA3:通常作为显示信号的高4位输出线。
OUTB0---OUTB3:通常作为显示信号的低4位输出线。
/BD:显示熄灭输出线,低电平有效。
当/BD=0时将显示全熄灭。
2. 8279的工作方式8279有三种工作方式:键盘方式、显示方式和传感器方式。
(1) 键盘工作方式8279在键盘工作方式时,可设置为双键互锁方式和N 键循回方式。
单片机芯片8279用法讲解

0:写入后地址不变 1:每次写入地址自动加
键盘显示接口芯片8279
⑥ 禁写显示RAM/消隐命令
1 0 1 IWA IWB BLA BLB
特征 无 A组 B组 A组 B组
位
效 禁写 禁写 消隐 消隐
IWA:禁止A组显示 RAM写。D3=1,A组禁写;D3=0,允许A组写。
OUTA3~OUTA0与OUTB3~OUTB0单独使用时,若只想改变B组的输出 值而A组的输出不受影响,就可以让D3=1即禁止向A组显示RAM写数据,这 样在向显示RAM的一个单元写入8位字节数据时就只写入字节的低4位而字节 的高4位不写入RAM单元。
3.8279的工作方式
8279有三种工作方式——键盘输入(键扫描)、传感器扫描、选通输入 键盘输入方式:有键按下时,回复缓冲器缓冲并锁存行列式键盘的列输入线。在
逐行列扫描时,回复线用来搜寻每一行列中闭合的键,当某一键闭合时,去抖 电路被置位,延时等待10ms后,再检查该键是否仍处在闭合状态,如不是闭合, 则当做干扰信号不予理睬;如是闭合,则将该键的列扫描码、行回复码、引脚 CNTL和引脚SHIFT的状态(两个独立附加的开关)一起形成键盘数据被送入 8279内部的FIFO(先进先出)存储器。键盘数据格式如下:
FIFO RAM的状态寄存器: (a)键盘输入方式或选通输入方式,寄存FIFO RAM的工作状态,FIFO
RAM不空时,会使IRQ变高; (b) 传感器方式,若检测出传感器的状态发生了变化,会使IRQ变高
⑥ 显示RAM及显示地址寄存器
显示RAM:16×8位,存储字符的字形码,显示时,从OUTA3~0和OUTB3~0输出
8个数码管从左至右依次 0 1 2 3 4 5 6 7
显示RAM地址单元
8279可编程键盘显示控制器j[1]
![8279可编程键盘显示控制器j[1]](https://img.taocdn.com/s3/m/8c14f9175f0e7cd184253600.png)
命令和状态字--键盘 显示方式设置命令 键盘/显示方式设置命令 键盘
双键锁定和N键轮回是两种不同的多键同时按下保 护方式。 双键锁定为两键同时按下提供保护,在消抖动周期内, 如果有两键同时被按下,则只有其中的一键弹起,而 另一键在按下位置时,才能被认可。 N键轮回为N键同时按下提供保护,当有若干个键同时 按下时,键盘扫描能根据发现它们的次序,依次将它 们的状态送入FIFO RAM。
8279内部结构—键盘功能模块 内部结构 键盘功能模块
在FIFO存储器中的键盘数据格式如下:
D7 CTRL/STB D6 SHIFT D5 D4 D3 扫描 D2 D1 D0 回馈
CTRL和SHIFT(D7和D6)的状态由两个独立的附加开 关输入信号线CTRL/STB和SHIFT的状态来决定, D5、D4、D3三位来自扫描计数器,是按键的行编码; D2、D1、D0三位则是来自列计数器,它们是根据回馈 信号而确定的按键的列编码。
命令和状态字--键盘 显示方式设置命令 键盘/显示方式设置命令 键盘
KKK三位用来设定键盘工作方式: 000 编码扫描键盘----双键锁定 001 译码扫描键盘----双键锁定 010 编码扫描键盘----N键轮回 011 译码扫描键盘----N键轮回 100 编码扫描传感器矩阵 101 译码扫描传感器矩阵 110 选通输入,编码显示扫描 111 选通输入,译码显示扫描
命令和状态字--时钟编程命令
命令特征位:D7D6D5=001 命令格式:001PPPPP 001PPPPP 将来自CLK的外部时钟进行PPPPP分频(2-31)。 8279内部时钟频率等于外部时钟频率除以分频数。
命令和状态字--读FIFO/传感器 命令 传感器RAM命令 传感器
命令特征位:D7D6D5=010 命令格式:010 AI X AAA 该命令字只在传感器矩阵方式时使用,在读传感 器数据之前设定将要读出的传感器RAM地址,AI为自 动增量特征位。若AI=1,则每次读出传感器RAM后, 地址将自动加1,使地址指针指向顺序的下一个存储单 元。这样,下一次读数便从指针所指的地址读出,而 不必重新设置读FIFO/传感器RAM命令。 在键盘矩阵工作方式中, 在键盘矩阵工作方式中,由于键值读出操作严格 按照先入先出的顺序,因此不必使用这条命令。 按照先入先出的顺序,因此不必使用这条命令。
8279键盘和显示程序

8279键盘和显示程序#include<at89c52.h>#include<absacc.h>#include<stdio.h>#define COM8279 XBYTE [0xF2FF] //定义8279控制口#define DATA8279 XBYTE [0xF0FF] //定义8279数据口#define uchar unsigned char#define uint unsigned intuint keyval //定义键内码传递参数uint time //定义延时参数void delay(uint time)void key(void)void main(){delay(1300) //开机延时COM8279 = 0xD2 //清除RAM和FIFO delay(1)EA=1EX1=1 //开总中断,开外部中断1;IT1=1 //外部中断1选用下降沿COM8279=0x03 //8279键盘N键巡回,编码扫描,左端入口COM8279=0x2a //时钟分频设置,分频数为10COM8279=0x70 //设置读显示命令COM8279=0x90; //设置写显示命令while(1)}void delay (uint time) //传递参数为time{uchar jwhile (time--) //用time-1来进行循环{for (j=100;j>0;j--) //用j来进行125次循环,大约8us }}}void intsvr1(void) interrupt 2 using 1{keyval=DATA8279key()}//按键确认程序void key(void){switch(keyval){case 0xC3: //0号键赋值{P0=0x3F;DATA8279=P0;break;}case 0xC2: //1号键赋值;{P0=0x06;DATA8279=P0;break;}case 0xC1: //2号键赋值;{P0=0x5B;DATA8279=P0;break;}case 0xc0: //3号键赋值;{P0=0x4F;DATA8279=P0;break;}case 0xCB: //4号键赋值;{P0=0x66;DATA8279=P0;break;}case 0xCC: //5号键赋值;{P0=0x6D;DATA8279=P0;break;}case 0xC9: //6号键赋值;{P0=0x7D;DATA8279=P0;break;}case 0xC8: //7号键赋值;{P0=0x07;DATA8279=P0;break;}case 0xD3: //8号键赋值;{P0=0x7F;DATA8279=P0;break;}case 0xD2: //9号键赋值;{P0=0x6F;DATA8279=P0;break;}case 0xD1: //A号键赋值;{P0=0x77;DATA8279=P0;break;}case 0xD0: //B号键赋值;{P0=0x7C;DATA8279=P0;break;}case 0xE3: //C号键赋值;{P0=0x39;DATA8279=P0;break;}case 0xE1: //D号键赋值;{P0=0x5E;DATA8279=P0;break;}case 0xE2: //E号键赋值;{P0=0x79;DATA8279=P0;break;}case 0xE0: //F号键赋值;{P0=0x71;DATA8279=P0;break;}default:break;}}。
LN8279可编程键盘/显示控制器测试技术研究

Ke r y wo ds: a F FO; s ly Sc n; I Dip a
.
.
1 引 言
L 87 可 同 时提 供 键 盘 和 数 码 显 示 的 可 编 N 29是
L 87 N 2 9功 能测试 的测试 要 点及 编 程技 巧 。
关键词 : 扫描 ; 进 先 出; 示 先 显
中图分 类号 : N T4 文献标 识 码 : B 文章 编 号 :0 2— 2 9 2 0 】6— 0 9一 2 1 0 2 7 (0 8 O 0 4 O
Te tTe h o o y Re e r h o h N8 7 o r m ma l e s c n lg s a c ft e L 2 9 Pr g a be K y
第 6期 20 0 8年 1 2月
微
处
理
机
No 6 . De ., 0 8 c 20
MI CROP ROC S ES ORS
L 87 N 29可 编 程 键 盘/ 示 控 制 器 测 试 技 术 研 究 显
冯 蕊 , 薛 宏
( 国 电子 科技 集 团公 司第 四十 七研 究所 , 阳 10 3 ) 中 沈 10 2 摘 要 : 绍 了 L 87 可 编 程 键 盘/ 示 控 制 器 的 主 要 功 能 和 测 试 技 术 , 详 细 介 绍 了 介 N 29 显 并
以是外部时钟的 2 3 分频。 到 1
CP U RES T Do3 E ~ / RD/ WR/ CSAo I RQ
程接 口, 键盘部分可 以支持 6 4个键 的键盘 , 它的主
键盘-显示器专用接口芯片8279

OUTA0~OUTA3:A组显示信号输出线。 OUTB0~OUTB3:B组显示信号输出线。
DB:消隐输出线,低电平有效。 该输出信号在数字切换显示或使用显示消隐命令时,将显示消
隐。
1.3 8279的寄存器
1. 命令寄存器
8279的命令寄存器为8位寄存器,我们以D7~D0表示它的 各位,其中高3位(D7、D6、D5)是命令的特征位,不同的状 态组合代表着不同的命令。8279共有8条命令:
(1)键盘/显示方式设置命令(D7D6D5=000)
此命令用于设置键盘与显示器的工作方式,各位定义如下:
D7
D6 D5
D4
D3
D2
D1
D0
0
0
0
D
D
K
K
K
DD两位用来设定显示方式:
00 8个字符显示——左入(指在显示时,显示字符是从左 面向右面移动)。
01 16个字符显示——左入。
10 8个字符显示——右入(指在显示时,显示字符从右面 向左面移动)。
若8279被设定为键盘扫描N键轮回方式,如果发现有多个键被同 时按下,则FIFO状态字中的错误特征位S/E将置位,并产生中断请 求信号和阻止写入FIFO RAM。
2. 状态寄存器
8279的状态寄存器为8位寄存器,主要用于键盘和选通工 作方式,以指示FIFO RAM中的字符数是否有错误发生,其字位 意义如下:
清除显示RAM大约需要100μs的时间。在此期间,FIFO状态字 的最高位Du=1,表示显示无效,CPU不能向显示RAM写入数据。
(8)结束中断/错误方式设置命令(D7D6D5=111)
D7
D6
D5
D4
实验三 8279

键盘/显示器接口实验
6、实验接线:
内容1) CS8279CS210—217, 8279控制口地址为212H,8279数据口地址为210H 编程并全速运行,观察数码管的变化。
内容2) CS8279CS210—217, 8279控制口地址为212H,8279数据口地址为210H 编程并全速运行,每按一键时,观察数码管的变化。
键盘/显示器接口实验
2)参考程序(内容1))
DL1: DL2: DL3: MOV BH,251 MOV AH,248 NOP NOP DEC AH CMP AH,0 JNZ DL3 DEC BH CMP BH,0 JNZ DL2 DEC BL CMP BL,0 JNZ DL1 POP BX POP AX RET CODE ENDS END START
2、实验目的
掌握8279接口芯片的工作原理;学习LED显示器的使 用方法;熟悉8279与显示器接口方法;熟悉8279与键盘接 口的方法;学习在8086/8688系统中扩展键盘显示接口的 方法及编程方法。
键盘/显示器接口实验
3、实验设备与仪器
AEDK8688ET教学实验机一台,
PC机一台,稳压电源一台。
7 4L S0 7
1 7 4L S0 7
3 7 4L S0 7
5 7 4L S0 7
9 7 4L S0 7
7 4L S0 7
7 4L S0 7
1 7 4L S0 7
3 7 4L S0 7
5 7 4L S0 7
9 7 4L S0 7
7 4L S0 7
7 4L S0 7
1 7 4L S0 7
3 7 4L S0 7
键盘/显示器接口实验
1、实验内容(1)3)必做)
8279A可编程键盘显示接口

8279A可编程键盘显示接口实验内容一、实验目的学习8279A与微机8088系统的接口方法,了解8279A用在译码扫描和编码扫描方式时的编程方法,以及8088CPU用查询方式和中断方式对8279A进行控制的编程方法。
二、实验原理如图所示,系统中8279A接口芯片及其相关电路完成键盘扫描和显示,本实验以查询方式获取键盘状态信息,读取键值。
键值转换成显示代码供显示。
根据原理图5-20,得到键值和键名的对照表5-5,显示值和显示代码对照表。
三、实验程序清单见随机光盘,文件名为H8279.ASM四、实验步骤运行实验程序在DVCC-8086JHN上显示"8279-1"在系统键盘上输入数字键,在系统显示器上显示相应数字,按EXEC键显示"8279 good",按其它键不予理睬。
源程序:CODE SEGMENTASSUME CS:CODESTART: JMP KEYLEDCONTPORT EQU 00DFHDA TAPORT EQU 00DEHDA TA1 EQU 0500HDA TA2 EQU 0508HDA TA3 EQU 0510HDA TA4 EQU 0518HDA TA5 EQU 0580HKEYLED: CALL FORMATCLDMOV DI,DATA5MOV CX,08HXOR AX,AXREP STOSBMOV SI,DATA2CALL LEDDISP ;DISP 8279-1MOV BYTE PTR DS:[0601H],00HKEY0: MOV DX,CONTPORTIN AL,DXTEST AL,07HJZ KEY0MOV CX,0FFFHDELAY1: LOOP DELAY1MOV DX,CONTPORTMOV AL,40HOUT DX,ALMOV DX,DATAPORTIN AL,DXMOV DI,AX ;AND AL,0F0HJZ KEY1MOV AX,DI ;CMP AL,10HJNZ KEY0MOV SI,DATA3CALL LEDDISPKEYEND: JMP KEYENDKEY1: CALL CONVERSMOV SI,DATA5CALL LEDDISPDJMP KEY0CONVERS:MOV BH,0HMOV AX,DIAND AL,0FHMOV BL,ALMOV AL,CS:[BX+DATA4]MOV Bl,DS:[0601H]MOV BH,0HMOV BYTE PTR DS:[BX+DA TA5],ALINC BXMOV DS:[0601H],BXCMP BX,08HJZ SA VE0RETSA VE0: MOV BYTE PTR DS:[0601H],0H RETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETLEDDISPD:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00LEDD1: CMP BYTE PTR DS:[0600H],07H JA LEDD2MOV BL,DS:[0600H]MOV BH,0HMOV AL,DS:[BX+SI]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LEDD1LEDD2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0500H],5050HADD BX,2MOV WORD PTR DS:[BX+0500H],0079HADD BX,2MOV WORD PTR DS:[BX+0500H],0000HADD BX,2MOV WORD PTR DS:[BX+0500H],0000HADD BX,2MOV WORD PTR DS:[BX+0500H],4006HADD BX,2MOV WORD PTR DS:[BX+0500H],4040HADD BX,2MOV WORD PTR DS:[BX+0500H],076FHADD BX,2MOV WORD PTR DS:[BX+0500H],7F5BH ADD BX,2MOV WORD PTR DS:[BX+0500H],3F5EHADD BX,2MOV WORD PTR DS:[BX+0500H],3F5CH ADD BX,2MOV WORD PTR DS:[BX+0500H],076FHADD BX,2MOV WORD PTR DS:[BX+0500H],7F5BH ADD BX,2MOV WORD PTR DS:[BX+0500H],063FHADD BX,2MOV WORD PTR DS:[BX+0500H],4F5BH ADD BX,2MOV WORD PTR DS:[BX+0500H],6D66H ADD BX,2MOV WORD PTR DS:[BX+0500H],077DH ADD BX,2MOV WORD PTR DS:[BX+0500H],6F7FHADD BX,2MOV WORD PTR DS:[BX+0500H],7C77HADD BX,2MOV WORD PTR DS:[BX+0500H],5E39HADD BX,2MOV WORD PTR DS:[BX+0500H],7179HRETCODE ENDSEND START。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8279键盘和显示程序#include<at89c
52.h>
#include<absacc.h>
#include<stdio.h>
#defineCOM8279XBYTE [0xF2FF定义8279 控制口#defineDATA8279XBYTE [OxFOFF定义8279 数据口#define uchar unsigned char
#define uint unsigned int
uint keyval// 定义键内码传递参数
uint time// 定义延时参数
void delay(uint time)
void key(void)
void main(){delay
(13OO)// 开机延时
COM8279 = 0xD2/4青除RAM 和FIFO
delay
(1)
EA=1
EX1 = 1〃开总中断,开外部中断1;
IT仁1〃外部中断1选用下降沿
COM8279=OxOO//8279键盘双键互锁,编码扫描,左端入口
COM8279=Ox12〃时钟分频设置,分频数为18
COM8279=0x70
COM8279=0x90;
while
(1)}void delay (uint time)// 传递参数为time{uchar j// 设置读显示命令
// 设置写显示命令
while (time--)// 用time-1 来进行循环{for (j=100;j>0;j--)//用j 来进行125次循环,大约8us}}}
void intsvr1(void) interrupt 2 using 1{keyval=DATA8279
key()}〃按键确认程序
void key(void){switch(keyval){case 0xC3:{P0=0x3F;
DATA8279=P0;
break;}case 0xC2:{P0=0x06;
DATA8279=P0;
break;}case 0xC1:
{//0 号键赋值
//1 号键赋值;
//2 号键赋值;
P0=0x5B;
DATA8279=P0;
break;}case 0xc0://3 号键赋值;DATA8279=P0; break;}case 0xCB:
{P0=0x66;
DATA8279=P0;
break;}case 0xCC:
{P0=0x6D;
DATA8279=P0;
break;}case 0xC9:{P0=0x7D;
DATA8279=P0;
break;}case 0xC8://4 号键赋值;
//5 号键赋值;
//6 号键赋值;
//7 号键赋值;{P0=0x07;
DATA8279=P0;
break;}case 0xD3://8 号键赋值;
DATA8279=P0;
break;}case 0xD2:{P0=0x6F;
DATA8279=P0;
break;}case 0xD1:{P0=0x77;
DATA8279=P0;
break;}case 0xD0:{P0=0x7C;
DATA8279=P0;
break;
}//9 号键赋值;
//A 号键赋值;
//B 号键赋值;
case 0xE3://C 号键赋值;{P0=0x39;
DATA8279=P0;
break;}case 0xE1:{P0=0x5E;
DATA8279=P0;
break;}case 0xE2:{P0=0x79;
DATA8279=P0;
break;}case 0xE0:{P0=0x71;
DATA8279=P0;
break;}default:
break;}}//D 号键赋值;
//E 号键赋值;
//F 号键赋值;{P0=0x4F; {P0=0x7F;。