官术网_书友最值得收藏!

任務4 用計算機來控制機器人的運動

在工業自動化中,經常需要單片機與計算機進行通信連接。一方面,單片機需要讀取周邊傳感器的信息,并把數據傳給計算機;另一方面,計算機需要解釋和分析傳感器數據,然后把分析結果或者決策傳給單片機以執行某種操作。

在第1講中已經知道C51單片機可以通過串口向計算機發送信息,本講將使用串口和串口調試終端軟件,由你從計算機向單片機發送數據來控制機器人的運動。

在本任務中,你需要編程讓C51單片機從調試窗口接收兩個數據:

(1)由單片機發給伺服電機的脈沖個數;

(2)脈沖寬度(以μs為單位)。

例程:ControlServoWithComputer.c

● 輸入、保存、下載并運行程序ControlServoWithComputer.c;

● 驗證機器人各個輪子的轉動是否同期望的運動一樣。

    #include<BoeBot.h>
    #include<uart.h>
    int main(void)
    {
        int Counter;
        int PulseNumber,PulseDuration;
        uart_Init();
        printf("Program Running!\n");

        printf("Please input pulse number:\n");
        scanf("%d",&PulseNumber);
        printf("Please input pulse duration:\n");
        scanf("%d",&PulseDuration);

        for(Counter=1;Counter<=PulseNumber;Counter++)
        {
          P1_1=1;
          delay_nus(PulseDuration);
          P1_1=0;
          delay_nms(20);
        }
        for(Counter=1;Counter<=PulseNumber;Counter++)
        {
          P1_0=1;
          delay_nus(PulseDuration);
          P1_0=0;
          delay_nms(20);
        }
        while(1);
    }

ControlServoWithComputer.c是如何工作的

單片機通過串口從計算機讀取輸入的數據,需要用到格式輸入函數。

scanf函數

scanf函數與printf函數對應,在C51庫的stdio.h中定義。下面是它的一般形式:

    scanf(“格式控制字符串”,地址列表);

“格式控制字符串”的作用與printf函數相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。

地址列表中給出各變量的地址。地址是由地址運算符“&”后跟變量名組成的。如“&a”表示變量a的地址。這個地址是編譯系統在存儲器中給變量a分配的地址,不必關心具體的地址是多少。

變量的值和變量的地址

這是兩個不同的概念,例如:

a=123;

那么:a為變量名,123是變量的值,&a則是變量a的地址。

scanf("%d",&PulseNumber);將會把輸入的十進制整數賦給變量PulseNumber。

程序運行過程(如圖2-8所示)如下:

圖2-8 例程運行過程

(1)首先輸出“Program Running!”和“Please input pulse number:”;

(2)程序處于等待狀態,等待輸入數據;

(3)輸入數據給變量PulseNumber;

(4)輸出“Please input pulse duration:”;

(5)處于等待狀態;

(6)輸入數據給變量PulseDuration;

(7)電機運轉。

一次輸入多個數據

當要求輸入數據比較多時,上述方法是不是很麻煩?下面的代碼可以讓你一次輸入兩個數據,兩個數據之間用空格隔開。

    printf("Please input pulse number and pulse duration:\n");
    scanf("%d %d",&PulseNumber,&PulseDuration);

想一想,如果要輸入3個及以上數據,程序代碼段該怎樣寫呢?

主站蜘蛛池模板: 牟定县| 左权县| 泸西县| 福州市| 彰化县| 嘉定区| 万载县| 九江市| 南京市| 洪泽县| 多伦县| 平顶山市| 苍梧县| 建德市| 中西区| 昌邑市| 丰县| 米泉市| 平武县| 惠州市| 资溪县| 弥渡县| 晋江市| 蒲城县| 光泽县| 墨竹工卡县| 招远市| 景谷| 营口市| 高安市| 北海市| 百色市| 谷城县| 平南县| 岑溪市| 蓝山县| 墨玉县| 湖口县| 乐陵市| 郎溪县| 宿松县|