/***結構體仿真測試*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
}
}