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

📄 ex57.c

📁 c51学习的好书!
💻 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 + -