📄 8个io接36个按键.c
字号:
8个IO接36个按键(没有用二极管)--键扫描程序
/*
备注: 这张图是由网友fsaok提供的.
*/
HotPower 发表于 2004-8-6 20:30 侃单片机 ←返回版面 举报该贴
#include "REG52.h"//不知为何发帖不能用尖括弧?????
#include "intrins.h"//不知为何发帖不能用尖括弧?????
sbit Row0 = P1^0;
sbit Row1 = P1^1;
sbit Row2 = P1^2;
sbit Row3 = P1^3;
sbit Col0 = P1^4;
sbit Col1 = P1^5;
sbit Col2 = P1^6;
sbit Col3 = P1^7;
unsigned char KeyScan(void);
void main(void)
{
KeyScan();
while(1);
}
unsigned char KeyScan(void)
{
unsigned char key, temp;
unsigned char code keytab[] = {//键码表
//键值,//点,键名 键号
0x81,//07,key1 00
0x41,//06,key2 01
0x21,//05,key3 02
0x11,//04,key4 03
0x82,//17,key5 04
0x42,//16,key6 05
0x22,//15,key7 06
0x12,//14,key8 07
0x84,//27,key9 08
0x44,//26,key10 09
0x24,//25,key11 0A
0x14,//24,key12 0B
0x88,//37,key13 0C
0x48,//36,key14 0D
0x28,//35,key15 0E
0x18,//34,key16 0F
0x03,//01,key17 10
0x06,//12,key18 11
0x0c,//23,key19 12
0x05,//02,key20 13
0x09,//03,key21 14
0x0d,//13,key22 15
0xc0,//67,key23 16
0x60,//56,key24 17
0x30,//45,key25 18
0xa0,//57,key26 19
0x50,//46,key27 1A
0x90,//47,key28 1B
/*
0x01,//G0,key29 1C
0x02,//G1,key30 1D
0x04,//G2,key31 1E
0x08,//G3,key32 1F
0x10,//G4,key33 20
0x20,//G5,key34 21
0x40,//G6,key35 22
0x80,//G7,key36 23
*/
0//退出
};
P1 = 0xff;//释放键盘
_nop_();//延时
key = P1;//测试独占键(与GND连接)
key = ~key;//取反,变为正逻辑
if (key) {//有独占键压下,键码28~35,键key29..key36
temp = 35;//最后一个独占键key36
do {
if (key >= 0x80) break;//有独占键压下,退出测试
key <<= 1;//测试下一独占键
temp --;//键号-1
}
while(key);//未测完继续
if (key != 0x80) key = 0xff;//多个独占键压下,出错键码0xff
else key = temp;//得到键码28~35,键号key29~key36.
}
else {//测试组合键,键码0~27
temp = 0x01;//实为从P1_1测起,到P1_7测完
do {//只需扫描7次!!!
temp <<= 1;//继续扫描下一位
P1 = ~temp;//发送某位低电平
_nop_();//延时
key = P1;//接收键盘数据
key = ~key;//取反,变为正逻辑
}
while((temp < 0x80) && (key == temp));//测到P1_6或有键压下结束
if (key == temp) key = 0xff;//无键压下,键码0xff
else {//有组合键压下
temp = 0;//初始键号
while(keytab[temp] && (key != keytab[temp])) temp ++;//查键值表
if (temp >= 28) temp = 0xff;//查无此组合键,出错键码0xff
else key = temp;//得到组合键码0~27,键key1~key28.
}
}
return key;//返回键码0~35或出错码0xff
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -