|
【功能設(shè)計(jì)】
使用IAP15W4K58S4單片機(jī)、數(shù)碼管和NTC3435熱敏電阻、DC12V直流加熱棒(帶驅(qū)動(dòng)板)組成一個(gè)自動(dòng)加熱系統(tǒng)。可以手動(dòng)設(shè)定目標(biāo)溫度(30℃~90℃),設(shè)置步進(jìn)1攝氏度。
請(qǐng)使用者僅用于參考學(xué)習(xí),不要用于商業(yè)。
【使用流程描述】
1.上電程序會(huì)輪流顯示設(shè)定溫度和實(shí)際溫度。配有指示燈表示當(dāng)前所顯示的是哪一個(gè)。
2.任意時(shí)刻按下增加或減少按鍵,程序進(jìn)入設(shè)置模式,顯示設(shè)定值并保持。后臺(tái)加熱仍然以原設(shè)置值為準(zhǔn)。
3.當(dāng)按下確定鍵且設(shè)定溫度在有效范圍內(nèi)時(shí),程序裝載新設(shè)置值并進(jìn)行自動(dòng)調(diào)整,否則恢復(fù)原值。按下取消鍵也恢復(fù)原值。
4.降溫操作通過(guò)被動(dòng)散熱進(jìn)行,所以會(huì)比較慢。
5.后續(xù)需求有所變化,增加一個(gè)串口輸出,傳遞設(shè)置值和實(shí)際值給遠(yuǎn)端單片機(jī)顯示。
【主機(jī)參數(shù)設(shè)置】
0.MCU型號(hào)IAP15W4K58S4,頻率11.0592MHz,下載程序時(shí)注意勾選“在程序區(qū)的結(jié)束處添加重要測(cè)試參數(shù)”。
1.ADC使用片內(nèi)ADC,10位精度,使用內(nèi)部基準(zhǔn)源校正采集值。
2.PID部分借用他人程序,針對(duì)此設(shè)計(jì)做了調(diào)整
。參考程序來(lái)源已不可考,故不貼出。
3.NTC電阻采用B值3435防水型號(hào),其查表程序?yàn)楸救怂鶎懀斍檎?qǐng)查閱對(duì)應(yīng)C文件(移植很方便)。
4.串口設(shè)置9600 8N1。
【從機(jī)參數(shù)設(shè)置】
1.型號(hào)STC15W408AS,頻率11.0592MHz。
2.從機(jī)使用IIC轉(zhuǎn)并口的轉(zhuǎn)接板連接LCD1602,極大地節(jié)約了IO口的使用。
PCF8574.png (128.02 KB, 下載次數(shù): 109)
下載附件
2019-8-7 13:32 上傳
這個(gè)小板原本為在Arduino上使用而設(shè)計(jì)的,但是既然遵守IIC協(xié)議,并且只是PCF8574芯片通信,那么51也可以才對(duì)。經(jīng)過(guò)查找,在百度貼吧上找到了使用其驅(qū)動(dòng)LCD1602的程序,并且重新排版編寫使之清晰明了,工程中的LCD1602_IIC.c即為此轉(zhuǎn)接板的驅(qū)動(dòng)程序。
【實(shí)物快照】
IMG_20190807_133513.jpg (3.09 MB, 下載次數(shù): 106)
下載附件
2019-8-7 13:38 上傳
顯示部分會(huì)隨著主機(jī)的顯示進(jìn)行更新
IMG_20190807_133510.jpg (3.18 MB, 下載次數(shù): 90)
下載附件
2019-8-7 13:39 上傳
白天照的不清晰,數(shù)碼管由于直連IO推挽方式驅(qū)動(dòng)所以有些段選有殘影。單片機(jī)PWM和加熱部分之間使用MOS管驅(qū)動(dòng),供電12V。
【主機(jī)主程序】
- #include"STC15.H" //單片機(jī)寄存器定義
- #include"Binary.H" //提供二進(jìn)制輸入
- #include<intrins.h> //提供_nop_函數(shù)
- #include"NTC3435.c" //提供NTC查詢表
- sbit Key_Add=P1^5;//設(shè)定值+
- sbit Key_Subtract=P1^6;//設(shè)定值-
- sbit Key_Submit=P1^7;//確定修改
- sbit Key_Cancel=P5^5;//取消修改
- sbit LED_Red=P3^6;//用于指示當(dāng)前顯示的溫度為設(shè)定值
- sbit LED_Green=P3^7;//用于指示當(dāng)前顯示的溫度為測(cè)得值
- sbit S1=P4^5;
- sbit S2=P4^2;
- sbit S3=P4^4;//數(shù)碼管位選
- sbit PWM_FC=P1^0;//PWM輸出引腳
- //初始化變量
- unsigned int code Voltage_BandGap_ROM _at_ 0xe7f7;//58K程序空間的MCU
- //全局變量表
- unsigned char smgduan[18]={0xfa,0x22,0xb9,0xab,0x63,0xcb,0xdb,0xa2,0xfb,0xeb,0xf3,0x5b,0x19,0x3b,0xd9,0xd1,0x01};
- unsigned char Display_Temperature_Act[3]={0,0,0};//溫度測(cè)得值顯示數(shù)組
- unsigned char Display_Temperature_Set[3]={0,0,0};//溫度設(shè)定值顯示數(shù)組
- int Temperature_Act=32; //溫度測(cè)得值
- int Temperature_Set=40; //溫度設(shè)定值
- int Shadow_Temperature_Set=40; //溫度設(shè)定值影子值
- unsigned int T0_Cnt_1=0; //定時(shí)器0周期計(jì)數(shù)1:顯示輪詢
- unsigned int T0_Cnt_2=0; //定時(shí)器0周期計(jì)數(shù)2:PID控制
- unsigned char T0_Cnt_3=0; //定時(shí)器0周期計(jì)數(shù)3:串口發(fā)送
- bit En_Display_Standby=1; //顯示輪詢有效標(biāo)志位
- bit Do_T0_3=0; //串口發(fā)送標(biāo)志
- bit flag_display_mode=0; //顯示標(biāo)志位
- bit Temperature_Set_Choose=0;//溫度設(shè)置值數(shù)據(jù)來(lái)源選擇,用于PID設(shè)置,該值為0時(shí)數(shù)據(jù)參考來(lái)自設(shè)置變量,該值為1時(shí)數(shù)據(jù)參考來(lái)源來(lái)自影子變量
- bit flag_Key_Add=0; //按鍵動(dòng)作執(zhí)行標(biāo)志位
- bit flag_Key_Subtract=0; //按鍵動(dòng)作執(zhí)行標(biāo)志位
- bit flag_Key_Submit=0; //按鍵動(dòng)作執(zhí)行標(biāo)志位
- bit flag_Key_Cancel=0; //按鍵動(dòng)作執(zhí)行標(biāo)志位
- bit busy=0;//串口1發(fā)送狀態(tài)
- //ADC測(cè)溫相關(guān)變量
- unsigned int ADC_DATA; //讀取到的ADC轉(zhuǎn)換值
- unsigned int ADC_BandGap; //讀取的BandGap轉(zhuǎn)換值
- float VCC_Voltage; //計(jì)算得到的VCC電壓值,單位mV
- float NTC_Voltage; //計(jì)算得到的NTC分壓電壓值,單位mV
- float NTC_Temperature; //查表計(jì)算得到的NTC對(duì)應(yīng)溫度值,單位℃
- unsigned long NTC_R_Comp=0; //待對(duì)比的電阻值,單位十倍歐姆
- bit flag_value_update=0; //測(cè)得值更新標(biāo)志位
- bit En_ADC_Value=0; //ADC轉(zhuǎn)換值標(biāo)志 0:無(wú)效 1:有效
- //移植PID部分時(shí)的全局變量
- int e ,e1 ,e2 ;//pid
- float uk ,uk1 ,duk ;//pid
- float Kp=10,Ki=12,Kd=1.5;//pid 10,12,1.5
- int out=0;
- unsigned int PWMTime=0;
- unsigned int cnt=0;
- /************************************************************
- 名稱:基于NTC3435的水溫自動(dòng)加熱系統(tǒng)設(shè)計(jì)
- 平臺(tái):IAP15W4K58S4 11.0592MHz 9600 8N1
- 編寫注意:數(shù)碼管連接在P2口,單片機(jī)推挽輸出方式直驅(qū)
- 程序編寫:凌凈清河
- 硬件制作:凌凈欣羽
- 文稿排版:凌凈欣羽
- 發(fā)布日期:2019年8月7日(星期三)
- 聲明:如您直接使用本例程或進(jìn)行較大程度的借鑒,請(qǐng)注明程序出處,謝謝!
- 所屬:新礦城學(xué)習(xí)基地#2019
- ************************************************************/
- void PWMOUT()
- {
- if(cnt<PWMTime)
- {
- PWM_FC=1;
- }
- else
- {
- PWM_FC=0;
- }
- if(cnt>1000)cnt=0;
- }
- void PIDControl(void)
- {
- if(Temperature_Set_Choose)
- {
- e=Shadow_Temperature_Set-NTC_Temperature;
- }
- else
- {
- e=Temperature_Set-NTC_Temperature;
- }
- duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2));
- uk=uk1+duk;
- if(uk>1200)
- {
- uk=1000;
- }
- else if(uk<-1200)
- {
- uk=0;
- }
-
- out=(int)uk;
- if(out>1000)
- {
- out=1000;
- }
- else if(out<0)
- {
- out=0;
- }
- PWMTime=out;
- uk1=uk;
- e2=e1;
- e1=e;
- }
- void delay(unsigned int i)
- {
- while(i--);
- }
- void SendData(unsigned char dat)//串口1發(fā)送一個(gè)字節(jié)數(shù)據(jù)
- {
- while(busy);
- busy=1;
- SBUF=dat;
- }
- void Value_Send()//串口將數(shù)據(jù)發(fā)送出去,僅發(fā)送顯示的部分
- {
- SendData(0xC7);
- delay(100);
- SendData(Display_Temperature_Act[0]);
- delay(100);
- SendData(Display_Temperature_Act[1]);
- delay(100);
- SendData(Display_Temperature_Act[2]);
- delay(100);
- SendData(Display_Temperature_Set[0]);
- delay(100);
- SendData(Display_Temperature_Set[1]);
- delay(100);
- SendData(Display_Temperature_Set[2]);
- delay(100);
- SendData(0x7C);
- }
- void VCC_Voltage_Read() //調(diào)用此函數(shù)更新電源電壓值,存儲(chǔ)在VCC_Voltage變量中,該函數(shù)改變ADC的設(shè)置
- {
- P1ASF=B00000000; //不設(shè)置P1ASF,以便上電讀取BandGap電壓的ADC轉(zhuǎn)換值
- ADC_CONTR=B10000000; //開(kāi)啟ADC電源,設(shè)置轉(zhuǎn)換速度540時(shí)鐘周期,清空轉(zhuǎn)換標(biāo)志位,停止轉(zhuǎn)換,模擬通道選擇P1^0
- ADC_RES=0; //清除結(jié)果寄存器
- ADC_RESL=0; //清除結(jié)果寄存器
- CLK_DIV&=B11011111; //ADC_RES[7:0]存放高8位ADC結(jié)果,ADC_RES[1:0]存放低2位ADC結(jié)果
- //PADC=1; //設(shè)置A/D轉(zhuǎn)換中斷優(yōu)先級(jí)為最高
-
- ADC_CONTR|=0x08; //開(kāi)始轉(zhuǎn)換
- _nop_();
- _nop_();
- _nop_();
- _nop_(); //按照例程延時(shí)4個(gè)周期
- while(!En_ADC_Value); //等待轉(zhuǎn)換結(jié)束
- En_ADC_Value=0; //清除標(biāo)志位
- ADC_BandGap=ADC_DATA; //保存BandGap的ADC轉(zhuǎn)換值
- VCC_Voltage=Voltage_BandGap_ROM*1023.0/(float)ADC_BandGap;//電源電壓值計(jì)算
- }
- void NTC_Voltage_Read() //調(diào)用此函數(shù)更新NTC電壓值,存儲(chǔ)在NTC_Voltage變量中,該函數(shù)改變ADC的設(shè)置
- {
- P1ASF=B00001000; //NTC接在P13
- ADC_CONTR=B11100011; //開(kāi)啟ADC電源,設(shè)置轉(zhuǎn)換速度90時(shí)鐘周期,清空轉(zhuǎn)換標(biāo)志位,停止轉(zhuǎn)換,模擬通道選擇P1^3
- ADC_RES=0; //清除結(jié)果寄存器
- ADC_RESL=0; //清除結(jié)果寄存器
- CLK_DIV&=B11011111; //ADC_RES[7:0]存放高8位ADC結(jié)果,ADC_RES[1:0]存放低2位ADC結(jié)果
- //PADC=1; //設(shè)置A/D轉(zhuǎn)換中斷優(yōu)先級(jí)為最高
-
- ADC_CONTR|=0x08; //開(kāi)始轉(zhuǎn)換
- _nop_();
- _nop_();
- _nop_();
- _nop_(); //按照例程延時(shí)4個(gè)周期
- while(!En_ADC_Value); //等待轉(zhuǎn)換結(jié)束
- En_ADC_Value=0; //清除標(biāo)志位
- NTC_Voltage=Voltage_BandGap_ROM*(float)ADC_DATA/(float)ADC_BandGap;//NTC分壓電壓計(jì)算
- }
- /*
- 數(shù)值顯示處理函數(shù),將溫度變量的值判斷合法范圍并按位取出送給顯示數(shù)組
- 溫度變量值的合理更新由其更新函數(shù)負(fù)責(zé)
- 為提高效率,該函數(shù)只在變量更新時(shí)執(zhí)行一次,不隨數(shù)碼管顯示函數(shù)輪詢刷新
- */
- void Data_Process()
- {
- if(Temperature_Act>0&&Temperature_Act<100)
- {
- Display_Temperature_Act[0]=Temperature_Act/10;
- Display_Temperature_Act[1]=Temperature_Act%10;
- Display_Temperature_Act[2]=12;
- }
- else
- {
- if(Temperature_Act<0)
- {
- Temperature_Act*=(-1);//將值變?yōu)檎龜?shù)
- Display_Temperature_Act[0]=17;//顯示負(fù)號(hào)
- Display_Temperature_Act[1]=Temperature_Act/10;
- Display_Temperature_Act[2]=Temperature_Act%10;
- }
- else//數(shù)值大于100℃
- {
- Display_Temperature_Act[0]=Temperature_Act/100;
- Display_Temperature_Act[1]=(Temperature_Act%100)/10;
- Display_Temperature_Act[2]=Temperature_Act%10;
- }
- }
- //由于設(shè)置值由設(shè)置函數(shù)保證合法性,此處不用判斷,直接按位取出即可
- Display_Temperature_Set[0]=Temperature_Set/10;
- Display_Temperature_Set[1]=Temperature_Set%10;//溫度設(shè)定值在30~90之間
- Display_Temperature_Set[2]=12;
-
- // Display_Temperature_Set[0]=PWMTime/100;
- // Display_Temperature_Set[1]=(PWMTime%100)/10;
- // Display_Temperature_Set[2]=PWMTime%10;
- // if(PWMTime==0)Display_Temperature_Set[2]=15;
- }
- /*
- 數(shù)碼管顯示函數(shù),用于刷新顯示設(shè)定的和實(shí)際的溫度值
- 同時(shí)刷新LED的指示顯示
- 參數(shù)為布爾量,0:顯示設(shè)定值 1:顯示測(cè)得值
- */
- void smg_display(bit choose)
- {
- unsigned char i;
- for(i=0;i<3;i++)
- {
- switch(i)
- {
- case 0:S1=0;S2=1;S3=1;break;
- case 1:S1=1;S2=0;S3=1;break;
- case 2:S1=1;S2=1;S3=0;break;
- }
- if(choose)
- {//測(cè)得值
- P2=smgduan[Display_Temperature_Act[i]];
- }
- else
- {//設(shè)定值
- P2=smgduan[Display_Temperature_Set[i]];
- }
- delay(100);
- P2=0x00;
- }
-
- if(choose)//在不同模式下點(diǎn)亮相應(yīng)的指示燈
- {
- LED_Red=1;LED_Green=0;
- }
- else
- {
- LED_Red=0;LED_Green=1;
- }
- }
- void Timer0Init(void) //5毫秒@11.0592MHz
- {
- AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0x28; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- }
- void Timer1Init(void) //10微秒@11.0592MHz
- {
- AUXR |= 0x40; //定時(shí)器時(shí)鐘1T模式
- TMOD &= 0x0F; //設(shè)置定時(shí)器模式
- TL1 = 0x91; //設(shè)置定時(shí)初值
- TH1 = 0xFF; //設(shè)置定時(shí)初值
- TF1 = 0; //清除TF1標(biāo)志
- TR1 = 1; //定時(shí)器1開(kāi)始計(jì)時(shí)
- }
- void UartInit(void) //9600bps@11.0592MHz
- {
- SCON = 0x50; //8???,?????
- AUXR |= 0x01; //??1?????2???????
- AUXR |= 0x04; //???2???Fosc,?1T
- T2L = 0xE0; //??????
- T2H = 0xFE; //??????
- AUXR |= 0x10; //?????2
- }
- void sys_init()
- {
- P0M1=0x00;
- P0M0=0x00;
- P1M1=0x00;
- P1M0=0x00;
- P2M1=0x00;
- P2M0=0xFF;//P2口推挽輸出
- P3M1=0x00;
- P3M0=0x00;
- P4M1=0x00;
- P4M0=0x00;
- P5M0=0x00;
- P5M1=0x00;
- P2=0x00;
- LED_Red=0;
- LED_Green=0;
- Timer0Init();
- Timer1Init();
- UartInit();
- EA=1;
- ET0=1;
- ET1=1;
- ES=1;//開(kāi)串口中斷使能
- EADC=1;//開(kāi)ADC轉(zhuǎn)換中斷
- VCC_Voltage_Read();//讀取電源電壓
- Data_Process();
- LED_Red=1;
- LED_Green=1;
- }
- void main()
- {
- sys_init();
- while(1)
- {
- smg_display(flag_display_mode);
- if(flag_value_update)
- {
- flag_value_update=0;
- NTC_Voltage_Read();//讀取NTC的分壓值(P13上的模擬電壓)
- NTC_R_Comp=100000*NTC_Voltage/(VCC_Voltage-NTC_Voltage);//計(jì)算待對(duì)比的NTC阻值,單位十倍歐姆
- NTC_Temperature=NTC_103_3435_Compare(NTC_R_Comp);//查表計(jì)算NTC對(duì)應(yīng)的溫度值
- Temperature_Act=(char)NTC_Temperature;//取整
- Data_Process();
- }
- //***************************************************************************
- //此處添加PID調(diào)溫的函數(shù)
- //Temperature_Set_Choose為溫度設(shè)置值數(shù)據(jù)來(lái)源選擇標(biāo)志位,用于PID設(shè)置。
- //該值為0時(shí)溫度設(shè)置值來(lái)自變量Temperature_Set,該值為1時(shí)設(shè)置值來(lái)自影子變量Shadow_Temperature_Set
- //溫度的設(shè)置值為int型數(shù)據(jù),范圍為30-90
- //實(shí)時(shí)溫度可以來(lái)自以下兩個(gè)變量:
- //Temperature_Act為int型變量,存儲(chǔ)顯示的測(cè)得值
- //NTC_Temperature為float型變量,存儲(chǔ)每次轉(zhuǎn)換完成后的查表得到的溫度值
- PWMOUT();
- //***************************************************************************
- if(Do_T0_3)
- {
- Do_T0_3=0;
- Value_Send();//串口發(fā)送顯示的值給另一個(gè)單片機(jī)(設(shè)計(jì)要求?
-
- }
- if((Key_Add==0&&(!flag_Key_Add)))
- {
- delay(3000);
- if(Key_Add==0)
- {
- flag_Key_Add=1;
- //按鍵執(zhí)行內(nèi)容
- if(Temperature_Set_Choose==0)//當(dāng)首次進(jìn)入設(shè)置模式時(shí)
- {
- En_Display_Standby=0;//關(guān)閉中斷中的顯示輪詢
- Shadow_Temperature_Set=Temperature_Set;//備份之前的設(shè)置值
- Temperature_Set_Choose=1;//切換PID數(shù)據(jù)來(lái)源
- flag_display_mode=0;//切換到設(shè)定值顯示
- }
- Temperature_Set++;//增加設(shè)置值
- if(Temperature_Set>90)Temperature_Set=90;//設(shè)置上限
- Data_Process();//更新顯示
- }
- }
- if((Key_Subtract==0&&(!flag_Key_Subtract)))
- {
- delay(3000);
- if(Key_Subtract==0)
- {
- flag_Key_Subtract=1;
- //按鍵執(zhí)行內(nèi)容
- if(Temperature_Set_Choose==0)//當(dāng)首次進(jìn)入設(shè)置模式時(shí)
- {
- En_Display_Standby=0;//關(guān)閉中斷中的顯示輪詢
- Shadow_Temperature_Set=Temperature_Set;//備份之前的設(shè)置值
- Temperature_Set_Choose=1;//切換PID數(shù)據(jù)來(lái)源
- flag_display_mode=0;//切換到設(shè)定值顯示
- }
- Temperature_Set--;//減少設(shè)置值
- if(Temperature_Set<30)Temperature_Set=30;//設(shè)置下限
- Data_Process();//更新顯示
- }
- }
- if((Key_Submit==0&&(!flag_Key_Submit)))
- {
- delay(3000);
- if(Key_Submit==0)
- {
- flag_Key_Submit=1;
- //按鍵執(zhí)行內(nèi)容
- if(Temperature_Set_Choose)//確定鍵在設(shè)置模式時(shí)有效
- {
- En_Display_Standby=1;//開(kāi)啟中斷中的顯示輪詢
- Temperature_Set_Choose=0;//切換PID數(shù)據(jù)來(lái)源
- }
- }
- }
- if((Key_Cancel==0&&(!flag_Key_Cancel)))
- {
- delay(3000);
- if(Key_Cancel==0)
- {
- flag_Key_Cancel=1;
- //按鍵執(zhí)行內(nèi)容
- if(Temperature_Set_Choose)//取消鍵在設(shè)置模式時(shí)有效
- {
- Temperature_Set=Shadow_Temperature_Set;//還原之前的設(shè)置值
- En_Display_Standby=1;//開(kāi)啟中斷中的顯示輪詢
- Temperature_Set_Choose=0;//切換PID數(shù)據(jù)來(lái)源
- }
- }
- }
-
- if(Key_Add)flag_Key_Add=0;
- if(Key_Subtract)flag_Key_Subtract=0;
- if(Key_Submit)flag_Key_Submit=0;
- if(Key_Cancel)flag_Key_Cancel=0;
- }
- }
- void T0() interrupt 1
- {
- if(T0_Cnt_1==400)
- {
- T0_Cnt_1=0;
- if(En_Display_Standby)
- {
- flag_display_mode=!flag_display_mode;
- }
- flag_value_update=1;
- }
- else
- {
- T0_Cnt_1++;
- }
-
- if(T0_Cnt_2==10)
- {
- T0_Cnt_2=0;
- PIDControl();
- // PWMTime=PWMTime+100;
- // if(PWMTime>1000)
- // {
- // PWMTime=0;
- // }
- }
- else
- {
- T0_Cnt_2++;
- }
-
- if(T0_Cnt_3==100)
- {
- T0_Cnt_3=0;
- Do_T0_3=1;
- }
- else
- {
- T0_Cnt_3++;
- }
- }
- void T1() interrupt 3
- {
- cnt++;
- }
- void UART() interrupt 4
- {
- if(RI)
- {
- RI=0;
- }
- if(TI)
- {
- TI=0;//清除標(biāo)志位
- busy=0;//上一數(shù)據(jù)發(fā)送完成
- }
- }
- void ADC() interrupt 5 //AD中斷服務(wù)函數(shù)
- {
- ADC_CONTR&=!0x10; //清除ADC中斷標(biāo)志,例程
- ADC_DATA=(ADC_RES<<2)|ADC_RESL; //10位ADC結(jié)果拼接
- En_ADC_Value=1; //ADC轉(zhuǎn)換值有效標(biāo)志
- }
-
復(fù)制代碼
【程序下載】
基于NTC3435的水溫自動(dòng)加熱系統(tǒng)設(shè)計(jì) 凌凈清河.zip
(103.38 KB, 下載次數(shù): 222)
2019-8-7 13:32 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|