栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

矩阵键盘(自用)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

矩阵键盘(自用)

#include "reg52.h"

sfr P4       = 0xc0;    //原无定义P4端口,查询单片机手册后将其编译,对应0xc0

sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;

sbit C4 = P3^4;
sbit C3 = P3^5;
sbit C2 = P4^2;
sbit C1 = P4^4;

 unsigned char code SMG_duanma[18]=
      {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	   0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
	   0xbf,0x7f}; 

void SelectHC573(unsigned char channel)
{
  switch(channel)
  {
  case 4:
  P2 = P2 & (0x1f) | 0x80;
  break;
   case 5:
  P2 = P2 & (0x1f) | 0xa0;
  break;
   case 6:
  P2 = P2 & (0x1f) | 0xc0;
  break;
   case 7:
  P2 = P2 & (0x1f) | 0xe0;
  break;
 }
}

void DisplayKeyNum(unsigned char value)
{
 SelectHC573(6);
 P0 = 0x01;
 SelectHC573(7);
 P0 = value;
}

unsigned char key_num;
void ScanKeysMulti()
{
  R1 = 0;
  R2 = R3 = R4 = 1;
  C1 = C2 = C3 = C4 = 1;
  if(C1 == 0)
  {
   while(C1 == 0);
   key_num = 0;           //标注变量键值
   DisplayKeyNum(SMG_duanma[key_num]);
  }
  else if (C2 == 0)
  {
   while(C2 == 0);
   key_num = 1;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C3 == 0)
  {
   while(C3 == 0);
   key_num = 2;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C4 == 0)
  {
   while(C4 == 0);
   key_num = 3;
   DisplayKeyNum(SMG_duanma[key_num]);
  }

  R2 = 0;
  R1 = R3 = R4 = 1;
  C1 = C2 = C3 = C4 = 1;
  if(C1 == 0)
  {
  while(C1 == 0);
   key_num = 4;           //标注变量键值
   DisplayKeyNum(SMG_duanma[key_num]);
  }
  else if (C2 == 0)
  {
   while(C2 == 0);
   key_num = 5;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C3 == 0)
  {
   while(C3 == 0);
   key_num = 6;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C4 == 0)
  {
   while(C4 == 0);
   key_num = 7;
   DisplayKeyNum(SMG_duanma[key_num]);
  }

  R3 = 0; //行
  R2 = R1 = R4 = 1;
  C1 = C2 = C3 = C4 = 1;
  if(C1 == 0)   //变化列确定位置
  {
  while(C1 == 0);
   key_num = 8;           //标注变量键值
   DisplayKeyNum(SMG_duanma[key_num]);
  }
  else if (C2 == 0)
  {
   while(C2 == 0);
   key_num = 9;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C3 == 0)
  {
   while(C3 == 0);
   key_num = 10;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C4 == 0)
  {
   while(C4 == 0);
   key_num = 11;
   DisplayKeyNum(SMG_duanma[key_num]);
  }

  R4 = 0;
  R2 = R3 = R1 = 1;
  C1 = C2 = C3 = C4 = 1;
  if(C1 == 0)
  {
  while(C1 == 0);
   key_num = 12;           //标注变量键值
   DisplayKeyNum(SMG_duanma[key_num]);
  }
  else if (C2 == 0)
  {
   while(C2 == 0);
   key_num = 13;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C3 == 0)
  {
   while(C3 == 0);
   key_num = 14;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
   else if (C4 == 0)
  {
   while(C4 == 0);
   key_num = 15;
   DisplayKeyNum(SMG_duanma[key_num]);
  }
}

void main()
{
  while(1)
  {
  ScanKeysMulti();
  }
}

矩阵键盘的实际操作(自用)复习

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号