基于51单片机按键短按长按的项目工程
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管0-9段码表,高电平导通数码管段显示,低电平导通数码管位显示。
uchar Data_Buffer[8]={0,0,0,0,0,0,0,0};//声明数据缓存变量
sbit led0=P1^4;//位定义启停led指示灯
sbit AddSpeed=P3^0;//位定义加速按键端口
sbit SubSpeed=P3^2;//位定义减速按键端口
sbit qiting=P3^4;//位定义启停按键端口
uchar qitingnum;//声明启停次数变量
uint SetSpeed=0;//声明设定速度变量
void delay(uchar x)//延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void SpeedSet()//设定速度函数
{
if(qiting==0)
{
delay(5);
if(qiting==0)
{
qitingnum++;
while(qiting==1);
}
}
if(qitingnum==1)
{
led0=0;
if(AddSpeed==0)//判断加速键是否按下
{
delay(5);//延时
if(AddSpeed==0)//再次判断加速键是否按下
{
SetSpeed+=1;//设定速度变量每次加10
if(SetSpeed>3500)//判断设定速度变量是否大于3500
{
SetSpeed=3500;//设定速度变量归为3500
}
}
}
if(SubSpeed==0)//判断减速键是否按下
{
delay(5);//延时
if(SubSpeed==0)//再次判断减速键是否按下
{
SetSpeed-=1;//设定速度变量每次减10
if(SetSpeed<0)//判断设定速度变量是否小于0
SetSpeed=0;//设定速度变量归0
}
}
}
if(qitingnum==2)
{
qitingnum=0;
led0=1;
}
}
void SegRefre()//数码管显示刷新函数
{
Data_Buffer[0]=SetSpeed/1000;//设定速度变量千位数
Data_Buffer[1]=SetSpeed%1000/100;//设定速度变量百位数
Data_Buffer[2]=SetSpeed%100/10;//设定速度变量十位数
Data_Buffer[3]=SetSpeed%10;//设定速度变量个位数
}
void SystemInit()//系统初始化函数
{
TMOD=0X01;//定时器0方式1,定时器1方式2。
TH0=0xf8;//初装定时器0高八位寄存器定时数值
TL0=0x50 ;//初装定时器0低八位寄存器定时数值,即2毫秒。
EA=1;//开总中断
ET0=1;//开定时器0中断允许
TR0=1;//开定时器0中断
}
void Time0() interrupt 1//定时器0中断服务函数
{
static uchar Bit=0;//数码管位码静态变量,退出程序,其数值保留。
// static uint time=0;//转速测量周期变量
TH0=0xf8;//重装定时器0高八位寄存器计数值
TL0=0x50 ;//重装定时器0低八位寄存器计数值,即2毫秒。
Bit++;//数码管位码选择位变量
if(Bit>4)//判断数码管位码选择位变量是否大于8
Bit=0;//数码管位码选择位变量归0
P2=0xff;//数码管位码显示关闭
P0=Duan[Data_Buffer[Bit]];//数码管段码显示
switch(Bit)//数码管位码变量选择位
{
case 0:
P2=0Xfe;//实际速度变量千位
break;
case 1:
P2=0Xfd;//实际速度变量百位
break;
case 2:
P2=0Xfb;//实际速度变量十位
break;
case 3:
P2=0Xf7;//实际速度变量个位
break;
}
}
/**************主函数************/
void main()
{
SystemInit();//系统初始化函数
while(1)
{
SpeedSet();//设定速度函数
SegRefre();//数码管显示刷新函数
}
}
来源:https://www.cnblogs.com/AChenWeiqiangA/p/12891610.html
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询