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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3081|回復: 3
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主



  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 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频久久久久久 | 一区二区三区国产 | 成人精品一区二区三区四区 | 在线免费观看日本视频 | 51ⅴ精品国产91久久久久久 | 久久天天躁狠狠躁夜夜躁2014 | 五月综合激情婷婷 | 久久国产精品一区二区三区 | 亚洲国产精品第一区二区 | 精品国产一区二区国模嫣然 | 一区二区三区免费 | 欧美日韩国产精品一区二区 | 九九导航 | 亚洲欧美视频一区 | 亚洲成av人影片在线观看 | 久久中文字幕一区 | 99热激情 | 成人免费观看男女羞羞视频 | av手机在线| 97免费在线观看视频 | 久久99精品视频 | 亚洲精品乱码久久久久久按摩观 | 欧美精品91 | 蜜桃日韩| 999免费视频 | 欧美高清一区 | 成人精品一区二区三区 | 精品久久久久久久久久久久久 | 日韩在线观看精品 | 尤物在线视频 | 国产高清视频 | 男女视频网站 | 久久久久久久国产 | 国产视频1区| 日韩免费视频一区二区 | 中文一区二区 | 波多野结衣精品在线 | 中文字幕高清 | 午夜国产 | 国产精品毛片一区二区三区 | yiren22 亚洲综合 |