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 + -
显示快捷键?