/***结构体仿真测试*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
}
}