FF FE 模塊ID 參數1 參數2 保留 FD FC
模塊ID: 00=步進電機, 01=LED, 02=蜂鳴器
步進電機: 參數1=方向(0正/1反), 參數2=速度(0停止/1-255)
LED: 參數1=位模式(位運算控制 8 燈), 參數2=啟用標誌
蜂鳴器: 參數1/2 無意義,收到即啟動
// 外部中斷 INT0 響應速度調整
void ISR_INT0() interrupt 0 {
Speed = rx_buf[4];
dir = rx_buf[3];
update_display();
}
// 定時器 0 掃描數碼管顯示
void Timer0_isr() interrupt 1 {
TH0 = (65536-2000)/256; TL0 = (65536-2000)%256;
display_scan();
}
// 步進電機狀態機(八拍)
void rotate() {
while (steps-- && dir==0) { // 正向
Coil_A1; delay(Speed); Coil_AB1; delay(Speed);
Coil_B1; delay(Speed); Coil_BC1; delay(Speed);
Coil_C1; delay(Speed); Coil_CD1; delay(Speed);
Coil_D1; delay(Speed); Coil_DA1; delay(Speed);
}
// 反向邏輯對稱...
}
// LED 呼吸燈(PWM 模擬)
void led_breath() {
for (pwm=1; pwm<CYCLE; pwm++) { P0=pattern; delay(pwm); P0=0xFF; delay(CYCLE-pwm); }
for (pwm=CYCLE-1; pwm>0; pwm--) { P0=pattern; delay(pwm); P0=0xFF; delay(CYCLE-pwm); }
}
byte[] data = new byte[8] {0xFF,0xFE, module, param1, param2, 0, 0xFD,0xFC};
serialPort.Write(data, 0, 8);
受限於定時器數量,僅實現三模塊控制;若需擴展可考慮軟件定時器或升級 MCU。