;
文章:行业新闻EDA文摘电源技术无线通信测量仪表嵌入式类电子技术制造技术半导体网络/协议展会实验家电维修  
  下载:EDA教程电源技术电子书籍电子元件无线通信通信网络电路图纸嵌入式类单片机传感/控制电子教材模拟数字
.... 音视频类
消费电子机械电子行业软件C/C++FPGA/ASIC规则标准家电维修DSPIC资料ARM软件电路图电子技术论坛
 
位置:电子发烧友 > 行业新闻 > 嵌入式类 > 嵌入式操作系统 >数码管显示矩阵键盘扫描程序 退出登录 用户管理
栏目导航


· 单片机类 · 接口/总线/驱动
· ARM · DSP
· FPGA/ASIC技术 · 设计应用
· 嵌入式操作系统 · 电视卡
热门文章
· [组图] 电子元器件基础知识...
· [图文] USB接口定义
· [图文] 三极管开关电路图
· [组图] RS232 RS485接口原理...
· [组图] [组图]电动车充电器...
· [组图] 电子捕鱼器电路图
· [组图] 高品质音调电路的制...
· [组图] JRC4558电路
· [图文] M51134P低音炮电路图...
· [图文] TL494脉宽调制控制电...
相关文章

· [图文] 910CH型洗衣机程序控...
· THE MATHWORKS公司实...
· [组图] 18b20程序及应用
· [图文] 用Atmega8实现8路键...
· AVR 模数(AD)转换范...
· 6*128 LED点阵屏C程...
· [图文] led点阵显示程序
· [图文] 16 16点阵显示程序(...
· [图文] 8X8 LED点阵显示原理...
· [图文] 8 8点阵汉字显示电路...

数码管显示矩阵键盘扫描程序
作者:本站  来源:本站原创  发布时间:2008-1-11 19:14:19 减小字体 增大字体

数码管显示矩阵键盘扫描程序

 /*矩阵键盘扫描出键值,在数码管上显示出来
       P0口接数码管的段选码,P2口通过反相器接数
       管的位选码*/
      
       #include<reg52.h>    //所用的器件是AT89S52
       #define uchar unsigned char
      
       void delayms(uchar j);    //声明延时函数  
       uchar getkey(void);     //声明扫描函数
       void keydisp(uchar k); //声明显示函数
       void disp(uchar l);     //声明显示子程序
      
       uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
                           0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,
                           0x86,0x8e};
                             //共阳数码管0-F显示代码
      
       void main(void)        //主程序
       {
           uchar key;
           while(1)
           {
            key=getkey();
            delayms(20);
            keydisp(key);
           }
       }
      
       void delayms(uchar j)    //延时子程序
       {
        uchar n,m;
        for(n=0;n<j;n++)
        {
         for(m=0;m<120;m++)   //延时时间为1ms
         {;}
        }
       }
      
       uchar getkey(void)      //扫描取键值程序
       {
        uchar rcode,ccode;
        P1=0xf0;
        if((P1&0xf0)!=0xf0)
        {
         delayms(20);   //为消除抖动,延时20ms
         if((P1&0xf0)!=0xf0)
         {
          rcode=0xfe;   //开始发行扫描信号
          while((rcode&0x10)!=0)
          {
         P1=rcode;
           if((P1&0xf0)!=0xf0)
           {
            ccode=(P1&0xf0)|0x0f;
            do{;}while((P1&0xf0)!=0xf0); //当松键后显示
            return((~rcode)+(~ccode));    //返回扫描代码
           }
           else rcode=(rcode<<1)|0x01; //此行无键按下,变化行扫描信号
          }
         }
        }
        return 0;   //无键按下,返回0
       }
      
       void keydisp(uchar k)    //显示程序
       {
        switch(k)
        {
         case 0x11:disp(0);break;
         case 0x21:disp(1);break;
         case 0x41:disp(2);break;
         case 0x81:disp(3);break;
         case 0x12:disp(4);break;
         case 0x22:disp(5);break;
         case 0x42:disp(6);break;
         case 0x82:disp(7);break;
         case 0x14:disp(8);break;
         case 0x24:disp(9);break;
         case 0x44:disp(10);break;
         case 0x84:disp(11);break;
         case 0x18:disp(12);break;
         case 0x28:disp(13);break;
         case 0x48:disp(14);break;
         case 0x88:disp(15);break;
    default:break;
        }
      }
     
      void disp(uchar l) //显示子程序
      {
       P0=table[l];
       delayms(20);
       P2=0x7f;   //共阳极数码管的位选码
      }

[] [返回上一页] [打 印] [收 藏]
 

上一篇文章:矩阵键盘扫描程序
下一篇文章:键盘扫描汇编程序
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
 
关于本站- 意见反馈 - 网站导航 - 帮助 - 隐私政策 - 联系我们 - 使用条款 - 安全承诺 - 友情连接
站长QQ:39550527 Powered by: 飓风网络(电路图
Copyright 2006-2008 Elecfans.Com.电子发烧友: 粤ICP备07065979号All Rights Reserved