找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为啥不显示预置的数字?

[复制链接]
跳转到指定楼层
楼主
用STC8051U做实验,要求控制三个HC595,分别驱动三个共阳数码管,显示预置的数字“123”,一直显示不正常,是哪里的原因?

以下是完整代码:

#include "AI8051U.H"
// 定义HC595控制引脚
sbit SDI = P2^0;  // 对应HC595的14脚(DS)
sbit SCLK = P2^1; // 对应HC595的11脚(SH_CP)
sbit LOAD = P2^2; // 对应HC595的12脚(ST_CP)

// 共阳数码管段码表(0-9)
code unsigned char segTable[] = {
    0xC0, // 0
    0xF9, // 1
    0xA4, // 2
    0xB0, // 3
    0x99, // 4
    0x92, // 5
    0x82, // 6
    0xF8, // 7
    0x80, // 8
    0x90  // 9
};

// 要显示的数字
unsigned int count = 123;

// 延时函数(用于动态扫描)
void Delay(unsigned int ms)
        {
    unsigned int i, j;
    for(i = 0; i < ms; i++)
        for(j = 0; j < 120; j++); // 根据晶振调整
}

// 向HC595发送一个字节数据
void SendTo595(unsigned char dat)
        {
    unsigned char i;

    for(i = 0; i < 8; i++)
                {
        SDI = dat & 0x80;    // 发送最高位
        SCLK = 0;            // 上升沿移位
        SCLK = 1;
        dat <<= 1;           // 左移一位
    }
}

// 更新数码管显示
void UpdateDisplay()
{
    unsigned char hundreds, tens, ones;

    // 分解数字为百位、十位和个位
    hundreds = count / 100;
    tens = (count % 100) / 10;
    ones = count % 10;

    // 关闭LOAD,准备移位
    LOAD = 0;

    // 依次发送个位、十位、百位数据(低位在前)
    SendTo595(segTable[ones]);
    SendTo595(segTable[tens]);
    SendTo595(segTable[hundreds]);

    // 锁存数据到输出寄存器
    LOAD = 1;
    LOAD = 0;
}

void main()
{
    // 配置P2口为推挽输出模式
    P2M0 = 0x07;  // P2.0-P2.2为推挽输出
    P2M1 = 0x00;

    // 初始化端口
    P2 = 0xFF;  // 默认高电平

    while(1)
                        {
        // 持续更新显示
        UpdateDisplay();

        // 添加短暂延时(可选)
        Delay(1);
      }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:69038 发表于 2025-7-28 22:24 | 只看该作者
有显示不?
595很简单的,只要记住3个信号:
SCK /RCK /OE

SCK 是数据移位时钟,上升沿有效,目的是把SDA上的数据移入595的内部寄存器中

RCK 是锁存输出时钟,上升沿有效,目的是把595的内部寄存器中的数据移入595的输出寄存器中
OE   是输出使能,低电平有效,目的是让595输出寄存器数据呈现在Q0~Q7端口上。
如不需要消隐,OE可直接接地。

回复

使用道具 举报

板凳
ID:619259 发表于 2025-7-28 22:55 | 只看该作者
程序是没有问题的。显示不正常,很可能你的hex文件是用 Keil C51来编辑的。
回复

使用道具 举报

地板
ID:1133081 发表于 2025-7-29 09:03 | 只看该作者
软件没有大问题,显示异常查硬件。

回复

使用道具 举报

5#
ID:33548 发表于 2025-7-29 10:51 | 只看该作者
cy009 发表于 2025-7-28 22:55
程序是没有问题的。显示不正常,很可能你的hex文件是用 Keil C51来编辑的。

选的是8位模式,就应该用C51编译
回复

使用道具 举报

6#
ID:33548 发表于 2025-7-29 11:52 | 只看该作者
找到原因了,是下载程序时,位数选错了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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