首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

單片機與 C# 上位機通訊:步進電機、LED 呼吸燈與蜂鳴器控制

     編輯:關於C語言

系統架構

  • 上位機:C# WinForm,透過串口發送 8 字節自定義協議指令。
  • 下位機:STC89C52 單片機,接收指令控制步進電機正反轉/轉速、LED 燈呼吸閃爍、蜂鳴器發聲。

通訊協議(8 字節)

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); }
}

C# 上位機發送示例

byte[] data = new byte[8] {0xFF,0xFE, module, param1, param2, 0, 0xFD,0xFC};
serialPort.Write(data, 0, 8);

硬體限制

受限於定時器數量,僅實現三模塊控制;若需擴展可考慮軟件定時器或升級 MCU。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved