fback.cpp +xiaogaijing

本文介绍如何优化OpenCV光流可视化,包括显示彩色图像而非灰度图,将光流单独绘制到一幅图像上,并计算角度误差。通过实现改进后的代码,可以更有效地分析和理解运动物体之间的相对位置变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from  C:\OpenCV2.1\samples\c


#undef _GLIBCXX_DEBUG

#include "cv.h"
#include "highgui.h"

using namespace cv;

void drawOptFlowMap(const Mat& flow, Mat& cflowmap, int step,
                    double scale, const Scalar& color)
{
    for(int y = 0; y < cflowmap.rows; y += step)
        for(int x = 0; x < cflowmap.cols; x += step)
        {
            const Point2f& fxy = flow.at<Point2f>(y, x);
            line(cflowmap, Point(x,y), Point(cvRound(x+fxy.x), cvRound(y+fxy.y)),
                 color);
            circle(cflowmap, Point(x,y), 2, color, -1);
        }
}

int main(int argc, char** argv)
{
    VideoCapture cap(0);
    
    if( !cap.isOpened() )
        return -1;
    
    Mat prevgray, gray, flow, cflow, frame;
    namedWindow("flow", 1);
    
    for(;;)
    {
        cap >> frame;
        cvtColor(frame, gray, CV_BGR2GRAY);
        
        if( prevgray.data )
        {
            calcOpticalFlowFarneback(prevgray, gray, flow, 0.5, 3, 15, 3, 5, 1.2, 0);
            cvtColor(prevgray, cflow, CV_GRAY2BGR);
            drawOptFlowMap(flow, cflow, 16, 1.5, CV_RGB(0, 255, 0));
            imshow("flow", cflow);
        }
        if(waitKey(30)>=0)
            break;
        std::swap(prevgray, gray);
    }
    return 0;
}


希望得到的改进:


1.  显示摄像头捕获的彩色图像,而不是灰度图

2.  把光流单独画在一副图上

3. 计算角度误差什么的

待续。。。




//******************************************************************************/ //#include "REG51.h" #define MAIN_Fosc 22118400UL //¶¨ÒåÖ÷ʱÖÓ #include "math.h" #include "STC15Fxxxx.H" #include "oled.h" #include "eeprom.h" #include "USER.h" //#define T1MS (65536-FOSC/12/1000) //#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn) //¶þ½øÖÆ #define _BIN(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0)) #define _bin _BIN // _bin,_BIN¾ù¿É //¶þ½øÖÆ /************* ±¾µØ³£Á¿ÉùÃ÷ **************/ #define Baudrate1 115200UL #define RX1_Lenth 32 //´®¿Ú½ÓÊÕ»º³å³¤¶È #define TX1_Lenth 64 u8 TX1_Cnt; //·¢ËͼÆÊý u8 RX1_Cnt; //½ÓÊÕ¼ÆÊý bit B_TX1_Busy; //·¢ËÍæ±êÖ¾ u8 idata RX1_Buffer[RX1_Lenth]; //½ÓÊÕ»º³å u8 TX_write=0; u8 TX_read =0; u8 idata RX1_Buffer[RX1_Lenth]; //½ÓÊÕ»º³å u8 idata TX1_Buffer[TX1_Lenth]; //·¢ËÍ»º³å void UART1_config(u8 brt); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. //void PrintString1(u8 *puts); //sbit UART1_485_DE = P2^0; int add_v;//µØÖ· /************* **************/ u8 ir,it; long int jint;// long int jint2;// long int jint1;//µ÷ÕûµçλÆ÷ÊäÈëp1.6 long int jinr;//ÍⲿµçλÆ÷ÊäÈëp1.7 int jinr1;//ÍⲿµçλÆ÷ÊäÈëp1.7 int jinr0; long int jint3;//Ô¶³Ì¿ØÖÆ¿ª¶È char tj_ma0=0,tj_ma1=0,tj_yc1=0,tj_yc2=0,tj_yc3=0; long int openv;//¿ªÎ»Öµ long int closev;//¹ØÎ»Öµ long int j; //long int jst1; int i; long int jrtem1; u8 xdata settmp[20]; int xst,xsr;//xst1,xsr1; signed int j1=0; signed int j2=0; int g1=0; int k1=1,k2=1,k3=1,k10=1,k20=1,k30=1; char X2B=1; char modv=0;modv0=0; char er1=0; char a1=0,a2=0; char bz_dz=0; char bca=0; int tm10=0;tm20=0;tm12=0;tm22=0;tm11=0;tm21=0,tm30=0,tm31=0; char ksjv=0;ksjv2=0;ksjv11=0;ksjv12=0; char x0=0;//³õʼλÖà char x1=0;//¶¨Î»¾«¶È char x2=0;//network char x3=0;//¿ªÖÐ¹Ø //char x4=0;//¿ª¶È char x5=0;//ÐÄÌø°ü¿ØÖÆ char x6=0;//×Ô¶¯±¨ÎÄ¿ØÖÆ char x7=0;//µØÖ·ÏÔʾ char jva2=0;ks=0; int jv1; int jsv,jsv3,jsv10,jsv30; int zjsv,zjsv3; char zdv,zdkzv; int i_tim; u8 xdata settmp1[20]; unsigned long tim0=0; unsigned int tim1=0; char tim_bz=0; char jxvop=1;jxvcl=1; char lcd0=0; char csv=0;csvbz=0; int cstmv=0;gntm1=0;gntm2=0; //char LCD_line0[] = "20220520001"; unsigned int IDV1=0,IDV2=0;//20220--10001 // unsigned long L1T=0;L2T=0;L3T=0; char l1_bz=0;l2_bz=0;l3_bz=0; char tjdz_bz2_b=0,tjdz_bz2_b1=0; int tjsj=0,tjsj_b=0,tjsj1=0,tjsj_b1=0; int jdjs_v=1,jdjs_v1=1,jdjs_v10=1,jdjs_v20=1,cs1=1,cs2=1; char kgsj_jsbz=0; int kgcs_bz1=0,kgcs_bz2=0; char kzmd=0;//0Ë«¶¯1µ¥¶¯ char zmbv=0; char zmbv1=5; char intisetv=0;//³õʼ»¯ÅÐ¶Ï char xxba,xxbb, xxbc=3 ; void tm0_isr() interrupt 1 using 1 { if ( 0==KEY1 ){if (k1>0){k1=k1-1;}}else{k1=20;} if ( 0==KEY2 ){if (k2>0){k2=k2-1;}}else{k2=20;} if ( 0==KEY3 ){if (k3>0){k3=k3-1;}}else{k3=20;} if ( 0==KEY1 ){if (k10>0){k10=k10-1;}}else{k10=1000;} if ( 0==KEY2 ){if (k20>0){k20=k20-1;}}else{k20=1000;} if ( 0==KEY3 ){if (k30>0){k30=k30-1;}}else{k30=1000;} if (jsv10<1500) {jsv10=jsv10+1;}else{jsv10=0;jsv30=1;}//ÐÄÌø°ü¼ÆÊ± if (jsv<1000) {jsv=jsv+1;}else{jsv=0;jsv3=1;}//ÐÄÌø°ü¼ÆÊ± if (zjsv<(i_tim*1000)) {zjsv=zjsv+1;}else{zjsv=0;zjsv3=1;}//×Ô¶¯¿ª¹Ø if (ksjv==1) {tm10++;}//¹ØÊ±¼ä if (ksjv2==1) {tm20++;}//¿ªÊ±¼ä if (ksjv11==1) {tm11++;}else{if (tm11>0){tm12=tm11;tm11=0;}}//¹ØÊ±¼ä if (ksjv12==1) {tm21++;}else{if (tm21>0){tm22=tm21;tm21=0;}}//¿ªÊ±¼ä if (tim1>(59999)){tim0=tim0+1;tim1=0;if (tim0%10==0 && tim1==0){tim_bz=1;}}else{tim1++;} if (csv==1&&cstmv<(500)){cstmv++;csvbz=1;}else{csvbz=0;cstmv=0; } //¹ýŤ±¨¾¯ if ((modv==0 || modv==1)&&X2B==0 && (Y1==0 || Y2==0)) { if ( abs(jint-jinr)>10){gntm1++;} if (gntm1>(tm10*10)){bz_dz=1;} if (bz_dz==1){L1=0;L2=0;L3=0;Y3=0;Y4=0;Y5=0;} if ( abs(jint-jinr)<10){bz_dz=0;gntm1=0;} } //if (abs(jint-jinr)>100){xxba=0;} //if (abs(jint-jinr)<100){xxba=1;} if (jxvcl==0 &&closev>(jinr+80)){xxba=0;} if (jxvcl==0 &&closev<(jinr+80)){xxba=1;} if (jxvop==0 &&closev<(jinr-80)){xxbb=0;} if (jxvop==0 &&closev>(jinr-80)){xxbb=1;} if (xxba==0 || xxbb==0) { if (modv==0){zmbv1=8;} if (modv==1){zmbv1=5;} if (zmbv<zmbv1){zmbv++;}else{zmbv=0;} if (zmbv==0) { kgsj(); if (abs(jint-jinr)>50 ){jdjs_v10=jdjs_v10*3;jdjs_v20=jdjs_v20*3;jdjs_v=1;jdjs_v1=1; } else if(abs(jint-jinr)>100 ){jdjs_v10=jdjs_v10*5;jdjs_v20=jdjs_v20*5;jdjs_v=1;jdjs_v1=1;} else if(abs(jint-jinr)>160 ){jdjs_v10=jdjs_v10*10;jdjs_v20=jdjs_v20*10;jdjs_v=1;jdjs_v1=1;} if (tj_ma0==1 ||tj_ma1==1||tj_yc1==1||tj_yc2==1||tj_yc3==1) { if (tjsj_b<=jdjs_v1){tjsj_b++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj_b=0;tjdz_bz2_b=0;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}} if (tjsj<=jdjs_v20 && tjdz_bz2_b==0){tjsj++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj=0;tjdz_bz2_b=1;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}//Y2 if (tjsj_b1<=jdjs_v){tjsj_b1++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj_b1=0;tjdz_bz2_b1=0;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}} if (tjsj1<=jdjs_v10 && tjdz_bz2_b1==0){tjsj1++;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}else{tjsj1=0;tjdz_bz2_b1=1;if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y1=1;Y2=1;}}//Y1 } } } else { if (xxbc>0){xxbc--;tjdz_bz2_b=1;tjdz_bz2_b1=1;}else{tjdz_bz2_b=0;tjdz_bz2_b1=0;xxbc=3;} } } void main(void) { KEY1=1;KEY2=1;KEY3=1; Y1=1; Y2=1; OLED_Init(); //³õʼ»¯OLED OLED_Clear() ; AUXR |= 0x80; //¶¨Ê±Æ÷ʱÖÓ1Tģʽ TMOD &= 0xF0; //ÉèÖö¨Ê±Æ÷ģʽ TL0 = 0x9A; //ÉèÖö¨Ê±³õÖµ TH0 = 0xA9; //ÉèÖö¨Ê±³õÖµ TF0 = 0; //Çå³ýTF0±êÖ¾ TR0 = 1; //¶¨Ê±Æ÷0¿ªÊ¼¼ÆÊ± ET0=1; EA=1; P1ASF = (1<<6) + (1<<7); //P1.6 P1.7×öADC P1ASF=0xc0; P1M1 = (0xc0); P1M0 = (0x00); //P1.6 P1.7ÉèÖóɸß×è ADC_CONTR = 0xE0; //90T, ADC power on /************* **************³õʼ»¯Êý¾Ý/ /* openv=260;//98 closev=530;//650 jint2=395; jint3=jint2; modv=1;modv0=1; g1=2; tm10=300; tm20=300; x0=0; x1=0; add_v=0; x5=0; x6=0; x7=0; zdkzv=0; i_tim=0; write_cs(); */ /************* **************/ EEPROM_read_n(0X0,settmp,21); openv=settmp[0]*256+settmp[1];//98 closev=settmp[2]*256+settmp[3];//650 jint2=settmp[4]*256+settmp[5]; jint3=jint2; modv=settmp[6];modv0=settmp[6]; if (modv>10){modv=0;} g1=settmp[7]; tm10=settmp[8]*256+settmp[9]; tm20=settmp[10]*256+settmp[11]; x0=settmp[12]; x1=settmp[13]; add_v=settmp[14]; x5=settmp[15]; x6=settmp[16]; x7=settmp[17]; zdkzv=settmp[18]; i_tim=settmp[19]; EEPROM_read_n(0X200,settmp1,20); tim0=(settmp1[1]*256+settmp1[2])*256+settmp1[0]; L1T=(settmp1[4]*256+settmp1[5])*256+settmp1[3]; L2T=(settmp1[7]*256+settmp1[8])*256+settmp1[6]; L3T=(settmp1[10]*256+settmp1[11])*256+settmp1[9]; tm22=settmp1[12]*256+settmp1[13]; tm12=settmp1[14]*256+settmp1[15]; IDV1=settmp1[16]*256+settmp1[17]; IDV2=settmp1[18]*256+settmp1[19]; intisetv=settmp1[20]; delay_ms(10); //if (intisetv!=1){INIT_SET();} if (g1>10){g1=0;} if (x0>3){x0=0;} if (x1>10){x1=1;} j1=tm20/50; j2=tm20/50; //PWM P_PWM = 0; P3M1 &= ~(1 << 4); //P3.4 ÉèÖÃÎªÍÆÍìÊä³ö P3M0 |= (1 << 4); TR1 = 0; //Í£Ö¹¼ÆÊý ET1 = 1; //ÔÊÐíÖÐ¶Ï PT1 = 1; //¸ßÓÅÏȼ¶ÖÐ¶Ï TMOD &= ~0x30; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×° AUXR |= 0x40; //1T TMOD &= ~0x40; //¶¨Ê± INT_CLKO |= 0x02; //Êä³öʱÖÓ TH1 = 0; TL1 = 0; TR1 = 1; //¿ªÊ¼ÔËÐÐ EA = 1; pwm = PWM_DUTY / 10; //¸øPWMÒ»¸ö³õÖµ£¬ÕâÀïΪ10%Õ¼¿Õ±È LoadPWM(pwm); //¼ÆËãPWM֨װֵ //PWM UART1_config(2); // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. //EA = 1; //ÔÊÐí×ÜÖÐ¶Ï //UART1_485_DE=0; if (x0==1){X1=0;} if (x0==2){X2=0;} if (x0==3){X3=0;} //IDV1=20220;IDV2=10001; /* settmp2[0]=IDV%256; settmp2[1]=(IDV/256)%256; settmp2[2]=((IDV/256)/256)%256; settmp2[3]=(((IDV/256)/256)/256)/256; settmp2[4]=(((IDV/256)/256)/256)%256; EEPROM_SectorErase(0X400);//²Á³ýEEPROM delay_ms(100); EEPROM_write_n(0X400,settmp2,5);//дÈëģʽ delay_ms(100); */ OLED_ShowString(10,2,"SUBITOP",16); Get_ADC10bitResult(7); jinr = Get_ADC10bitResult(7); oled_x(); delay_ms(200); OLED_Clear(); jinr1 = Get_ADC10bitResult(6); tm30=tm10*10; tm31=tm20*10; while(1) { //if (abs(jint-jinr)>65 ){jdjs_v=1;jdjs_v1=1;}else{jdjs_v=jdjs_v0;jdjs_v1=jdjs_v0;} //if (modv==1){delay_ms(2);} //jinr = Get_ADC10bitResult(7); //kgsj();// /* OLED_ShowNum(0,6,jinr,4,16); OLED_ShowNum(50,6,openv,4,16); OLED_ShowNum(90,6,closev,4,16); OLED_ShowNum(90,6,jint2,4,16); OLED_ShowNum(50,6,jint1,4,16); OLED_ShowNum(90,6,Get_ADC10bitResult(6),4,16); */ /**/ //if (modv==0||modv==1){if (bz_dz==1&&g1<9){g1++;}else{g1=settmp[7];}}//¹ýŤµ÷Ϊ×Ô¶¯ if (modv==0||modv==1) { if (bz_dz==1&&tm30<tm10*30){tm30++;kgsj_jsbz=1;}//else{tm30=tm10;} if (bz_dz==1&&tm31<tm20*30){tm31++;kgsj_jsbz=1;}//else{tm31=tm20;} if (kgcs_bz1>5&&tm30>tm10*10/3){tm30--;kgsj_jsbz=1;} if (kgcs_bz2>5&&tm31>tm20*10/3){tm31--;kgsj_jsbz=1;} if (kgsj_jsbz==1){kgsj_jsbz=0;} }//¹ýŤµ÷Ϊ×Ô¶¯ /************* **************/ oled_s1(); if (zdkzv>0&&x2==0) { //zdkzv:1-13,2-12321,3-1231,4-1321 if (zjsv3==1)//×Ô¶¯¿ØÖÆ { if (X1==1){X1=0;X3=1;}else{X1=1;X3=0;} if (zdv<5){zdv++;}else{zdv=1;} switch(zdv) { case 1:X1=0;X2=1;X3=1;break; case 2:if (zdkzv==2||zdkzv==3){X1=1;X2=0;X3=1;}else {zdv++;} break; case 3:X1=1;X2=1;X3=0;break; case 4:if (zdkzv==2||zdkzv==4){X1=1;X2=0;X3=1;}else {X1=0;X2=1;X3=1;zdv=1;}break; } zjsv3=0; } } if (jsv3==1&& (modv==1 || modv==0)) { if (x6==1) {modbus_bw();}//×Ô¶¯±¨ÎÄ jsv3=0; } if (jsv30==1) { if (x5==1) {TX1_write2buff(add_v);}//ÐÄÌø°ü jsv30=0; } if (modbus_ex(1)==1)//дµØÖ· { add_v=RX1_Buffer[5]; write_cs(); if (x7==1)OLED_ShowNum(45,6,add_v,3,16); } if (modbus_ex(2)==1)//ģʽmodv { modv=RX1_Buffer[5]; write_cs(); OLED_Clear(); lcd0=0; } if (modbus_ex(3)==1)//±ê¶¨ { modv=2; ks=1; OLED_Clear(); } if (modbus_ex(16)==1)//Çý¶¯g1 { g1=RX1_Buffer[5]; if (g1<11)write_cs(); } if (modbus_ex(4)==1)//¾«¶Èx1 { x1=RX1_Buffer[5];if (x1<10)write_cs(); OLED_ShowNum(35,6,RX1_Buffer[5],4,16); } if (modbus_ex(5)==1)//³õʼλÖÃx0 { x0=RX1_Buffer[5];if (x0<4)write_cs(); } if (modbus_ex(6)==1)//ÖмäλÖÃxst { xst=RX1_Buffer[5]; jint2=xst*(closev-openv)/100+openv+1; if (jint2>closev){jint2=closev;} if (jint2<openv){jint2=openv;} xst=((abs(jint2-openv)*1000/(closev-openv)))/10; if (((abs(jint2-openv)*1000/(closev-openv)))/10<5){xst=0;} if (((abs(jint2-openv)*1000/(closev-openv)))/10>100){xst=100;} write_cs(); } if (modbus_ex(7)==1)//Ô¶³Ì¿ØÖÆx2 { x2=RX1_Buffer[5]; x3=0; if (x2==0){jint3=jint2;} } if (x2==1) { X1=1;X2=1;X3=1; if (modv==0||modv==1) if (x7==1)OLED_ShowString(100,6,"net",16); } else {if (modv==0||modv==1){if (x7==1)OLED_ShowString(100,6," ",16);}} if (x2==1 && X1==0 && X2==0 && X3==0){x2=0;jint3=jint2;} if (modbus_ex(8)==1)//¿ª¹Ø¿ØÖÆ { x3=RX1_Buffer[5]; } if (modbus_ex(9)==1&&x2==1)//¿ØÖÆ¿ª¶È { //x4=RX1_Buffer[5]; x3=0; xst=RX1_Buffer[5]; jint3=xst*(closev-openv)/100+openv+1; if (jint3>closev)jint3=closev; if (jint3<openv)jint3=openv; xst=((abs(jint3-openv)*1000/(closev-openv)))/10; if (((abs(jint3-openv)*1000/(closev-openv)))/10<5){xst=0;} if (((abs(jint3-openv)*1000/(closev-openv)))/10>100){xst=100;} } if (modbus_ex(10)==1)//ÐÄÌø°ü¿ØÖÆ { x5=RX1_Buffer[5];if (x5<2)write_cs(); } if (modbus_ex(11)==1)//×Ô¶¯±¨ÎÄ¿ØÖÆ { x6=RX1_Buffer[5];if (x6<2)write_cs(); } if (modbus_ex(12)==1)//µØÖ·ÏÔʾ { x7=RX1_Buffer[5];if (x7<2)write_cs(); if (x7==1){OLED_ShowString(1,6," add:",16);} else {OLED_ShowString(1,6," ",16);} if (x7==1){OLED_ShowNum(45,6,add_v,3,16); } else {OLED_ShowString(45,6," ",16); } if (x2==1) {if (modv==0||modv==1) if (x7==1)OLED_ShowString(100,6,"net",16); } else {if (modv==0||modv==1){if (x7==1)OLED_ShowString(100,6," ",16);}} if (modv==0||modv==1){if (x7==0)OLED_ShowString(100,6," ",16);}x3=0; } if (modbus_ex(13)==1)//×Ô¶¯¿ØÖÆzdkzv { zdkzv=RX1_Buffer[5];if (zdkzv<5)write_cs(); } if (modbus_ex(14)==1)//×Ô¶¯¿ØÖƼä¸ôi_tim { i_tim=RX1_Buffer[5];if (i_tim<256)write_cs(); } if (modbus_ex(15)==1)//±£´æÊý¾Ý { write_fzcs(); } if (modbus_ex(17)==1)//¿ª¹Ø¿ØÖÆ { kzmd=RX1_Buffer[5]; } if (modbus_zo()==1)//Çå0ÔËÐÐʱ¼ä¡¢¿ª¹Ø´ÎÊý { tim0=0; L1T=0;L2T=0;L3T=0; write_fzcs(); } if (modbus_id()==1)//id { IDV1=RX1_Buffer[3]*256+RX1_Buffer[4]; IDV2=RX1_Buffer[5]*256+RX1_Buffer[6]; write_fzcs(); } modbusv(); //*********************************************// if (tim_bz==1)//10·ÖÖÓ±£´æ { write_fzcs(); tim_bz=0; } if (modv==0 || modv==1)//01ģʽÏÔʾ { if (lcd0==0) { OLED_ShowString(1,0," Model:",16); OLED_ShowString(1,2," Setup:",16); OLED_ShowString(1,4," Fback:",16); OLED_ShowString(90,2,"%",16); OLED_ShowString(90,4,"%",16); if (modv==0){OLED_ShowString(57,0,"AD ",16);} if (modv==1){OLED_ShowString(57,0,"SW ",16);} if (x7==1)OLED_ShowString(1,6," add:",16); if (x7==1)OLED_ShowNum(45,6,add_v,3,16); lcd0=1; } if (((X1==0&&x2==0)||(x3==1&&x2==1))){xst=0;jint=openv;} if (((X3==0&&x2==0)||(x3==3&&x2==1))){xst=100;jint=closev;} OLED_ShowNum(55,2,xst,4,16); OLED_ShowNum(55,4,xsr,4,16); } //ÐźÅÊäÈë¼ì²â if (modv==0) { if ((jint1<50||jint1>1024)&&er1==0){er1=1;jxvop=1;jxvcl=1;} if (jint1>50&&jint1<1024&&er1==1){jint1 = Get_ADC10bitResult(6);delay_ms(300);er1=0;jxvop=0;jxvcl=0;} //if (jint1>50&&jint1<1024&&er1==1){jint1 = adv1;delay_ms(300);er1=0;jxvop=0;jxvcl=0;} if( er1==1){OLED_ShowString(57,0,"AD ER ",16);}else{OLED_ShowString(57,0,"AD ",16);} } // //Îı¾ÏÔʾ if (modv==2){OLED_ShowString(57,0,"Initial ",16);} //if (modv==3){OLED_ShowString(57,0,"Grade ",16);} if (modv==4){OLED_ShowString(57,0,"Position ",16);} if (modv==5){OLED_ShowString(57,0,"Accuracy ",16);} if (modv==6){OLED_ShowString(57,0,"Median ",16);} if (modv==7){OLED_ShowString(57,0,"A-test ",16);} if (k1>0){a1=0;} if (k3>0){a2=0;} //¿ª¹Ø´ÎÊý if (L1==0 && l1_bz==0){L1T++;l1_bz=1;} if (L1==1){l1_bz=0;} if (L2==0 && l2_bz==0){L2T++;l2_bz=1;} if (L2==1){l2_bz=0;} if (L3==0 && l3_bz==0){L3T++;l3_bz=1;} if (L3==1){l3_bz=0;} //01ģʽѡÔñ if ((k10==0 &&k3>0&&k2>0)&&modv<2&&a1==0) { switch(modv) { case 0:modv=1;jint=jint2;a1=1; OLED_Clear();a1=1;lcd0=0;break; case 1:modv=0;a1=1;OLED_Clear(); a1=1;lcd0=0;break; default:modv=0;a1=1;OLED_Clear();a1=1;lcd0=0;break; } } if ((k30==0 &&k1>0&&k2>0)&&modv<2&&a2==0) { switch(modv) { case 0:modv=1;jint=jint2;a1=1; OLED_Clear();a2=1;lcd0=0;break; case 1:modv=0;a1=1;OLED_Clear(); a2=1;lcd0=0;break; default:modv=0;a1=1;OLED_Clear();a2=1;lcd0=0;break; } } // if ((modv==0 || modv==1)&&(k1==0 && k3==0&&k2>0)){modv=2;OLED_Clear() ;}//½øÈë³õʼ»¯²Ëµ¥ //½øÈë²Ëµ¥ if ((k1==0 && k3==0&&k2>0) ) { if (a1==0){ switch(modv) { case 0:modv=2;a1=1;OLED_Clear();break; case 1:modv=2;a1=1;OLED_Clear();break; //case 2:modv=3;a1=1;OLED_Clear();break; case 2:modv=4;a1=1;OLED_Clear();break; case 4:modv=5;a1=1;OLED_Clear();break; case 5:modv=6;a1=1;OLED_Clear();break; case 6:modv=7;a1=1;OLED_Clear();break; case 7:modv=8;a1=1;OLED_Clear();break; case 8:modv=9;a1=1;OLED_Clear();break; case 9:modv=0;a1=1;OLED_Clear();lcd0=0;break; default:modv=0;a1=1;OLED_Clear();lcd0=0;break; } } } // if (modv==4)//³õʼλÖà { if (k10==0&&k3>0&&k2>0&&a1==0){if (x0>0){x0=x0-1;}a1=1;} if (k30==0&&k1>0&&k2>0&&a2==0){if (x0<3){x0=x0+1;}a2=1;} } if (modv==5)//¾«¶È { if (k10==0&&k3>0&&k2>0&&a1==0){if (x1>0){x1=x1-1;}a1=1;} if (k30==0&&k1>0&&k2>0&&a2==0){if (x1<9){x1=x1+1;}a2=1;} } //*/ if (modv==7) { if (k10==0&&k3>0&&k2>0){if (i_tim>1){i_tim=i_tim-1;}} if (k30==0&&k1>0&&k2>0){if (i_tim<255){i_tim=i_tim+1;}} if (k1==0&&k3>0&&k2==0&&a1==0){if (zdkzv>0){zdkzv=zdkzv-1;}a1=1;} if (k3==0&&k1>0&&k2==0&&a2==0){if (zdkzv<4){zdkzv=zdkzv+1;}a2=1;} } if (modv==2)//³õʼ»¯ { Y1=0;Y2=1; if (k1==0 && k2==0&&k3>0){ks=1;Y1=0;Y2=1;} if ( k3==0 && k2==0&&k1>0){ks=1;Y1=0;Y2=1;} if ( ks==1) { if ( jva2==0) { Y1=1;Y2=0;delay_ms(1500); OLED_ShowString(30,6," Waiting...",16); Y2=1;Y1=0;openv=Get_ADC10bitResult(7)+1;jint2=openv+abs((closev-openv)/2); delay_ms(3000); openv=Get_ADC10bitResult(7)-1;jint2=openv+abs((closev-openv)/2); delay_ms(300); jv1=Get_ADC10bitResult(7); if (abs(openv-jv1)<5){jva2=1;Y1=1;delay_ms(300);Y1=1;} //jva2=1; } if (jva2==1) { Y1=1;Y2=0;delay_ms(300);closev=Get_ADC10bitResult(7)-0;jint2=openv+abs((closev-openv)/2); delay_ms(3000); closev=Get_ADC10bitResult(7)-1;jint2=openv+abs((closev-openv)/2); delay_ms(1000); jv1=Get_ADC10bitResult(7); if (abs(closev-jv1)<5){jva2=2;Y2=1;tm10=0;delay_ms(300);Y2=1;} //jva2=2; } if(jva2==2)//¹ØÊ±¼ä { if (Y2==1){Y1=0;ksjv=1;} if(abs(openv-Get_ADC10bitResult(7))<10){Y1=1;ksjv=0;jva2=3;tm20=0;delay_ms(2000);Y1=1;} //jva2=3; } if(jva2==3)//¿ªÊ±¼ä { Y1=1; if (Y1==1){Y2=0;ksjv2=1;} if(abs(closev-Get_ADC10bitResult(7))<10){ksjv2=0;ks=0;jva2=0;delay_ms(1500);Y2=1; closev=closev+0; write_cs(); tm30=tm10; tm31=tm20; OLED_ShowString(30,6," OK! ",16); delay_ms(500);modv=modv0;OLED_Clear();lcd0=0; } } } } /* if (modv==3)//Çý¶¯µÈ¼¶ { if (k10==0&&k3>0&&k2>0&&a1==0){if (g1>0){g1=g1-1;}a1=1;} if (k30==0&&k1>0&&k2>0&&a2==0){if (g1<10){g1=g1+1;}a2=1;} } */ if (k20==0&&k10>0&&k30>0&&bca==0)//±£´æÉèÖà { bca=1; OLED_ShowString(30,6," Waiting...",16); write_cs(); Y1=1;Y2=1; OLED_ShowString(30,6," OK ",16); } if (k20>0)bca=0; if (modv==6)//ÖмäλÉèÖà { if (jint2<openv){jint2=openv+(closev-openv)/2;} if (jint2>closev){jint2=openv+(closev-openv)/2;} if(k10==0&&k2>0&&k3>0&&jint2>openv){jint2=jint2-1;} if(k30==0&&k2>0&&k1>0&&jint2<closev){jint2=jint2+1;} //xst=((abs(jint2-openv)*1000/(closev-openv)))/10; //if (((abs(jint2-openv)*1000/(closev-openv)))/10<5){xst=0;} //if (((abs(jint2-openv)*1000/(closev-openv)))/10>100){xst=100;} xst=((jint2-openv)*1000/(closev-openv))/10; if (xst<5){xst=0;} if (xst>100){xst=0;} } //³õʼλ if (modv==0 && X2B==1) { if ( abs(jinr1-jinr0)>10) {X2=1;X1=1;X3=1;X2B=0;} if ( (abs(jint3-jinr0)>10) && x2==1) {X2=1;X1=1;X3=1;X2B=0;} if (X1==0 ){X2=1;X3=1;X2B=0;} if (X2==0 ){X1=1;X3=1;X2B=0;} if (X3==0 ){X2=1;X1=1;X2B=0;} if (x3>0&& x2==1){X2B=0;} } if (modv==1 && X2B==1) { if (x3>0&& x2==1){X2B=0;} if (X1==0 ){X2=1;X3=1;X2B=0;} if (X2==0 ){X1=1;X3=1;X2B=0;} if (X3==0 ){X2=1;X1=1;X2B=0;} } // //È«¿ªÈ«¹Ø²Ù×÷X1X3 if (modv==0 || modv==1) { if (modv==0) { jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-200ul)))/10000ul); if (jint<openv){jint=openv;} if (jint>closev){jint=closev;} if (jint<(openv+5)&& X2==1 && X3==1){X1=0;}else{X1=1;} if (jint>(closev-5)&& X2==1 && X1==1){X3=0;}else{X3=1;} } if ((modv==0 &&(X1==0||X3==0||jxvcl==1||jxvop==1)&&x2==0)||(modv==0 &&(x3==1||x3==3)&&x2==1)||(modv==1 && (X1==0||X3==0)&&x2==0)||(modv==1 && (x3==1||x3==3)&&x2==1)) { tj_yc1=0;tj_yc2=0;tj_yc3=0;tj_ma0=0;tj_ma1=0; if (((X1==0&&x2==0)||(jxvop==1&&x2==0)||(x3==1&&x2==1))&&openv<(jinr-2)){L2=1;Y4=1;Y2=1;if (Y3==1){Y1=0;}jint=openv;} if (((X3==0&&x2==0)||(jxvcl==1&&x2==0)||(x3==3&&x2==1))&&closev>(jinr+2)){L2=1;Y4=1;Y1=1;Y2=0;jint=closev;} oled_s1(); if ((X1==0&&x2==0)||(x3==1&&x2==1)){jxvop=0;} if ((X3==0&&x2==0)||(x3==3&&x2==1)){jxvcl=0;} if (kzmd==0) { if (x2==0) { if (((jinr<=openv)||(jinr<openv+2))&&(X1==0||jxvop==1)){jxvop=0;Y1=1;} if (((jinr>=closev)||(jinr>closev-2))&&(X3==0||jxvcl==1)){jxvcl=0;Y2=1;} } if (x2==1) { if (((jinr<=openv)||(jinr<openv+2))&&x3==1){jxvop=0;Y1=1;} if (((jinr>=closev)||(jinr>closev-2))&&x3==3){jxvcl=0;Y2=1;}//¿ª } } if(bz_dz==0) { if ((jinr<=openv)||(jinr<openv+6)) {L2=1;Y4=1;L3=1;L1=0;Y3=0;xsr=0;jrtem1=1200;csv=1;}else{L1=1;Y3=1;csv=0;} if ((jinr>=closev)||(jinr>closev-6)){L1=1;L2=1;Y4=1;L3=0;Y5=0;xsr=100;jrtem1=6000;csv=1;}else{L3=1;Y5=1;csv=0;} } else{ //¹ýŤ¸´Î» //if ((jinr<=openv)||(jinr<openv+4)) {bz_dz=0;} //if ((jinr>=closev)||(jinr>closev-4)) {bz_dz=0;} if (jinr<openv+4) {bz_dz=0;} if (jinr>closev-4) {bz_dz=0;} } //¹ØÊ±¼ä if ((X3==0)||(x3==3&&x2==1)){ksjv11=0;tm11=0;}//&&x2==0 if ((X1==0)||(x3==1&&x2==1)){ksjv12=0;tm21=0;}//&&x2==0 if (((X1==0) ||(x3==1&&x2==1)) && L1==1&&L3==0){ksjv11=1;}//&&x2==0 if(L1==0){ksjv11=0;} //¿ªÊ±¼ä if (((X3==0)||(x3==3&&x2==1)) && L3==1&&L1==0){ksjv12=1;}//&&x2==0 if(L3==0){ksjv12=0;} LoadPWM(jrtem1); delay_ms(2); //if ((L1==0||L3==0 )&& csvbz==1){jinr0 = Get_ADC10bitResult(6);X2B=1;} //if ((L1==0||L3==0 )&& csvbz==1){jinr0 = adv1();X2B=1;} if ((L1==0||L3==0 )&& csvbz==1){jinr0 =Get_ADC10bitResult(6);X2B=1;} } // //Y1¹ØY2¿ª //4-20MAģʽ //Get_ADC10bitResult(6); jint1 = Get_ADC10bitResult(6); //jint1 = adv1(); jinr = adv(); if (x2==1)//Ô¶³Ì¿ØÖÆÖмäÁ¿ { tj_ma0=0;tj_ma1=0; if (modv==0 && x3==0){jint=jint3;tj_yc1=1;}else{tj_yc1=0;} if (modv==0 && x3==2){jint=jint2;tj_yc2=1;}else{tj_yc2=0;} if (modv==1 && x3==2){jint=jint2;tj_yc3=1;}else{tj_yc3=0;} } else//±¾µØ¿ØÖÆÖмäÁ¿ { tj_yc1=0;tj_yc2=0;tj_yc3=0; if (modv==0 && X2==1&& X1==1&& X3==1&&jxvcl==0&&jxvop==0){jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-208ul)))/10000ul);}//+3ul;} if ((modv==0 && X2==0&& X1==1&& X3==1)||(modv==1&& X2==0&& X1==1&& X3==1) ){jint=jint2;} if (er1==1 && modv==0){ if (x0==1){jint=openv;} if (x0==2){jint=jint2;;} if (x0==3){jint=closev;} } if (er1==0 && modv==0 ){if (X2==1&& X1==1&& X3==1){jint=(unsigned long)(openv+(((closev-openv)*10000ul/817ul)*abs((jint1-208ul)))/10000ul);}} if ((modv==0 && X2==1&& X1==1&& X3==1&&jxvop==0&&jxvcl==0)||(modv==0 && X2==0&& X1==1&& X3==1)){tj_ma0=1;}else{tj_ma0=0;} if (modv==1 && X2==0&& X1==1&& X3==1){tj_ma1=1;}else{tj_ma1=0;} } if ((tj_ma0==1||tj_ma1==1||tj_yc1==1||tj_yc2==1||tj_yc3==1)) { if ((jint>(closev-1-x1) && jint<(closev+1+x1))){jint=closev;jxvcl=1;}else{jxvcl=0;} if ((jint>(openv-1-x1) && jint<(openv+1+x1))){jint=openv;jxvop=1; }else{jxvop=0;} xst=(abs(jint-openv)*100/(closev-openv)); oled_s1(); if (jint<openv){jint=openv;} if (jint>closev){jint=closev;} if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint<jinr ) { if (jint<(jinr-1-x1) )//¹Ø***********OPENV { jxvcl=0; oled_s1(); if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (tjdz_bz2_b1==0) {if (Y3==1){Y1=0;Y2=1;}}else{Y1=1;Y2=1;} if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;} if (L2==0&&bz_dz==0&&Y1==0){kgcs_bz1++;} } } if (jint>jinr ) { if (jint>(jinr+1+x1) )//¿ª***** { jxvop=0; oled_s1(); if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint>(jinr-1-x1) && jint<(jinr+1+x1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (tjdz_bz2_b==0) {Y1=1;Y2=0;}else{Y2=1;Y1=1;} if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} if (jint>(jinr-1-x1) && jint<(jinr+1+x1)) {Y2=1;} if (L2==0&&bz_dz==0&&Y2==0){kgcs_bz2++;} } } jinr = adv(); if (jint>(jinr-1) && jint<(jinr+1)){Y1=1;Y2=1;kgcs_bz1=0;kgcs_bz2=0;} //ָʾµÆ if(bz_dz==0) { if (jinr>(openv-(4+x1)) && jinr<(openv+(4+x1)) ) {L1=0;Y3=0;xsr=0;jrtem1=1200;csv=1;bz_dz=0;}else{L1=1;Y3=1;csv=0;} if (jinr>(closev-(4+x1)) && jinr<(closev+(4+x1)) ){L3=0;Y5=0;xsr=100;jrtem1=6000;csv=1;bz_dz=0;}else{L3=1;Y5=1;csv=0;} if (jint>(openv-(4+x1)) && jint<(openv+(4+x1)) ) {xst=0;} if (jint>(closev-(4+x1)) && jint<(closev+(4+x1)) ){xst=100;} if (jint>(jinr-(4+x1)) && jint<(jinr+(4+x1)) && L1==1 && L3==1) {L2=0;Y4=0;csv=1;}else{L2=1;Y4=1;csv=0;bz_dz=0;} } else{ //¹ýŤ¸´Î» if (jinr>(openv-(4+x1)) && jinr<(openv+(4+x1)) ) {bz_dz=0;} if (jinr>(closev-(4+x1)) && jinr<(closev+(4+x1))) {bz_dz=0;} if (jint>(jinr-(4+x1)) && jint<(jinr+(4+x1)) ) {bz_dz=0;} } LoadPWM(jrtem1);delay_ms(1); //if ((L1==0||L2==0||L3==0 )&& csvbz==1){Get_ADC10bitResult(6);jinr0 = Get_ADC10bitResult(6);X2B=1;} if ((L1==0||L2==0||L3==0 )&& csvbz==1){jinr0 = Get_ADC10bitResult(6);X2B=1;} //} } } //ģʽÏÔʾ if (modv==3 || modv==4 ||modv==5 ||modv==6) { OLED_ShowString(1,0," DATA :",16); OLED_ShowString(1,4," Setup:",16); } if (modv==6)//Öмäλ { OLED_ShowNum(55,4,xst,4,16); OLED_ShowString(90,4,"%",16); } if (modv==2)//³õʼ»¯ { OLED_ShowString(1,0," DATA :",16); OLED_ShowString(1,2," KEY1+KEY2",16); } if (modv==4)//³õʼλÖà { OLED_ShowNum(55,4,x0,4,16); } if (modv==5)//¾«¶È { OLED_ShowNum(55,4,x1,4,16); } /* if (modv==3)//Çý¶¯µÈ¼¶ { //if (g1==0){OLED_ShowString(57,4,"Auto ",16);}else{OLED_ShowString(57,4,"Fix ",16);} OLED_ShowString(57,4,"Fix ",16); OLED_ShowNum(88,4,g1,2,16); } */ if (modv==7) { OLED_ShowString(1,0," DATA :",16); OLED_ShowString(1,2," Type:",16); OLED_ShowString(1,4," time:",16); OLED_ShowString(1,4," time:",16); OLED_ShowNum(50,2,zdkzv,1,16); //zdkzv:1-13,2-12321,3-1231,4-1321 OLED_ShowNum(50,4,i_tim,3,16); OLED_ShowString(100,4,"s",16); switch(zdkzv) { case 0:OLED_ShowString(70,2," OFF ",16); break; case 1:OLED_ShowString(70,2," 13 ",16); break; case 2:OLED_ShowString(70,2," 12321",16); break; case 3:OLED_ShowString(70,2," 1231 ",16); break; case 4:OLED_ShowString(70,2," 1321 ",16); break; } } if (modv==8) { //OLED_ShowString(1,0," Model:",16); OLED_ShowString(1,0," ID:",16); OLED_ShowString(1,2," T-OP:",16); OLED_ShowString(1,4," T-CL:",16); OLED_ShowNum(34,0,IDV1,5,16);OLED_ShowNum(74,0,IDV2,5,16); //OLED_ShowString(35,0,LCD_line0,16); OLED_ShowNum(50,2,tm22,6,16); OLED_ShowNum(50,4,tm12,6,16); OLED_ShowNum(0,6,tim0/60,6,16);OLED_ShowString(50,6," H ",16); OLED_ShowNum(75,6,tim0%60,2,16);OLED_ShowString(95,6," M ",16); } if (modv==9) { //OLED_ShowString(1,0," Model:",16); OLED_ShowString(1,0,"N-OP:",16); OLED_ShowString(1,2,"N-MD:",16); OLED_ShowString(1,4,"N-CL:",16); OLED_ShowNum(40,0,L1T,8,16); OLED_ShowNum(40,2,L2T,8,16); OLED_ShowNum(40,4,L3T,8,16); //OLED_ShowNum(0,6,tm10,4,16); //OLED_ShowNum(60,6,tm20,4,16); } } } void oled_s1() { //jint1 = Get_ADC10bitResult(6); jint1 =adv1(); jinr = adv(); oled_x(); if ((abs(jint-openv)*100/(closev-openv))<4){xst=0;} if ((abs(jint-openv)*100/(closev-openv))>97){xst=100;} if ((abs(jinr-openv)*100/(closev-openv))<4){xsr=0;} if ((abs(jinr-openv)*100/(closev-openv))>97){xsr=100;} jrtem1=(120000ul+48ul*((abs(jinr-openv)*10000ul/(closev-openv))))/100ul; jrtem1=jrtem1-jrtem1/100ul; if (xst==0){jrtem1=1200;} if (xst==100){jrtem1=6000;} LoadPWM(jrtem1); } void oled_x() { jinr = adv(); xst=(abs(jint-openv)*100/(closev-openv)); xsr=(abs(jinr-openv)*100/(closev-openv)); } void kgsj() { if (tm10>=0 && tm10<100){jdjs_v=20;jdjs_v1=22;jdjs_v10=1;jdjs_v20=1;} if (tm10>=100 && tm10<150){jdjs_v=16;jdjs_v1=15;jdjs_v10=1;jdjs_v20=1;} if (tm10>=150 && tm10<200){jdjs_v=12;jdjs_v1=12;jdjs_v10=1;jdjs_v20=1;} if (tm10>=200 && tm10<280){jdjs_v=11;jdjs_v1=11;jdjs_v10=1;jdjs_v20=1;} if (tm10>=280 && tm10<380){jdjs_v=10;jdjs_v1=10;jdjs_v10=1;jdjs_v20=1;} if (tm10>=380 && tm10<500){jdjs_v=9;jdjs_v1=9;jdjs_v10=2;jdjs_v20=2;} if (tm10>=500 && tm10<650){jdjs_v=8;jdjs_v1=8;jdjs_v10=2;jdjs_v20=2;} if (tm10>=650 && tm10<850){jdjs_v=7;jdjs_v1=7;jdjs_v10=2;jdjs_v20=2;} if (tm10>=850 && tm10<1200){jdjs_v=6;jdjs_v1=6;jdjs_v10=2;jdjs_v20=2;} if (tm10>=1200 && tm10<1500){jdjs_v=5;jdjs_v1=5;jdjs_v10=2;jdjs_v20=3;} if (tm10>=1500 && tm10<2000){jdjs_v=4;jdjs_v1=4;jdjs_v10=3;jdjs_v20=3;} if (tm10>=2000 && tm10<2500){jdjs_v=3;jdjs_v1=3;jdjs_v10=3;jdjs_v20=3;} if (tm10>=2500 && tm10<3000){jdjs_v=2;jdjs_v1=2;jdjs_v10=4;jdjs_v20=4;} if (tm10>=3000 && tm10<4000){jdjs_v=1;jdjs_v1=1;jdjs_v10=5;jdjs_v20=5;} if (tm10>=4000 && tm10<6000){jdjs_v=1;jdjs_v1=1;jdjs_v10=6;jdjs_v20=6;} if (tm10>=6000 && tm10<30000){jdjs_v=1;jdjs_v1=1;jdjs_v10=7;jdjs_v20=7;} jdjs_v=jdjs_v+(11-x1)/3; jdjs_v1=jdjs_v; } long int adv() { Get_ADC10bitResult(7); for(j=0, i=0; i<16; i++) { j += Get_ADC10bitResult(7); } return (j/16); } int adv1() { //Get_ADC10bitResult(6); int jst1=0; int ist1; jst1 = Get_ADC10bitResult(6); for( ist1=0; ist1<64; ist1++) { jst1 = (jst1 +Get_ADC10bitResult(6))/2; } return jst1; } //======================================================================== // º¯Êý: void PrintString1(u8 *puts) // ÃèÊö: ´®¿Ú1·¢ËÍ×Ö·û´®º¯Êý¡£ // ²ÎÊý: puts: ×Ö·û´®Ö¸Õë. // ·µ»Ø: none. // °æ±¾: VER1.0 // ÈÕÆÚ: 2014-11-28 // ±¸×¢: //======================================================================== /*void PrintString1(u8 *puts) //·¢ËÍÒ»¸ö×Ö·û´® { for (; *puts != 0; puts++) //Óöµ½Í£Ö¹·û0½áÊø { SBUF = *puts; B_TX1_Busy = 1; while(B_TX1_Busy); } } */ //======================================================================== // º¯Êý: void UART1_config(u8 brt) // ÃèÊö: UART1³õʼ»¯º¯Êý¡£ // ²ÎÊý: brt: Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. // ·µ»Ø: none. // °æ±¾: VER1.0 // ÈÕÆÚ: 2014-11-28 // ±¸×¢: //======================================================================== void UART1_config(u8 brt) // Ñ¡Ôñ²¨ÌØÂÊ, 2: ʹÓÃTimer2×ö²¨ÌØÂÊ, ÆäËüÖµ: ʹÓÃTimer1×ö²¨ÌØÂÊ. { /*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷2 *****************/ if(brt == 2) { AUXR &= ~(1<<4); //Timer stop ²¨ÌØÂÊʹÓÃTimer2²úÉú AUXR |= 0x01; //S1 BRT Use Timer2; AUXR |= (1<<2); //Timer2 set as 1T mode TH2 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256); TL2 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256); AUXR |= (1<<4); //Timer run enable } /*********** ²¨ÌØÂÊʹÓö¨Ê±Æ÷1 *****************/ else { TR1 = 0; AUXR &= ~0x01; //S1 BRT Use Timer1; AUXR |= (1<<6); //Timer1 set as 1T mode TMOD &= ~(1<<6); //Timer1 set As Timer TMOD &= ~0x30; //Timer1_16bitAutoReload; TH1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) / 256); TL1 = (u8)((65536UL - (MAIN_Fosc / 4) / Baudrate1) % 256); ET1 = 0; //½ûÖ¹ÖÐ¶Ï INT_CLKO &= ~0x02; //²»Êä³öʱÖÓ TR1 = 1; } /*************************************************/ SCON = (SCON & 0x3f) | 0x40; //UART1ģʽ, 0x00: ͬ²½ÒÆÎ»Êä³ö, 0x40: 8λÊý¾Ý,¿É±ä²¨ÌØÂÊ, 0x80: 9λÊý¾Ý,¹Ì¶¨²¨ÌØÂÊ, 0xc0: 9λÊý¾Ý,¿É±ä²¨ÌØÂÊ PS = 1; //¸ßÓÅÏȼ¶ÖÐ¶Ï ES = 1; //ÔÊÐíÖÐ¶Ï REN = 1; //ÔÊÐí½ÓÊÕ P_SW1 &= 0x3f; P_SW1 |= 0x40; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7 (±ØÐëʹÓÃÄÚ²¿Ê±ÖÓ) //PCON2 |= (1<<4); //ÄÚ²¿¶Ì·RXDÓëTXD, ×öÖмÌ, ENABLE,DISABLE //PCON|=0x80; //´®¿Ú²¨ÌØÂʼӱ¶ B_TX1_Busy = 0; TX1_Cnt = 0; RX1_Cnt = 0; } //======================================================================== // º¯Êý: void UART1_int (void) interrupt UART1_VECTOR // ÃèÊö: UART1ÖжϺ¯Êý¡£ // ²ÎÊý: nine. // ·µ»Ø: none. // °æ±¾: VER1.0 // ÈÕÆÚ: 2014-11-28 // ±¸×¢: //======================================================================== void UART1_int (void) interrupt 4 { if(RI) { RI = 0; if(RX1_Cnt >= RX1_Lenth) RX1_Cnt = 0; //·ÀÒç³ö RX1_Buffer[RX1_Cnt++] = SBUF; if (RX1_Buffer[0]!=add_v) RX1_Cnt = 0;//±¾»úµØÖ·ÅÐ¶Ï } if(TI) { TI = 0; //UART1_485_DE=1; if(TX_read != TX_write) { // UART1_485_DE=1; SBUF = TX1_Buffer[TX_read]; if(++TX_read >= TX1_Lenth) TX_read = 0; } //else {B_TX1_Busy = 0;UART1_485_DE=0;} else {B_TX1_Busy = 0;} } } void TX1_write2buff(u8 dat) //дÈë·¢ËÍ»º³å£¬Ö¸Õë+1 { TX1_Buffer[TX_write] = dat; //×°·¢ËÍ»º³å if(++TX_write >= TX1_Lenth) TX_write = 0; if(B_TX1_Busy == 0) //¿ÕÏÐ { TI = 1; //´¥·¢·¢ËÍÖÐ¶Ï B_TX1_Busy = 1; //±ê־æ } } unsigned int CRC16(unsigned char * puchMsg, unsigned int usDataLen) { unsigned int temp=0xffff,temp1,i,j; for(i=0;i<usDataLen;i++) { temp^=*(puchMsg+i); for(j=0;j<8;j++) { temp1=temp; temp>>=1; if(temp1&0x0001) temp^=0xa001; } } return(temp); } void write_fzcs(void) { settmp1[0]=tim0%256; settmp1[1]=(tim0/256)/256; settmp1[2]=(tim0/256)%256; settmp1[3]=L1T%256; settmp1[4]=(L1T/256)/256; settmp1[5]=(L1T/256)%256; settmp1[6]=L2T%256; settmp1[7]=(L2T/256)/256; settmp1[8]=(L2T/256)%256; settmp1[9]=L3T%256; settmp1[10]=(L3T/256)/256; settmp1[11]=(L3T/256)%256; settmp1[12]=tm22/256; settmp1[13]=tm22%256; settmp1[14]=tm12/256; settmp1[15]=tm12%256; settmp1[16]=IDV1/256; settmp1[17]=IDV1%256; settmp1[18]=IDV2/256; settmp1[19]=IDV2%256; EEPROM_SectorErase(0X200);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X200,settmp1,20);//дÈëģʽ delay_ms(10); } void write_cs(void) { settmp[0]=openv/256; settmp[1]=openv%256; settmp[2]=closev/256; settmp[3]=closev%256; settmp[4]=jint2/256; settmp[5]=jint2%256; if (modv==0||modv==1){settmp[6]=modv;modv0=modv;}else{settmp[6]=modv0;} settmp[7]=g1; settmp[8]=tm10/256; settmp[9]=tm10%256; settmp[10]=tm20/256; settmp[11]=tm20%256; settmp[12]=x0; settmp[13]=x1; settmp[14]=add_v; settmp[15]=x5; settmp[16]=x6; settmp[17]=x7; settmp[18]=zdkzv; settmp[19]=i_tim; EEPROM_SectorErase(0X0);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X0,settmp,20);//дÈëģʽ delay_ms(10); } void modbusv(void)//¶ÁÈ¡ËùÓвÎÊý {//01 01 00 65 00 2E 20 XX XX char e1=0; u16 crc; if(RX1_Cnt>7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· if (RX1_Buffer[1]==0X01 &&RX1_Buffer[2]==0X00 &&RX1_Buffer[3]==0X65 &&RX1_Buffer[5]==0X2E &&RX1_Buffer[6]==0X20 && e1==0) { modbus_bw(); RX1_Cnt = 0; } } } void modbus_bw(void)//×Ô¶¯±¨ÎÄ--¶ÁÈ¡ËùÓвÎÊý { u8 i; u8 XV1,XV2; u8 X201=0,X202=0,X203=0; u8 Y101=0,Y102=0,Y103=0,Y104=0,Y105=0; u8 L101=0,L102=0,L103=0; u16 crc1; u8 V3[48]; if (modv==0 || modv==1)//01ģʽÏÔʾ { if (((X1==0&&x2==0)||(x3==1&&x2==1))){xst=0;jint=openv;} if (((X3==0&&x2==0)||(x3==3&&x2==1))){xst=100;jint=closev;} } X201=X1;X202=X2;X203=X3; Y101=Y1;Y102=Y2;Y103=Y3;Y104=Y4;Y105=Y5; L101=L1;L102=L2;L103=L3; XV1=_bin(X201,X202,X203,0,0,0,0,0); XV2=_bin(Y101,Y102,Y103,Y104,Y105,L101,L102,L103); V3[6]=XV1;V3[7]=XV2; V3[0]=add_v;//µØÖ· V3[1]=0X01;//Ö¸Áî V3[2]=0X24;//Êý¾Ý³¤¶È V3[3]=0X00+modv;//ģʽ V3[4]=0X00+g1;//Çý¶¯Ä£Ê½ V3[5]=0X00+x1;//¾«¶È V3[6]=0X00+x0;//³õʼλÖà V3[7]=0X00+xst;//Öмäλ V3[8]=0X00+x5;//ÐÄÌø°ü V3[9]=0X00+x6;//×Ô¶¯±¨ÎÄ V3[10]=0X00+x7;//µØÖ·ÏÔʾ V3[11]=zdkzv;//×Ô¶¯¿ØÖÆÀàÐÍ V3[12]=i_tim;//×Ô¶¯¿ØÖƼä¸ô V3[13]=XV1;//X¶Ë V3[14]=XV2;//Y¶Ë V3[15]=jint/256;//ÊäÈë V3[16]=jint%256; V3[17]=jinr/256;//Êä³ö V3[18]=jinr%256; V3[19]=0X00+xst;//ÊäÈ뿪¶È V3[20]=0X00+xsr;//¿ª¶È V3[21]=tim0%256;//ÔËÐÐʱ¼ä·ÖÖÓtim0=(V3[16]*256+V3[17])*256+V3[15]; V3[22]=(tim0/256)/256; V3[23]=(tim0/256)%256; V3[24]=L1T%256;//¿ª´ÎÊý V3[25]=(L1T/256)/256; V3[26]=(L1T/256)%256; V3[27]=L2T%256;//Öмä´ÎÊý V3[28]=(L2T/256)/256; V3[29]=(L2T/256)%256; V3[30]=L3T%256;//¹Ø´ÎÊý V3[31]=(L3T/256)/256; V3[32]=(L3T/256)%256; V3[33]=tm22/256;//¿ªÊ±¼ä V3[34]=tm22%256; V3[35]=tm12/256;//¹ØÊ±¼ä V3[36]=tm12%256; V3[37]=openv/256;//openv V3[38]=openv%256; V3[39]=closev/256;//closev V3[40]=closev%256; V3[41]=IDV1/256;//idǰ5λ V3[42]=IDV1%256; V3[43]=IDV2/256;//idºó5λ V3[44]=IDV2%256; V3[45]=0X20;//ÉèÖÃÀàÐÍ0X01µç¶¯//0X20Æø¶¯¿ª¹ØºÐ crc1=CRC16(V3,46); V3[46]=crc1%256; V3[47]=crc1/256; for(i=0; i<48; i++) {TX1_write2buff(V3[i]);} //Êý¾Ý·µ»Ø } int modbus_ex(char x)//²ÎÊý±à¼­ {//01 06 01 F5 00 01 20 XX XX u8 i; u8 rx3; u16 crc; char e1=0; switch(x) { case 1:rx3=0XF1;break;//µØÖ·add_v 01 06 01 F1 00 01 20 XX XX case 2:rx3=0XF2;break;//ģʽmodv 01 06 01 F2 00 01 20 XX XX case 3:rx3=0XF3;break;//±ê¶¨ 01 06 01 F3 00 01 20 XX XX case 4:rx3=0XF4;break;//¾«¶Èx1 01 06 01 F4 00 01 20 XX XX case 5:rx3=0XF5;break;//³õʼλÖÃx0 01 06 01 F5 00 01 20 XX XX case 6:rx3=0XF6;break;//ÖмäÖµxst 01 06 01 F6 00 01 20 XX XX case 7:rx3=0XF7;break;//network--x2 01 06 01 F7 00 01 20 XX XX case 8:rx3=0XF8;break;//¿ª¹Ø¿ØÖÆ123--x3 01 06 01 F8 00 01 20 XX XX case 9:rx3=0XF9;break;//¿ª¶È¿ØÖÆ--x4 01 06 01 F9 00 01 20 XX XX case 10:rx3=0XFA;break;//ÐÄÌø°ü--x5 01 06 01 FA 00 01 20 XX XX case 11:rx3=0XFB;break;//×Ô¶¯±¨ÎÄ--x6 01 06 01 FB 00 01 20 XX XX case 12:rx3=0XFC;break;//µØÖ·ÏÔʾ--x7 01 06 01 FC 00 01 20 XX XX case 13:rx3=0XFD;break;//×Ô¶¯¿ØÖÆ--zdkzv 01 06 01 FD 00 01 20 XX XX case 14:rx3=0XFE;break;//ʱ¼ä¼ä¸ô--i_tim 01 06 01 FE 00 01 20 XX XX case 15:rx3=0XFF;break;//Êý¾Ý±£´æ--x8 01 06 01 FF 00 01 20 XX XX case 16:rx3=0XE1;break;//Çý¶¯g1 01 06 01 E1 00 01 20 XX XX case 17:rx3=0XE2;break;//Çý¶¯µ¥Ë«kzmd 01 06 01 E2 00 01 20 XX XX } if(RX1_Cnt > 7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0X01 && RX1_Buffer[3]==rx3 && RX1_Buffer[6]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî { for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔ­Ñù·µ»Ø RX1_Cnt = 0; return 1; } } return 0; } int modbus_zo(void)//ÔËÐÐÊý¾ÝÇå0¿ª¹ØÊ±¼äÔËÐÐʱ¼ä {//01 06 FF FF 00 00 20 FF FF---01 06 FF 00 00 20 u8 i; u16 crc; char e1=0; if(RX1_Cnt > 7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· // if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XFF && RX1_Buffer[3]==0XFF&& RX1_Buffer[4]==0X00&& RX1_Buffer[5]==0X00 && RX1_Buffer[6]==0X20&& RX1_Buffer[7]==0XFF&& RX1_Buffer[8]==0XFF&& e1==0)//¶ÁÈ¡ÊäÈëÃüÁî if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XFF && RX1_Buffer[5]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî { for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔ­Ñù·µ»Ø RX1_Cnt = 0; return 1; } } return 0; } int modbus_id(void)//IDÐÞ¸Ä {//01 06 EE EE 00 00 00 00 20 EE EE //01 06 EE 00 00 00 00 20 u8 i; u16 crc; char e1=0; if(RX1_Cnt > 7) { crc=CRC16(RX1_Buffer,RX1_Cnt-2); if (RX1_Buffer[RX1_Cnt-2]!=(crc%256) || RX1_Buffer[RX1_Cnt-1]!=(crc/256)) {RX1_Cnt = 0;e1=1;}//ÅжÏÊý¾ÝÊÇ·ñÕýÈ· if ( RX1_Buffer[1]==0X06 &&RX1_Buffer[2]==0XEE && RX1_Buffer[7]==0X20 && e1==0)//¶ÁÈ¡ÊäÈëÃüÁî { for(i=0; i<RX1_Cnt; i++) {TX1_write2buff(RX1_Buffer[i]);} //ÊÕµ½µÄÊý¾ÝÔ­Ñù·µ»Ø RX1_Cnt = 0; return 1; } } return 0; } void INIT_SET(void) { settmp1[0]=0; settmp1[1]=0; settmp1[2]=0; settmp1[3]=0; settmp1[4]=0; settmp1[5]=0; settmp1[6]=0; settmp1[7]=0; settmp1[8]=0; settmp1[9]=0; settmp1[10]=0; settmp1[11]=0; settmp1[12]=0; settmp1[13]=0; settmp1[14]=0; settmp1[15]=0; settmp1[16]=0; settmp1[17]=0; settmp1[18]=0; settmp1[19]=0; EEPROM_SectorErase(0X200);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X200,settmp1,20);//дÈëģʽ delay_ms(10); settmp[0]=0; settmp[1]=0; settmp[2]=0; settmp[3]=0; settmp[4]=0; settmp[5]=0; settmp[6]=0; settmp[7]=0; settmp[8]=0; settmp[9]=0; settmp[10]=0; settmp[11]=0; settmp[12]=0; settmp[13]=0; settmp[14]=0; settmp[15]=0; settmp[16]=0; settmp[17]=0; settmp[18]=0; settmp[19]=0; settmp[20]=1; EEPROM_SectorErase(0X0);//²Á³ýEEPROM delay_ms(10); EEPROM_write_n(0X0,settmp,21);//дÈëģʽ delay_ms(10); }
最新发布
06-27
<think>我们正在分析一段用于单片机控制的C语言代码,涉及ADC输入、PWM输出、串口通信和OLED显示功能。根据引用内容:1.OLED_WriteCommand()函数用于向OLED发送命令(引用[1])。2.PWM输出需要选择带定时器的GPIO引脚,并且配置定时器产生方波。同时,在PWM.C文件中引入OLED头文件以实现OLED显示(引用[2])。3.引用[3]提供了STM32F103C8的部分引脚定义,包括PWM输出引脚(如PB8、PB9、PA8)、ADC输入引脚(如PA0-PA7、PB0-PB1)、串口引脚(PA9、PA10)以及I2C引脚(PB6、PB7)等。同时提到DHT11温湿度传感器的使用。因此,我们可以推测用户提供的代码可能包含以下模块:-OLED显示模块:通过I2C通信(使用PB6和PB7)控制OLED。-PWM模块:使用定时器(如TIM4)的通道(如CH3、CH4)在PB8、PB9输出PWM波,或者使用TIM1_CH1在PA8输出PWM波。-ADC模块:使用ADC1采集模拟输入,例如从PA0-PA7或PB0-PB1读取电压值。-串口通信模块:使用USART1(PA9为Tx,PA10为Rx)与上位机通信。-可能还有DHT11温湿度传感器的读取(通过某个GPIO)。由于用户没有提供具体的代码,我们将根据上述引用内容构建一个示例框架,并解释各个模块的功能和实现方法。注意:以下代码仅为示例,实际代码需要根据具体硬件连接和需求编写。</think>### 单片机系统功能集成分析 基于引用内容,您的代码需实现**ADC采集、PWM输出、串口通信、OLED显示**四大功能模块。以下是关键实现要点与示例框架: --- #### **1. OLED显示模块** - **核心函数**:`OLED_WriteCommand()`(发送命令)和`OLED_WriteData()`(发送数据) - **通信协议**:I²C(需连接**PB6(SCL)、PB7(SDA)**) ```c // 示例:显示字符串 void OLED_ShowString(uint8_t x, uint8_t y, char *str) { while (*str) { OLED_WriteData(*str++); // 逐字符写入 } } ``` > 引用[1]说明I²C通信时序:起始信号→设备地址→命令标志→命令字节→停止信号。 --- #### **2. PWM输出模块** - **硬件依赖**:定时器通道引脚(如**PB8(TIM4_CH3)、PB9(TIM4_CH4)、PA8(TIM1_CH1)**) - **配置步骤**: 1. 使能定时器时钟 2. 配置PWM模式(如TIM_OCMode_PWM1) 3. 设置周期/占空比 ```c // 初始化TIM4_CH3 (PB8) TIM_OCInitTypeDef pwmConfig; pwmConfig.TIM_OCMode = TIM_OCMode_PWM1; pwmConfig.TIM_Pulse = 50; // 占空比50% HAL_TIM_PWM_ConfigChannel(&htim4, &pwmConfig, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); ``` > 引用[2]强调必须选择带定时器的GPIO引脚,并在代码中集成OLED显示功能。 --- #### **3. ADC采集模块** - **输入引脚**:**PA0-PA7(ADC1_IN0-IN7)、PB0-PB1(ADC1_IN8-IN9)** - **关键配置**: - 采样周期(如ADC_SAMPLETIME_55CYCLES) - 连续扫描模式 ```c // 启动ADC1连续转换 ADC_ChannelConfTypeDef adcConfig; adcConfig.Channel = ADC_CHANNEL_0; // PA0 adcConfig.Rank = 1; HAL_ADC_Start(&hadc1); uint16_t adc_value = HAL_ADC_GetValue(&hadc1); // 读取结果 ``` --- #### **4. 串口通信模块** - **引脚分配**:**PA9(USART1_Tx)、PA10(USART1_Rx)** - **数据收发**: ```c // 发送字符串 void UART_SendString(UART_HandleTypeDef *huart, char *str) { HAL_UART_Transmit(huart, (uint8_t *)str, strlen(str), HAL_MAX_DELAY); } // 接收中断回调 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART1) { // 处理接收数据 } } ``` --- #### **5. 系统集成示例** ```c int main(void) { // 初始化各模块 OLED_Init(); // I²C初始化 PWM_Init(); // 定时器配置 ADC_Init(); // ADC校准启动 UART_Init(); // 串口波特率设置 while (1) { uint16_t adc_val = Read_ADC(); // 读取ADC float voltage = adc_val * 3.3 / 4095; // 转换为电压 // OLED显示电压值 char msg[20]; sprintf(msg, "Voltage: %.2fV", voltage); OLED_ShowString(0, 0, msg); // 串口输出数据 UART_SendString(&huart1, msg); // 根据ADC值调整PWM占空比(例如控制LED亮度) __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, adc_val / 16); } } ``` > **引脚冲突规避**:避免复用同一引脚(如PB8同时用于PWM和I²C),参考引用[3]的引脚功能表规划硬件连接。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值