中国IEEE
关于我们 | 会员登陆 | 收藏本站 | 留 言 薄
 

 | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 视频教程 | ieee | 
热门搜索关键字: 单片机教程 | 三极管微电子 |  C语言汇编语言SCADA元器件IEEE |
cnieee.com baidu
栏目导航  
栏目更新推荐  
·C51与汇编混合编程
·经典的防抖动键C51源程序
·编译通不过错误总汇
·AD转换器的分类与选择
·Project0502-单片机产生正弦波
·有目的的去学习
·也谈LED驱动(转载)
·浮点数保存代码
点击TOP(10)  
  • 此栏目下没有热点文章
  • 图片文章  

    Project0502-单片机…

    也谈LED驱动(转载)

    基于单片机AT89C51的…

    基于ARM9处理器S3C2…
     
    您现在的位置: 中国IEEE中国电气电子工程师网 >> 单片机知识 >> 学习心得 >> 正文

    经典的防抖动键C51源程序
    文章来源:本站整理 点击数: 更新时间:2008-6-6 【字体:
    (欢迎光临中国IEEE,希望本文能对您有所帮助http://www.cnieee.com)


    相关文章:

    没有相关文章

  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    关于〖经典的防抖动键C51源程序〗的最新评论:
    ********************************************************/
     
    //单片机四独立按键控制四LED;
    //四个独立按键对应四个独立的LED.
    //当某一按键按下时对应的LED亮,当第二次按下时灭。
    //四个LED只能有一个亮,初学者可以参考以下程式:

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

    #i nclude   < reg52.h >
    unsigned char k_scan();
    unsigned char k_pro();
    unsigned char k_new,k_old;
    unsigned char k;

    void delay(unsigned char m);

    sbit k1=P1^4;   sbit k2=P1^5;
    sbit k3=P1^6;   sbit k4=P1^7;
    sbit led0=P0^0; sbit led1=P0^1;
    sbit led2=P0^2; sbit led3=P0^3;

    bit n;

    /********************************************************/
    void main(void)

       P0=0xff;
       k_old=0x00;     

       while(1)
      {
        k_new=k_scan();

         if(k_new!=k_old)
          {  delay(1);
              if(k_new!=k_old)
              {k_old=k_new;
                k=k_pro();}
          }
     
         switch(k)
          {
             case 1:{if(n)led0=0;else if(!n)led0=1;} break;
             case 2:{if(n)led1=0;else if(!n)led1=1;} break;
             case 3:{if(n)led2=0;else if(!n)led2=1;} break;
             case 4:{if(n)led3=0;else if(!n)led3=1;} break;
             default: break;
           }
       }
    }

    /********************************************************/
    unsigned char k_pro()
     {
        switch (k_new)
        {
            case 0x01:{k=1;if(led1&led2&led3){n=!n;}
            else {P0=0xff;}}
            break;
            case 0x02:{k=2;if(led0&led2&led3){n=!n;}P0=0xff;}
            break;
            case 0x04:{k=3;if(led0&led1&led3){n=!n;}P0=0xff;}
            break;
            case 0x08:{k=4;if(led0&led1&led2){n=!n;}P0=0xff;}
            break;

           default:
           break;
        }
         return(k);
     }

    /********************************************************/
    unsigned char k_scan()

        P1=0xff;
        k_new=0x00;
        k_new=k_new|(!k4);
        k_new=k_new<<1;
        k_new|=(!k3);
        k_new=k_new<<1;
        k_new|=(!k2);
        k_new=k_new<<1;
        k_new|=(!k1);
        return(k_new);                      //无键按下k_new=0x00
    }

    /********************************************************/
    void delay(unsigned char m)
    {
       while(m--)
       {
        unsigned char i=255;
        while(i--);
        }
    }

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

    /*

    还可以将 k_scan 函数更改为:

    unsigned char k_scan()

        P1=0xff;
       

    [1] [2] 下一页

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明网站地图 | 名站导航 | 管理登录 | 
    本站资源部分来自互联网,如侵犯您的权利,我们将予以删除  鲁ICP备08006092号
    本站欢迎同类网站做友情链接,QQ留言
    中国IEEE 中国电气电子工程师网 版权所有