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!"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现