找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数码管 7SEG-MPX4-CC不亮但是引脚在闪怎么解决?

[复制链接]
跳转到指定楼层
楼主
写的是按下4x4键盘矩阵,在动态数码管上显示”L ? OP ”,其中?的取值范围为0~9。
Keil 4的代码
#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int uint;

sbit LATCH = P2^2;   // 数码管锁存引脚

uchar code segCode[] = {   // 共阴极数码管的段码表
    0xC0,  // 0
    0xF9,  // 1
    0xA4,  // 2
    0xB0,  // 3
    0x99,  // 4
    0x92,  // 5
    0x82,  // 6
    0xF8,  // 7
    0x80,  // 8
    0x90   // 9
};

uchar code keyTable[] = {   // 4x4矩阵键盘的键值表
    0xEE, 0xDE, 0xBE, 0x7E,
    0xED, 0xDD, 0xBD, 0x7D,
    0xEB, 0xDB, 0xBB, 0x7B,
    0xE7, 0xD7, 0xB7, 0x77
};

uchar keyValue;   // 存储当前按下的键值

void delay(uint t)   // 延时函数
{
    uint i, j;
    for(i = t; i > 0; i--)
        for(j = 110; j > 0; j--);
}

void display(uchar num)   // 数码管显示函数
{
    LATCH = 0;
    P0 = segCode[num];
    LATCH = 1;
}

uchar getKey()   // 获取按键函数
{
    uchar row, col;
    P1 = 0xFF;   // 全部行拉高
    col = P1;    // 读取列值
    col = col & 0x0F;   // 只保留低4位
    if(col == 0x0F)   // 没有按键按下
        return 0xFF;
    else
    {
        row = 0;
        P1 = 0xF0;   // 全部列拉高
        while(col == 0x0F)   // 检测列值是否改变
        {
            delay(5);
            col = P1 & 0x0F;
            row++;
        }
        col = col | (P1 & 0x0F);   // 组合列值和行值
        return keyTable[(row - 1) * 4 + col - 1];
    }
}

void main()
{
    uchar num = 0;

    while(1)
    {
        keyValue = getKey();   // 获取当前按下的键值
        if(keyValue != 0xFF)   // 判断是否有按键按下
        {
            if(keyValue >= 0xE7 && keyValue <= 0xEE)   // 判断按下的键是否在范围内
            {
                num = keyValue - 0xE0;   // 获取按键对应的数字
            }
        }

        // 数码管动态显示"L ? OP"
        display(0);   // 显示空白
        delay(5);
        display(num);   // 显示数字
        delay(5);
        display(10);   // 显示字母L
        delay(5);
        display(11);   // 显示字母O
        delay(5);
        display(12);   // 显示字母P
        delay(5);

    }
}

屏幕截图 2023-11-04 233437.png (105.55 KB, 下载次数: 50)

屏幕截图 2023-11-04 233437.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:357396 发表于 2023-11-4 23:51 | 只看该作者
位选都没控制。。。。
回复

使用道具 举报

板凳
ID:69038 发表于 2023-11-5 01:13 | 只看该作者
一个巴掌拍不响,LED都单端了你还想让它亮起来?
回复

使用道具 举报

地板
ID:1098533 发表于 2023-11-5 01:21 | 只看该作者
位选线都没有接啊。led灯一个都不会亮的,要先位选后对应被选中的哪一位数码管led才会响应控制IO显示的
回复

使用道具 举报

5#
ID:1098533 发表于 2023-11-5 01:22 | 只看该作者
位选四个引脚没有接,不会亮的,要位选选中的LED数码才会响应IO口发过来的显示信号
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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