矩阵键盘:实现数码管最右端按键不同显示不同数字0-F

本文介绍了一个使用C语言实现的共阴极数码管显示和按键延时扫描程序,通过`seg_code`数组控制数码管字符,以及`key_scan`函数实现按键自增索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

#include "reg51.h"
// 数码管共阴极字符数组 0-f
unsigned char seg_code[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};


void delay(){  // 延时 n ms
    unsigned int i = 10000;
    while (i--);
}

void display(unsigned char n){
    switch(n){
        case 0xff - 0x11: P0 = seg_code[0]; break;
        case 0xff - 0x12: P0 = seg_code[1]; break;
        case 0xff - 0x14: P0 = seg_code[2]; break;
        case 0xff - 0x18: P0 = seg_code[3]; break;
        
        case 0xff - 0x21: P0 = seg_code[4]; break;
        case 0xff - 0x22: P0 = seg_code[5]; break;
        case 0xff - 0x24: P0 = seg_code[6]; break;
        case 0xff - 0x28: P0 = seg_code[7]; break;
    
        case 0xff - 0x41: P0 = seg_code[8]; break;
        case 0xff - 0x42: P0 = seg_code[9];break;
        case 0xff - 0x44: P0 = seg_code[10];break;
        case 0xff - 0x48: P0 = seg_code[11];break;
            
        
        case 0xff - 0x81: P0 = seg_code[12];break;
        case 0xff - 0x82: P0 = seg_code[13];break;
        case 0xff - 0x84: P0 = seg_code[14];break;
        case 0xff - 0x88: P0 = seg_code[15];break;
        default: break;
    }
}

// 按键延时实现 索引自增
void key_scan(){
    unsigned char tmp1, tmp2, tmp;    
    P2 = 0xf0;
    if (P2 != 0xf0){ // 检测按键是否变化
        delay();
        tmp1 = P2;
        P2 = 0x0f;
        if (P2 != 0x0f){
            tmp2 = P2;
        }
    }
    
    tmp = tmp1 + tmp2;
    display(tmp);
}

void main(){
    P0 = 0x00;
    P1 = 0x7f;
    while (1){
        key_scan();
    }
}

仿真图:

原理简介:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值