久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機串口解析如何改進
[打印本頁]
作者:
cien_s
時間:
2025-5-15 19:55
標題:
51單片機串口解析如何改進
本人在準備藍橋杯單片機國賽,目前在學習串口的內容,自己寫了代碼,pc通過串口給單片機開發板發送信息,單片機接收到后根據信息做出反應。我在單片機解析串口信息這方面有些生疏,想問下各位大佬有什么好的建議或者需要優化的地方。感謝各位。以下是我根據14屆單片機國賽題目,將按鍵控制改成了通過串口控制,以下是題目,關鍵代碼和工程文件,希望各位大佬能不吝賜教。
第十四屆國賽.png
(1.8 MB, 下載次數: 0)
下載附件
2025-5-15 19:53 上傳
14屆國賽_串口.7z
(45.83 KB, 下載次數: 0)
2025-5-15 19:53 上傳
點擊文件名下載附件
void Uart_Proc(void)
{
if(Uart_Recv_Index==0)return;
if(Uart_Recv_Tick>=10)
{
Uart_Recv_Tick=0;
Uart_Rx_Flag=0;
if(strcmp(Uart_Recv,"RESET")==0)
{
Seg_Mode=0;
canshu_Distance=40;
canshu_Temperature=30;
Factory_JiaoZhun=0;
Factory_Speed=340;
Factory_DAC_Limit_10x=10;
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}
if(strcmp(Uart_Recv,"DM")==0)
{
Seg_Mode=0;
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}else if(strcmp(Uart_Recv,"PM")==0)
{
Seg_Mode=1;
Parameter_Set_Mode=0;
printf("Please enter the parameters you want to set\r\n");
printf("SD:Set distance\r\nST:Set temperature\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}else if(strcmp(Uart_Recv,"FM")==0)
{
Seg_Mode=2;
printf("Please enter the parameters you want to set\r\n");
printf("SC:Set calibration \r\nSS:Set Speed\r\nSDAC:Set DAC Limit\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}
if (Seg_Mode==1)
{
if(strcmp(Uart_Recv,"SD")==0)
{
Parameter_Set_Mode=0;
Start_Set_Parameter=1;
printf("Please Enter The Distance Parameter(10 to 90)\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}else if(strcmp(Uart_Recv,"ST")==0){
Parameter_Set_Mode=1;
Start_Set_Parameter=1;
printf("Please Enter The Temperature Parameter(0 to 80)\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}
if (Start_Set_Parameter)
{
unsigned char temp=0;
unsigned char i=0;
Start_Set_Parameter=0;
while(isdigit(Uart_Recv[i]))
{
temp=(temp*10+(Uart_Recv[i]-'0'));
printf("Uart_Recv[%bd] is %c\r\n",i,Uart_Recv[i]);
i++;
}
printf("temp is %bd\r\n",temp);
if (Parameter_Set_Mode)
{
if(temp>=0&&temp<=80)
{
canshu_Temperature=temp;
}else{
printf("The Temperature Parameter must be 0 to 80!\r\n");
}
}else{
if(temp>=10&&temp<=90)
{
canshu_Distance=temp;
}else{
printf("The Distance Parameter must be 10 to 90!\r\n");
}
}
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}
}
if (Seg_Mode==2)
{
if(strcmp(Uart_Recv,"SC")==0)
{
Factory_Set_Mode=0;
Start_Set_Factory_Parameter=1;
printf("Please Enter The calibration value(-90 to 90)\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}else if(strcmp(Uart_Recv,"SS")==0){
Factory_Set_Mode=1;
Start_Set_Factory_Parameter=1;
printf("Please Enter The Speed value(10 to 9990)\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}else if(strcmp(Uart_Recv,"SDAC")==0){
Factory_Set_Mode=2;
Start_Set_Factory_Parameter=1;
printf("Please Enter The DAC value(0.1 to 2.0)\r\n");
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}
if(Start_Set_Factory_Parameter)
{
unsigned char i=0;
unsigned int temp1=0;
Start_Set_Factory_Parameter=0;
ucLed[0]=1;
switch(Factory_Set_Mode)
{
case 0:
if (Uart_Recv[0]=='-')
{
signed char temp=0;ucLed[2]^=1;i=1;
while (isdigit(Uart_Recv[i]))
{
temp=(temp*10+(Uart_Recv[i]-'0'));
// printf("Uart_Recv[%bd] is %c\r\n",i,Uart_Recv[i]);
i++;
}
// printf("temp is %bd\r\n",temp);
if(temp>90)
{
printf("The calibration value must be -90 to 90!\r\n");
}else{
Factory_JiaoZhun=-temp;
// printf("Factory_JiaoZhun is %bd\r\n",Factory_JiaoZhun);
}
}else{
unsigned char temp=0;
while (isdigit(Uart_Recv[i]))
{
temp=(temp*10+(Uart_Recv[i]-'0'));
i++;
}
if(temp>90)
{
printf("The calibration value must be -90 to 90!\r\n");
}else{
Factory_JiaoZhun=temp;
}
}
break;
case 1:
while (isdigit(Uart_Recv[i]))
{
temp1=(temp1*10+(Uart_Recv[i]-'0'));
i++;
}
if(temp1<10||temp1>9990)
{
printf("The Speed value must be 10 to 9990!\r\n");
}else{
Factory_Speed=temp1;
}
break;
case 2:
while (i<Uart_Recv_Index)
{
if (isdigit(Uart_Recv[i]))
{
temp1=(temp1*10+(Uart_Recv[i]-'0'));
}
i++;
}
if(temp1<1||temp1>20)
{
printf("The DAC value must be 0.1 to 2.0!\r\n");
}else{
Factory_DAC_Limit_10x=temp1;
}
break;
}
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
return;
}
}
memset(Uart_Recv, 0, 10); // 清空接收數據
Uart_Recv_Index = 0;
}
}
復制代碼
void Uart1Server() interrupt 4
{
if(RI == 1) //串口接收數據
{
RI = 0;
Uart_Rx_Flag = 1; // 標記有完整命令
Uart_Recv_Tick = 0;
Uart_Recv[Uart_Recv_Index] = SBUF;
Uart_Recv_Index++;
if(Uart_Recv_Index>10)
{
Uart_Recv_Index = 0;
memset(Uart_Recv,0,10);
}
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产一区二区三区久久久久久久久
|
亚洲精品在线免费
|
久色网
|
亚洲精品日韩综合观看成人91
|
国产精品视频免费观看
|
日韩1区
|
国产午夜精品视频
|
国产精品一区久久久
|
国产精品视频一区二区三区
|
国产美女黄色片
|
免费 视频 1级
|
男人久久天堂
|
亚洲黄色一区二区三区
|
男人天堂网av
|
污免费网站
|
天天摸天天看
|
久久久久国产
|
综合久久久
|
成人在线视频观看
|
久久1区
|
国产精品久久久久久模特
|
少妇午夜一级艳片欧美精品
|
秋霞在线一区
|
久热9
|
国产视频一区二区
|
国产精品美女久久久久aⅴ国产馆
|
日韩一区二区在线看
|
最新免费视频
|
国产高清一区二区三区
|
一区二区免费看
|
日韩欧美一区二区三区免费看
|
久久精品免费
|
欧美三级久久久
|
美女午夜影院
|
久久久久国
|
欧美日韩精品久久久免费观看
|
国产精品777一区二区
|
国产精品久久久久久久久久久久
|
日本不卡一区二区三区在线观看
|
天堂三级
|
天堂免费
|