行列式键盘+共阴极数码管

功能要求:开机黑屏一按下任意按键后,数码管上显示该键的键号(0~F)一若没有新键按下,维持前次按键结果

#include <reg51.h>
#include<intrins.h>

char led_mod[]={...};//led显示0~f的码
char key_buf[]={...};//键值

void delay(unsigned int i){
    unsigned int j=0;
    for(;i>0;i--)
    for(;j<125;j++);    
}

char getkey(void){
       //确定扫猫方式--》行或列
       char key_scan[]={0xef,0xdf,0xbf,0x7f};//逐列扫猫,行都置1
       char i,j;
       for(i=0;i<4;i++){
               P2=key_scan[i];//从第几列开始扫描 ,如第一列
            if((P2&0x0f)!=0x0f){//判断这一列是否有哪一行的值不为1,即被按下
                 //如果第i列有某一行的值不为1,被按下了
                for(j=0;j<16;j++){
                    if(key_buf[j]==P2) //看看0~f哪个键的值与P2相等(被按下后)
                        return j;//返回按下的键号
                       }
                     }
            }
        return -1;//所有列扫描完,没有行键被按下
                   //无键闭合        
}
            
                    

void main(){
    char key=-1;
    P0=0x00;
    while(1){
        key=getkey(); //获取键号
        if(key!=-1)//因为getkey从0~15,所以判断是否按下是除去这几个数之外的数
         P0=led_mod[key]; //对应输出0~f(16个键)
         }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值