注册 登录
编程论坛 单片机编程

单片机数键盘子程序(原创)

发布于 2008-10-31 20:23, 2944 次点击
/*程序:键盘扫描子程序头文件  keyboard.h
/*功能:确定键盘按下,并返回键值
/*说明:1 无键按下,返回值为0XFF
/*     2 有键按下,分别返回对应键值(键值可以修改)
/*     3 使用此程序,在孟老师板子上调试时,需要拔下编程线,否则不正常*/                                          
#ifndef _KEYBOARD_H
#define _KEYBOARD_H
#include<reg52.h>
#include<intrins.h>

#define  uchar  unsigned  char
static void Delay(void);        //去抖动延时程序?
static uchar Key_Board(void);   //扫描键盘程序
uchar Key_Value(void);           //键值返回程序

sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;

#endif
7 回复
#2
2008-10-31 20:24
#include"keyboard.h"
/*扫描键盘返回值程序,所对应的键值为0至11
/*如果需要修改键值,只需修改Real_Key=?即可
/*返回值类型为unsigned char*/
uchar
Key_Value(void)
{   uchar Real_Key;
    Real_Key=Key_Board();
    switch(Real_Key){
        case 0XCE: Real_Key=0;break;
        case 0XAE: Real_Key=1;break;
        case 0X6E: Real_Key=2;break;
        case 0XCD: Real_Key=3;break;
        case 0XAD: Real_Key=4;break;
        case 0X6D: Real_Key=5;break;
        case 0XCB: Real_Key=6;break;
        case 0XAB: Real_Key=7;break;
        case 0X6B: Real_Key=8;break;
        case 0XC7: Real_Key=9;break;
        case 0XA7: Real_Key=10;break;
        case 0X67: Real_Key=11;break;
        default: Real_Key=0xFF; break;
 
 }
    return Real_Key;
}
/*扫描键盘是否有键按下
/*如果没有键按下,返回为0(键值对应为0xFF,即没有按下键)
/*返回类型:unsigned char*/

uchar
Key_Board(void)
{
    uchar a,key=0;

    P1&=0XFF>>3;//P1口为输出线,输出低电平
    P3=0XFF;    //P3口为输入线 ,输出高电平
    if(P3==0XFF) return  0 ;//如果没有键按下,返回0
    else{
 //有键按下,P3口数值变化,有 输入线变为低电平
        Delay();//去抖动
        for(a=0;a<3;a++){
            P1=0XFC&(~(1<<a+5));//确定按键位置,计算键值
            
            if(P32==0) break;
            if(P33==0) break;
            if(P34==0) break;
            if(P35==0) break;
        }
        key=(P1&0XE0)|((P3&0X3C)>>2);
        for(;P3!=0XFF;P3=0XFF);//去抖动,键是否复原
    }
    return key;
}
//去抖动程序
 void
 Delay(void)
{
 unsigned int i=10;
 while(i--);
}

个人主页:http://blog.
#3
allenrong2008-11-18 17:10
按键扫描在实际的应该过程中有很多的状态要区分的,如:
KEY DOWN
KEY UP
KEY LONG
KEY HOLD
多尝试就行
#4
vanh3182008-11-23 01:16
#5
murufy2008-11-23 21:51
不错,只要是原创就应该顶
#6
vfdff2008-12-07 00:02
硬件图??
1