📄 jisuanqi.txt
字号:
//----键盘扫描法程序-------
//----用数码管显示相应的键值-----
//P1.0--P1.3接行-------
//P1.4---P1.7接列-------
#include<reg51.h>
unsigned char key,c,k,s;
unsigned int *i,j;
unsigned int anjian=0xff,iob,r3,address,add_data=0x00,temp=0x01;
unsigned char code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x.07,0x7f,0x6f}; //0到F的16个键植
unsigned int b[4]={0x01,0x02,0x04,0x08} ;
unsigned int buffer[5]={0x73,0x00,0x00,0x00,0x00};
unsigned int tab[5]={0x00,0x00,0x00,0x00,0x00};
unsigned int add[3]={0x00};
unsigned int flag=0x00;
void cheng();
void updata(unsigned int j);
void buffer_data(void);
void clear_data(void);
void cancell();
void disp();
void clear();
void getkey();
void write();
void sure();
void jia(void);
void chu(void);
void jian(void);
void Delay(unsigned char t);//延时函数
void main(void)
{
clear();
while(1)
{
disp();
clear();
getkey();
write();
Delay(200);
}
}
void Delay(unsigned char t)//延时函数
{
unsigned char i;
for(t=0;i<=t;t++)
for(i=0;i<255;i++);
}
void disp(void)
{
for(iob=0;iob<4;iob++)
{
P2 = 0x0;
switch(iob)
{
case 0: P0=buffer[0];break;
case 1: P0=buffer[1];break;
case 2: P0=buffer[2];break;
case 3: P0=buffer[3];break;
default:break;
}
P2=b[iob];
Delay(50);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void clear()//////////////////////////////////清屏子程序,
{
for(iob=0;iob<4;iob++)
{
P2=b[iob] ; //扫描4个led端口,显示黑屏代码
P0=0x00;
Delay(10);
}
}
bit pkey(void)//判断键的否被按下,通过返回值确定
{
P1=0xf0;
if(P1!=0xf0)
{
Delay(100);
if(P1!=0xf0)
return 1;
else
return 0;
}
else
return 0;
}//1
void getkey( )
{//1
while(1)
{
if(pkey()==1)
{
P1=0xfe;
k=0xfe;
for(c=0;c<4;c++)
{
s=P1&0xf0;
switch(s)
{
case 0xe0: key=4*c+0; break;
case 0xd0: key=4*c+1; break;
case 0xb0: key=4*c+2; break;
case 0x70: key=4*c+3; break;
default: break;
}
k=(k<<1)|0x01;
P1=k;
}//for
//if
//if((P1&0xf0)==0xf0)
switch(key)
{//5
case 0x00 :anjian=7; break;
case 0x01 :anjian=8; break;
case 0x02 :anjian=9; break;
case 0x03 :flag=0x03;buffer_data();clear_data();break;
case 0x04 :anjian=4; break;
case 0x05 :anjian=5; break;
case 0x06 :anjian=6; break;
case 0x07 :flag=0x04;buffer_data();clear_data();break;
case 0x08 :anjian=1; break;
case 0x09 :anjian=2; break;
case 0x0a :anjian=3; break;
case 0x0b :flag=0x02;buffer_data();clear_data();break;
case 0x0c :cancell(); break;
case 0x0d :anjian=0; break;
case 0x0e :sure(); break;
case 0x0f :flag=0x01;buffer_data();clear_data();break;
default:anjian=0xff; break;
}//5
while(pkey()==1);
}else
break;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void write()
{
if(anjian != 0xff)
{///////////////////////////////////////////////////////////////////////////////////////////
tab[0]=tab[1];
tab[1]=tab[2];
tab[2]=tab[3];
tab[3]=anjian; //扫描按键数据送往数据缓冲区
////////////////////////////////////////////////////////////
buffer[0]=a[tab[0]];
buffer[1]=a[tab[1]];
buffer[2]=a[tab[2]];
buffer[3]=a[tab[3]];//输出数据送到缓冲区
/////////////////
address=(tab[0]*8*8*8)+(tab[1]*8*8)+(tab[2]*8)+tab[3];
}
anjian=0xff;
}
void cancell()
{
buffer[3]=buffer[2];
buffer[2]=buffer[1];
buffer[1]=buffer[0];
buffer[0]=0x3f;//输出数据送到缓冲区
///////////////////////////////////////////////////////////////////////////////////////////
tab[3]=tab[2];
tab[2]=tab[1];
tab[1]=tab[0];
tab[0]=0x00; //扫描按键数据送往数据缓冲区
//////////////////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////
void sure()
{
//////////////////////////////////////////////
switch(flag)
{ case 0x01 :jia() ; break;
case 0x02 :jian(); break;
case 0x03 :chu(); break;
case 0x04 :cheng();break;
default:anjian=0xff; break;
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//加法功能键子程序
void jia(void)
{ buffer_data();
add[2]=add[0]+add[1];
updata(add[2]);
}
void jian(void)
{ buffer_data();
add[2]=add[0]-add[1];
updata(add[2]);
}
void chu(void)
{ buffer_data();
add[2]=add[0]/add[1];
updata(add[2]);
}
void cheng()
{ buffer_data();
add[2]=add[0]*add[1];
updata(add[2]);
}
void updata(unsigned int j)
{
tab[3]=j%10;
j=j/10;
tab[2]=j%10;
j=j/10;
tab[1]=j%10;
j=j/10;
tab[0]=j%10;
///////////////////////
buffer[0]=a[tab[0]];
buffer[1]=a[tab[1]];
buffer[2]=a[tab[2]];
buffer[3]=a[tab[3]];//
}
////////////////////////////void updata(unsigned int j)
void clear_data(void)
{
tab[0]=0x00;
tab[1]=0x00;
tab[2]=0x00;
tab[3]=0x00;
////////////////////////////////////////////////////////////
buffer[0]=a[tab[0]];
buffer[1]=a[tab[1]];
buffer[2]=a[tab[2]];
buffer[3]=a[tab[3]];
}
////////////////////////////
void buffer_data(void)
{
add_data=(tab[0]*10*10*10)+(tab[1]*10*10)+(tab[2]*10)+tab[3];
add[0]=add[1];
add[1]=add_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -