xie2101 发表于 2025-9-11 14:51:42

02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序

1, 硬件连接方式:


2,烧录:




3. 查看例子说明




4. 查看原理图:



5. 实物对应位置:



xie2101 发表于 2025-9-11 15:02:29

例子 《03-用P6,P7口驱动8个数码管》


1. 硬件连接:



2. 烧写:




3. 原理图:




4.烧写完成后,可以查看实际效果:


5. 实际显示内容位一个数字时钟。


xie2101 发表于 2025-9-11 15:19:09



第一步:硬件连接:





第二步:烧写




第三步:查看例子说明




第4步:查看原理图




第5步:查看实物效果.




xie2101 发表于 2025-9-11 15:34:52



例子 17-NTC测温度数码管显示

1. 硬件连接: 略

2. 烧写:





3. 查看例子说明:




4.查看原理图:





5. 实物对照:




xie2101 发表于 2025-9-11 15:43:18

例子:25-高级PWM1-PWM2-PWM3-PWM4,驱动P6口呼吸灯实验程序






步骤1:硬件连接(略)
步骤2:烧写




步骤3:查看原理图:



步骤4:查看实物:




步骤5: 查看例子说明:



xie2101 发表于 2025-9-11 16:11:55

例子程序   29-红外遥控接收程序(NEC码)-数码管显示用户地址和键值


1、硬件连接:


2. 烧写



3、原理图 :


4. 查看例子说明




xie2101 发表于 2025-9-11 16:30:49





xie2101 发表于 2025-9-11 18:05:27

例子 15-IO行列扫描键盘数码管显示键值和调整时间

没有看懂下面这个读取方法


xie2101 发表于 2025-9-11 21:39:23

/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com-----------------------------------------*/
/* --- QQ:800003751 -------------------------------------------------*/
/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò            */
/*---------------------------------------------------------------------*/

/*************¹¦ÄÜ˵Ã÷    **************

±¾Àý³Ì»ùÓÚSTC32GΪÖ÷¿ØÐ¾Æ¬µÄʵÑéÏä½øÐбàд²âÊÔ¡£

ʹÓÃKeil C251±àÒëÆ÷£¬Memory ModelÍÆ¼öÉèÖÃXSmallģʽ£¬Ä¬È϶¨Òå±äÁ¿ÔÚedata£¬µ¥Ê±ÖÓ´æÈ¡·ÃÎÊËٶȿ졣

edata½¨Òé±£Áô1K¸ø¶ÑջʹÓ㬿ռ䲻¹»Ê±¿É½«´óÊý×é¡¢²»³£ÓñäÁ¿¼Óxdata¹Ø¼ü×Ö¶¨Òåµ½xdata¿Õ¼ä¡£

ÓÃSTCµÄMCUµÄIO·½Ê½Çý¶¯8λÊýÂë¹Ü¡£

ÏÔʾЧ¹ûΪ: ÊýÂëʱÖÓ.

ʹÓÃTimer0µÄ16λ×Ô¶¯ÖØ×°À´²úÉú1ms½ÚÅÄ,³ÌÐòÔËÐÐÓÚÕâ¸ö½ÚÅÄÏÂ,Óû§ÐÞ¸ÄMCUÖ÷ʱÖÓÆµÂÊʱ,×Ô¶¯¶¨Ê±ÓÚ1ms.

×ó±ß4λLEDÏÔʾʱ¼ä(Сʱ,·ÖÖÓ), ÓÒ±ß×îºóÁ½Î»ÏÔʾ°´¼üÖµ.

ADC°´¼ü¼üÂëΪ1~16.

°´¼üÖ»Ö§³Öµ¥¼ü°´ÏÂ, ²»Ö§³Ö¶à¼üͬʱ°´ÏÂ, ÄÇÑù½«»áÓв»¿ÉÔ¤ÖªµÄ½á¹û.

¼ü°´Ï³¬¹ý1Ãëºó,½«ÒÔ10¼ü/ÃëµÄËÙ¶ÈÌá¹©ÖØ¼üÊä³ö. Óû§Ö»ÐèÒª¼ì²âKeyCodeÊÇ·ñ·Ç0À´ÅжϼüÊÇ·ñ°´ÏÂ.

µ÷Õûʱ¼ä¼ü:
¼üÂë1: Сʱ+.
¼üÂë2: Сʱ-.
¼üÂë3: ·ÖÖÓ+.
¼üÂë4: ·ÖÖÓ-.

ÏÂÔØÊ±, Ñ¡ÔñʱÖÓ 24MHZ (Óû§¿É×ÔÐÐÐÞ¸ÄÆµÂÊ).

******************************************/

#include "..\..\comm\STC32G.h"

#include "stdio.h"
#include "intrins.h"

typedef   unsigned char   u8;
typedef   unsigned int    u16;
typedef   unsigned long   u32;

#define MAIN_Fosc      24000000UL

//==========================================================================


#define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 ÖÐ¶ÏÆµÂÊ, 1000´Î/Ãë

#define DIS_DOT   0x20
#define DIS_BLACK   0x10
#define DIS_      0x11


u8 code t_display[]={                     //±ê×¼×Ö¿â
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black-   H    J    K    L    N    o   P    U   t    G    Q    r   M    y
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //λÂë


u8LED8;      //ÏÔʾ»º³å
u8display_index;//ÏÔʾλË÷Òý
bit B_1ms;          //1ms±êÖ¾

u8ADC_KeyState,ADC_KeyState1,ADC_KeyState2,ADC_KeyState3; //¼ü״̬
u8ADC_KeyHoldCnt; //¼ü°´Ï¼ÆÊ±
u8KeyCode;    //¸øÓû§Ê¹ÓõļüÂë, 1~16ÓÐЧ
u8cnt10ms;

u8SndKeyCode;
u8hour,minute,second; //RTC±äÁ¿
u16 msecond;

void    CalculateAdcKey(u16 adc);
u16   Get_ADC12bitResult(u8 channel); //channel = 0~15
void    DisplayRTC(void);
void    RTC(void);

sbit    P_IR_TX   = P2^7;   //????????
#define IR_TX_ON    0
#define IR_TX_OFF   1
void PWM_config(void);
void SendIrNec(void);
/**********************************************/
void main(void)
{
    u8i;
    u16 j;

    WTST = 0;//ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

    P0M1 = 0x30;   P0M0 = 0x30;   //ÉèÖÃP0.4¡¢P0.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P1M1 = 0x31;   P1M0 = 0x30;   //ÉèÖÃP1.4¡¢P1.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V), P1.0 Ϊ ADC ¸ß×èÊäÈë¿Ú
    P2M1 = 0x3c;   P2M0 = 0x3c;   //ÉèÖÃP2.2~P2.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //ÉèÖÃP3.4¡¢P3.6Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //ÉèÖÃP4.2~P4.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //ÉèÖÃP5.2¡¢P5.3Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //ÉèÖÃΪ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

    PWM_config();
    P_IR_TX = IR_TX_OFF;
          
    display_index = 0;
   
    ADCTIM = 0x3f;      //ÉèÖà ADC ÄÚ²¿Ê±Ðò£¬ADC²ÉÑùʱ¼ä½¨ÒéÉè×î´óÖµ
    ADCCFG = 0x2f;      //ÉèÖà ADC ʱÖÓΪϵͳʱÖÓ/2/16/16
    ADC_CONTR = 0x80;   //ʹÄÜ ADC Ä£¿é

    AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
    TH0 = (u8)(Timer0_Reload / 256);
    TL0 = (u8)(Timer0_Reload % 256);
    ET0 = 1;    //Timer0 interrupt enable
    TR0 = 1;    //Tiner0 run
    EA = 1;   //´ò¿ª×ÜÖжÏ
   
    for(i=0; i<8; i++)LED8 = 0x10; //ÉϵçÏûÒþ

    hour   = 12;    //³õʼ»¯Ê±¼äÖµ
    minute = 0;
    second = 0;
    DisplayRTC();

    ADC_KeyState= 0;
    ADC_KeyState1 = 0;
    ADC_KeyState2 = 0;
    ADC_KeyState3 = 0;//¼ü״̬
    ADC_KeyHoldCnt = 0; //¼ü°´Ï¼ÆÊ±
    KeyCode = 0;    //¸øÓû§Ê¹ÓõļüÂë, 1~16ÓÐЧ
    cnt10ms = 0;

    while(1)
    {
      if(B_1ms)   //1msµ½
      {
            B_1ms = 0;
            if(++msecond >= 1000)   //1Ãëµ½
            {
                msecond = 0;
                RTC();
                DisplayRTC();
            }
            if(msecond == 500)DisplayRTC();   //СʱºóµÄСÊýµã×öÃëÉÁ

            if(++cnt10ms >= 10) //10ms¶ÁÒ»´ÎADC
            {
                cnt10ms = 0;
                j = Get_ADC12bitResult(0);//²ÎÊý0~15,²éѯ·½Ê½×öÒ»´ÎADC, ·µ»ØÖµ¾ÍÊǽá¹û, == 4096 Ϊ´íÎó
                if(j < 4096)    {
                  CalculateAdcKey(j); //¼ÆËã°´¼ü
                }
            }

            if(KeyCode > 0)   //Óмü°´ÏÂ
            {
                SndKeyCode=KeyCode;
                KeyCode = 0;
                LED8 = SndKeyCode / 10; //ÏÔʾ¼üÂë
                LED8 = SndKeyCode % 10; //ÏÔʾ¼üÂë
                SendIrNec();
                if(SndKeyCode == 1)    //hour +1
                {
                  if(++hour >= 24)    hour = 0;
                  DisplayRTC();
                }
                if(SndKeyCode == 2)    //hour -1
                {
                  if(--hour >= 24)    hour = 23;
                  DisplayRTC();
                }
                if(SndKeyCode == 3)    //minute +1
                {
                  second = 0;
                  if(++minute >= 60)minute = 0;
                  DisplayRTC();
                }
                if(SndKeyCode == 4)    //minute -1
                {
                  second = 0;
                  if(--minute >= 60)minute = 59;
                  DisplayRTC();
                }
            }
      }
    }
}
/**********************************************/


/********************** ÏÔʾʱÖÓº¯Êý ************************/
void DisplayRTC(void)
{
    if(hour >= 10)LED8 = hour / 10;
    else            LED8 = DIS_BLACK;
    LED8 = hour % 10;
    LED8 = minute / 10;
    LED8 = minute % 10;
    if(msecond >= 500)      LED8 |= DIS_DOT; //СʱºóµÄСÊýµã×öÃëÉÁ
}

/********************** RTCÑÝʾº¯Êý ************************/
void RTC(void)
{
    if(++second >= 60)
    {
      second = 0;
      if(++minute >= 60)
      {
            minute = 0;
            if(++hour >= 24)    hour = 0;
      }
    }
}


//========================================================================
// º¯Êý: u16 Get_ADC12bitResult(u8 channel)
// ÃèÊö: ²éѯ·¨¶ÁÒ»´ÎADC½á¹û.
// ²ÎÊý: channel: Ñ¡ÔñҪת»»µÄADC.
// ·µ»Ø: 12λADC½á¹û.
// °æ±¾: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC12bitResult(u8 channel)//channel = 0~15
{
    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xf0) | channel; //ÉèÖÃADCת»»Í¨µÀ
    ADC_START = 1;//Æô¶¯ADCת»»
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while(ADC_FLAG == 0);   //wait for ADC finish
    ADC_FLAG = 0;   //Çå³ýADC½áÊø±êÖ¾
    return(((u16)ADC_RES << 8) | ADC_RESL);
}

/***************** ADC¼üÅ̼ÆËã¼üÂë *****************************
µç·ºÍÈí¼þËã·¨Éè¼Æ: Coody
±¾ADC¼üÅÌ·½°¸Ôںܶàʵ¼Ê²úÆ·Éè¼ÆÖÐ, ÑéÖ¤ÁËÆäÎȶ¨¿É¿¿, ¼´Ê¹°´¼üʹÓõ¼µçĤ,¶¼ºÜ¿É¿¿.
16¸ö¼ü,ÀíÂÛÉϸ÷¸ö¼ü¶ÔÓ¦µÄADCֵΪ (4096 / 16) * k = 256 * k, k = 1 ~ 16, ÌØ±ðµÄ, k=16ʱ,¶ÔÓ¦µÄADCÖµÊÇ4095.
µ«ÊÇʵ¼Ê»áÓÐÆ«²î,ÔòÅжÏʱÏÞÖÆÕâ¸öÆ«²î, ADC_OFFSETΪ+-Æ«²î, ÔòADCÖµÔÚ (256*k-ADC_OFFSET) Óë (256*k+ADC_OFFSET)Ö®¼äΪ¼üÓÐЧ.
¼ä¸ôÒ»¶¨µÄʱ¼ä,¾Í²ÉÑùÒ»´ÎADC,±ÈÈç10ms.
ΪÁ˱ÜÃâżȻµÄADCÖµÎóÅÐ, »òÕß±ÜÃâADCÔÚÉÏÉý»òϽµÊ±ÎóÅÐ, ʹÓÃÁ¬Ðø3´ÎADCÖµ¾ùÔÚÆ«²î·¶Î§ÄÚʱ, ADCÖµ²ÅÈÏΪÓÐЧ.
ÒÔÉÏËã·¨, Äܱ£Ö¤¶Á¼ü·Ç³£¿É¿¿.
**********************************************/
#define ADC_OFFSET64
void CalculateAdcKey(u16 adc)
{
    u8i;
    u16 j;
   
    if(adc < (256-ADC_OFFSET))
    {
      ADC_KeyState = 0;   //¼ü״̬¹é0
      ADC_KeyHoldCnt = 0;
    }
    j = 256;
    for(i=1; i<=16; i++)
    {
      if((adc >= (j - ADC_OFFSET)) && (adc <= (j + ADC_OFFSET)))break;//ÅжÏÊÇ·ñÔÚÆ«²î·¶Î§ÄÚ
      j += 256;
    }
    ADC_KeyState3 = ADC_KeyState2;
    ADC_KeyState2 = ADC_KeyState1;
    if(i > 16)ADC_KeyState1 = 0;//¼üÎÞЧ
    else                        //¼üÓÐЧ
    {
      ADC_KeyState1 = i;
      if((ADC_KeyState3 == ADC_KeyState2) && (ADC_KeyState2 == ADC_KeyState1) &&
         (ADC_KeyState3 > 0) && (ADC_KeyState2 > 0) && (ADC_KeyState1 > 0))
      {
            if(ADC_KeyState == 0)   //µÚÒ»´Î¼ì²âµ½
            {
                KeyCode= i;   //±£´æ¼üÂë
                ADC_KeyState = i;   //±£´æ¼ü״̬
                ADC_KeyHoldCnt = 0;
            }
            if(ADC_KeyState == i)   //Á¬Ðø¼ì²âµ½Í¬Ò»¼ü°´×Å
            {
                if(++ADC_KeyHoldCnt >= 100) //°´ÏÂ1Ãëºó,ÒÔ10´ÎÿÃëµÄËÙ¶ÈRepeat Key
                {
                  ADC_KeyHoldCnt = 90;
                  KeyCode= i;   //±£´æ¼üÂë
                }
            }
            else ADC_KeyHoldCnt = 0; //°´ÏÂʱ¼ä¼ÆÊý¹é0
      }
    }
}


/********************** ÏÔʾɨÃ躯Êý ************************/
void DisplayScan(void)
{   
    P7 = ~T_COM;
    P6 = ~t_display];
    if(++display_index >= 8)    display_index = 0;//8λ½áÊø»Ø0
}


/********************** Timer0 1msÖжϺ¯Êý ************************/
void timer0 (void) interrupt 1
{
    DisplayScan();//1msɨÃèÏÔʾһλ
    B_1ms = 1;      //1ms±êÖ¾
}

#define User_code   0xFE01      //???????

static u16   tx_cnt;   //??????????(??38KHZ????,????), ?????38KHZ, ??26.3us
u8      TxTime;   //????

/************* ?????? **************/
void IR_TxPulse(u16 pulse)
{
    tx_cnt = pulse;
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x60; //?? PWM4 ??1 ??
    PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
    PWMA_IER = 0x10;   //????/?? 4 ??
    while(tx_cnt);
}

/************* ?????? **************/
void IR_TxSpace(u16 pulse)
{
    tx_cnt = pulse;
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x40; //?? PWM4 ???????
    PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
    PWMA_IER = 0x10;   //????/?? 4 ??
    while(tx_cnt);
}

/************* ?????? **************/
void IR_TxOff(void)
{
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x50; //?? PWM4 ???????
    PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
}

/************* ???????? **************/
void IR_TxByte(u8 dat)
{
    u8 i;
    for(i=0; i<8; i++)
    {
      if(dat & 1)   IR_TxSpace(63), TxTime += 2;    //??1?? 1.6875 + 0.5625 ms
      else            IR_TxSpace(21), TxTime++;       //??0?? 0.5625 + 0.5625 ms
      IR_TxPulse(21);         //????0.5625ms
      dat >>= 1;            //????
    }
}

//========================================================================
// ??: void   PWM_config(void)
// ??: PCA????.
// ??: None
// ??: none.
// ??: V1.0, 2012-11-22
//========================================================================
void PWM_config(void)
{
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x60; //?? PWM4 ??1 ??
    //PWMA_CCER2 = 0xB0; //?? CC4E ??, ?????

    PWMA_ARRH = 0x02; //??????
    PWMA_ARRL = 0x77;
    PWMA_CCR4H = 0;
    PWMA_CCR4L = 210; //???????

    PWMA_PS = 0x40;//?? PWM ?? 4N ??????, 0x00:P1.7, 0x40:P2.7, 0x80:P6.7, 0xC0:P3.3
//PWMA_PS = 0x40;//?? PWM ?? 4P ??????, 0x00:P1.6, 0x40:P2.6, 0x80:P6.6, 0xC0:P3.4
    PWMA_ENO = 0x80; //?? PWM4N ??
//PWMA_ENO = 0x40; //?? PWM4P ??
    PWMA_BKR = 0x80; //?????
//    PWMA_IER = 0x10; //????
    PWMA_CR1 |= 0x81;//??ARR???,????
}

/******************* PWM???? ********************/
void PWMA_ISR() interrupt PWMA_VECTOR
{
    if(PWMA_SR1 & 0X10)
    {
      PWMA_SR1 &=~0X10;
      //PWMA_SR1 = 0;
      if(--tx_cnt == 0)
      {
            PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
            PWMA_CCMR4 = 0x40; //?? PWM4 ???????
            PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
            PWMA_IER = 0x00;   // ????
      }
    }
}

//========================================================================
// ??: void delay_ms(unsigned char ms)
// ??: ?????
// ??: ms,????ms?, ?????1~255ms. ???????.
// ??: none.
// ??: VER1.0
// ??: 2013-4-1
// ??:
//========================================================================
void delay_ms(u8 ms)
{
   u16 i;
   do{
          i = MAIN_Fosc / 6000;
          while(--i);
   }while(--ms);
}

void StartIrNec()
{
      
}

void SendIrNec()
{
    if(SndKeyCode != 0)      //?????
    {

      hour = User_code/256;
      minute = User_code%256;
      second = SndKeyCode;

      TxTime = 0;

      //???????? = 9 + 4.5 + 0.5625 + 24 * 1.125 + 8 * 2.25 = 59.0625 ms
      //???????? = 9 + 4.5 + 0.5625 + 8 * 1.125 + 24 * 2.25 = 77.0625 ms
      IR_TxPulse(342);    //??9ms,???       9ms
      IR_TxSpace(171);    //??4.5ms,????? 4.5ms
      IR_TxPulse(21);   //??????          0.5625ms

      IR_TxByte(User_code%256);   //???????
      IR_TxByte(User_code/256);   //???????
      IR_TxByte(SndKeyCode);         //???
      IR_TxByte(~SndKeyCode);      //?????

      if(TxTime < 56)   //?????77ms??, ????,????   108ms
      {
            TxTime = 56 - TxTime;
            TxTime = TxTime + TxTime / 8;
            delay_ms(TxTime);
      }
      delay_ms(31);
      IR_TxOff();         //??????
      SndKeyCode = 0;
    }
}

xie2101 发表于 2025-9-11 23:01:40

89-USB CDC转双串口-做自动停电上电烧录器


步骤1:硬件连接(用usb连接电脑)

步骤2:


步骤3:原理图和实物



步骤4:例子说明


步骤5:验证无效果,目前不清楚为什么?



页: 1 2 3 [4] 5
查看完整版本: 学习实验箱-V9.6视频