📄 ex57.c
字号:
#include <absacc.h> /* 包含绝对地址访问头文件 */
#define StaPort 0x8001 /* 定义8279的命令端口地址 */
#define DataPort 0x8000 /* 定义8279的数据端口地址 */
char xdata DisBuf[8]; /* 显示缓冲区 */
char code DisSeg[]= /* 显示段码 */
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void KbDisInit() {
XBYTE[StaPort]=0x12; /* 设置 8279 的工作方式 */
XBYTE[StaPort]=0x22; /* 8279 分频系数 */
XBYTE[StaPort]=0xD3; /* 清除 8279 显示RAM */
while (XBYTE[StaPort] & 0x80); /* 等待清除结束 */
}
unsigned char ReadKey() {
if (XBYTE[StaPort] & 0x07) { /* 有键压下 */
XBYTE[StaPort]=0x40; /* 读 8279 FIFO */
return (XBYTE[DataPort]+1); /* 返回键值 */
}
return (0); /* 无键压下返回0值 */
}
void KeyShift() { /* 从显示缓冲区取数并显示 */
unsigned char i;
XBYTE[StaPort]=0x80;
for (i=0; i<8; i++) {
DisBuf[i]=DisBuf[i+1];
XBYTE[DataPort]=DisSeg[DisBuf[i]];
}
}
void NoKey() {
;
}
void k0() {
DisBuf[7]=0; /* "0" 键压下时显示数字0 */
KeyShift();
/* 其它处理 */
}
/* k2, k3, ... 其它键值处理 */
void k9() {
DisBuf[7]=9; /* "9" 键压下时显示数字9 */
KeyShift();
/* 其它处理 */
}
code void (code * KeyProcTab[])()= /* 函数指针数组定义 */
{NoKey, k0, /*k2,... */ k9};
void main() {
KbDisInit();
while(1)
(* KeyProcTab[ReadKey()])(); /* 等待按键并按键值进行散转 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -