51单片机-发送16进制数给LCD1602和串口

复制代码
#include "reg52.h"
#include "string.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char u8;
typedef unsigned int u16;

void delay(u16 ms)
{
    u16 i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 110; j++)
            ;
}

void UART_Init(u8 baud)
{
    TMOD = 0x20; // 设置定时器1为8位自动重装模式
    SCON = 0x50; // 设置串口为8位可变波特率模式
    PCON = 0x00; // 波特率不加倍
    TH1 = baud;     // 设置波特率为9600
    TL1 = baud;     // 设置波特率为9600
    TR1 = 1;     // 启动定时器1
                 // ES = 1;         // 使能串口中断
                 // EA = 1;         // 使能总中断
                 // TR1 = 1;     // 启动定时器1
}

void UART_Send_Char(char dat)
{
    SBUF = dat; // 将数据加载到串口缓冲区
    while (!TI)
        ;    // 等待发送完成
    TI = 0; // 清除发送标志
}

void UART_Send_String(const char *str)
{
    int i;
    int len = strlen(str); // 计算字符串长度
    for (i = 0; i < len; i++)
    {
        UART_Send_Char(str[i]); // 逐个发送字符
    }
}

void show_hex(u8 hex)
{
    u8 i;
    for (i = 0; i < 8; i++)
    {
        if ((hex >> i) & 1)
        {
            LCD_ShowChar(1, 1, '1');
            UART_Send_Char('1'); // 发送数字1
        }
        else
        {
            LCD_ShowChar(1, 1, '0');
            UART_Send_Char('0'); // 发送数字1
        }
        delay(1000);
    }
}

// change hex number to binary number
char *tranHexToDec(u8 hex)
{
    int i;
    static char binary[9];
    binary[8] = '\0';

    for (i = 0; i < 8; i++)
    {
        binary[7 - i] = (hex & 1) + '0';
        hex >>= 1;
    }
    return binary;
}

void show_binary(u8 num)
{
    char *binary = tranHexToDec(num);
    LCD_ShowString(1, 1, binary);
    UART_Send_String(binary); // 发送string
}

void UART_Interrupt() interrupt 4
{
    if (RI)
    {
        RI = 0; // 清除接收标志
    }
    if (TI)
    {
        TI = 0; // 清除发送标志
    }
}

u8 hex_array[5] = {0x1a, 0x2b, 0x3c, 0x4d, 0x5e};

void main()
{
    u8 baud;
    int i;
    baud = 0xfd;
    UART_Init(baud); // 初始化UART
    LCD_Init();

    while (1)
    {
        u8 num = 0x1a;
        for (i = 0; i < 5; i++)
        {
            num = hex_array[i];
            // show_hex(num);
            show_binary(num);
            delay(1000);
        }
        // LCD_ShowNum(1, 1, num, 1);
        // LCD_ShowString(1, 10, "hello world!");
    }
}
复制代码

 

posted on   风中狂笑  阅读(380)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示