独立键盘的检测

用数码管前两位显示一个十进制数,变化范围位00-59,开始时显示00

按下s2键一次,数值加一;每按下s3键一次,数值减一,每按下s4键一次,数值归0,每按下s5键一次。利用定时器功能使数值开始自动美妙加一,再按下s5键时,数值停止自动加一,保持显示原数。




#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={    
0x3f,0x06,0x5b,0x4f,    
0x66,0x6d,0x7d,0x07,    
0x7f,0x6f,0x77,0x7c,    
0x39,0x5e,0x79,0x71    
};  
void delayms(uint);
uchar numt0,num;
void display(uchar numdis)  
{  
uchar shi,ge;
shi=numdis/10;
ge=numdis%10;

dula=1;//段选信号  
P0=table[shi];  
dula=0;  
P0=0xff;  
wela=1;// 位选信号  
P0=0xfe;  
wela=0;  
delayms(5);  
  
dula=1;  
P0=table[ge];  
dula=0;  
P0=0xff;  
wela=1;  
P0=0xfd;  
wela=0;  
delayms(5);  
  
  
}  
  
  
void delayms(uint xms)  
{  
uint i,j;  
for(i=xms;i>0;i--)  
for(j=110;j>0;j--)  
;  
}  


void init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
}

void keyscan()
{
	if(key1==0)
	{
		delayms(10);
		if(key1==0)
		{
		num++;
		if(num==60)num=0;
		while(!key1);
		}
	}
	if(key2==0)
	{
	delayms(10);
	if(key2==0)
	{
	delayms(10);
		if(key2==0)
		{
			if(num==0)num=60;
			num--;
			while(!key2);
		}
	}
	}
	if(key3==0)
	{
	delayms(10);
	if(key3==0)
	{
		num=0;
		while(!key3);
	}
	}
	
	if(key4==0)
	{
	delayms(10);
	if(key4==0)
	{
	while(!key4);
	TR0=~TR0;
	}
	}
	
	
	
}



void main()
{
init();
while(1)
{
keyscan();
display(num);
}
}

void T0_time() interrupt 1
{
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	numt0++;
	if(numt0==20)
	{
	numt0=0;
	num++;
	if(num==60)
	num=0;
	}

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值