干貨|手把手教你寫單片機(jī)的C語言結(jié)構(gòu)體
摘要:聽說還有好多學(xué)單片機(jī)的小伙伴不會用結(jié)構(gòu)體?指針和結(jié)構(gòu)體是學(xué)單片機(jī)必須要掌握的,如果你C語言掌握的不牢,單片機(jī)根本學(xué)不到精髓,只能完成一些低級的項(xiàng)目。看得懂結(jié)構(gòu)體并且能夠靈活運(yùn)用結(jié)構(gòu)體才能說你入門了單片機(jī)。本篇將以最通俗的方式結(jié)合STM32單片來講講結(jié)構(gòu)體的運(yùn)用。解決你學(xué)完C語言、考過了計(jì)算機(jī)二級還是看不懂單片機(jī)結(jié)構(gòu)體的苦惱。寶藏文章,記得點(diǎn)贊轉(zhuǎn)發(fā)收藏。大家知道指針和結(jié)構(gòu)體是單片機(jī)的難點(diǎn),所以就去學(xué)習(xí)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)體?只有知道為什么需要,才能按照你的需要去學(xué)習(xí),這樣效率才會高。你才知道在什么情況下我們需要寫一個結(jié)構(gòu)體,怎么樣去用結(jié)構(gòu)體。這里我們以一個智能家居的項(xiàng)目為例。先來看一個實(shí)際的問題話說有一個項(xiàng)目上有4個傳感器:光照傳感器、煙霧傳感器、酒精傳感器、濕度傳感器。然后這四個各個傳感器還有設(shè)置報(bào)警的閾值范圍。一般都是這樣寫#include?"sys.h"
#include?"delay.h"
#include?"usart.h"
/*記錄傳感器的數(shù)值*/
float?temperature;?//溫度
char??humidity;??//濕度
char??alcohol;??//酒精濃度
int???illumination;?//光照強(qiáng)度
/*記錄傳感器高低閾值*/
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;//光照強(qiáng)度
?char??CO;??//一氧化碳濃度
?int???*p;??//int型的指針變量
}?sensor;
sensor?sen;
int?value?=0;
int?main(void)
{
?uart_init(115200);//串口初始化
?delay_init();?
?sen.p=