亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6|回復: 0
收起左側

STC32G12K128單片機數字音頻濾波器制作 附程序

[復制鏈接]
ID:1136941 發表于 2026-6-12 11:10 | 顯示全部樓層 |閱讀模式
原先用STC8H8K64U,但是用于復雜運算性能實在是免為其難,沒有成功。現在改用STC32G12K128后終于成功,程序也是在原先基礎上稍微修改,做這個裝置是為了接收疊加有較強噪音的單音CW信號,使聲音更清晰。

制作出來的實物圖如下:
IMG_20260612_002257.jpg

電路原理圖如下:
2345截圖20260612102933.png

單片機源程序如下:
  1. /**
  2. * 單片機數字音頻帶通濾波器
  3. * ADC: 12位
  4. * 采樣率: 8KHz
  5. * 輸出: PWM
  6. * 功能: 帶寬、中心頻率可調
  7. */
  8. #include <STC32G.h>
  9. #include <intrins.h>
  10. //#include <stdint.h>
  11. #define uint8_t unsigned char
  12. #define uint16_t unsigned int
  13. #define uint32_t unsigned long
  14.         
  15. unsigned char Table[]="0123456789";
  16. unsigned char freq_num[4];// 頻率  
  17. unsigned char  bw_num[4];//帶寬

  18. uint16_t center_bm=100;//默認帶寬100hz
  19. uint16_t center_freq=1000;//默認頻率1000HZ
  20. bit flag=1;

  21. //-------定義PWM輸出引腳------------
  22. #define PWM1_0 0X00  //P:P1.0,N:P1.1
  23. #define PWM1_1 0X01  //P:P2.0,N:P2.1
  24. #define PWM1_2 0X02  //P:P6.0,N:P6.1

  25. #define PWM2_0 0X00  //P:P1.2/P5.4,N:P1.3
  26. #define PWM2_1 0X04  //P:P2.2,N:P2.3
  27. #define PWM2_2 0X08  //P:P6.2,N:P6.3

  28. #define PWM3_0 0X00  //P:P1.4,N:P1.5
  29. #define PWM3_1 0X10  //P:P2.4,N:P2.5
  30. #define PWM3_2 0X20  //P:P6.4,N:P6.5

  31. #define PWM4_0 0X00  //P:P1.6,N:P1.7
  32. #define PWM4_1 0X40  //P:P2.6,N:P2.7
  33. #define PWM4_2 0X80  //P:P6.6,N:P6.7
  34. #define PWM4_3 0XC0  //P:P3.4,N:P3.3

  35. #define ENO1P 0X01
  36. #define ENO1N 0X02
  37. #define ENO2P 0X04
  38. #define ENO2N 0X08
  39. #define ENO3P 0X10
  40. #define ENO3N 0X20
  41. #define ENO4P 0X40
  42. #define ENO4N 0X80

  43. // 按鍵定義
  44. sbit KEY_FREQ_UP = P3^0;   // 頻率增加
  45. sbit KEY_FREQ_DOWN = P3^1; // 頻率減少
  46. sbit KEY_Q_UP = P3^2;      // Q值增加
  47. sbit KEY_Q_DOWN = P3^3;    // Q值減少

  48. sbit RS=P2^5; //定義rs端口
  49.               // RW 接地
  50. sbit EN=P2^3; //定義en端口
  51. sbit LCD_D4=P4^2;
  52. sbit LCD_D5=P4^1;
  53. sbit LCD_D6=P3^7;
  54. sbit LCD_D7=P3^6;
  55. /* ==================== 配置參數 ==================== */
  56. #define SAMPLE_RATE     8000UL   // 采樣率 8KHz
  57. #define ADC_MAX         4095     // 12位ADC最大值
  58. #define PWM_MAX         255      // 8位PWM最大值

  59. /* ==================== 濾波器結構體 ==================== */
  60. typedef struct {
  61.     // 濾波器系數
  62.     float b0, b1, b2;    // 分子系數
  63.     float a1, a2;        // 分母系數 (a0 = 1)

  64.     // 延遲單元
  65.     float x1, x2;        // 輸入延遲
  66.     float y1, y2;        // 輸出延遲

  67.     // 濾波器參數
  68.     float center_freq;   // 中心頻率 (Hz)
  69.     float bandwidth;     // 帶寬 (Hz)

  70. } BandpassFilter;

  71. /* 全局濾波器實例 */
  72. BandpassFilter g_filter;

  73. /* ==================== 數學工具函數 ==================== */

  74. /**
  75. * 簡化的正弦近似 (適用于資源受限的單片機)
  76. * 使用泰勒級數展開
  77. */
  78. float sin_approx(float x) {
  79.         
  80.           float x2;
  81.     // 將x歸一化到 [-π, π]
  82.     while (x > 3.14159265f) x -= 6.2831853f;
  83.     while (x < -3.14159265f) x += 6.2831853f;

  84.     // 泰勒級數: sin(x) ≈ x - x3/6 + x?/120
  85.     x2 = x * x;
  86.     return x * (1.0f - x2 / 6.0f * (1.0f - x2 / 20.0f));
  87. }

  88. /**
  89. * 余弦近似
  90. */
  91. float cos_approx(float x) {
  92.     return sin_approx(x + 1.5707963f);
  93. }

  94. /**
  95. * 平方根近似 (牛頓迭代法)
  96. */
  97. float sqrt_approx(float x) {
  98.         
  99.           float guess;
  100.           uint8_t i;
  101.     if (x <= 0.0f) return 0.0f;

  102.     guess = x * 0.5f;
  103.     for (i = 0; i < 5; i++) {
  104.         guess = (guess + x / guess) * 0.5f;
  105.     }
  106.     return guess;
  107. }

  108. /* ==================== 濾波器核心函數 ==================== */

  109. /**
  110. * 計算帶通濾波器系數
  111. * 使用雙二階IIR濾波器 (Biquad)
  112. * @param filter: 濾波器實例指針
  113. * @param center_freq: 中心頻率 (Hz)
  114. * @param bandwidth: 帶寬 (Hz)
  115. */
  116. void BandpassFilter_UpdateCoeffs(BandpassFilter* filter, float center_freq, float bandwidth) {
  117.         
  118.           float omega;
  119.           float sin_omega;
  120.           float cos_omega;
  121.           float alpha;
  122.           float a0;
  123.           float Q;
  124.     // 參數邊界檢查
  125.     if (center_freq < 20.0f) center_freq = 20.0f;
  126.     if (center_freq > (SAMPLE_RATE / 2.5f)) center_freq = SAMPLE_RATE / 2.5f;
  127.     if (bandwidth < 10.0f) bandwidth = 10.0f;
  128.     if (bandwidth > center_freq) bandwidth = center_freq;

  129.     filter->center_freq = center_freq;
  130.     filter->bandwidth = bandwidth;

  131.     // 角頻率
  132.     omega = 2.0f * 3.14159265f * center_freq / SAMPLE_RATE;
  133.     sin_omega = sin_approx(omega);
  134.     cos_omega = cos_approx(omega);

  135.     // Q值計算: Q = center_freq / bandwidth
  136.     Q = center_freq / bandwidth;
  137.     if (Q > 20.0f) Q = 20.0f;  // 限制Q值防止不穩定
  138.     if (Q < 0.5f) Q = 0.5f;

  139.     // 計算alpha
  140.     alpha = sin_omega / (2.0f * Q);

  141.     // 帶通濾波器系數 (恒定0dB峰值增益)
  142.     // b0 = alpha
  143.     // b1 = 0
  144.     // b2 = -alpha
  145.     // a0 = 1 + alpha
  146.     // a1 = -2*cos(omega)
  147.     // a2 = 1 - alpha

  148.     a0 = 1.0f + alpha;

  149.     filter->b0 = alpha / a0;
  150.     filter->b1 = 0.0f;
  151.     filter->b2 = -alpha / a0;
  152.     filter->a1 = -2.0f * cos_omega / a0;
  153.     filter->a2 = (1.0f - alpha) / a0;
  154. }

  155. /**
  156. * 初始化濾波器
  157. */
  158. void BandpassFilter_Init(BandpassFilter* filter) {
  159.     filter->x1 = 0.0f;
  160.     filter->x2 = 0.0f;
  161.     filter->y1 = 0.0f;
  162.     filter->y2 = 0.0f;
  163.     filter->center_freq = 1000.0f;
  164.     filter->bandwidth = 200.0f;

  165.     // 計算初始系數
  166.     BandpassFilter_UpdateCoeffs(filter, filter->center_freq, filter->bandwidth);
  167. }

  168. /**
  169. * 濾波器處理 (Direct Form II Transposed)
  170. * @param filter: 濾波器實例指針
  171. * @param input: 輸入樣本 (歸一化到 -1.0 ~ 1.0)
  172. * @return: 濾波后輸出 (歸一化)
  173. */
  174. float BandpassFilter_Process(BandpassFilter* filter, float input) {
  175.     // Direct Form II Transposed 結構
  176.     // y = b0*x + s1
  177.     // s1 = b1*x - a1*y + s2
  178.     // s2 = b2*x - a2*y

  179.     float output = filter->b0 * input + filter->y1;

  180.     filter->y1 = filter->b1 * input - filter->a1 * output + filter->y2;
  181.     filter->y2 = filter->b2 * input - filter->a2 * output;

  182.     return output;
  183. }

  184. /* ==================== 硬件抽象層 (需根據具體單片機修改) ==================== */

  185. /**
  186. * ADC初始化
  187. * 需要根據具體單片機修改
  188. */
  189. void ADC_Init(void) {
  190.         
  191.     ADCCFG = ADCCFG | 0X20;
  192.           ADC_CONTR = 0X80;
  193. }

  194. /**
  195. * 讀取ADC值
  196. * @return: 12位ADC值 (0-4095)
  197. */
  198. uint16_t ADC_Read(uint8_t ch) {//P1.0
  199.         
  200.           ADC_RES = 0;
  201.           ADC_RESL = 0;
  202.           ADC_CONTR = (ADC_CONTR & 0XE0) | 0X40 | ch;
  203.           _nop_();
  204.           _nop_();
  205.     _nop_();
  206.     _nop_();
  207.           while((ADC_CONTR & 0X20) == 0);
  208.           ADC_CONTR &= ~0X20;
  209.           return (((unsigned int)ADC_RES<<8) | ADC_RESL);
  210. }

  211. /**
  212. * PWM初始化
  213. * 需要根據具體單片機修改
  214. */
  215. void PWM_Init(void) {
  216.         
  217.   P_SW2 |=0X80;
  218.         PWMA_CCER1 = 0X00;
  219.   PWMA_CCER2 = 0X00;
  220.   PWMA_CCMR1 = 0X60;
  221.   PWMA_CCMR2 = 0X60;
  222.   PWMA_CCMR3 = 0X60;
  223.   PWMA_CCMR4 = 0X60;
  224.   PWMA_CCER1 = 0X55;
  225.   PWMA_CCER2 = 0X55;
  226.   PWMA_ARRH = 0X02; //設置周期24000000hz/32000-1=749
  227.   PWMA_ARRL = 0XED; //749/32KHZ
  228.   PWMA_ENO = 0X00;   
  229.   PWMA_ENO |= ENO1P;  //使能輸出
  230. //  PWMA_ENO |= ENO2P;  //使能輸出
  231.   PWMA_PS = 0X00;     //PWM通道輸出引腳選擇位
  232.   PWMA_PS |= PWM1_1;  //選擇PWM1_1通道/P2.0
  233. //  PWMA_PS |= PWM2_1;  //選擇PWM2_1通道/P2.2
  234.         PWMA_BKR = 0X80;    //使能主輸出
  235.         PWMA_CR1 |= 0X01;   //開始計時
  236.         P_SW2 &= 0X7F;
  237. }

  238. /**
  239. * 設置PWM占空比
  240. *
  241. */
  242. void PWM_SetDuty(uint16_t duty) {//P2.0
  243.         
  244.         P_SW2 |=0X80;
  245.         PWMA_CCR1H = (uint8_t)(duty >> 8);
  246.         PWMA_CCR1L = (uint8_t)(duty);
  247.         P_SW2 &= 0X7F;
  248. }

  249. /**
  250. * 定時器初始化 (用于8KHz采樣中斷)
  251. */
  252. void Timer_Init(void) {
  253.         
  254.         AUXR |= 0x80;                        //定時器時鐘1T模式
  255.         TMOD &= 0xF0;                        //設置定時器模式
  256.         TL0 = 0x48;                                //設置定時初始值125us/8khz@24mhz
  257.         TH0 = 0xF4;                                //設置定時初始值
  258.         TF0 = 0;                                //清除TF0標志
  259.         TR0 = 1;                                //定時器0開始計時
  260.         ET0 = 1;                                //使能定時器0中斷
  261. }

  262. /* ==================== 主處理函數 ==================== */

  263. /**
  264. * 音頻處理函數 (在8KHz定時器中斷中調用)
  265. */
  266. void Audio_Process_ISR(void) {
  267.         
  268.           uint8_t pwm_duty;
  269.           uint16_t adc_raw;
  270.           float sample;
  271.           float filtered;
  272.     // 1. 讀取ADC (12位: 0-4095)
  273.     adc_raw = ADC_Read(0);//P1.0
  274.         
  275.           adc_raw = adc_raw << 4;

  276.     // 2. 歸一化到 -1.0 ~ 1.0 (去除直流偏置)
  277.     sample = ((float)adc_raw - 2048.0f) / 2048.0f;

  278.     // 3. 帶通濾波
  279.     filtered = BandpassFilter_Process(&g_filter, sample);

  280.     // 4. 限幅保護
  281.     if (filtered > 1.0f) filtered = 1.0f;
  282.     if (filtered < -1.0f) filtered = -1.0f;

  283.     // 5. 轉換為PWM占空比 (0-255)
  284.     // 將 -1~1 映射到 0~255
  285.     pwm_duty = (uint8_t)((filtered + 1.0f) * 127.5f);

  286.     // 6. PWM輸出
  287.     PWM_SetDuty(pwm_duty);
  288. }

  289. /* ==================== 用戶接口函數 ==================== */

  290. /**
  291. * 設置中心頻率
  292. * @param freq: 中心頻率 (Hz)
  293. */
  294. void SetCenterFrequency(float freq) {
  295.     BandpassFilter_UpdateCoeffs(&g_filter, freq, g_filter.bandwidth);
  296. }

  297. /**
  298. * 設置帶寬
  299. * @param bw: 帶寬 (Hz)
  300. */
  301. void SetBandwidth(float bw) {
  302.     BandpassFilter_UpdateCoeffs(&g_filter, g_filter.center_freq, bw);
  303. }

  304. /**
  305. * 同時設置中心頻率和帶寬
  306. */
  307. void SetFilterParams(float center_freq, float bandwidth) {
  308.     BandpassFilter_UpdateCoeffs(&g_filter, center_freq, bandwidth);
  309. }

  310. //-------------------1602--------------------------//
  311. void delay_5us(void)
  312. {
  313.         unsigned char data i;

  314.         _nop_();
  315.         i = 11;
  316.         while (--i);
  317. }

  318. //----------------------------------------------
  319. void delay_nus(uint8_t n)//N us延時函數
  320.   {
  321.    uint8_t i=0;
  322.                
  323.    for (i=0;i<n;i++){_nop_();_nop_();_nop_();}
  324. }
  325.         
  326. void Delay1ms(void)        
  327. {
  328.         unsigned char data i, j;

  329.         _nop_();
  330.         _nop_();
  331.         _nop_();
  332.         i = 11;
  333.         j = 190;
  334.         do
  335.         {
  336.                 while (--j);
  337.         } while (--i);
  338. }

  339. //------------------------------
  340. void del_ms(uint8_t n)//ms延時函數
  341. {
  342.         uint8_t j;
  343.         
  344.   for(j=0;j<n;j++){Delay1ms();}
  345. }
  346. //------------------------------

  347. void LCD_en_write(void) //液晶使能
  348. {
  349.      delay_5us();
  350.            delay_5us();
  351.            delay_5us();
  352.            delay_5us();
  353.            delay_5us();
  354.            delay_5us();
  355.            delay_5us();
  356.            delay_5us();
  357.      EN=1;
  358.      delay_5us();
  359.            delay_5us();
  360.            delay_5us();
  361.            delay_5us();
  362.            delay_5us();
  363.            delay_5us();
  364.            delay_5us();
  365.            delay_5us();        
  366.      EN=0;        
  367. }
  368. //---------------------------------------
  369. void LCD_by(uint8_t abc)//寫字節
  370. {
  371.     delay_nus(1000);
  372.     if(((abc<<0)&0x80)==0)     
  373.      LCD_D7=0;            
  374.      else LCD_D7=1;         
  375.     if(((abc<<1)&0x80)==0)     
  376.      LCD_D6=0;              
  377.      else LCD_D6=1;        
  378.     if(((abc<<2)&0x80)==0)     
  379.      LCD_D5=0;              
  380.      else LCD_D5=1;        
  381.     if(((abc<<3)&0x80)==0)     
  382.      LCD_D4=0;              
  383.      else LCD_D4=1;        
  384.     LCD_en_write();

  385.     if(((abc<<4)&0x80)==0)     
  386.      LCD_D7=0;              
  387.      else LCD_D7=1;         
  388.     if(((abc<<5)&0x80)==0)     
  389.      LCD_D6=0;              
  390.      else LCD_D6=1;         
  391.     if(((abc<<6)&0x80)==0)     
  392.      LCD_D5=0;              
  393.      else LCD_D5=1;         
  394.     if(((abc<<7)&0x80)==0)     
  395.      LCD_D4=0;              
  396.      else LCD_D4=1;         
  397.     LCD_en_write();
  398. }
  399. //----------------------------------------------
  400. void LCD_set_xy( uint8_t x, uint8_t y )//寫地址函數
  401.   {
  402.     uint8_t address;
  403.     if (y == 0) address = 0x80 + x;
  404.     else
  405.     address = 0xc0 + x;
  406.     RS=0;           
  407.     LCD_by(address);
  408.   }
  409. //---------------------------------------------
  410. void LCD_write_str(uint8_t X,uint8_t Y,uint8_t *s)//寫字符串
  411.   {
  412.     LCD_set_xy(X,Y);
  413.     RS=1;
  414.     while(*s)
  415.     {
  416.        LCD_by(*s);
  417.        s++;
  418.     }
  419.   }
  420. //------------------------------------
  421. void LCD_init(void)     //液晶初始化
  422. {
  423.     RS=0;            
  424.     del_ms(500);

  425.     LCD_by(0x30);
  426.     del_ms(60);
  427.     LCD_by(0x30);
  428.     del_ms(10);
  429.     LCD_by(0x30);
  430.     del_ms(10);
  431.     LCD_by(0x02);
  432.     del_ms(10);
  433.     LCD_by(0x28);//4bit test顯示模式設置(不檢測忙信號)
  434.     del_ms(10);
  435.     LCD_by(0x08);// 顯示關閉
  436.     del_ms(10);
  437.     LCD_by(0x01);// 顯示清屏
  438.     del_ms(10);
  439.     LCD_by(0x06);// 顯示光標不移動設置//移動0x04
  440.     del_ms(10);
  441.     LCD_by(0x0C);// 顯示開及光標設置
  442.     del_ms(100);
  443. }

  444. //----------------頻率------------------------
  445. void display_F(unsigned char x, unsigned char y)
  446. {
  447.   unsigned char i;
  448.   LCD_set_xy( x, y );
  449.   RS=1;         
  450.   for(i=0;i<4;i++)
  451.   {
  452.           LCD_by(Table[freq_num[i]]);
  453.   }
  454. }

  455. //------------------帶寬-----------------------
  456. void display_Bm(unsigned char x, unsigned char y)
  457. {
  458.   unsigned char i;
  459.   LCD_set_xy( x, y );
  460.   RS=1;         
  461.   for(i=0;i<4;i++)
  462.   {
  463.           LCD_by(Table[bw_num[i]]);
  464.   }
  465. }

  466. /*************** 按鍵掃描 ***************/
  467. void KeyScan(void) {

  468.     // 頻率增加
  469.     if(KEY_FREQ_UP == 0) {
  470.        del_ms(50);
  471.                          center_freq=center_freq+50;
  472.                          if(center_freq>=3000)center_freq=3000;
  473.                          while(KEY_FREQ_UP==0);
  474.                          flag=1;
  475.     }
  476.     // 頻率減少
  477.     else if(KEY_FREQ_DOWN == 0) {
  478.        del_ms(50);
  479.                          center_freq=center_freq-50;
  480.                          if(center_freq<=300)center_freq=300;
  481.                          while(KEY_FREQ_DOWN==0);
  482.                          flag=1;
  483.     }
  484.                         
  485.     // 帶寬增加
  486.     if(KEY_Q_UP == 0) {
  487.        del_ms(50);
  488.                          center_bm=center_bm+50;
  489.                          if(center_bm>=3000)center_bm=3000;
  490.                          while(KEY_Q_UP==0);
  491.                          flag=1;
  492.     }
  493.     // 帶寬減少
  494.     else if(KEY_Q_DOWN == 0) {
  495.        del_ms(50);
  496.                          center_bm=center_bm-50;
  497.                          if(center_bm<=50)center_bm=50;
  498.                          while(KEY_Q_DOWN == 0);
  499.                          flag=1;
  500.     }
  501. }

  502. /*************** 狀態顯示 ***************/
  503. void DisplayStatus(void) {        
  504.          
  505.                   freq_num[0] = center_freq%10000/1000;
  506.             freq_num[1] = center_freq%1000/100;
  507.             freq_num[2] = center_freq%100/10;
  508.             freq_num[3] = center_freq%10;
  509.             
  510.             bw_num[0] = center_bm%10000/1000;
  511.             bw_num[1] = center_bm%1000/100;
  512.             bw_num[2] = center_bm%100/10;
  513.             bw_num[3] = center_bm%10;
  514.         
  515.           if(flag==1)
  516.                 {
  517.             SetCenterFrequency(center_freq);// 中心頻率
  518.       SetBandwidth(center_bm);          // 帶寬
  519.                
  520.         // 更新頻率顯示
  521.                   LCD_write_str(0,0,"Freq:");
  522.       display_F(7,0);
  523.       LCD_write_str(14,0,"Hz");
  524.                         
  525.                           // 更新帶寬顯示
  526.                         LCD_write_str(0,1,"Bw:");
  527.       display_Bm(7,1);
  528.                         LCD_write_str(14,1,"Hz");
  529.                                 
  530.                         flag=0;
  531.     }
  532. }
  533. /* ==================== 主程序 ==================== */

  534. /**
  535. * 系統初始化
  536. */
  537. void System_Init(void) {

  538.     P0M0 = 0x00; P0M1 = 0x00;
  539.     P1M0 = 0x00; P1M1 = 0x01;
  540.     P2M0 = 0x01; P2M1 = 0x00;  
  541.     P3M0 = 0x00; P3M1 = 0x00;
  542.           P4M0 = 0x00; P4M1 = 0x00;
  543.     P5M0 = 0x00; P5M1 = 0x00;
  544.         
  545.           EAXFR = 1;
  546.           WTST = 0;
  547.           CKCON = 0;
  548.     // 初始化濾波器
  549.     BandpassFilter_Init(&g_filter);

  550.     // 初始化硬件
  551.     ADC_Init();
  552.     PWM_Init();
  553.     Timer_Init();
  554.     LCD_init();
  555.           del_ms(100);
  556.     EA=1;
  557. }

  558. /**
  559. * 主函數
  560. */
  561. void main(void) {
  562.     // 系統初始化
  563.     System_Init();

  564.     // 設置初始濾波器參數 (示例: 中心頻率1KHz, 帶寬100Hz)
  565.     SetFilterParams(1000.0f, 100.0f);

  566.     // 主循環
  567.     while (1) {
  568.         KeyScan();
  569.         DisplayStatus();

  570.                     P00=~P00;
  571.     }
  572. }

  573. /* ==================== 中斷服務程序示例 ==================== */

  574. /**
  575. * 定時器中斷服務程序 (8KHz)
  576. * 需要根據具體單片機修改中斷向量
  577. */
  578. void audio_isr(void) interrupt 1 {

  579.          // 調用音頻處理
  580.          Audio_Process_ISR();
  581. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表