key.c

来自「PIC单片机键盘扫描程序」· C语言 代码 · 共 98 行

C
98
字号
//实验目的:熟悉按键的判断
//数码管无按键按下时显示“FF”,有按键按下时显示按键的编号
//硬件要求:拨码开关S1全部置ON
//          拨码开关S6全部置ON,S5第5-6位置ON,其他位置OFF
//          其他拨码开关置OFF

#include<pic.h>              //包含单片机内部资源预定义
 __CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

 int  result;
 void  delay();              //delay函数申明
 void  init();               //I/O口初始化函数申明
 void  scan();               //按键扫描程序申明
 void  display(int x);       //显示函数申明

//------------------------------------------------
//主程序
void main()
 { 
    while(1)                 //死循环
      {
        init();              //调用初始化函数
        scan();              //调用按键扫描程序
        display(result);     //调用结果显示程序
      }
 }

//------------------------------------------------
//初始化程序
void  init()
 {
  ADCON1=0X07;              //设置A口为普通I/O口
  TRISA =0X0F;              //设置A口高2位为输出,低4位为输入
  TRISB=0X0F;               //设置B口低4位为输入
  TRISD=0X00;               //设置D口全部为输出
  PORTA=0XFF;               
  PORTD=0XFF;               //先关闭所有显示
 }

//------------------------------------------------
//按键扫描程序
void  scan()
 {
   result=0x8;              //初始化按键扫描结果,无按键按下时的结果
   if(RA0==0)               //判断A0是否按下
      result=0x0;           //是,扫描结果为0
   if(RA1==0)               //判断A1是否按下
      result=0x1;           //是,扫描结果为1
   if(RA2==0)               //判断A2是否按下
      result=0x2;
   if(RA3==0)               //判断A3是否按下
      result=0x3;
   if(RB0==0)               //判断B0是否按下
      result=0x4;
   if(RB1==0)               //判断B1是否按下
      result=0x5;
   if(RB2==0)               //判断B2是否按下
      result=0x6;
   if(RB3==0)               //判断B3是否按下
      result=0x7;
  }

//-------------------------------------------------
//结果显示程序
void  display(int x)
 {
   switch(x)                //根据X值的不同,跳转到相应的部分处理
     {
      case 0x0:
         PORTD=0X88;PORTA=0X2F;delay();PORTD=0XC0;PORTA=0X1F;delay();break;  //A0
      case 0x1:
         PORTD=0X88;PORTA=0X2F;delay();PORTD=0XF9;PORTA=0X1F;delay();break;  //A1
      case 0x2:
         PORTD=0X88;PORTA=0X2F;delay();PORTD=0XA4;PORTA=0X1F;delay();break;  //A2
      case 0x3:
         PORTD=0X88;PORTA=0X2F;delay();PORTD=0XB0;PORTA=0X1F;delay();break;  //A3
      case 0x4:
         PORTD=0X83;PORTA=0X2F;delay();PORTD=0XC0;PORTA=0X1F;delay();break;  //B0
      case 0x5:
         PORTD=0X83;PORTA=0X2F;delay();PORTD=0XF9;PORTA=0X1F;delay();break;  //B1
      case 0x6:
         PORTD=0X83;PORTA=0X2F;delay();PORTD=0XA4;PORTA=0X1F;delay();break;  //B2
      case 0x7:
         PORTD=0X83;PORTA=0X2F;delay();PORTD=0XB0;PORTA=0X1F;delay();break;  //B3
      case 0x8:
         PORTD=0X8E;PORTA=0X2F;delay();PORTD=0X8E;PORTA=0X1F;delay();break;  //无按键那下
      }
 }

//------------------------------------------------------------------
//延时程序
void  delay()              //延时程序
    {
     int i;                 //定义整形变量
     for(i=0x100;i--;);     //延时
    }

⌨️ 快捷键说明

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