8279 键盘和显示程序
#include
#include
#include
#define COM8279 XBYTE [0xF2FF]
#define DATA8279 XBYTE [0xF0FF]
#define uchar unsigned char
#define uint unsigned int
uint keyval
uint time
void delay(uint time)
void key(void)
void main()
{
//定义 8279 控制口
//定义 8279 数据口
//定义键内码传递参数
//定义延时参数
//开机延时
//清除 RAM 和 FIFO
delay(1300)
COM8279 = 0xD2
delay(1)
EA=1
EX1=1
IT1=1
COM8279=0x00
COM8279=0x12
COM8279=0x70
COM8279=0x90;
while(1)
}
void delay (uint time)
{
uchar j
//开总中断,开外部中断 1;
//外部中断 1 选用下降沿
//8279 键盘双键互锁,编码扫描,左端入口
//时钟分频设置,分频数为 18
//设置读显示命令
//设置写显示命令
//传递参数为 time
//用 time-1 来进行循环
//用 j 来进行 125 次循环,大约 8us
while (time--)
{
for (j=100;j>0;j--)
}
}
}
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:
{
P0=0x4F;
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:
//3 号键赋值;
//4 号键赋值;
//5 号键赋值;
//6 号键赋值;
//7 号键赋值;
{
P0=0x07;
DATA8279=P0;
break;
}
case 0xD3:
{
P0=0x7F;
DATA8279=P0;
break;
}
case 0xD2:
{
P0=0x6F;
DATA8279=P0;
break;
}
case 0xD1:
{
P0=0x77;
DATA8279=P0;
break;
}
case 0xD0:
{
P0=0x7C;
DATA8279=P0;
break;
}
//8 号键赋值;
//9 号键赋值;
//A 号键赋值;
//B 号键赋值;
//C 号键赋值;
//D 号键赋值;
//E 号键赋值;
//F 号键赋值;
case 0xE3:
{
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;
}
}
8279 芯片
本图片为 8279 引脚图
[1]
8279 采用单±5V 电源供电,40 脚封装。
DB0~DB7:双向数据总线,用来传送 8279 与 CPU 之间的数据和命令。
CLK:时钟输入线,用以产生内部定时的时钟脉冲。
RESET:复位输入线,8279 复位后被置为字符显示左端输入,二键闭锁
的触点回弹型式,程序
时钟前置分频器被置为 31,RESET 信号为高电平有效。
CS:片选输入线,低电平有效,单片机在 CS 端为低时可以对 8279 读/
写操作。
A0:缓冲器低位地址,当 A0 为高电平时,表示数据总线上为命令或状
态, 当为低电平时,表示数据总线上为数据。
RD:读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。
WR:写信号输入线,低电平有效,将缓立器读出,将数据从外部数据总
线写入 8279 的缓冲器。
RL2-- 1 40 --VCC
RL3-- 2 39 --RL 1
CLK-- 3 38 --RL 0
IRQ-- 4 37 --CNTL/STB
RL4-- 5 36 --SHIFT
RL5-- 6 35 --SL 3
RL6-- 7 34 --SL 2
RL7-- 8 33 --SL 1
RESRT-- 9 32 --SL 0
RD-- 10 31 --OUT B0
WR-- 11 30 --OUT B1
DB0-- 12 29 --OUT B2
DB1-- 13 28 --OUT B3
DB2-- 14 27 --OUT A0
DB3-- 15 26 --OUT A1
DB4-- 16 25 --OUT A2
DB5-- 17 24 --OUT A3
DB6-- 18 23 --BD
DB7-- 19 22 --CS
VSS-- 20 21 --A0
IRQ:中断请求输出线,高电平有效,在键盘工作方式下,当 FIFO/传感
器 RAM 中有数据时,
此中断线变为高电平,在 FIFO/传感器 RAM 每次读出时,中断线就下降
为低电平,若在 RAM
中还有信息,则此线重又变为高电平。在传感器工作方式中, 每当探
测到传感器信号变
化时,中断线就变为高电平。
SL0~SL3:扫描线,用来扫描按键开关,传感器阵列和显示数字, 这
些可被编程或被译码。
RL0~RL7:回送线,经过按键或传感器开关与扫描线联接, 这些回送
线内部设置有上拉电
路,使之保持为高电平,只有当一个按闭合时,对应的返回线变为低
电平;无按键闭合时,
均保持高电平。
SHIFT:换位功能,当有开关闭合时被拉为低电平,没有按下 SHIFT 开
关时,SHIFT 输入端保
持高电平,在键盘扫描方式中,按键一闭合,按键位置和换位输入状
态一起被存贮起来。
CNTL/STB:当 CNTL/STB 开关闭合时将其拉到低电平,否则始终保持高
电平, 对于键盘输入
方式,此线用作控制输入端,当键被按下时,按键位置就和控制输入
状态一起被存贮起来,
在选通输入方式中,作选通用,把数据存入 FIFO RAM 中。
OUTA3~OUTA0 及 OUTB3~OUTB0:显示输出 A 口及 B 口,这两个口是 16×4
切换的数字显示。这
两个端口可被独立控制,也可看成一个 8 位端口。
BD:空格显示,此输出端信号用于在数字转换时将显示空格或者用显示
空格命令控制其显示
空格字符。
VCC:+5V 电源输入线。
VSS:地线输入线。
☆8279 的编程方法
1.8279 可按其功能分为:键盘功能块;显示功能块;控制功能块;与 CPU
接口功能块控制功能块包括
控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用来控制
键盘和显示功能块工作.
::控制和定时寄存器:用于存贮来自 CPU 的编程命令,CPU 对 8279 编程
以确定键盘与显示器工作
方式和其它工作条件时,先把命令控制数据放到数据总线上,然后使
A0=1,WR=0CS=0,并在 WR
上升沿把命令键存在控制和定时寄存器中,并经译码,建立适当的功
能.
::定时和控制:它含基本的定时计数器,第一个计数器是一个分频系数
为 2-31 的前置定时器,
分频系数可由程序预置,使内部频率为 100KHz,从而能给出 5.1ms 键盘
扫描时间和 10.3ms 反
跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描.行扫
描.键盘阵列扫描.以
及显示器扫描次数.
::扫描计数器:扫描计数器有两种工作方式,在编码工作方式时,计数
器提供一种二进制计数,
通过管脚 SL0-SL3 输出后经外部译码才能提供给键盘和显示器的扫描
作用,在译码工作方式
时,扫描计数器对最低二位进行译码,SL0-SL3 输出 4 选 1 的译码信号,
作为显示器和键盘的译
码扫描.
::键盘功能块包括:返回缓冲器,键盘反跳及控制,8x8 FIFO 传感器
RAM,FIFO/传感器 RAM 状态.
2.返回缓冲器与键盘反跳及控制
8 条返回线被返回缓冲器缓冲,在键盘工作方式中,这几条线被逐个检
测,以找出该行键中闭合
的键,如果反跳电路测知某键闭合,则它等待 10.3ms,然后重核此键是
否仍然闭合,如果仍闭合,
那么该键在矩阵中的行列地址以及 SHIFT 和 CNTL 的状态一起被送到
FIFORAM 中,其在 FIFO RAM 中
的数据格式如下:
D7 D6 D5 D4 D3 D2 D1 D0