您的位置 首页 软件

单片机按键扫描程序和显现程序及延时程序解析

单片机按键扫描程序和显示程序及延时程序解析-#include//包含 单片机 内部资源预定义

__CONFIG(0x1832);

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

intresult;

voiddelay();//delay函数申明

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

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

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

//程序中没有做按键去抖,也没有考虑多个键一起按下的状况。

//最低两位数码管显现相应的按键(如按下S10,在显现10;按下S25,则显现25)

//无按键按下的时分显现FF

//按键跟按键的扫描成果满意如下联系:

//按键扫描成果(result)按键扫描成果


 

//K100XE7K180XB7

//K110XEBK190XBB

//K120XEDK200XBD

//K130XEEK210XBE

//K140XD7K220X77

//K150XDBK230X7B

//K160XDDK240X7D

//K170XDEK250X7E

#include//包括 单片机 内部资源预界说

__CONFIG(0x1832);

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

intresult;

voiddelay();//delay函数声明

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–;);//延时

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/345760.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部