📄 inc_dec.c
字号:
//*******************************************************
//proteus仿真论坛:http://proteus.5d6d.com
//*******************************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P3^0;
sbit clk=P3^1;
sbit com1=P2^0;
sbit com2=P2^1;
sbit inc=P1^0;
sbit dec=P1^7;
uchar yansi,key,send,ge,si,num,keynum;
bit keybz;
uchar code table[]={
0x03,0x9f,0x25,0x0d,0x99,
0x49,0x41,0x1f,0x01,0x09};
void delay(uchar yansi)
{
uchar x,y;
for(x=yansi;x>0;x--)
for(y=110;y>0;y--);
}
void sendbyte(send) //模拟发送程序
{
uchar c,aa;
aa=send;
for(c=0;c<8;c++)
{
clk=0;
aa=aa>>1;
sda=CY;
clk=1;
}
}
void display(uchar si,uchar ge)
{
if(si!=0)
{
send=table[si];
sendbyte(send);
com1=1;
delay(10);
com1=0;
}
send=table[ge];
sendbyte(send);
com2=1;
delay(10);
com2=0;
}
void init()
{
ge=0;
si=0;
P1=0xff;
P2=0;
key=100;
}
void keyscan() //具有连加功能的的按键扫描程序
{
/***************以下是加键处理******************************************************************/
if(inc==0) //判断INC键是否按下?
{
display(si,ge); //延时去抖动
if(inc==0) //如果真接下就去执行键盘程序
{
if(keybz==0) //判断是否是第一次按下?
{
num++; //值加一
if(num==100) //判断是否加到100
{num=0;}//加到100清0
keybz=1; //第一次进来置标志位
key--; //按键次数计数器
keynum=5; //快加按键次数计数器
si=num/10; //BCD码转为十进制值
ge=num%10;
return; //不用检测松手直接返回
}
else //如果是第二次按下则执行下面的语句
{
if(key==0) //判断按键次数到100次了吗?
{
if(keynum==0) //检测按下时间是否超过加5次的时间
{
key=10; //如果按键持续时间超过加5次的时间则以后每10次执行加工厂操作
num++;
if(num==99)
{
num=0;
}
si=num/10;
ge=num%10;
return;
}
else //没有到5次时间则执行下面的语句
keynum--; //快加计数器减一
key=100;
num++;
if(num==99)
{
num=0;
}
si=num/10;
ge=num%10;
return;
}
else //没有到100次下次再来判断.
key--;
return;
}
}
if(inc!=0) //松手后所有的计数器清并置默认值
{
keynum=5;
key=30;
keybz=0;
return; //返回
}
}
/*************************以下是减一键处理程序,执行效果同加一程序*******************************************************************/
if(dec==0)
{
display(si,ge);
if(dec==0)
{
if(keybz==0)
{
num--;
if(num==-1)
{num=99;}
keybz=1;
key--;
keynum=5;
si=num/10;
ge=num%10;
return;
}
else
{
if(key==0)
{
if(keynum==0)
{
key=10;
num--;
if(num==0)
{
num=99;
}
si=num/10;
ge=num%10;
return;
}
else
keynum--;
key=100;
num--;
if(num==0)
{
num=99;
}
si=num/10;
ge=num%10;
return;
}
else
key--;
return;
}
}
}
if(dec!=0)
{
keynum=5;
key=30;
keybz=0;
return;
}
}
void main()
{
init();
while(1)
{
display(si,ge);
keyscan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -