• 大小: 40KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: 其他
  • 标签:

资源简介

51单片机4×4键盘proteus仿真51单片机4×4键盘proteus仿真51单片机4×4键盘proteus仿真

资源截图

代码片段和文件信息

#include 
#define uchar unsigned char
#define uint unsigned int
uchar bufftimesj;
unsigned char code dispcode[]={0x3f0x060x5b0x4f //0123
                               0x660x6d0x7d0x07 //4567
                               0x7f0x6f0x770x7c //89AB
                               0x390x5e0x790x710x00}; //CDEFnull
unsigned char idata value[8];

void delay1ms(void)  //消抖动
{ uchar i;
  for(i=200;i>0;i--);
}

void delay5ms(void)  //延时5ms
{
  unsigned char ij;
  for(i=5;i>0;i--)
  for(j=248;j>0;j--);
}

void key_scan(void)   //键盘输入扫描函数
{ uchar hangliekey;
  P3=0xf0;
  if((P3&0xf0)!=0xf0)   //行码为0,列码为1
   { delay1ms();
     if((P3&0xf0)!=0xf0)  //有键按下,列码变为0
      { hang=0xfe;     //逐行扫描
        times++;
              if(times==9)
                times=1;
        while((hang&0x10)!=0)  //扫描完4行后跳出
         { P3=hang;
           if((P3&0xf0)!=0xf0)  //本行有键按下
            { lie=(P3&0xf0)|0x0f;
              buff=((~hang)+(~lie));
              switch(buff)
               { case 0x28: key=0;break;
                 case 0x14: key=1;break;
                 case 0x24: key=2;break;
                 case 0x44: key=3;break;
                 case 0x12: key=4;break;
                 case 0x22: key=5;break;
                 case 0x42: key=6;break;
                 case 0x11: key=7;break;
                 case 0x21: key=8;break;
                 case 0x41: key=9;break;
                 case 0x81: key=10;break;
                 case 0x82: key=11;break;
                 case 0x84: key=12;break;
                 case 0x88: key=13;break;
                 case 0x48: key=14;break;
                 case 0x18: key=15;break;
               }
            value[times-1]=key;  //按下的键值
            }
           else hang=(hang<<1)|0x01; //下一行扫描

         }
      }
   }
}

void main(void)
{ uchar key;
  while(1)
   { key_scan();
     P0=0;
     for(j=times;j>0;j--) //74LS138扫描?
       {
         P2=j-1;  //数码管列扫描
         P0=dispcode[value[times-j]]; //A-G数据
         delay5ms();
       }
   }
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1307  2007-01-03 15:13  key_scan.Opt

     文件        231  2007-01-03 15:13  key_scan.plg

     文件       1683  2007-01-03 14:31  key_scan.Uv2

    .......      1656  2007-01-03 12:21  key_scan_Uv2.Bak

     文件       2178  2007-01-03 15:12  key.c

     文件     101199  2007-01-03 15:20  KEY.DSN

     文件        717  2007-01-03 15:20  KEY.PWI

     文件        698  2006-12-12 20:14  key_scan.h

     文件     101199  2007-01-03 15:04  Last Loaded KEY.DBK

     文件       4203  2007-01-03 15:13  key.LST

     文件         28  2007-01-03 15:13  key_scan.lnp

     文件       8224  2007-01-03 15:13  key_scan.M51

     文件       1117  2007-01-03 15:13  key_scan.hex

    .......      1309  2007-01-03 15:05  key_scan_Opt.Bak

     文件       4871  2007-01-03 15:13  key.OBJ

     文件       4056  2007-01-03 15:13  key_scan

----------- ---------  ---------- -----  ----

               234676                    16


评论

共有 条评论

相关资源