Q11.
Arduino 程式碼如下,若PortD 外接8 個LED 正極,依位元高低序排列,低位元在左,高位元在右,此程式執行結果為
數位電子 · 甲級 · 程式語言 · Q11
難易度分析
3 / 5
題目要求辨識位元左右移位的互動與掃描方向的切換,需掌握PORTD直接輸出及迴圈控制,並排除單向掃描與循環停止的誤導,符合中等層次的結構性要求。
正確答案:①一次亮1 個LED,由左至右再由右至左來回循環顯示
① 一次亮1 個LED,由左至右再由右至左來回循環顯示:此為經典的 Knight Rider 掃描效果,程式利用 位元左移 (<<) 與 位元右移 (>>) 搭配 PORTD 直接輸出,使單一 LED 從低位元往高位元移動後再反向返回,形成雙向往復循環顯示。
錯誤選項解析
- ② 一次亮1 個LED,先由左至右再由右至左一個循環後停止:Arduino 的 loop() 函式 會無限重複執行,除非程式中明確加入停止條件或進入 休眠模式,否則掃描效果不會僅執行一次循環就停止。
- ③ 一次亮1 個LED,由左至右重覆顯示:若僅由左至右單向重複顯示,程式只需使用 位元左移 配合 循環位移 即可達成,但原程式碼包含反向掃描邏輯,因此此描述不完整。
- ④ 一次8 個LED 同時亮暗交替閃爍:若要使 8 個 LED 同時亮暗交替閃爍,只需對 PORTD 寫入 0xFF 與 0x00 交替即可,無需使用逐位元移動的迴圈結構。
Learning Tip
"此類題型重點在於辨識 位元運算方向 與 迴圈結構。PORTD 對應 Arduino 的 Digital Pin 0~7,直接操作暫存器比 digitalWrite() 更高效。常考陷阱包含混淆 單向掃描 與 雙向掃描 的程式邏輯差異,以及誤認 loop() 會自動停止。實務上需注意 PORTD 的 Pin 0 與 Pin 1 同時用於 UART 通訊,外接 LED 時可能干擾序列埠傳輸。"
學員答題分佈
①一次亮1 個LED,由左至右再由右至左來回循環顯示0%
②一次亮1 個LED,先由左至右再由右至左一個循環後停止0%
③一次亮1 個LED,由左至右重覆顯示0%
④一次8 個LED 同時亮暗交替閃爍0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!