📄 dengxiang.c
字号:
#include<stdio.h> //通用4*4小键盘程序,可以用数码管显示键值
#include<at89x52.h> //可用于51单片机,晶振频率11.0592MHZ
#define uchar unsigned char
#define uint unsigned int
int Hang;
int Lie;
int cs;
int Yuan_ma[5]={1,2,3,4,5};
int New_ma[5];
int Mazhi[4][4]={{1,2,4,3},{5,6,8,7},{9,0,11,10},{12,13,15,14}};
/**************************************************************/
// 0 1 3 2
// 1 2 3 4 .........
// 5 6 7 8 ......... .
// 9 0 . > ......... . P2接通用四乘四小键盘
// EXE MENU ESC < .........
// |-----|
// | | ........
// |-----| ........ .
// | | ........ . P3 接数码管显示
// |-----| . ........
// .-. .
// . ? . .......... P2_0接LED显示按下状态
// .=. .
//程序作者:王庆波,黑龙江大学电子工程学院06级,爱好者工作室,borlittle,Q:634172943
/*************************************************************/
int mz;
uchar code dis_7[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F,0x88,0xc6,0xa1,0x86,0x83};
/*对应键值为 0 1 2 3 4 5 6 7 8 9 . A C D E B */
int Key_scan();
int Jiao_yan();
void Delay();
void main()
{
int ans;
int key;
cs=0;
//P1=0x00;
P0_0=0;
P0_1=0;
while(1)
{
key=Key_scan();
if(key==1)
{
mz=Mazhi[Lie][Hang]; //获取码值
cs++;
switch(cs)
{
case 1:
New_ma[0]=mz;
break;
case 2:
New_ma[1]=mz;
break;
case 3:
New_ma[2]=mz;
break;
case 4:
New_ma[3]=mz;
break;
case 5:
New_ma[4]=mz;
break;
default:
break;
}
P3=dis_7[mz]; //查表输出段码
}
Delay();
//P1=0x00;
if(Yuan_ma[0]!=New_ma[0])
cs=0;
else if(mz==1)
{New_ma[0]=mz;
cs=1;}
if(cs==5)
ans=Jiao_yan();
if(ans==1)
{P0_1=1;
Delay();
P0_1=0;
ans=0;
}
}
}
void Delay() //延时子程序
{
long i;
for(i=5000;i>0;i--);
}
int Key_scan()
{
P2=0xF0; //行扫描
if((P2&0xF0)!=0xF0)
{ Delay();
switch(P2)
{
case 0x70:
Hang=0;
break;
case 0xB0:
Hang=1;
break;
case 0xD0:
Hang=2;
break;
case 0xE0:
Hang=3;
break;
default:
break;
}
Delay();
P2=0x0F; //列扫描
if((P2&0x0F)!=0x0F)
{
switch(P2)
{
case 0x07:
Lie=0;
break;
case 0x0B:
Lie=1;
break;
case 0x0D:
Lie=2;
break;
case 0x0E:
Lie=3;
break;
default:
break;
}
return 1;
}
}
else
{
return 0;
}
}
int Jiao_yan()
{
int k;
int g=0;
for(k=0;k<5;k++)
{
if(Yuan_ma[k]==New_ma[k])
g++;
}
cs=0;
for(k=0;k<5;k++)
{ New_ma[k]=0;
}
if(g==5)
return 1;
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -