1

关于投票
4×4键盘扫描源程序

4×4键盘扫描源程序

        这是本人独立写的第一个程序,和大家分享,如果有什么错误还望大家不吝赐教。

//*******************************************************//
//             程序名称:key.c
//             程序功能:显示按键
//             备注:根据按键显示出相应的按键号,并由
//                         串口输出相应键值。
//*******************************************************//

#include
#define scan_code P1              //数码管段输出口

//*******************************************************//

sbit LED_switch=P2^2;

code  unsigned char led_code[16]={0xC0,0x0F9,0xA4, 0xB0,
                            0x99,0x92,0x82,0x0F8,0x80,0x90,
                            0x88,0x83,0xa7,0xa1,0x86,0x8e};
                           //定义显示码 0,1,2,3,4,5,6,7,8,9
                           //           a ,b,c,d,e,f
unsigned char key;
unsigned char error;

 

//*********************************************************

void delay_time();                //延时10ms

//*********************************************************
void main()
{
  SCON="0x50";
  TMOD="0x20";
  TH1=0x0fd;TL1=0xFD;             //设置串口波特率为9600Bps
  TR1=1;
  while(1)
  {
    LED_switch=0;                 //开显示位
    scan_code=0x0f;
    while((P1^0x0f)!=0)
    {
      delay_time();
      scan_code=0xfe;             //查询第一行
      switch(scan_code)
      {
        case 0x7e:key=15;break;
        case 0xbe:key=0;break;
        case 0xde:key=14;break;
        case 0xee:key=13;break;
        default:error;
      }
      scan_code=0xfd;             //查询第二行
      switch(scan_code)
      {
        case 0x7d:key=7;break;
        case 0xbd:key=8;break;
        case 0xdd:key=9;break;
        case 0xed:key=12;break;
        default:error ;
      }
      scan_code=0xfb;             //查询第3行
      switch(scan_code)
      {
        case 0x7b:key=4;break;
        case 0xbb:key=5;break;
        case 0xdb:key=6;break;
        case 0xeb:key=11;break;
        default:error ;
      }
      scan_code=0xf7;             //查询第4行
      switch(scan_code)
      {
        case 0x77:key=1;break;
        case 0xb7:key=2;break;
        case 0xd7:key=3;break;
        case 0xe7:key=10;break;
        default:error ;
      }


        P0=led_code[key];         //取显示码到P0口,数码管输出键值
        scan_code=0x0f;
       while((P1^0x0f)!=0)
       {
        ;
       }
      
       while(TI==1)
       TI="0";
       SBUF="key";                  //串口输出键值

       
     }

   }
}


//*******************************************************//
//                函数名称:delay_time()
//                函数功能:延时ms
//                入口参数:无
//                出口参数:无
//********************************************************//

void delay_time()
{
  unsigned char i,j;
  for(i=0;i<50;i++)
  {
    for(j=0;j<100;j++)
    {
      ;
    }
  }
}

系统分类: 单片机
用户分类: 单片机与外围
标签: 无标签
来源: 原创
发表评论 阅读全文(1264) | 回复(3)
总共 , 当前 /