久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3174|回復: 3
收起左側

簡易風洞單片機程序12864顯示

[復制鏈接]
ID:195259 發表于 2017-5-1 15:41 | 顯示全部樓層 |閱讀模式
0.png


  1. /********************************************************************
  2. * 文件名  : 簡易風洞程序
  3. * 描述    :  
  4. * 創建人  : 王東表哥 2014年8月14日
  5. * 版本號  : 2.0
  6. ***********************************************************************/
  7. #include<STC12C5A60S2.h>
  8. #include <string.h>
  9. #include <stdio.h>
  10. #include <math.h>
  11. #include<absacc.h>
  12. #define uchar unsigned char
  13. #define uint  unsigned int
  14. #define KSP                0.18              //        比例        0.18
  15. #define KSI                0.0045                //  積分        0.0045
  16. #define KSD                0.0001                //        微分        0.0001
  17. #define KSP1        0.14                //        比例
  18. #define KSI1        0.0018                //         積分
  19. #define KSD1        0.0001                //        微分       
  20. uchar code IC_DAT[];
  21. uchar code pic1[];
  22. uchar code pic2[];
  23. uchar code pic3[];
  24. uint size=0;                                         //位置
  25. uint sizechange,changesize=150;        //高度變化停止用
  26. uint displaytime;                                  //定義屏幕刷新時間
  27. uint Timetime;                                  //計時
  28. uint RTimetime;                                  //響應
  29. uint MTimetime;                                  //保持
  30. uint ZTimetime;                                  //總時間
  31. uint Beep1stime;                                  //蜂鳴器1s定時時間
  32. uchar flagchangeStar;                        //任務變化標志位
  33. uchar shuzi;
  34. uchar code IC_DAT[]={
  35.                                                 "任務要求:      "  
  36.                                                 "響應時間:     s"
  37.                                                 "小球位置:    mm"
  38.                                                 "保持時間:      s"
  39.                                         };

  40. sbit RS  = P1^4;
  41. sbit WRD = P1^5;
  42. sbit E   = P1^6;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  43. sbit RES = P1^7;
  44. sbit RX  = P3^7;
  45. sbit TX  = P3^6;
  46. sbit BEEP  = P3^5;

  47. uchar key,keysign,beeptime;

  48. bit  flag =0;
  49. uchar flagStart=0;                  //啟動標志位
  50. uchar flagStart7=0;                  //啟動標志位7
  51. uchar flagStart6=0;                  //啟動標志位7
  52. uchar flagSep=0;                  //任務要求標志位
  53. uchar pidchang=0;                          //任務要求標志位
  54. uchar flagStart60=0;                          //任務6要求標志位
  55. uchar flagStart61=0;                        //任務6要求標志位1
  56. uchar beepchange1;
  57. uint time=0;
  58. int pwm=255;
  59. uint S=0,S1;

  60. void TransferData(char data1,bit DI);
  61. void display(void);
  62. void display_grapic(void);
  63. void delayms(uint n);
  64. void DisplayLine(uchar line1,uchar line2);
  65. void DisplayGraphic(uchar code *adder);
  66. void delay(uint m);
  67. void lcd_mesg(uchar code *adder1);
  68. void delay25us(void);  

  69. /*====================================================================================================
  70.     PID Function

  71.     The PID (比例、積分、微分) function is used in mainly
  72.     control applications. PIDCalc performs one iteration of the PID
  73.     algorithm.

  74.     While the PID function works, main is just a dummy program showing
  75.     a typical usage.
  76.         以下為PID參數定義
  77. =====================================================================================================*/

  78. typedef struct PID {

  79.         float  SetPoint;           //  設定目標 Desired Value(期望值)
  80.         float  Proportion;         //  比例常數 Proportional Const
  81.         float  Integral;           //  積分常數 Integral Const
  82.         float  Derivative;         //  微分常數 Derivative Const

  83.         float  LastError;          //  Error[-1]        最后一個誤差
  84.         float  PrevError;          //  Error[-2]       
  85.         float  SumError;           //  Sums of Errors  總誤差

  86. }PID ;

  87. /*====================================================================================================
  88.    PID計算部分
  89. =====================================================================================================*/

  90. float PIDCalc( PID *pp, float NextPoint )       
  91. {
  92.         float  dError,
  93.             Error,
  94.                 DUTY;       
  95.         Error = pp->SetPoint -  NextPoint;          // 偏差          設定 - 下一點
  96.         pp->SumError += Error;                      // 積分          誤差和
  97.         dError = pp->LastError - pp->PrevError;     // 當前微分         上一個 - 上上個       
  98.         pp->PrevError = pp->LastError;                                //移位 上一個》上上個
  99.         pp->LastError = Error;                                                //移位 上上個》誤差
  100.         DUTY=
  101.                 (                pp->Proportion * Error              // 比例項          比例*誤差
  102.                 +   pp->Integral * pp->SumError         // 積分項          積分*誤差和
  103.                 +   pp->Derivative * dError             // 微分項          微分*誤差變化
  104.                 );
  105.                 if(DUTY>255){DUTY=255;}
  106.                 if(DUTY<-255){DUTY=-255;}
  107.         return         DUTY;
  108. }

  109. /*====================================================================================================
  110.    Initialize PID Structure          
  111. =====================================================================================================*/

  112. void PIDInit (PID *pp)//將PID各個參數初始化為0
  113. {
  114.     memset ( pp,0,sizeof(PID));                         //MEM組
  115. }

  116. /*====================================================================================================
  117.     Main Program
  118. =====================================================================================================*/

  119. float sensor (void)                            //  Dummy Sensor Function  虛擬傳感器功能
  120. {
  121.    while(!S);
  122.    return (float)S;                                                //(S/255.0)*5.0;
  123. }

  124. void actuator(float rDelta)                    //  Dummy Actuator Function 虛擬致動器的功能
  125. {
  126. pwm=rDelta;                                                        //(rDelta/5.0)*255;
  127. if(pwm<0){pwm=0;}                                                //高
  128. if(pwm>255) pwm=255;                                        //低

  129. pwm=255-pwm;
  130. }



  131. /********************************************************************
  132. * 名稱 : 計數器 設T0為方式1,GATE=1
  133. * 功能 :
  134. * 輸入 :
  135. * 輸出 :
  136. ***********************************************************************/
  137. void InitTimer0(void)
  138. {
  139.     TMOD = 0x11;
  140.     TH0 = 0x10;
  141.     TL0 = 0x00;
  142.     TR0 = 1;
  143. }
  144. /********************************************************************
  145. * 名稱 : T0中斷用來計數器溢出,超過測距范圍
  146. * 功能 :
  147. * 輸入 :
  148. * 輸出 :
  149. ***********************************************************************/
  150. void Timer0Interrupt(void) interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  151. {
  152.         flag=1;                                                         //中斷溢出標志
  153. }

  154. void  StartModule()                          //啟動發射
  155. {
  156.         TX=1;                                         
  157.         delay25us();
  158.         TX=0;
  159. }
  160. /********************************************************************
  161. * 名稱 : Convert(uchar In_Date)
  162. * 功能 : 因為電路設計時,P0.0--P0.7接法剛好了資料中的相反,所以設計該函數。
  163. * 輸入 : 12864資料上的值
  164. * 輸出 : 送
  165. ***********************************************************************/
  166. unsigned char Convert(unsigned char In_Date)
  167. {
  168.     unsigned char i, Out_Date = 0, temp = 0;
  169.     for(i=0; i<8; i++)
  170.     {
  171.         temp = (In_Date >> i) & 0x01;
  172.         Out_Date |= (temp << (7 - i));
  173.     }
  174.     return Out_Date;
  175. }

  176. /********************************************************************
  177. * 名稱 : LCD字庫初始化程序
  178. * 功能 : 主函數
  179. * 輸入 : 無
  180. * 輸出 : 無
  181. ***********************************************************************/
  182. void initinal(void)           //LCD字庫初始化程序
  183. {
  184.         delay(40);             //大于40MS的延時程序
  185. //        PSB=1;                 //設置為8BIT并口工作模式
  186.         delay(1);              //延時
  187.         RES=0;                 //復位
  188.         delay(1);              //延時
  189.         RES=1;                 //復位置高
  190.         delay(10);
  191.         TransferData(0x30,0);  //Extended Function Set :8BIT設置,RE=0: basic instruction set, G=0 :graphic display OFF
  192.         delay(100);            //大于100uS的延時程序
  193.         TransferData(0x30,0);  //Function Set
  194.         delay(37);             ////大于37uS的延時程序
  195.         TransferData(0x08,0);  //Display on Control
  196.         delay(100);            //大于100uS的延時程序
  197.         TransferData(0x10,0);  //Cursor Display Control光標設置
  198.         delay(100);            //大于100uS的延時程序
  199.         TransferData(0x0C,0);  //Display Control,D=1,顯示開
  200.         delay(100);            //大于100uS的延時程序
  201.         TransferData(0x01,0);  //Display Clear
  202.         delay(10);             //大于10mS的延時程序
  203.         TransferData(0x06,0);  //Enry Mode Set,光標從右向左加1位移動
  204.         delay(100);            //大于100uS的延時程序
  205. }


  206. /********************************************************************
  207. * 名稱 : 顯示文字
  208. * 功能 : 主函數
  209. * 輸入 : 無
  210. * 輸出 : 無
  211. ***********************************************************************/
  212. void   lcd_mesg(unsigned char code *adder1)
  213. {
  214.         unsigned char i;
  215.         TransferData(0x80,0);  //設置圖形顯示內存addressset圖形顯示內存地址
  216.         delay(100);
  217.         for(i=0;i<32;i++)
  218.         {
  219.                   TransferData(*adder1,1);
  220.                    adder1++;
  221.         }

  222.         TransferData(0x90,0);  //設置圖形顯示內存地址
  223.         delay(100);
  224.         for(i=32;i<64;i++)
  225.         {
  226.                 TransferData(*adder1,1);
  227.                 adder1++;
  228.         }
  229. }

  230. /********************************************************************
  231. * 名稱 : 傳送數據或者命令
  232. * 功能 :
  233. * 輸入 : 無
  234. * 輸出 : 無
  235. ***********************************************************************/
  236. void TransferData(char data1,bit DI)  //傳送數據或者命令,當DI=0時,傳送命令,當DI=1時,傳送數據.
  237. {
  238.         WRD=0;
  239.         RS=DI;
  240.         delay(1);
  241.         P0=Convert(data1);
  242.         E=1;
  243.         delay(1);
  244.         E=0;
  245. }
  246. void Conut(void)
  247. {
  248.         time=TH0*256+TL0;
  249.         TH0=0;
  250.         TL0=0;
  251.         S=time*0.179;       //算出來是CM          11。0592M晶振
  252.         if(flag==1)                      //超出測量
  253.         {         
  254.                 flag=0;          
  255.         }
  256.         else
  257.         {       
  258.                 if(S>480) S1=0;
  259.                 else S1=480-S;
  260.        
  261.         }
  262. }
  263. void Distance(void)
  264. {
  265.          StartModule();                 //計算
  266.          while(!RX);                //當RX為零時等待
  267.          TR0=1;                            //開啟計數
  268.          while(RX);                        //當RX為1計數并等待
  269.          TR0=0;                                //關閉計數
  270.          Conut();
  271. }
  272. /********************************************************************
  273. * 名稱 : 毫秒延時
  274. * 功能 :
  275. * 輸入 : 無
  276. * 輸出 : 無
  277. ***********************************************************************/
  278. void    delayms(unsigned int xms)            //延時xms毫秒
  279. {
  280.         unsigned int i,j;
  281.         for(i=xms;i>0;i--)
  282.         for(j=1320;j>0;j--);
  283. }

  284. /********************************************************************
  285. * 名稱 : 10us延時程序
  286. * 功能 :
  287. * 輸入 : 無
  288. * 輸出 : 無
  289. ***********************************************************************/
  290. void    delay(unsigned int m)            //延時程序
  291. {
  292.         unsigned int i,j;
  293.         for(i=0;i<m;i++)
  294.         for(j=0;j<13;j++);
  295. }

  296. /********************************************************************
  297. * 名稱 : 25us延時程序
  298. * 功能 :
  299. * 輸入 : 無
  300. * 輸出 : 無
  301. ***********************************************************************/
  302. void delay25us(void)                                           //延時25us誤差 0us
  303. {
  304.     unsigned char a,b;
  305.     for(b=33;b>0;b--)
  306.         for(a=3;a>0;a--);
  307. }

  308. void InitTimer1(void)        //定時器初始化
  309. {
  310.     TMOD = 0x11;
  311.     TH1 = 0x0EC;
  312.     TL1 = 0x78;
  313.     EA = 1;
  314.     ET1 = 1;
  315.     TR1 = 1;
  316. }

  317.    
  318. void Timer1Interrupt(void) interrupt 3
  319. {
  320.     TH1 = 0x0EC;
  321.     TL1 = 0x78;
  322.     displaytime++;
  323.         Timetime++;  //計時
  324. }


  325. /********************************************************************
  326. * 名稱 : 顯示圖形
  327. * 功能 : 主函數
  328. * 輸入 : 無
  329. * 輸出 : 無
  330. ***********************************************************************/
  331. void DisplayGraphic(unsigned char code *adder)
  332. {       
  333.         int i,j;
  334. //顯示上半屏內容設置
  335.         for(i=0;i<32;i++)
  336.         {
  337.                 TransferData((0x80 + i),0); //SET  垂直地址 VERTICAL ADD
  338.                 TransferData(0x80,0);       //SET  水平地址 HORIZONTAL ADD
  339.                 for(j=0;j<16;j++)
  340.                 {
  341.                         TransferData(*adder,1);
  342.                         adder++;
  343.                 }
  344.     }          
  345. //顯示下半屏內容設置
  346.         for(i=0;i<32;i++)            
  347.     {
  348.                 TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
  349.                 TransferData(0x88,0);       //SET 水平地址 HORIZONTAL ADD
  350.                 for(j=0;j<16;j++)
  351.                 {
  352.                         TransferData(*adder,1);
  353.                         adder++;
  354.                 }
  355.     }
  356. }




  357. /*******************************************************************/
  358. /*                                                                 */
  359. /*  矩陣鍵盤掃描                                                          */
  360. /*                                                                 */
  361. /*******************************************************************/
  362. uchar keyscan(void)//鍵盤掃描函數,使用行列反轉掃描法 比如:行為低電位,列為高四位
  363. {
  364.         uchar cord_h,cord_l;//行列值
  365.         P2=0x0f;//行線輸出全為0
  366.         cord_h=P2&0x0f;//讀入列線值
  367.         if(cord_h!=0x0f) //先檢測有無按鍵按下
  368.         {
  369.                 delay(1); //去抖
  370.                 if(cord_h!=0x0f)
  371.                 {
  372.                         cord_h=P2&0x0f; //讀入列線值
  373.                         P2=cord_h|0xf0; //輸出當前列線值
  374.                         cord_l=P2&0xf0; //讀入行線值
  375.                         return(cord_h+cord_l);//鍵盤最后組合碼值
  376.                 }
  377.         }
  378.         else return(0xff);//返回該值       
  379. }
  380. /**********************************************************/
  381. void beep()
  382. {
  383.   uchar i;
  384.   for (i=0;i<100;i++)
  385.    {
  386.    delay(10);
  387.    BEEP=!BEEP;                 //BEEP取反
  388.    }
  389.   BEEP=1;                      //關閉蜂鳴器
  390. }

  391. void beepchange()                  //變音蜂鳴器
  392. {
  393.         uchar i;
  394.         for (i=0;i<(20-beeptime)*10;i++)
  395.                 {
  396.                 delay((beeptime+2)*3);
  397.                 BEEP=!BEEP;                 //BEEP取反
  398.                 }
  399.         BEEP=1;                      //關閉蜂鳴器
  400.        
  401. }
  402. /********************************************************************
  403. * 名稱 : Main()
  404. * 功能 : 主函數
  405. * 輸入 : 無
  406. * 輸出 : 無
  407. ***********************************************************************/
  408. void main(void)
  409. {
  410.         PID        sPID;                   //  PID Control Structure  PID控制結構
  411.     float      rOut;                   //  PID Response (Output)  PID控制器的響應(輸出)
  412.     float      rIn;                    //  PID Feedback (Input)          PID反饋(輸入)

  413.        
  414.     PIDInit ( &sPID );                  //  Initialize Structure
  415.         if(pidchang==0)                                                //   準
  416.     {
  417.         sPID.Proportion = KSP;              //  Set PID Coefficients         比例
  418.     sPID.Integral   = KSI;                                //  積分
  419.     sPID.Derivative = KSD;                                // 微分
  420.         }
  421.         if(pidchang==1)                                                 //   穩
  422.         {
  423.     sPID.Proportion = KSP1;              //  Set PID Coefficients         比例
  424.     sPID.Integral   = KSI1;                                //  積分
  425.     sPID.Derivative = KSD1;                                // 微分
  426.         }

  427.     sPID.SetPoint   = size;            //  Set PID Setpoint         設定值


  428.         P4SW = 0x70;       
  429.         initina2();                                    //調用LCD顯示圖片(擴展)初始化程序               
  430.         beep();
  431.         beep();
  432.         delayms(200);
  433.         initinal();                                            //調用LCD字庫初始化程序
  434.     delay(100);                                    //大于100uS的延時程序
  435.     lcd_mesg(IC_DAT);                              //顯示中文漢字1               
  436.         InitTimer0();                                           //計時器
  437.         InitTimer1();                                          //中斷初始化

  438.         CCON = 0;                       //主控制寄存器的初始
  439.                                     //PCA timer 停止運行
  440.                                     //清除CF標志
  441.                                     //清除所有中斷標志模塊
  442.     CL = 0;                         //復位 PCA base timer
  443.     CH = 0;
  444.     CMOD = 0x02;                    //設置 PCA timer 時鐘源在 Fosc/2
  445.                                     //禁用PCA timer溢出中斷
  446.     CCAP0H = CCAP0L = 0xff;         //pwm0端口輸出的50%占空比的矩形波
  447.     CCAPM0 = 0x42;                  //PCA模塊工作在8位PWM模式 禁止PCA中斷

  448.     CCAP1H = CCAP1L = 0xff;         //PWM1輸出端口0方波的占空比
  449.     CCAPM1 = 0x42;                  //PCA模塊工作在8位PWM模式 禁止PCA中斷
  450.            CR = 1;                         //PCA timer 啟動運行
  451.          beep();
  452.          beep();
  453.         while(1)
  454.         {               
  455.                
  456.                 sPID.SetPoint   = 480-size;            //  Set PID Setpoint         設定值
  457.                 Distance();
  458.                 delayms(10);
  459. //                CCAP1H = CCAP1L = pwm;         //pwm0端口輸出的50%占空比的矩形方波
  460.                 CCAP0H = CCAP0L = pwm;         //pwm0端口輸出的50%占空比的矩形方波
  461.                 key=keyscan();//調用鍵盤掃描,
  462.                         switch(key)
  463.                 {
  464.                          case 235:key=0;break;        //0 按下相應的鍵顯示相對應的碼值 原理就是高四位一列低四位一列的組
  465.                                                                         //合。0111 1110 7e 0表示按鍵后為0,1表示沒有按鍵按下的。
  466.                                                                         //其他類推。
  467.                         case 119:key=1;break;         //1
  468.                         case 123:key=2;break;        //2
  469.                         case 125:key=3;break;        //3
  470.                         case 183:key=4;break;        //4
  471.                         case 187:key=5;break;        //5
  472.                         case 189:key=6;break;        //6
  473.                         case 215:key=7;break;        //7
  474.                         case 219:key=8;break;        //8
  475.                         case 221:key=9;break;        //9
  476.                         case 126:key=10;break;        //A
  477.                         case 190:key=11;break;        //B
  478.                         case 222:key=12;break;        //C                       
  479.                         case 238:key=13;break;        //D       
  480.                         case 231:key=14;break;        //*
  481.                         case 237:key=15;break;        //#
  482.                         case 255:key=16;break;        //空

  483.                 }
  484.                 if(key==16)
  485.                 {
  486.                 if(keysign!=16)       
  487.                 {
  488.                 beeptime=keysign;
  489.                 if(beeptime!=14)
  490.                 {
  491.                         if((flagStart==1)&&(beeptime<=9)) {flagStart=1; beepchange1=1;}
  492.                         else beepchange();  
  493.                 }
  494.                 if((flagStart==0)&&(keysign<=9)) {flagSep=keysign; shuzi=keysign;}        //任務顯示
  495.                 if((flagStart==1)&&(keysign<=9)) { size=200-keysign*10; pidchang=1;}        //任務3
  496.                 if((shuzi==2)&&(flagSep==1))         
  497.                 {
  498.                 }        //任務3
  499.                 if(keysign==15)  
  500.                 {
  501.                 ZTimetime=0;
  502.                 flagStart=1;                   //標志位置1
  503.                 if(flagSep==1)
  504.                 {
  505.                 if(flagStart6==0)size=150;
  506.                 }//任務1   位置
  507.                 if(keysign==5) flagchangeStar=5 ;                 //任務5   位置
  508.                 }
  509.                 if(keysign==14)  {flagStart=3;beepchange1=0; } //標志位置0                  BEEP可以等于0;
  510.                 }
  511.                                                                                                  
  512.                 }
  513.                         keysign=key;        //上次的按鍵                          

  514.                   //***任務要求函數等等***
  515.                         if((flagStart==1)&&(flagSep==1))
  516.                         {
  517.                                 rIn = sensor (); //把S轉成浮點型               //  Read Input      讀取輸入
  518.                                 rOut = PIDCalc ( &sPID,rIn ); //PID  //  Perform PID Interation
  519.                                 actuator ( rOut+pwm );    //占空比          //  Effect Needed Changes
  520.                         }
  521.                 //***取消小球下降函數***
  522.                         if(flagStart==3)  
  523.                         {
  524.                         rIn = sensor (); //把S轉成浮點型               //  Read Input      讀取輸入
  525.                         rOut = PIDCalc ( &sPID,rIn ); //PID  //  Perform PID Interation
  526.                         actuator ( rOut+pwm );    //占空比          //  Effect Needed Changes
  527.                          size=sizechange+changesize;
  528.                          if(S1>=450)
  529.                          {
  530.                          sizechange=0;   //最低點清 0
  531.                          flagStart=0;
  532.                          BEEP=1;
  533.                          pwm=255;
  534.                          flagSep=0;
  535.                          flagchangeStar=0;
  536.                          
  537.                          }
  538.                         }
  539.                         if((flagSep==5)&&(flagStart==1))
  540.                         {                       

  541.                         pidchang=1;
  542.                         if(S1>100)        pwm=95;
  543.                         if(S1<150)        {flagSep=1;size=1;}
  544.                                  
  545.                                                 
  546.                         }

  547. /********************************************************************
  548. * 名稱 : 屏幕數據刷新
  549. * 功能 :                                                                       
  550. * 輸入 : 無
  551. * 輸出 : 無
  552. ***********************************************************************/          
  553.                         if(displaytime>=100 )
  554.                         {
  555.                                 if(flagStart==3) sizechange=sizechange+40;          //下降專用 距離下降  左后停止

  556.                                 TransferData(0x95,0);                               
  557.                                 TransferData(0x17,1);                                                   //高度顯示
  558.                                 TransferData(S1%1000/100+0x30,1);
  559.                                 TransferData(S1%100/10+0x30,1);
  560.                                 TransferData(S1%10+0x30,1);

  561.                                 TransferData(0x8D,0);                                                   //響應時間顯示
  562.                                 TransferData(RTimetime/100%10+0x30,1);
  563.                                 TransferData(RTimetime%100/10+0x30,1);
  564.                                 TransferData(0x2E,1);
  565.                                 TransferData(RTimetime%10+0x30,1);

  566.                                 TransferData(0x9d,0);                                                        //保持時間顯示
  567.                                 TransferData(MTimetime/100%10+0x30,1);
  568.                                 TransferData(MTimetime%100/10+0x30,1);
  569.                                 TransferData(0x2E,1);  
  570.                                 TransferData(MTimetime%10+0x30,1);        
  571.                                 displaytime=0;

  572.                                 TransferData(0x85,0);                                                         //任務要求顯示

  573.                                 TransferData(0x20,1);

  574.                                 if(flagStart==1) TransferData(0x11,1);
  575.                                 else TransferData(0x3C,1);

  576.                                 TransferData(shuzi+0x30,1);
  577.                                 if(flagStart==1) TransferData(0x10,1);

  578.                                 else TransferData(0x3E,1);
  579.                         }

  580.                                                                                                                                                
  581.                         if((Timetime>=22)&&(flagStart==1))                //0.1s的保持與采樣時間計算
  582.                         {                               
  583.                                 ZTimetime++;                                                          //總時間

  584.                                 if((flagSep==5)&&(S1>=100))
  585.                                 {
  586.                                 RTimetime=ZTimetime;                                          //響應時間S                               
  587.                                 }
  588.                                 if((size==301)&&(S1<200))
  589.                                 {
  590.                                 size=50;
  591.                                        
  592.                                 }
  593.                                

  594.                                 if((flagSep==1)&&((110>=S1)|(S1>=190))&&(size==150))
  595.                                 {
  596.                                 RTimetime=ZTimetime;                                          //響應時間S       
  597.                                 pidchang=1;                               
  598.                                 }
  599.                                 if((flagSep==1)&&((10>=S1)|(S1>=90))&&(size==50))
  600.                                 {
  601.                                 RTimetime=ZTimetime;                                          //響應時間S       
  602.                                 pidchang=1;                               
  603.                                 }
  604.                                 if((flagSep==1)&&((210>=S1)|(S1>=290))&&(size==250))
  605.                                 {
  606.                                 RTimetime=ZTimetime;                                          //響應時間S       
  607.                                 pidchang=1;                               
  608.                                 }
  609.                                 else  
  610.                                 {
  611.                                 Beep1stime++;
  612.                                 if(Beep1stime>=1) BEEP=1;
  613.                                 if((Beep1stime>=10)&&(beepchange1!=1)) {BEEP=0;Beep1stime=0; }
  614.                                 }
  615.                                 MTimetime=ZTimetime-RTimetime;                         //保持時間
  616.                                 Timetime=0;
  617.                                 if(size==301) MTimetime=0;



  618.                         }
  619.                                 if(flagSep==6)
  620.                                  {
  621.                                  flagStart6=1;
  622.                                   flagSep=1;
  623.                                    size=301;
  624.                                 pidchang=0;
  625.                           }
  626.                           
  627.                           if ((MTimetime>=30)&&(flagStart6==1))         
  628.                           {
  629.                           flagStart61++;
  630.                           if (flagStart60==0)
  631.                            {
  632.                           size=250;          
  633.                           flagStart60=1;
  634.                           pidchang=0;       
  635.                           }
  636.                           else
  637.                           {
  638.                           size=50;          
  639.                           flagStart60=0;
  640.                           pidchang=0;
  641.                           }
  642.                           MTimetime=0;
  643.                           ZTimetime=0;
  644.                           RTimetime=0;                    
  645.                           }       
  646.                           if (flagStart61>=4){pwm=0; flagSep=0;}

  647.                           

  648.                           
  649.                            if(flagSep==7) //要求7功能
  650.                            {
  651.                        
  652.                           if((S1>=2)&&(flagStart7==0)){pwm=0;flagStart7=1;}          //啟動標志位
  653.                           else
  654.                           if(flagStart7==1)
  655.                           {
  656.                           if (S1>=140) {flagSep=1; size=150;}
  657.                            }
  658.                           }

  659.                           
  660. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

下載:
簡易風洞程序(2).zip (72.04 KB, 下載次數: 54)

評分

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

查看全部評分

回復

使用道具 舉報

ID:210655 發表于 2017-6-13 01:18 | 顯示全部樓層
值得學習
回復

使用道具 舉報

ID:252120 發表于 2017-11-21 23:37 | 顯示全部樓層
好東西
回復

使用道具 舉報

ID:110278 發表于 2018-5-31 19:12 | 顯示全部樓層
盼了很久,終于等來了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美大片黄 | 国产精品区一区二区三区 | 超碰成人免费 | 精品综合| 国产一区二区精品在线 | 欧美日韩精品在线免费观看 | 日韩一区二区三区视频在线播放 | 久久久av一区 | 亚洲五码在线 | 野狼在线社区2017入口 | www.日韩av.com| 国产精品视频一二三区 | 欧美亚洲国语精品一区二区 | 99re热精品视频| 黄网站在线播放 | 亚洲免费在线播放 | 91视频在线观看 | 精品国产乱码久久久久久丨区2区 | 欧美午夜精品久久久久免费视 | 久久久久久国产精品 | 久久精品国产久精国产 | 91在线观看免费视频 | 日韩理论电影在线观看 | 国产视频久久久 | 国产精品视频 | 久久久精品一区二区三区 | 免费久久精品视频 | 自拍偷拍第一页 | 国产在线一区二区 | 毛片一区二区三区 | 天天看天天干 | 久久中文免费视频 | 日韩福利视频 | 91在线看| 麻豆精品国产免费 | 亚洲 欧美 精品 | 精品日韩一区 | 国产免费让你躁在线视频 | 尤物视频在线免费观看 | 亚洲视频免费在线 | 国产精品欧美一区二区三区不卡 |