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

📄 key_scan.c

📁 通过本实验学习PC机串口与AVR单片机串口之间相互通讯的基本硬件接口电路和软件编程方法
💻 C
字号:
#include <iom8v.h>
#include <macros.h>
#include "Io_define.h"

void  Key_scan  (void);
void  delay_nms (unsigned int n);
void  Key_control(unsigned char comm);

#pragma interrupt_handler Key_scan: iv_INT0
void Key_scan(void)
  {
    unsigned char key=0;   
    
    delay_nms(30);                //消抖
    
    if ((PIND&BIT(3))==0)         //检查第一列
      {
	 key=14;
      }
    else 
      if ((PIND&BIT(4))==0)       //检查第二列
        {
	  key=17;
        }
    else 
      if ((PIND&BIT(5))==0)       //检查第三列
        {
	  key=20;
        }	
    else 
      if ((PIND&BIT(6))==0)       //检查第三列
        {
	  key=23;
        }	
    
    DDRB  &= 0b11000111;           //行变为输入,高电平   
    PORTB |= 0b00111000;
    
    DDRD  |=  0b01111000;          //列变为输出,低电平
    PORTD &= ~0b01111000;
    
    delay_nms(30);                 //消抖
    
    //检查行
    if ((PINB & BIT(5))==0)         //检查第一行
      {
	 key -=13 ;
      }
    else if ((PINB & BIT(4))==0)    //检查第二行
      {
	 key -=12 ;
      }
    else if ((PINB&BIT(3))==0)      //检查第三行
      {
	 key -=11 ;
      }	
    
    while (!((PINB&0B00111000)==0B00111000));//按键释放检查
    
    DDRB |= 0b00111000;           //行变为低电平   
    PORTB&= 0b11000111;
    
    DDRD  &= ~0b01111000;            //列变为高电平
    PORTD |=  0b01111000;
    
    if (( key > 0 )&&( key < 13))    //如果获得正确的key值
    Key_control((key-1)+0x30);
    
  }

⌨️ 快捷键说明

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