找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2843|回复: 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 单片机教程网

快速回复 返回顶部 返回列表