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

📄 sercom.c

📁 键盘接口的CX51驱动程序。程序由主函数
💻 C
字号:
    #include <reg51.h>
    #include <intrins.h>
    sbit P34  = 0xB4;
    sbit P35  = 0xB5;

    unsigned char get_char(void);            /* 函数说明 */
    void delay(void);

    main() {
       unsigned char keybuf[16], count;      /* 键盘缓冲区和读键计数变量 */
       SCON=0;                               /* 将串行口设置成工作方式0 */
       ES=0;                                 /* 禁止串口中断 */
       EA=0;
       count=0;                              
       while(count<16) keybuf[count++]=get_char(); /* 读入16个按键的键值 */
     }

    unsigned char get_char(void) {
    /* 定义表示列号、键序号和待发送数据的变量column、key_code和mask */
       unsigned char key_code, column=0, mask=0x00;
    /* 下列语句从串行口向74LS164移位输出8个0 */
       TI=0;
       SBUF=mask;
       while(TI==0);                         /* 等待发送完毕 */
    /* 下列语句通过检测P3.4和P3.5是否为0来判断是否有键压下, 检测到有键压下时
       延时10ms以消除桉键抖动, 然后继续检测P3.4和P3.5是否为0, 若不为0则表明
       检测到干扰信号并继续等待按键, 否则表示有一个键被可靠地按下并退出循环 
    */
       while(1) {
     	  while((P34&P35)!=0);
	      delay();
	      if((P34&P35)!=0) continue;
	      else break;
       }
    /* 下列语句分析被按下的键所在的列号 */
       mask=0xfe;
       while(1) {
	      TI=0;
	      SBUF=mask;
	      while(TI==0);
	      if((P34&P35)!=0) {
	         mask=_crol_(mask,1);            /* mask的值循环左移一位 */
	         column++;
	         if(column>=8) column=0;
	         continue;
	      }
	      else break;
       }
    /* 下列语句分析被按下的键所在的行号并计算键序号 */
       if(P34==0)  key_code=column;
       else	      key_code=8+column;
       return(key_code);
     }

     void delay(void) {
	    unsigned int i=10;                   /* 延时10ms */
	    while(i--);
     }

⌨️ 快捷键说明

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