⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8279.c

📁 这是《Keil Cx51 V7.0单片机高级语言编程与uVision2应用实践》教材各章中列出的全部程序例子。
💻 C
字号:
#include <absacc.h>
char xdata DisBuf[8];              	/* 显示缓冲区 */
unsigned char code keyval[]={0xc1,0xc8,0xc9,0xd0}; /* 键值表 */

/****************************** 8279初始化函数 **************************/
void KbDisInit() {					
    XBYTE[0xc801]=0x00;   			/* 设置 8279 工作方式 */
    XBYTE[0xc801]=0x22;      		/* 设置 8279 分频系数 */
    XBYTE[0xc801]=0xDf;   			/* 清零 8279 */
    while (XBYTE[0xc801] & 0x80);
    XBYTE[0xc801]=0x80;
    XBYTE[0xc800]=0xc8;
}

/****************************** 读键值函数 ******************************/
unsigned char ReadKey() {
unsigned char i,j;
   if (XBYTE[0xc801] & 0x07) {	 /* 8279 Key put */
       XBYTE[0xc801]=0x40;	     /* read 8279 FIFO */
         i=XBYTE[0xc800];        /* i=keyval */
			j=0;
			while (i!=keyval[j]){j++;} /* look up keyval tabel */
			return(j+1);
//       return (XBYTE[0xc800]+1);
   }
   return (0);		     /* no Key put */
 }

/***************************** 循环显示函数 *****************************/
void KeyShift() {
   unsigned char i;
   for (i=0; i<8; i++)
       DisBuf[i]=DisBuf[i+1];
 }

/****************************** 无按键处理函数 **************************/
void NoKey() {
 ;
 }

/****************************** 0键处理函数 ****************************/
void k0() {
   KeyShift();
   DisBuf[7]=0;
 }

/****************************** 1键处理函数 ****************************/
void k1() {
   KeyShift();
   DisBuf[6]=1;
 }

/* k2, ...其它按键处理函数可在此处插入 */

code void (code * KeyProcTab[])()={NoKey, k0,k1 /* k2,... */};

/******************************** 主函数 ********************************/
void main() {
   KbDisInit();						/* 初始化 */
   while(1)
      (* KeyProcTab[ReadKey()])();  /* 根据不同按键的值查表散转 */
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -