按下S1后加1计数,按下S2后减1计数,按下S3后清零。
图片如下:
程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//段码
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//待显示的3位缓冲
uchar Num_Buffer[]={0,0,0};
//按键代码,按键计数
uchar Key_Code,Key_Counts=0;
//延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//显示函数
void Show_Counts_ON_DSY()
{
uchar i,j=0x00;
Num_Buffer[0]=Key_Counts/100;
Num_Buffer[1]=Key_Counts/10%10;
Num_Buffer[2]=Key_Counts%10;
for(i=0;i<3;i++)
{
P2=i;
P0=0x00;
P0=~DSY_CODE[Num_Buffer[i]];
DelayMS(20);
}
}
//主程序
void main()
{
uchar i;
P0=0x00;
P2=0x00;
//P2=0x00;
Key_Code=0xff;
while(1)
{
Show_Counts_ON_DSY();
P3=0xff;
//有键按下时,数码管刷新显示30次,该行代码同时起到延时作用
for(i=0;i<30;i++) Show_Counts_ON_DSY();
Key_Code=P3;
if(Key_Code!=0xff)
switch(Key_Code)
{
case 0xfe: if(Key_Counts<255) Key_Counts++;
break;
case 0xfd: if(Key_Counts>0) Key_Counts--;
break;
case 0xfb: Key_Counts=0;
}
Key_Code=0xff;
}
}