mxxddi 2021-06-24 17:31 采纳率: 50%
浏览 17
已采纳

51单片机用4*4键盘跟8位数码管相接,怎么改变键值输入的方向,现在是从左至右要改成从右至左

#include <reg51.h>
#include "intrins.h"
#define LBIT P0     
#define LNUM P2     
#define IO_KEY P1   
unsigned char code ledTab[]={0x3F,0x06,0x5B,0x4F,
	                           0x66,0X6D,0X7D,0X07,
	                           0X7F,0X6F,0X77,0X7C,
                             0x39,0x5E,0x79,0x71,
                             0x76,0x73,0x38,0x3e,0x00};//´æ·ÅLEDµÄµãÕóÂë
unsigned char code tabIndex[]={0xfe,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
unsigned char Num[8]={20,20,20,20,20,20,20,20};

void Delay_us(unsigned int time)
{
	while(time--);
}
void dynamicLed(unsigned char Counter,unsigned char Ligh)
{
	unsigned char i;
	for(i=0;i<Counter;i++)
	{
		LBIT=tabIndex[i%8];
		LNUM=ledTab[Num[i]%21];
		Delay_us(Ligh);
		LNUM=0x00;
	}
}
unsigned char scanKey()
{
unsigned char temp,tempCode,i=0;
unsigned char LastCode=0;
tempCode=0x00;
IO_KEY=0x0F;
temp=IO_KEY;
if((temp&0x0F)!=0x0F)
{
	Delay_us(200);
	
  temp=0xF7;
  while(i<4)
		{
			temp=_crol_(temp,1);
      IO_KEY=temp;
      tempCode=IO_KEY&0x0f;
			if(tempCode!=0x0F)
				{
					switch(tempCode)
						{
							case 0x0E:
			        LastCode=LastCode+0;
		          break;
		          case 0x0D:
			        LastCode=LastCode+1;
		          break;
		          case 0x0B:
			        LastCode=LastCode+2;
		          break;
		          case 0x07:
			        LastCode=LastCode+3;
		          break;
		          default:
			        LastCode=LastCode+0;
		          break;
						}
						IO_KEY=0x0F;
						temp=IO_KEY;
						while((temp&0x0F)!=0x0F)
							{
								IO_KEY=0x0F;
								temp=IO_KEY;
	            }
							break;
				}
				i++;
				LastCode+=4;
		}
}
else
	LastCode=16;
  return LastCode;         
}
void main(void)
{
	unsigned char tempkey,i;
	while(1)
	{
		tempkey=scanKey();
		if(tempkey!=16)       
		{
			for(i=0;i<7;i++)
			{
				Num[i]=Num[i+1];
			}
			Num[7]=tempkey;
		}
		dynamicLed(8,10);
	}
}

  • 写回答

1条回答 默认 最新

  • 智者知已应修善业 2021-06-24 18:02
    关注

    简单得很把键值头尾对调即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)