?? jianpanshumaxianshi.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 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();
void Delay();
void main()
{
int key;
P1=0x00;
P0_0=0;
while(1)
{
key=Key_scan();
if(key==1)
{
mz=Mazhi[Lie][Hang]; //獲取碼值
P3=dis_7[mz]; //查表輸出段碼
P1=0x80;
}
Delay();
P1=0x00;
}
}
void Delay() //延時子程序
{
long i;
for(i=5000;i>0;i--);
}
int Key_scan()
{
P2=0xF0; //行掃描
if((P2&0xF0)!=0xF0)
{
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;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -