結構體仿真測試

 

 

/***結構體仿真測試*L45 CODE 3583*****/
/***2018 4 28 09:00 PAST*       *****/
              #include   "reg52.h"
              #include       <intrins.h>
              #include<stdio.h>
              #define    uint unsigned int 
              #define    uchar unsigned char
              typedef struct stu
              {
              char name[30];
              char sex;
              int age;
              double score;
              }STU;
              void  main()
              {
               STU X[4]={
               {"LiPin",'M',18,80},
               {"LinYi",'M',19,85},
               {"SunDan",'W',18,90},
               {"WuLi",'W',18,70}
              };
              double max_s;
              int i,max_n;
              max_s=X[0].score;//結構體成員的應用
              max_n=0;
              TMOD|=0x20;
              TH1=0xF3;
              TR1=0x1;
              TI=1;
              for(i=1;i<4;i++)
              {
               if(X[i].score>max_s)
               {
               max_s=X[i].score;
               max_n=i;
               }
               }
              printf("最高分爲 :%f\n",max_s);
              printf("最高分的學生信息 :");
              printf("姓 名 :%s\n",X[max_n].name);
              printf("性 別 :%c\n",X[max_n].sex);
              printf("年 齡 :%d\n",X[max_n].age);
              printf("成 績 :%f\n",X[max_n].score);
              }

 

 

/***STM32結構體類型仿真打印輸出測試***/
/***2020  2 20 PAST*****************/
              #include "sys.h"
              #include "usart.h"        
              #include "delay.h"    
              #include "led.h" 
              #include "key.h" 
                            #include <math.h>
              #include <string.h>
                            u8       set1,set2;                                   //
                            struct   PID
              {
               u16    SetPoint;                                     //設定目標 Desired Value
               u16    Proportion;                                   //比例常數 Proportional Const
               u16    Integral;                                     //積分常數 Integral Const
               u16    Derivative;                                   //微分常數 Derivative Const
               u16    LastError;                                    //Error[-1]
               u16    PrevError;                                    //Error[-2]
               u16    SumError;                                     //Sums of Errors
              };
              struct   PID spid;                                    //PID Control Structurea,spidb,spidc,spidd
                            void PIDInit(struct PID *pp)
              {
                memset(pp,0,sizeof(struct PID));                    //用參數0初始化pp
              }
                            u16 PIDCalc( struct PID *pp, unsigned int NextPoint ) //PID計算
              {
               u16 dError,Error;
               Error=pp->SetPoint - NextPoint;                      //偏差
               pp->SumError += Error;                               //積分
               dError = pp->LastError - pp->PrevError;              //當前微分
                pp->PrevError = pp->LastError;
               pp->LastError = Error;
               return (pp->Proportion * Error                       //比例
               +pp->Integral*pp->SumError                           //積分項
               +pp->Derivative*dError);                             //微分項
              }
              int main(void)
              {            
                 Stm32_Clock_Init(9);                                 //系統時鐘設置
                 delay_init(72);                                        //延時初始化 
                 uart_init(72,9600);                                    //串口初始化爲9600
                 LED_Init();                                                //初始化與LED連接的硬件接口    
               while(1)
                 {
                                PIDInit(&spid);                                     //Initialize Structure
                spid.Proportion= 10;                                //Set PID Coefficients
                spid.Integral = 8;
                spid.Derivative =6;
                spid.SetPoint =100;                                 //Set PID Setpoint
               }
              }

 

 

/***STM32結構體類型仿真打印輸出測試***/
/***2020  2 20 PAST*****************/
              #include "sys.h"
              #include "usart.h"        
              #include "delay.h"    
              #include "led.h" 
              #include "key.h" 
                            #include <math.h>
              #include <string.h>
                            u8       set1,set2;                                   //
                            struct   PIDA
              {
               u16    SetPoint;                                     //設定目標 Desired Value
               u16    Proportion;                                   //比例常數 Proportional Const
               u16    Integral;                                     //積分常數 Integral Const
               u16    Derivative;                                   //微分常數 Derivative Const
               u16    LastError;                                    //Error[-1]
               u16    PrevError;                                    //Error[-2]
               u16    SumError;                                     //Sums of Errors
              };
              struct   PIDA spida;                                    //PID Control Structurea,spidb,spidc,spidd
                            void PIDAInit(struct PIDA *pp)
              {
                memset(pp,0,sizeof(struct PIDA));                    //用參數0初始化pp
              }
                            u16 PIDACalc( struct PIDA *pp, unsigned int NextPoint ) //PID計算
              {
               u16 dError,Error;
               Error=pp->SetPoint - NextPoint;                      //偏差
               pp->SumError += Error;                               //積分
               dError = pp->LastError - pp->PrevError;              //當前微分
                pp->PrevError = pp->LastError;
               pp->LastError = Error;
               return (pp->Proportion * Error                       //比例
               +pp->Integral*pp->SumError                           //積分項
               +pp->Derivative*dError);                             //微分項
              }
              int main(void)
              {            
                 Stm32_Clock_Init(9);                                 //系統時鐘設置
                 delay_init(72);                                        //延時初始化 
                 uart_init(72,9600);                                    //串口初始化爲9600
                 LED_Init();                                                //初始化與LED連接的硬件接口    
               while(1)
                 {
                                PIDAInit(&spida);                                     //Initialize Structure
                spida.Proportion= 10;                                //Set PID Coefficients
                spida.Integral = 8;
                spida.Derivative =6;
                spida.SetPoint =100;                                 //Set PID Setpoint
               }
              }

 

 

 

 

 

/***STM32結構體類型仿真打印輸出測試***/
/***2020  2 20 PAST*****************/
              #include "sys.h"
              #include "usart.h"        
              #include "delay.h"    
              #include "led.h" 
              #include "key.h" 
              #include <math.h>
              #include <string.h>
              u8       set1,set2;                                   //
/***************************************/                            
              struct   PIDA
              {
               u16    SetPoint;                                     //設定目標 Desired Value
               u16    Proportion;                                   //比例常數 Proportional Const
               u16    Integral;                                     //積分常數 Integral Const
               u16    Derivative;                                   //微分常數 Derivative Const
               u16    LastError;                                    //Error[-1]
               u16    PrevError;                                    //Error[-2]
               u16    SumError;                                     //Sums of Errors
              };
              struct   PIDA spida;                                    //PID Control Structurea,spidb,spidc,spidd
/***************************************/                        
              struct   PIDB
              {
               u16    SetPoint;                                     //設定目標 Desired Value
               u16    Proportion;                                   //比例常數 Proportional Const
               u16    Integral;                                     //積分常數 Integral Const
               u16    Derivative;                                   //微分常數 Derivative Const
               u16    LastError;                                    //Error[-1]
               u16    PrevError;                                    //Error[-2]
               u16    SumError;                                     //Sums of Errors
              };
              struct   PIDB spidb;                                    //PID Control Structurea,spidb,spidc,spidd
/***************************************/                            
              struct   PIDC
              {
               u16    SetPoint;                                     //設定目標 Desired Value
               u16    Proportion;                                   //比例常數 Proportional Const
               u16    Integral;                                     //積分常數 Integral Const
               u16    Derivative;                                   //微分常數 Derivative Const
               u16    LastError;                                    //Error[-1]
               u16    PrevError;                                    //Error[-2]
               u16    SumError;                                     //Sums of Errors
              };
              struct   PIDB spidc;                                    //PID Control Structurea,spidb,spidc,spidd
/***************************************/                            
              struct   PIDD
              {
               u16    SetPoint;                                     //設定目標 Desired Value
               u16    Proportion;                                   //比例常數 Proportional Const
               u16    Integral;                                     //積分常數 Integral Const
               u16    Derivative;                                   //微分常數 Derivative Const
               u16    LastError;                                    //Error[-1]
               u16    PrevError;                                    //Error[-2]
               u16    SumError;                                     //Sums of Errors
              };
              struct   PIDB spidd;                                    //PID Control Structurea,spidb,spidc,spidd
/***************************************/                            
              void PIDAInit(struct PIDA *pp)
              {
                memset(pp,0,sizeof(struct PIDA));                    //用參數0初始化pp
              }
/***************************************/                            
              void PIDBInit(struct PIDB *pp)
              {
                memset(pp,0,sizeof(struct PIDB));                    //用參數0初始化pp
              }
/***************************************/                            
              void PIDCInit(struct PIDC *pp)
              {
                memset(pp,0,sizeof(struct PIDC));                    //用參數0初始化pp
              }
/***************************************/                            
              void PIDDInit(struct PIDD *pp)
              {
                memset(pp,0,sizeof(struct PIDD));                    //用參數0初始化pp
              }
/***************************************/                            
             u16 PIDACalc( struct PIDA *pp, u16 NextPoint ) //PID計算
              {
               u16 dError,Error;
               Error=pp->SetPoint - NextPoint;                      //偏差
               pp->SumError += Error;                               //積分
               dError = pp->LastError - pp->PrevError;              //當前微分
                pp->PrevError = pp->LastError;
               pp->LastError = Error;
               return (pp->Proportion * Error                       //比例
               +pp->Integral*pp->SumError                           //積分項
               +pp->Derivative*dError);                             //微分項
              }
/***************************************/                            
              u16 PIDBCalc( struct PIDB *pp, u16 NextPoint )        //PID計算
              {
               u16 dError,Error;
               Error=pp->SetPoint - NextPoint;                      //偏差
               pp->SumError += Error;                               //積分
               dError = pp->LastError - pp->PrevError;              //當前微分
                pp->PrevError = pp->LastError;
               pp->LastError = Error;
               return (pp->Proportion * Error                       //比例
               +pp->Integral*pp->SumError                           //積分項
               +pp->Derivative*dError);                             //微分項
              }
/***************************************/                            
              u16 PIDCCalc( struct PIDC *pp, u16 NextPoint )        //PID計算
              {
               u16 dError,Error;
               Error=pp->SetPoint - NextPoint;                      //偏差
               pp->SumError += Error;                               //積分
               dError = pp->LastError - pp->PrevError;              //當前微分
                pp->PrevError = pp->LastError;
               pp->LastError = Error;
               return (pp->Proportion * Error                       //比例
               +pp->Integral*pp->SumError                           //積分項
               +pp->Derivative*dError);                             //微分項
              }
/***************************************/                            
              u16 PIDDCalc( struct PIDD *pp, u16 NextPoint )        //PID計算
              {
               u16 dError,Error;
               Error=pp->SetPoint - NextPoint;                      //偏差
               pp->SumError += Error;                               //積分
               dError = pp->LastError - pp->PrevError;              //當前微分
                pp->PrevError = pp->LastError;
               pp->LastError = Error;
               return (pp->Proportion * Error                       //比例
               +pp->Integral*pp->SumError                           //積分項
               +pp->Derivative*dError);                             //微分項
              }
/***************************************/                            
              int main(void)
              {            
                 Stm32_Clock_Init(9);                                 //系統時鐘設置
                 delay_init(72);                                        //延時初始化 
                 uart_init(72,9600);                                    //串口初始化爲9600
                 LED_Init();                                                //初始化與LED連接的硬件接口    
               while(1)
                 {
                                PIDAInit(&spida);                                     //Initialize Structure
                spida.Proportion= 10;                                //Set PID Coefficients
                spida.Integral = 8;
                spida.Derivative =6;
                spida.SetPoint =100;                                 //Set PID Setpoint
               }
              }

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章