日志档案

发表于 2006-11-7 1:46:59

16

标签: 键盘扫描  

刚学单片机写的一个小程序!!!

 

这是我学习单片机写的小程序...慢慢来写一天写一点...HE HE...人笨没办法...

这是用八个按键控制LED显示八种状态...

键盘是2X4的键盘...

希望大家多多指点!!!

#include<AT89X51.H>
#define uchar unsigned char
#define uint    unsigned int

/*显示数据=====*/
uchar code a[9]={0xff,0xaa,0x55,0xcc,0x33,0xf0,0x0f,0x18,0x81};
uchar key;/*全局变量*/

/*IO口定义======*/
sbit P20=P2^0;
sbit P21=P2^1;

/*子函数说明==*/
uchar key_scan(void);
void delay(uint a);

/*主程序=======*/
void main()
{
   uchar i;
   while(1)
    {
        i= key_scan();/*根据I的值达到控制显示目的*/
        P0=a[i];
  
  }
}
/*按键扫描程序*/
/*有返回值=====*/
uchar key_scan(void)
{
   uchar i;
   P2=0xfc;     //按键接口
   if(P2!=0xfc)//判断有无键按下
    {
      delay(50);//延时
   if(P2!=0xfc)//再判断
    {
      P2=0xfe;//判断按下的键在哪列
    i="P2";
    if(i!=0xfe){ i="P2";}//把键值送到I.
    else      //判断按下的键在哪列
     {
        P2=0xfd;
      i="P2"; 
      if(i!=0xfd) {i="P2";}//把键值送到I.
     }
    }
    }
/*判断键值并返回*/   
      switch(i)
    {
          case 0xf9:key="1";break;
    case 0xfa:key="2";break;
    case 0xf5:key="3";break;
    case 0xf6:key="4";break;
    case 0xed:key="5";break;
    case 0xee:key="6";break;
    case 0xdd:key="7";break;
    case 0xde:key="8";break;
    default:key="0xff";break;
    }
   return(key);//返回I的值
}

/*延时子函数==*/
void delay(uint a)
{
   uint i;
   for(i="0";i<a;i++);
}

系统分类: 单片机   |   用户分类: 单片机编程   |   来源: 无分类   |   【推荐给朋友】

    阅读(2154)    回复(21)  

投一票您将和博主都有获奖机会!

  • ZY05020824

    2007-1-7 15:00:22

    楼主不错哦。有兴趣的话加我一起学习啊。

    QQ:493805912

  • wang1jin

    2007-1-7 16:07:36

    加了.HEHE.

  • zhushuping123

    2006-11-24 11:06:11

    写的不错,我顶一下

     

  • zhushuping123

    2006-11-24 11:08:51

    请教一下程序中 i="p2",p2为何加引号,不能理解,请教

     

  • wang1jin

    2006-11-24 11:25:10

    这个是博客自己加上的...

    其实并没有...

  • 何楚强

    2006-11-10 12:57:10

    我也在学C语言,想学编程,能不能说说怎样快速学会编程.请高手帮忙.

  • wang1jin

    2006-11-10 14:40:59

    学东西不要求快.我感觉...慢慢的学才是最好...

     

    谢谢BANDW..我会改的...HE HE.谢谢.

  • bandw

    2006-11-10 9:32:34

    太耗时了,用定时任务查询方式才行,刚学也不能这样,这样会很容易变成习惯了.

  • 冰清玉洁

    2006-11-9 13:32:31

    学无止境,快乐今天!!

  • cocappjj

    2006-11-7 12:57:53

    不懂,不过鼓励一下:D

  • liyanxiong

    2006-11-8 20:24:45

    这是用C语言编写的程序吧

    我才刚开始了解这些东西,还不太看得懂,有机还请指教!

     

  • 人言者

    2006-11-9 11:50:18

    你写的按键检测太耗系统资源,还是尝试一下用定时器定时扫描按键吧。

  • wang1jin

    2006-11-9 11:54:44

    还在学习中呀,谢谢指点...HE HE

  • wang1jin

    2006-11-7 21:54:32

    谢谢...一起学习吧...

  • sdjnzhang

    2006-11-11 13:11:36

    单片及资源有限,不要做得太麻烦

  • AFEI

    2006-11-16 20:50:41

    一路狂顶!

  • 战神

    2006-12-12 14:41:45

    偶来给你顶了,你的资源还是比较丰富啊,偶也想做一个电子博客,不知是否可以转载你的部分资料啊?呵呵!偶的博客申请后还没时间“装饰”呢!

  • wang1jin

    2006-12-12 18:46:28

    HE HE.可以转呀...但能否标明下我这地址呢,HEHE...

    可以做个链接...

  • 战神

    2006-12-13 9:05:22

    呵呵  那多谢了 !

     

  • 路过

    2007-4-13 16:48:41

    xiogn兄弟,从头浏览了你的book,得出一个结论.雷锋啊~~~

  • wang1jin

    2007-4-13 17:50:09

    哈哈...感谢兄弟...对我的支持...谢谢...

    感觉动力十足.