8279键盘显示C程序
- 格式:doc
- 大小:31.00 KB
- 文档页数:5
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键盘和显示程序#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;}}。
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。
实验5键盘显示控制器8279应用实验实验五键盘显示控制器 9 8279 应用实验一、实验目的 1、掌握 51 系统中,扩展 8279 键盘显示接口的方法。
2、掌握 8279 工作原理和编程方法。
二、预备知识 8279A 是一种通用的可编程键盘/显示器接口器件,可对 64 个开关矩阵组成的键盘进行自动扫描,接收键盘上的输入信息,存入内部的 FIFO 存放器,并在有键输入时,CPU 请求中断。
8279A 内部还有一个 16×8 的显示缓冲器,能对 8 位或 16 位 LED 自动扫描,使显示缓冲器的内容在 LED 上显示出来。
1 1 、引脚功能 DB0~DB7:双向数据总线,以便和 CPU 之间传递命令、数据和状态。
CLK :时钟输入线,以产生内部时钟。
RESET :复位线,高电平有效。
复位后,8279A 置为 16 位显示左边输入,编码扫描键盘,时钟系数为 31。
/CS :片选,低电平有效。
A0 :地址输入线,用以区分数据线传送的是数据还是命令。
A0=0 传送的是数据;A0=1传送的是命令。
/RD :读线,低有效,内部缓冲器信息送 DB0~DB7。
/WR :写线,低有效。
收数据总线上的信息写入内部缓冲区。
IRQ :中断请求输出线,高有效。
当 FIFO RAM 中有键输入数据时,IRQ 升为高电平,向 CPU 请求中断。
CPU 读出 FIFO RAM 时,IRQ 变为低电平,假设 RAM 中数据还有,IRQ 又返回高电平,直至RAM 中为空,IRQ 才保持低电平。
SL0~SL3 :输出扫描线,用以对键盘/传感器矩阵和显示器进行扫描。
RL0~RL7 :键盘/传感器矩阵的行(列)数据输入线。
其内部有拉高电阻,使之保持高电平。
SHIFT :换档输入线,内部有拉高电阻,使之保持高电平。
TL/STB:控制/选通输入线,内部有拉高电阻,使之保持高电平。
OUTA0~OUTA3:四位输出口。
OUTB0~ OUTB3:四位输出口。
8279键盘和显示程序#include<at89c52.h>#include<absacc.h>#include<stdio.h>#defineCOM8279XBYTE [0xF2FF定义8279 控制口#defineDATA8279XBYTE [OxFOFF定义8279 数据口#define uchar unsigned char#define uint unsigned intuint keyval// 定义键内码传递参数uint time// 定义延时参数void delay(uint time)void key(void)void main(){delay(13OO)// 开机延时COM8279 = 0xD2/4青除RAM 和FIFOdelay(1)EA=1EX1 = 1〃开总中断,开外部中断1;IT仁1〃外部中断1选用下降沿COM8279=OxOO//8279键盘双键互锁,编码扫描,左端入口COM8279=Ox12〃时钟分频设置,分频数为18COM8279=0x70COM8279=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=DATA8279key()}〃按键确认程序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;。
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 int
uint keyval //定义键内码传递参数uint time //定义延时参数
void delay(uint time)
void key(void)
void main()
{
delay(1300) //开机延时
COM8279 = 0xD2 //清除RAM和FIFO delay(1)
EA=1
EX1=1 //开总中断,开外部中断1;IT1=1 //外部中断1选用下降沿COM8279=0x00 //8279键盘双键互锁,编码扫描,左端入口COM8279=0x12 //时钟分频设置,分频数为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: //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;
}
}。