java串口设置全局变量,支持连按与全局变量

本文介绍了如何在51单片机中利用连按功能,通过全局变量cnt跟踪按键次数,并实时更新数码管显示。通过更改`if(KEY4==1)`为`if(KEY4==0)`实现持续按下计数,当计数达到1000时执行特定功能。关键代码和全局变量的使用也进行了详细说明。
摘要由CSDN通过智能技术生成

1.支持连按的思路

支持连按的代码就是在“不支持连按”代码的思路上把“if(KEY4==1)”改为“if(KEY4==0)”,这样的话按键不松手程序就能一直进入“if(KEY4==0)”的大括号里面。然后我们定义一个变量times,如果一直按着不放,times就一直累加,累加到1000,意味着低电平已经持续了一定的时间,我们就可以执行功能代码了,如图所示

3af214fed07e3261afbb4d62e4573d94.png

2.全局变量

全局变量就是先在所有函数前定义,这种变量可以在所有函数中使用,例如这个变量的值发生改变成为另一个值时,假设是12,其他函数此时运用这个变量的值就是12。关于全局变量的利弊请参考《手把手教你学51单片机》文档7.1.2节。

所以这次我们把数码管显示的内容代码封装成函数,定义一个全局变量cnt,cnt在主函数中通过按键动作来改变这个值,然后数码管负责显示这个数。

实验现象就是按着K4不放,数码管显示cnt的值一直累加。

3.支持连按的代码#include 

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

sbit LED2  = P0^0;

sbit KEY4  = P2^7;

unsigned char code LedChar[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管状态值初始化

unsigned char LedBuff[6]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//数码管显示缓存区

unsigned char cnt=0;//可以在SEG_task()和main()中使用的全局变量

void SEG_task()//数码管显示函数

{

static unsigned char i=0;

LedBuff[0]=LedChar[cnt%10];

if(cnt>=10)LedBuff[1]= LedChar[(cnt/10)%10];  //cnt没到达10之前不更新LedBuff[1]的初始值

if(cnt>=100)LedBuff[2]= LedChar[(cnt/100)%10];//cnt没到达100之前不更新LedBuff[2]的初始值

if(cnt==0){ LedBuff[1]=0xFF;LedBuff[2]=0XFF; }//cnt到达255之后再加1就溢出变为0了,这时候要再次熄灭这两个数码管

P0=0xFF;//端口状态全部熄灭数码管里的LED达到刷新作用

switch(i)

{

case 0:

ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0=LedBuff[0];i++;break;

case 1:

ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0=LedBuff[1];i++;break;

case 2:

ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0=LedBuff[2];i=0;break;

}

}

void main()

{

unsigned char key_up=1;//定义记录按键状态值的变量,初始值为1避免程序一开始就进入了“if(key_up==0)”

unsigned int  times=0; //用来记录进入过按键判断语句的次数

ADDR3 = 1;//使能三八译码器

ENLED = 0;//

ADDR2 = 1;//**************************

ADDR1 = 1;//让三八译码器的IO6输出低电平

ADDR0 = 0;//**************************

P2 = 0xF7;//让K4能具备有被拉低的条件先

while(1)

{

SEG_task();//数码管显示任务

//按键功能部分

if(key_up==0)

{

if(KEY4==0)         //之前“KEY4==1”是不支持连按,现在改为“KEY4==0”就成为支持连按了

{

times++;

if(times>=1000) //按键IO端口一直是低电平times就一直累加,累加到1000意味低电平持续了一段时间了,该执行功能代码了,修改1000这个数的话那么cnt自加的速度就会改变

{

times=0;

cnt++;      //执行功能代码

}

}

}

key_up=KEY4;            //如果不松手,key_up就会等于0

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值