4×4矩阵键盘c语言,4X4键盘矩阵键盘程序

4×4矩阵键盘c语言,4X4键盘矩阵键盘程序#include//包含单片机内部资源预定义__CONFIG(0x1832);//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡intresult;voiddelay();//delay函数申明voidinit();//I/O口初始化函数申明voidsCAN();//按键扫描程序申明voiddisplay(intx);//显示函数申明//————-…

#include//包含单片机内部资源预定义

__CONFIG(0x1832);

//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

intresult;

voiddelay();//delay函数申明

voidinit();//I/O口初始化函数申明

voidsCAN();//按键扫描程序申明

voiddisplay(intx);//显示函数申明

//—————————————————

//主程序

voidmain()

{

while(1)//循环工作

{

init();//调用初始化子程序

scan();//调用按键扫描子程序

display(result);//调用结果显示子程序

}

}

//—————————————————

//初始化函数

voidinit()

{

ADCON1=0X07;//设置A口为普通I/O口

TRISA=0X0f;//设置A口高2位为输出,低4位为输入

TRISC=0XF0;//设置C口高4位为输入,低4位为输出

TRISD=0X00;//设置D口为输出

PORTA=0XFF;

PORTD=0XFF;//先清除所有显示

}

//—————————————————

//按键扫描程序

voidscan()

{

PORTC=0XF7;//C3输出低电平,其他三位输出高电平

asm(“nop”);//插入一定延时,确保电平稳定

result=PORTC;//读回C口高4位结果

result=result&0xf0;//清除低4位

if(result!=0xf0)//判断高4位是否为全1(全1代表没按键按下)?

{

result=result|0x07;//否,加上低4位0x07,做为按键扫描的结果

}

else//是,改变低4位输出,重新判断是否有按键按下

{

PORTC=0XFb;//C2输出低电平,其他三位输出高电平

asm(“nop”);//插入一定延时,确保电平稳定

result=PORTC;//读回C口高4位结果

result=result&0xf0;//清除低4位

if(result!=0xf0)//判断高4位是否为全1(全1代表没按键按下)

{

result=result|0x0b;//否,加上低4位0xb,做为按键扫描的结果

}

else//是,改变低4位输出,重新扫描

{

PORTC=0XFd;//C1输出低电平,其他三位输出高电平

asm(“nop”);//插入一定延时,确保电平稳定

result=PORTC;//读回C口高4位结果

result=result&0xf0;//清除低4位

if(result!=0xf0)//判断高4位是否为全1(全1代表没按键按下)

{

result=result|0x0d;//否,加上低4位0x0d,做为按键扫描的结果

}

else//是,改变低4位的输出,重新扫描

{

PORTC=0XFe;//C0输出低电平,其他三位输出高电平

asm(“nop”);//插入一定延时,确保电平稳定

result=PORTC;//读回C口高4位结果

result=result&0xf0;//清除低4位

if(result!=0xf0)//判断高四位是否为全1(全1代表没有按键按下)

{

result=result|0x0e;//否,加上低4位0x0e,做为按键扫描的结果

}

else//是,全部按键扫描结束,没有按键按下,置无按键按下标志位

{

result=0xff;//扫描结果为0xff,做为没有按键按下的标志

}

}

}

}

}

//———————————————————-

//显示程序

voiddisplay(intx)

{

switch(result)

{

case0xe7:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xc0;PORTA=0X1F;delay();break;//K10

case0xeb:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xf9;PORTA=0X1F;delay();break;//K11

case0xed:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xa4;PORTA=0X1F;delay();break;//K12

case0xee:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xb0;PORTA=0X1F;delay();break;//K13

case0xd7:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0x99;PORTA=0X1F;delay();break;//K14

case0xdb:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0x92;PORTA=0X1F;delay();break;//K15

case0xdd:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0X82;PORTA=0X1F;delay();break;//K16

case0xde:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0XF8;PORTA=0X1F;delay();break;//K17

case0xb7:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0X80;PORTA=0X1F;delay();break;//K18

case0xbb:

PORTD=0xf9;PORTA=0X2F;delay();PORTD=0X90;PORTA=0X1F;delay();break;//K19

case0xbd:

PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xc0;PORTA=0X1F;delay();break;//K20

case0xbe:

PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xf9;PORTA=0X1F;delay();break;//K21

case0x77:

PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xa4;PORTA=0X1F;delay();break;//K22

case0x7b:

PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xb0;PORTA=0X1F;delay();break;//K23

case0x7d:

PORTD=0xa4;PORTA=0X2F;delay();PORTD=0x99;PORTA=0X1F;delay();break;//K24

case0x7e:

PORTD=0xa4;PORTA=0X2F;delay();PORTD=0x92;PORTA=0X1F;delay();break;//K25

case0xff:

PORTD=0x8e;PORTA=0X2F;delay();PORTD=0x8e;PORTA=0X1F;delay();//无按键按下

}

}

//——————————————————————

//延时程序

voiddelay()//延时程序

{

inti;//定义整形变量

for(i=0x100;i–;);//延时

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38729.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注