#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!");
}
}