找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2058|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机矩阵键盘检测 有错找不出来,大神帮给看看

[复制链接]
跳转到指定楼层
楼主
我刚学51单片机,完全是菜鸟,大神帮忙看看程序,指点指点!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define key P1 ; //--定义使用的IO口--//

uint keyvlue;//--定义全局变量--//
  unsigned char code table[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
void delayms(uint xms);//延时函数声明
void keydown();//按键检测函数声明
void main()
{
    while(1)
{
   keydown();
   P0=~table[keyvlue];//数码管输出键值
}


}
void keydown(void)
{
   char a=0;
   key=0x0f;
   
   if(key!=0x0f)//读取按键是否按下
   {
       delay10ms(10);//延时进行消抖  
   
   if(key!=0x0f)//再次检测键盘是否按下
   {
       key=0xf0;
   switch(key)//测试行
   {
   case(0xe0):keyvlue=1;break;
     case(0xd0):keyvlue=2;break;
   case(0xb0):keyvlue=3;break;
   case(0x70):keyvlue=4;break;
   }
  key=0x0f;
   switch(key)//测试列
   {
   case(0x0e):keyvlue=keyvlue;break;
     case(0x0d):keyvlue=keyvlue+4;break;  
   case(0x0b):keyvlue=keyvlue+8;break;
   case(0x07):keyvlue=keyvlue+12;break;
   }
    while((a<50) && (key=0x0f))//检测按键松手检测  
   {
    delayms(1);
    a++;
   }
   }
   
   
   }


}
void delayxms(uint xms)//延时函数
{
    uint i,j;
   for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:19715 发表于 2014-9-9 21:24 | 只看该作者

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 回帖助人的大量积分奖励

查看全部评分

回复

使用道具 举报

板凳
ID:19715 发表于 2014-9-9 21:27 | 只看该作者
回复

使用道具 举报

地板
ID:65837 发表于 2014-9-10 10:30 | 只看该作者
学习了,顶!!1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表