⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key_show.c

📁 很好用得一个文件
💻 C
字号:
/*键盘计算器显示程序

说明:P1口键盘输入 行列扫描
p2数码管 数据口 p3.0~3 数码管片选 p3.0最低位
设计 陈仲库
创达科技 2007年11月29日
技术支持 kuzi00@163.com  qq:86828048
*/
#include <reg52.h>
sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;

sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
char LED[17]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x80};
int tmp1=0,tmp2=0,rst;
char dat[4]={0},flag=0,flg=0;//dat[0]最低位 个位  flag标志位
void display(int n);

void delay(int m)//延时程序
{
	while(--m);
}



void disp(char key_dat)
{
	char i;
	if(flag)//标志判断  if flag=1 说明有按下
	for(i=3;i>=1;i--)
	{
		dat[i]=dat[i-1];
	}
	dat[0]=key_dat;
	P3=0X01;
	for(i=0;i<4;i++)
	{
		P2=~LED[dat[i]];delay(50);
		P3=P3<<1;                  	
	}
	flag=0;//标志判断  if flag=0 说明mei有按下
}

void clr(void)
{
	char i;
	for(i=0;i<4;i++)dat[i]=0;
	disp(dat[0]);
}

void tmp(char f)
{
	if(flag)tmp1=dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];	
	flg=f;//1 add  ;2 sub   ;3mul   ;4 div
	flag=0;
	clr();
}

void display(int n)
{
	char i;
	dat[3]=n/1000;
	dat[2]=(n/100)%10;
	dat[1]=(n/10)%10;
	dat[0]=n%10;delay(20);

	P3=0X01;
	for(i=0;i<4;i++)
	{
		P2=~LED[dat[i]];delay(20);
		P3=P3<<1;                  	
	}

}

void result(void)
{
	if(flag)tmp2=dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
	switch(flg)
	{
		case 0: tmp2=tmp1;break;
		case 1: rst=tmp1+tmp2;break;
		case 2: rst=tmp1-tmp2;break;
		case 3: rst=tmp1*tmp2;break;
		case 4: rst=tmp1/tmp2;break;

	}
	flg=0;
	flag=0;//标志判断  if flag=0 说明mei有按下
	display(rst);
}


void keyscan(void)
{
	P1=0xef;
	if(!p13){flag=1;while(!p13)clr();}
	if(!p12){flag=1;while(!p12)disp(1);}
	if(!p11){flag=1;while(!p11)disp(4);}
	if(!p10){flag=1;while(!p10)disp(7);}
	
	
	P1=0xdf;
	if(!p13){flag=1;while(!p13)disp(0);}
	if(!p12){flag=1;while(!p12)disp(2);}
	if(!p11){flag=1;while(!p11)disp(5);}
	if(!p10){flag=1;while(!p10)disp(8);}
	
	
	P1=0xbf;
	if(!p13){flag=1;while(!p13)result();}
	if(!p12){flag=1;while(!p12)disp(3);}
	if(!p11){flag=1;while(!p11)disp(6);}
	if(!p10){flag=1;while(!p10)disp(9);}
	
	P1=0x7f;
	if(!p13){flag=1;while(!p13)tmp(1);}
	if(!p12){flag=1;while(!p12)tmp(2);}
	if(!p11){flag=1;while(!p11)tmp(3);}
	if(!p10){flag=1;while(!p10)tmp(4);}
	disp(dat[0]);//如果没有按键 就还现实 原来的数值
}
 

main()
{

	while(1)
	{ 
		keyscan();//键盘扫描调用

	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -