摘要:聽說還有好多學單片機的小伙伴不會用結(jié)構(gòu)體?指針和結(jié)構(gòu)體是學單片機必須要掌握的,如果你C語言掌握的不牢,單片機根本學不到精髓,只能完成一些低級的項目??吹枚Y(jié)構(gòu)體并且能夠靈活運用結(jié)構(gòu)體才能說你入門了單片機。本篇將以最通俗的方式結(jié)合STM32單片來講講結(jié)構(gòu)體的運用。解決你學完C語言、考過了計算機二級還是看不懂單片機結(jié)構(gòu)體的苦惱。寶藏文章,記得點贊轉(zhuǎn)發(fā)收藏。大家知道指針和結(jié)構(gòu)體是單片機的難點,所以就去學習C語言,找視頻看書......
GPIO_InitTypeDef
的結(jié)構(gòu)體,然后在LED_Init(void)
函數(shù)中定義一個GPIO_InitStructure
的變量GPIO_InitStructure
,那么這個變量就可以設(shè)置這個GPIO_InitTypeDef
的結(jié)構(gòu)體中的成員。這里先做了解,請接著往下看。1、為什么需要結(jié)構(gòu)體
這里先不說什么是結(jié)構(gòu)體,說說為什么需要結(jié)構(gòu)體?只有知道為什么需要,才能按照你的需要去學習,這樣效率才會高。你才知道在什么情況下我們需要寫一個結(jié)構(gòu)體,怎么樣去用結(jié)構(gòu)體。這里我們以一個智能家居的項目為例。先來看一個實際的問題話說有一個項目上有4個傳感器:光照傳感器、煙霧傳感器、酒精傳感器、濕度傳感器。然后這四個各個傳感器還有設(shè)置報警的閾值范圍。一般都是這樣寫#include?"sys.h"
#include?"delay.h"
#include?"usart.h"
/*記錄傳感器的數(shù)值*/
float?temperature;?//溫度
char??humidity;??//濕度
char??alcohol;??//酒精濃度
int???illumination;?//光照強度
/*記錄傳感器高低閾值*/
float?temperature_threshold[2];
float?humidity_threshold[2];
float?alcohol_threshold[2];
float?illumination_threshold[2];
int?main(void)
{?
?uart_init(115200);//串口初始化
?delay_init();
????while(1)
?{?
?}?
}
2、結(jié)構(gòu)體閃亮登場
然后搞C語言那幫家伙就造了個功能struct
1、結(jié)構(gòu)體就是可以把變量包含到里面的東西struct就代表要定義一個結(jié)構(gòu)體,sensors是這個結(jié)構(gòu)體的名字,
然后是一個大括號 { }大括號里面就隨意定義變量啦~3、typedef關(guān)鍵字
先看一下百度百科對typedef
的定義typedef
可以把一個數(shù)據(jù)類型取一個別的名字typedef {數(shù)據(jù)類型} ?{別的名字}#include?"sys.h"
#include?"delay.h"
#include?"usart.h"
typedef?int?zhjiguoxin;//zhjiguoxin就是int
zhjiguoxin?value?=?0;
int?main(void)
{?
?uart_init(115200);//串口初始化
?delay_init();?
?printf("value=%d\r\n",value);
?
????while(1)
?{?
?}?
}
4、結(jié)構(gòu)體的精髓
注意下:1、下面的代表了這個結(jié)構(gòu)體數(shù)據(jù)類型5、結(jié)構(gòu)體的變量可以放任何變量
1、結(jié)構(gòu)體變量可以放任何變量(int型指針)#include?"sys.h"
#include?"delay.h"
#include?"usart.h"
typedef?struct?
{
?float?temperature;?//溫度
?char??humidity;????//濕度
?char??alcohol;????//酒精濃度
?int???illumination;//光照強度
?char??CO;??//一氧化碳濃度
?int???*p;??//int型的指針變量
}?sensor;
sensor?sen;
int?value?=0;
int?main(void)
{
?uart_init(115200);//串口初始化
?delay_init();?
?sen.p=