在用51玩一些傳感器的時候,發現調試起來很難看到數據,每次調用串口,都是很麻煩的,後來發現能夠用printf和scanf來打印調試數據,簡直方便得不要不要得,可是作出這個功能,本身百度了不少,踩了不少坑,如今解決了,也來這記錄一下,一樣也是分享給有緣人~函數
廢話不說,直接上代碼,這個是我測試用的,我要寫得是一個判斷輸入字符串功能的函數,要是不想看這個,看最後那個簡潔版就好測試
#include <stdio.h> //加入這個就能夠使用printf和scanf啦 #include <reg52.h> #include <string.h> //這個是我用於斷定兩個字符串函數的頭文件 char in_char[]={" "}; //沒想到吧,字符串輸入重點在這裏,仍是不能夠有空格輸入,空格數量若是少,會出現自動打印輸出和亂碼 void InitUART(void)//使用定時器1做爲串口波特率發生器 { TH1 = 0xf3; //晶振12M,,,,設置爲2400,,,重中之重,若是是11.0592,,須要從新寫這個值,否則會亂碼 TL1 = TH1; TMOD |= 0x20; //定時器1方式2 SCON = 0x50; //串口接收使能 ES = 1; //串口中斷使能 TR1 = 1; //定時器1使能 TI = 1; //發送中斷標記位,必須設置 } //毫秒延時函數 void delay_ms(unsigned int t) { unsigned char a,b; while(t--) { for(b=102;b>0;b--) for(a=3;a>0;a--); } } //我當時是爲了測試一點東西,才寫成函數的形式 void input() { scanf("%s",&in_char); // & 這個在輸入字符串的時候,不加也能夠的,,可是要是輸入整型和單字符,,必須得加 } void main() { int i; char jay[]={"jay"}; InitUART(); //初始化串口 EA = 1; //開總中斷 printf("\n is begin \n"); for(i=0;i<5;i++) { printf("please input the char:"); input(); delay_ms(10); printf("\n the input is --->%s\n",in_char); //strcmp不能用,,用來程序直接沒有反應,不知道爲啥 //strncmp是比較前n位 // if (strncmp(jay,in_char,3)==0) // { // printf("ok\n"); // } } printf("\n is done \n"); while(1); // for(i=0;i<3;i++) // { // scanf("%c",&a); // delay_ms(100); // printf("\nyour input is : %c\n",a); // if (a=='6') // { // printf("you are the best\n"); // } // } }
要是你是簡單的想使用printf和scanf,直接像下面這樣定義就行了 ,很簡單,主要就是要注意波特率的問題,就是把初始化串口那個函數複製過去,改一下波特率計算那個,記得加入頭文件,就能夠使用這個printf來調試打印數據了~~~~spa
#include <stdio.h> //加入這個就能夠使用printf和scanf啦 #include <reg52.h> #include <string.h> //這個是我用於斷定兩個字符串函數的頭文件 int a; void InitUART(void)//使用定時器1做爲串口波特率發生器 { TH1 = 0xf3; //晶振12M,,,,設置爲2400,,,重中之重,若是是11.0592,,須要從新寫這個值,否則會亂碼 TL1 = TH1; TMOD |= 0x20; //定時器1方式2 SCON = 0x50; //串口接收使能 ES = 1; //串口中斷使能 TR1 = 1; //定時器1使能 TI = 1; //發送中斷標記位,必須設置 //這個必須記住 } //毫秒延時函數 void delay_ms(unsigned int t) { unsigned char a,b; while(t--) { for(b=102;b>0;b--) for(a=3;a>0;a--); } } void main() { int i; InitUART(); //初始化串口 EA = 1; //開總中斷 printf("\n is begin \n"); for(i=0;i<5;i++) { printf("please input the char:"); scanf("%d",&a); delay_ms(10); printf("\n the input is --->%d\n",a); } printf("\n is done \n"); while(1); }
當能夠使用printf,,,一切調試,變得如此簡單~~調試