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

📄 text1.c

📁 3个IO口扫16键,想了好久
💻 C
字号:
#include <at89x52.h>
#include "led.h"
#define uchar unsigned char
#define scanIO P1
/*
uchar scan_k0k6(void)
{
uchar tmp = 255;
scanIO |= 0x07; 
tmp = scanIO & 0x07;
//if(tmp!=7)
	switch(tmp)
	{
		case 0x03:return 0;break;
		case 0x05:return 1;break;
		case 0x06:return 2;break;
		case 0x01:return 3;break;
		case 0x02:return 4;break;
		case 0x04:return 5;break;
		case 0x00:return 6;break;
		default:return 255;break;
	}
	return tmp;
}

/*
uchar scan_k7k8(void)
{
uchar tmp = 255;
	tmp = scanIO & 0xf8;
	scanIO = tmp | 0x04; 
	tmp = scanIO & 0x07;
	if(tmp == 0x00)
	{
	tmp = scanIO & 0xf8;
	scanIO = tmp | 0x06; 
	tmp = scanIO & 0x07;
	if(tmp == 0x02)
		tmp = 7;
	else
		{
		tmp = scanIO & 0xf8;
		scanIO = tmp | 0x05;
		tmp = scanIO & 0x07; 
		if(tmp == 0x01)
		tmp = 8;
		}
	}
	else tmp = 255;
	return tmp;
}

uchar scan_k9k10(void)
{
uchar tmp = 255;
	tmp = scanIO & 0xf8;
	scanIO = tmp | 0x02;
	tmp = scanIO & 0x07; 
	if(tmp == 0x00)
	{
	tmp = scanIO & 0xf8;
	scanIO = tmp | 0x06; 
	tmp = scanIO & 0x07;
	if(tmp == 0x04)
		tmp = 9;
	else
		{
		tmp = scanIO & 0xf8;
		scanIO = tmp | 0x03;
		tmp = scanIO & 0x07;
		if(tmp == 0x01)
		tmp = 10;
		}
	}
	else tmp = 255;
	return tmp;
}

uchar scan_k11k12(void)
{
uchar tmp = 255;
	tmp = scanIO & 0xf8;
	scanIO = tmp | 0x01;
	tmp = scanIO & 0x07;
	if(tmp == 0x00)
	{
	tmp = scanIO & 0xf8;
	scanIO = tmp | 0x05;
	tmp = scanIO & 0x07; 
	if(tmp == 0x04)
		tmp = 11;
	else
		{
		tmp = scanIO & 0xf8;
		scanIO = tmp | 0x03; 
		tmp = scanIO & 0x07;
		if(tmp == 0x02)
		tmp = 12;
		}
	}
	else tmp = 255;
	return tmp;
}

uchar scan_k13(void)
{
uchar tmp = 255;
		tmp = scanIO & 0xf8;
		scanIO = tmp | 0x04; 
		tmp = scanIO & 0x07;
		if(tmp == 0x00)
		{
		tmp = scanIO & 0xf8;
		scanIO = tmp | 0x02; 
		tmp = scanIO & 0x07;
		if(tmp == 0x00)
		tmp = 13;
		else tmp = 255;
		}
		else tmp = 255;
return	tmp;
}

uchar scan_k14(void)
{
uchar tmp = 255;
tmp = scanIO & 0xf8;
scanIO = tmp | 0x05; 
tmp = scanIO & 0x07;
	if(tmp == 0x00)
		tmp = 14;
	else tmp = 255;
return	tmp;
}

uchar scan_k15(void)
{
uchar tmp = 255;
tmp = scanIO & 0xf8;
scanIO = tmp | 0x03; 
tmp = scanIO & 0x07;
	if(tmp == 0x00)
		tmp = 15;
	else tmp = 255;
return	tmp;
}

uchar getkey(void)
{
uchar keynum=255;
keynum = scan_k0k6();
/*
if(keynum == 255)
	keynum = scan_k7k8();
if(keynum == 255)
	keynum = scan_k9k10();
if(keynum == 255)
	keynum = scan_k11k12();
if(keynum == 255)
	keynum = scan_k13();
if(keynum == 255)
	keynum = scan_k14();
if(keynum == 255)
	keynum = scan_k15();
return keynum;
}*/
uchar scan_step1(void)
{
uchar tmp = 255;
	 tmp = scanIO & 0xf8;
	 scanIO = tmp | 0x07; 
	 tmp = scanIO & 0x07;
	 switch(tmp)
	{
		case 0x03:tmp = 0;break;
		case 0x05:tmp = 1;break;
		case 0x06:tmp = 2;break;
		case 0x01:tmp = 3;break;
		case 0x02:tmp = 4;break;
		case 0x04:tmp = 5;break;
		case 0x00:tmp = 6;break;
		default:tmp = 255;break;
	}
return tmp;
}

uchar scan_step2(void)
{
uchar tmp = 255;
tmp = scanIO & 0xf8;
scanIO = tmp | 0x06; 
tmp = scanIO & 0x07;
	switch(tmp)
	{
		case 0x02:tmp = 7;break;
		case 0x04:tmp = 9;break;
		case 0x00:tmp = 13;break;
		default:tmp = 255;break;
	}
return tmp;
}

uchar scan_step3(void)
{
uchar tmp = 255;
tmp = scanIO & 0xf8;
scanIO = tmp | 0x05; 
tmp = scanIO & 0x07;
	switch(tmp)
	{
		case 0x01:tmp = 8;break;
		case 0x04:tmp = 11;break;
		case 0x00:tmp = 14;break;
		default:tmp = 255;break;
	}
return tmp;
}

uchar scan_step4(void)
{
uchar tmp = 255;
tmp = scanIO & 0xf8;
scanIO = tmp | 0x03; 
tmp = scanIO & 0x07;
	switch(tmp)
	{
		case 0x01:tmp = 10;break;
		case 0x02:tmp = 12;break;
		case 0x00:tmp = 15;break;
		default:tmp = 255;break;
	}
return tmp;
}

uchar getkey(void)
{
uchar keynum=255;
if(keynum == 255)
	keynum = scan_step1();
if(keynum == 255)
	keynum = scan_step2();
if(keynum == 255)
	keynum = scan_step3();
if(keynum == 255)
	keynum = scan_step4();
return keynum;
}

main()
{
while(1)
led_display(getkey());
}

⌨️ 快捷键说明

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