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

📄 1.txt

📁 键盘扫描C程序 4x4键盘扫描 单片机编程
💻 TXT
字号:
uchar keyscan()
{
   key=0;
   P3=0xfe;
   temp=P3;
   temp=temp$0xf0;
   if(temp!=0xf0)
   {
       delay(10);
       if(temp!=0xf0)
       { 
           temp=P3;
           switch(temp)
           {
              case 0xee:
                   key=2;
                   break;
              case 0xde:
                   key=6;
                   break;
              case 0xbe:
                   key=10;
                   break;
              case 0x7e:
                   key=12;
                   break;
           }
           while(temp!=0xf0)
           {   
                temp=P3;
                temp=temp$0xf0;
           }
       }
   }
   P3=0Xfd;7
   temp=P3;
   temp=temp$0xf0;
   if((temp!=0xf0)
   {
      delay(10);
      if(temp!=0xf0)
      {
         temp=P3;
         switch(temp)
         {
             case 0xed:
                  
void main()
{
 while(1)
 {
   uchar x,y,number,i;
   key=keyscan();
   if(key!=0)
   {
      if(key==13)   //取消
      {
         x=0;y=0;number=0;
         display2();
         for(i=0;i<10;i++) //数组清
         num[i]=0;
         reset=0;
         reset=1;  //总复位 
         reset=0;
       }
       else if(key==12)  //确认
       { 
          num[number]=0;
          hz=atol(num);
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``
#include<reg51.h>
#include<defi.h>


/* 用于键消抖的延时函数 */
void delay()
{
 uchar t;
 for (t=400;t>0;t--);
}

/* 键扫描函数 */
uchar keyscan(void)
{
 uchar scancode,tmpcode;
 P2 = 0xf0;        // 发全0行扫描码
 if ((P2&0xf0)!=0xf0)     // 若有键按下
 {
  delay();       // 延时去抖动
  if ((P2&0xf0)!=0xf0)    // 延时后再判断一次,去除抖动影响
  {
   scancode = 0xfe;
   while((scancode&0x10)!=0)  // 逐行扫描
   {
    P2 = scancode;    // 输出行扫描码
    if ((P2&0xf0)!=0xf0)  // 本行有键按下
    {
     tmpcode = (P2&0xf0)|0x0f;

     /* 返回特征字节码,为1的位即对应于行和列 */
     return((~scancode)+(~tmpcode));
    }
    else scancode = (scancode<<1)|0x01;  // 行扫描码左移一位
   }
  }
 }
 return(0);        // 无键按下,返回值为0
}

/* 主程序 */
void main()
{
 uchar key;

   while(1)
    {
  key = keyscan();        // 调用键盘扫描函数

  delay();

  switch(key)
     {
        case 0x11:
                                NUM0=1;        // 第1行第1列,选择正弦波输出
    break;
   case 0x21:    // 第1行第2列,选择矩形波输出
    LIGHTA = 0;
    LIGHTB = 0;
    break;
   case 0x41:    // 第1行第3列,选择三角波输出
    LIGHTA = 1;
    LIGHTB = 0;
    break;
   default:break;
   }
             if(NUM0)
              {  NUM0=0;
                LIGHTA = 0;
         LIGHTB = 1;
              }  
 }
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>

#define uchar unsigned char

 

uchar rr;
uchar k;
uchar keydata;

 


void key_scan(void);          //键盘函数定义段;
uchar key_tab(uchar k);
void delay(void);
void key_in(uchar k);

//---------------------------------------------------------------
void main(void)
{
     while(1)
 {
    key_scan();
 }
}//---------------------------------------------------------------------------------------------

void key_scan(void)
{  uchar sccode,recode,i;
        P1=0xf0;
            if((P1&0xf0)!=0xf0)
          {
               delay();
                if((P1&0xf0) !=0xf0)
              {
                        sccode=0xfe;
                    for(i=0;i<4;i++)
                   {
                        P1=sccode;
                     if((P1&0xf0) !=0xf0)
                        {
                              recode=(P1&0xf0)|0x0f;
                              k=(~recode)+(~sccode);
                              rr=P1;

                             key_in(k);
                             break;
                         }
                      else
                         sccode=(sccode<<1)|0x01;
                  }
             }

  }
  //do {ta=P2;}while(ta==rr);
}
void delay()        //去抖动
{int a=2500;
 while(--a);
}

void key_in(uchar k)
{   uchar ta;
    //uchar keydata;

    do {ta=P1;}while(ta==rr);
    keydata=key_tab(k);
}

 

//-------------------------------------------------------------
uchar key_tab(uchar k)
{ uchar kb;
    switch(k)
{   case 0x11:kb=0x00;break;
    case 0x21:kb=0x01;break;
    case 0x41:kb=0x02;break;
    case 0x81:kb=0x03;break;
    case 0x12:kb=0x04;break;
    case 0x22:kb=0x05;break;
    case 0x42:kb=0x06;break;
    case 0x82:kb=0x07;break;
    case 0x14:kb=0x08;break;
    case 0x24:kb=0x09;break;
    case 0x44:kb=0x0a;break;
    case 0x84:kb=0x0b;break;
    case 0x18:kb=0x0c;break;
    case 0x28:kb=0x0d;break;
    case 0x48:kb=0x0e;break;
    case 0x88:kb=0x0f;break;
    default  :kb=0x00;break;
}
   return kb;
}

⌨️ 快捷键说明

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