您的位置:首页技术文栏单片机C51
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

单片机4*4的矩阵键盘程序( C51 )

[日期:2008-07-04 ] [来源:东哥单片机学习网 www.picavr.com 整理 作者:佚名] [字体: (投递新闻)

#include<AT89X51.h>
#include<intrins.h>
void delay(unsigned int i);
const unsigned char leddigit[12]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,
                        0x20,0x60,0xff,0xdf};  /* 字符 0-9 编码,0xff为关显示,0xdf为小数点 */
#define disp(a,b) P2=~(1<<(a));P0=leddigit[b]
#define uchar unsigned char
#define uint unsigned int
void key()
{
 uchar k;
 P1 = 0xf0;//低位置○,准备查询按键
 k = P1;//取得当前P1口的状态
 if(k != 0xf0)
 {//如果有变化则表示有键按下
  k = 0xfe;
  do{//循环扫描每一行
  P1 = k;
  if(k != P1)
  {
   switch(P1)
   {
   //第一行
   case 0x77:{disp(1,1);break;}
   case 0xb7:{disp(1,2);break;}
   case 0xd7:{disp(1,3);break;}
   case 0xe7:{disp(1,4);break;}
   //第二行
   case 0x7b:{disp(1,5);break;}
   case 0xbb:{disp(1,6);break;}
   case 0xdb:{disp(1,7);break;}
   case 0xeb:{disp(1,8);break;}
   //第三行
   case 0x7d:{disp(1,9);break;}
   case 0xbd:{disp(1,10);break;}
   case 0xdd:{disp(1,11);break;}
   case 0xed:{disp(4,11);break;}
   //第四行
   case 0x7e:{disp(2,1);break;}
   case 0xbe:{disp(2,2);break;}
   case 0xde:{disp(3,3);break;}
   case 0xee:{disp(4,4);break;}

   }
  }
  k = _crol_(k,1);//移位,进入下一行扫描
  }while(k !=0xef);//超过范围退出
 }
 
}  
main()
{
while(1)
 {
 key();
 }

阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐