#include<reg52.h>
#include "delay.h"
#include "1602.h"
unsigned char str[10];
unsigned char Temp; //定义临时变量
unsigned char i = 0;
void uart_init()
{
SCON = 0x50;//设置串口方式1,打开允许接受
//SMO = 0; SM1 = 1;REN = 1;
TMOD |= 0x20;//设置定时器1为工作方式2
TH1 = 0xfd;//9600
//ET1 = 1; //打开定时器中断
TR1 = 1; //打开定时器
EA = 1;
}
void uart_send_byte(unsigned char byte)
{
SBUF = byte;
//TI位自动置1,手动清0
while(!TI);//while(TI != 1);
TI = 0;
}
void uart_send_string(unsigned char *str)
{
while(*str != '\0')
{
SBUF = *str;
str++;
while(!TI);
TI = 0;
}
}
/* char * uart_rec_string(unsigned char *str)
{
// unsigned char str[10];
unsigned char i;
for(i = 0; i < 3; i++)
{
str[i] = SBUF;
}
str[i] = '\0';
return str;
} */
void main()
{
//unsigned char temp;
uart_init();
LCD_Init();
ES = 1; //打开串口中断
while(1)
{
/* //uart_send_byte(0x61);
//delay_ms(5);
if(RI)
{
if(SBUF)
{
// uart_send_string("i recevied is:");
uart_send_byte(SBUF);
// uart_send_string("\r\n");
}
RI = 0;
}
if(TI)
{
TI = 0;
} */
}
}
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
P1=Temp;
if(i < 10)
{
str[i] = Temp;
i++;
}
if(i == 9)
{
str[i] = '\0';
LCD_Write_String(0,0,str);
} //把值输出到P1口,用于观察
SBUF=Temp; //把接收到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
}
串口发送数据到1602显示
最新推荐文章于 2024-02-27 13:26:35 发布