关于51单片机按键控制

#include<reg52.h>
				
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit key1 = P2^4;
sbit key2 = P2^5;
sbit key3 = P2^6;
sbit key4 = P2^7;

unsigned char code leds[] = {
	0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
	0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
	0xC0
};
unsigned int code ledss[17][8] = {
	{0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55},
	{0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},
	{0x81,0x81,0x9F,0x81,0x81,0xF9,0x81,0x81},		
	{0x81,0x81,0x9F,0x81,0x81,0x9F,0x81,0x81},
	{0x8F,0x87,0x93,0x99,0x9C,0x00,0x00,0x9F},
	{0x81,0x81,0xF9,0x81,0x81,0x9F,0x81,0x81},
	{0x81,0x81,0xF9,0x81,0x81,0x99,0x81,0x81},
	{0x83,0x83,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F},
	{0x81,0x81,0x99,0x81,0x81,0x99,0x81,0x81},
	{0x81,0x81,0x99,0x81,0x81,0x9F,0x81,0x81},
	{0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},
	{0x81,0x81,0x9F,0x81,0x81,0xF9,0x81,0x81},		
	{0x81,0x81,0x9F,0x81,0x81,0x9F,0x81,0x81},
	{0x8F,0x87,0x93,0x99,0x9C,0x00,0x00,0x9F},
	{0x81,0x81,0xF9,0x81,0x81,0x9F,0x81,0x81},
	{0x81,0x81,0xF9,0x81,0x81,0x99,0x81,0x81},
	{0x83,0x83,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F}
};
unsigned int locals = 0;
unsigned int local(unsigned int i)
{
	unsigned char b;
	switch(i)
	{
		case 1: P2 = 0xF7;if(key1 == 0){b = 1;}P2 = 0XFB;if(key1 == 0){b = 5;}P2 = 0XFD;if(key1 == 0){b = 9;}P2 = 0xFE;if(key1 == 0){b = 13;}break;
		case 2: P2 = 0xF7;if(key2 == 0){b = 2;}P2 = 0XFB;if(key2 == 0){b = 6;}P2 = 0XFD;if(key2 == 0){b = 10;}P2 = 0xFE;if(key2 == 0){b = 14;}break;
		case 3: P2 = 0xF7;if(key3 == 0){b = 3;}P2 = 0XFB;if(key3 == 0){b = 7;}P2 = 0XFD;if(key3 == 0){b = 11;}P2 = 0xFE;if(key3 == 0){b = 15;}break;
		case 4: P2 = 0xF7;if(key4 == 0){b = 4;}P2 = 0XFB;if(key4 == 0){b = 8;}P2 = 0XFD;if(key4 == 0){b = 12;}P2 = 0xFE;if(key4 == 0){b = 16;}break;
		default:break;
	}
	P2 = 0xF0;
	return b;
}

void main()
{
	ENLED = 0;
	EA = 1;
	TMOD = 0x01;
	ET0 = 1;
	TH0 = 0XFC;
	TL0 = 0x67;
	TR0 = 1;
	P2 = 0xF0;

	while(1)
	{
		if(key1 == 0)
		{
			locals = local(1);
		}
		else if(key2 == 0)
		{
			locals = local(2);
		}
		else if(key3 == 0)
		{
			locals = local(3);
		}
		else if(key4 == 0)
		{
			locals = local(4);
		}
	}
}

void InterruptTimer0() interrupt 1
{
	static unsigned char i = 0;
	TH0 = 0xFC;
	TL0 = 0x67;
	P0 = 0xFF;
	switch(i)
	{
		case 0: ADDR3 = 0;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
		case 1: ADDR3 = 0;ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
		case 2: ADDR3 = 0;ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
		case 3: ADDR3 = 0;ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
		case 4: ADDR3 = 0;ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
		case 5: ADDR3 = 0;ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
		case 6: ADDR3 = 0;ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
		case 7: ADDR3 = 0;ADDR0 = 1;ADDR1 = 1;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
		case 8: ADDR3 = 1;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = leds[locals];i++;break;
		case 9: ADDR3 = 1;ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = leds[locals];i=0;break;
		default:break;
	}
}

从前用过的按键控制,那时感觉思路简单,但随着学习程度加深,复杂的程序用起来就跑飞了,这里以按键对数码管和点阵的控制呈现如下代码,图案没仔细研究(随便抄了一段数组上去),希望小伙伴们闲暇时刻可以看看,有什么问题的话可以提出来,本人现在对此种代码也仍有疑虑。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

或许下个轮回

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值