《单片机串口》—将传感器获取的数值在上位机显示

Yolanda ·
更新时间:2024-09-20
· 953 次阅读

这里写目录标题1.单片机通过串口发送单个字符2.单片机通过串口发送字符串3.单片机将传感器获取到的数字值发送到上位机

之前在学蓝牙通信的时候如何将单片机获取到的传感器的数值发送到上位机遇到了不少的问题。由于数据的发送一种是字符格式一种是(hex)也就是十六进制显示。传感器获取到的数值是十进制。这样显示起来就会不太一样。后来解决了这个问题,把一些过程分享出来,仅供参考。

1.单片机通过串口发送单个字符 功能:上位机给单片发送一个字符,单片机接收到后给上位机发送一个相同的字符。 代码 #include"reg51.h" void UartInit(void); unsigned char receive; int main() { UartInit(); while(1) { if(RI==1) { receive=SBUF; RI=0; SBUF=receive; while(TI==0) TI=1; } } } void UartInit(void) //9600bps@11.0592MHz { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xFA; //设定定时初值 TH1 = 0xFA; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 } 测试结果

在这里插入图片描述

2.单片机通过串口发送字符串 功能:当上位机给单片机发送任意一个字符的时候,单片机向上位机发送字符串。 #include"reg51.h" void UartInit(void); void send(unsigned char *p); unsigned char shuju[]="I like you"; unsigned char receive; int main() { UartInit(); while(1) { if(RI==1) { receive=SBUF; RI=0; send(shuju); } } } void UartInit(void) //9600bps@11.0592MHz { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xFA; //设定定时初值 TH1 = 0xFA; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 } void send(unsigned char *p) { unsigned char index=0; do { SBUF=p[index++]; while(TI == 0); TI = 0; } while(p[index]!=0); } 测试结果
在这里插入图片描述 3.单片机将传感器获取到的数字值发送到上位机 在这里用PCF8591AD芯片做演示,AD转换将外部的模拟值变为数字信号存储在单片机中,那么如何将让单片机获取到的数字显示到串口呢?` unsigned int AD; void senNum(unsigned int dat); unsigned char shuzu[10]; int main() { UartInit(); while(1) { AD=AD_read(0X01);//这个只是个参考,在这里仅仅是为了表示传感器获取到的值。 senNum(AD); uart_tx(shuzu,3); delayms(1000); } } void senNum(unsigned int dat)//由于该传感器最大值也就是三位数。具体多少位根据自己传感器获取到的值来设定 { shuzu[0]=dat/100+'0';//将数值变换成字符 shuzu[1]=dat%100/10+'0'; shuzu[2]=dat%10+'0'; } void uart_tx(unsigned char *p,unsigned char length) { unsigned char i; for(i=0;i<length;i++) { SBUF = *(p+i); while(TI == 0); TI = 0; } }

-测试结果
在这里插入图片描述


作者:一枚暴躁的小雨



串口 传感器 单片机 上位机

需要 登录 后方可回复, 如果你还没有账号请 注册新账号