原创 4×4键盘扫描源程序

2008-1-31 19:35 4358 10 13 分类: MCU/ 嵌入式

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++)
    {
      ;
    }
  }
}

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户128918 2008-2-8 07:27

顶 + 支持

zigbee_904218839 2008-2-2 09:58

搞电子的,支持

用户42640 2008-2-1 16:07

顶一下
相关推荐阅读
用户835449 2009-06-11 18:33
毕业设计-模拟温度补偿晶体振荡器
我今年的毕业设计,拿出来晒一把,哈哈!模拟温度补偿警惕振荡器系统https://static.assets-stash.eet-china.com/album/old-resources/2009/5...
用户835449 2009-05-31 22:43
异步屏编辑软件
发现网上的异步屏编辑软件都需要解压密码,网上也找不到,这里有一个没有密码的软件,与大家分享一下。1https://static.assets-stash.eet-china.com/album/old...
用户835449 2009-05-31 22:36
(转)电力电子技术答案
电力电子技术答案配西安交通大学 王兆安 黄俊 编《电力电子技术》第四版希望能对大家有所帮助下载后记得顶一下,谢了!...
用户835449 2009-01-01 18:09
课程设计
这个学期又要过去了,学期末的课程设计又开始了,到现在已经完成几个课程设计了,分享一下:综合布线课程设计:https://static.assets-stash.eet-china.com/album/...
用户835449 2008-09-06 15:00
内藏T6963芯片的液晶显示模块驱动程序
         网上的好多程序都是采用总线方式,初次使用可能不太灵活,接线也比较麻烦,而且大多数没有注释,因此本人写了下面的子函数,可以直接应用,只要修改一下端口就OK了。本人经过调试,以下所有函数...
用户835449 2008-06-16 12:27
关于U盘的一个想法--无线U盘
关于U盘的想法--无线U盘  U盘由于容量大,体积小现在相当受到大家的青睐,但是体积小了就又会出现一些麻烦。  昨天晚上,实验室的一哥们儿拷完数据后,随便把U盘放到了一个地方,今天用到了,却怎么也找不...
EE直播间
更多
我要评论
3
10
关闭 站长推荐上一条 /3 下一条