标题: 如何在虚拟终端同步显示数码管的一位数字? [打印本页]

作者: 高富师    时间: 2025-6-7 18:59
标题: 如何在虚拟终端同步显示数码管的一位数字?
#include <reg51.h>

// 函数声明
void Timer0_Init(void);
void UART_Init(void);
void Send_Current_Number(void);  // 专门用于发送当前数字的函数

// 数码管编码
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

unsigned char currentNum = 0;
unsigned char timer50ms = 0;

// 定时器初始化
void Timer0_Init() {
    TMOD = 0x21;    // 定时器0模式1,定时器1模式2
    TH0 = 0x3C;     // 50ms定时值(12MHz)
    TL0 = 0xB0;
    ET0 = 1;        // 允许定时器0中断
    EA = 1;         // 总中断允许
    TR0 = 1;        // 启动定时器0
}

// 串口初始化
void UART_Init() {
    SCON = 0x50;    // 模式1,允许接收
    TH1 = 0xFD;     // 9600波特率(12MHz)
    TL1 = 0xFD;
    TR1 = 1;        // 启动定时器1
}

// 专用数字发送函数
void Send_Current_Number(void) {
         
    SBUF = currentNum + '0';  
    while(!TI);     // 等待发送完成
    TI = 0;         // 清除发送标志
}

// 定时器中断
void Timer0_ISR() interrupt 1 {
    TH0 = 0x3C;     // 重装定时值
    TL0 = 0xB0;

    if(++timer50ms >= 10) {  // 0.5秒到达
        timer50ms = 0;

        // 更新显示
                       
        P1 = LED7Code[currentNum];

        // 发送当前数字
        Send_Current_Number();

        // 数字循环
        currentNum++;
        if(currentNum > 9) currentNum = 0;
    }
}

void main() {
    P1 = LED7Code[0];  // 初始显示0
    currentNum = 0;    // 显式初始化

    UART_Init();      // 初始化串口
    Timer0_Init();    // 初始化定时器

    // 初始发送数字0
    Send_Current_Number();

    while(1);         // 主循环
}





屏幕截图 2025-06-07 185835.png (75.95 KB, 下载次数: 0)

屏幕截图 2025-06-07 185835.png

作者: tyrl800    时间: 2025-6-8 18:27
单片机晶振设置错误
作者: 高富师    时间: 2025-6-8 23:14
tyrl800 发表于 2025-6-8 18:27
单片机晶振设置错误

编辑属性里是12MHz的,代码里设置的也是12MHz的
作者: tyrl800    时间: 2025-6-9 06:52
高富师 发表于 2025-6-8 23:14
编辑属性里是12MHz的,代码里设置的也是12MHz的

修改成11.0592Mhz吧
作者: 高富师    时间: 2025-6-9 14:33
tyrl800 发表于 2025-6-9 06:52
修改成11.0592Mhz吧

只改频率后,虚拟终端循环显示00 F8 00 F8 06 F8 18 F8 1E F8 60 F8 66 F8 78 F8
7E F8 80 F8 86 F8 ,数码管正常显示0到9
作者: 去码头整薯条    时间: 2025-6-9 21:35
emm,设置GPIO模式,定义数码管相对应的编码应该是这样
作者: 高富师    时间: 2025-6-10 08:32
去码头整薯条 发表于 2025-6-9 21:35
emm,设置GPIO模式,定义数码管相对应的编码应该是这样

还是从90循环显示到99捏




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1