www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]LED即發(fā)光二極管,具有單向?qū)щ娦?。電路圖如下,LED與1K電阻串聯(lián)在5V與0V之間,即可點亮LED,電阻起限流作用?,F(xiàn)在我們來學(xué)習(xí)用單片機的IO(輸入輸出)引腳來點亮LED,用PC1引腳代替VCC,PC1輸出高電平點亮LED,輸出

LED即發(fā)光二極管,具有單向?qū)щ娦?。電路圖如下,LED與1K電阻串聯(lián)在5V與0V之間,即可點亮LED,電阻起限流作用?,F(xiàn)在我們來學(xué)習(xí)用單片機的IO(輸入輸出)引腳來點亮LED,用PC1引腳代替VCC,PC1輸出高電平點亮LED,輸出低電平熄滅LED。

IO即INPUT/OUTPUT,引腳作為輸入模式時,可以采集外界高低電平值;作為輸出模式時,引腳可以輸出高低電平。

一、庫函數(shù)

DAHUME MINI2017.11.2.rar:http://pan.baidu.com/s/1hsvjq1A

解壓DAHUME MINI2017.11.2.rar(2017.11.2指最后修改時間,不定期更新)到當(dāng)前文件夾。以后編寫程序都用這個工程作為模板。編寫一個新的工程,先解壓此工程,暫不使用實驗2中創(chuàng)建工程的方法。

1、打開DAHUME MINI.stw文件;

2、在STVD左側(cè)Workspace窗口Source Files目錄下找到main.c,雙擊打開,可以看到如下代碼;

#include "main.h"

void setup(void)

{

delay(10);

CLOCK(_16MHz);

pinMode(PC1, OUTPUT);

//_asm("rim");//rim為打開總中斷,sim為關(guān)閉總中斷

}

main()

{

setup();

while (1)

{

digitalWrite(PC1, HIGH);

delay(500);

digitalWrite(PC1, LOW);

delay(500);

}

}

代碼第一行,main.c包含了main.h頭文件,這個頭文件又包含了很多其他頭文件??梢园咽髽?biāo)移動到main.h處右擊選擇Open Document “main.h”選項,也可以在Include Files目錄下找到main.h,雙擊打開,來查看總頭文件里包含了哪些子頭文件。這樣,我們就可以在main.c里調(diào)用包含頭文件里聲明過的所有的函數(shù)與變量。

函數(shù)與變量在***.c里定義,在源文件對應(yīng)的***.h里聲明,其它源文件包含了***.h之后,就可以調(diào)用***.h里聲明過的函數(shù)與變量。

第二段代碼是定義一個函數(shù)。

void setup(void)

{

******

}

第一個void是函數(shù)的類型,調(diào)用函數(shù)是無返回值。void空格后的英文是函數(shù)名字,不能與變量名、參數(shù)名和其它函數(shù)名重復(fù)。后面括號里的void是調(diào)用函數(shù)時,使用的參數(shù)類型,void表示無類型,調(diào)用函數(shù)時不使用參數(shù)。其它類型如下表。

變量類型

數(shù)值范圍


_Bool

0、1

布爾變量

char、unsigned char

0~255(0~2^8-1)

無符號8位(byte)

signed char

-128~127

有符號8位

unsigned int

0~65535

無符號16位(word)

int、signed int

-32768~32767

有符號16位

unsigned long

0~16777215

無符號32位

long、signed long

-8388608~8388607

有符號32位

例如

void delay(unsigned int time_ms)

{

******

}

調(diào)用這個函數(shù)時,參數(shù)是無符號16位數(shù)值或者變量。以上變量類型是C語言關(guān)鍵字,也可作為函數(shù)類型和定義變量,例如

char abc(void)

{

char i;

return i;

}

這是一個返回char類型數(shù)值的函數(shù),函數(shù)內(nèi)部定義了一個char類型的局部變量,之后返回了這個變量。調(diào)用abc函數(shù)時,會返回i的數(shù)值。

下面我們來看setup函數(shù)內(nèi)部。第一行是

delay(10);

這是調(diào)用了延時函數(shù),作用是使單片機當(dāng)前狀態(tài)保持10ms。在這里加延時是給所有設(shè)備上電或者復(fù)位后準(zhǔn)備就行。

調(diào)用函數(shù)最后需要加分號。程序中大括號、中括號、小括號要成對出現(xiàn)。

CLOCK(_16MHz);

這個函數(shù)用來設(shè)置單片機的主頻率,主頻是16MHz,這個頻率的概念與用處將在后面實驗作詳細(xì)講解。

pinMode(PC1, OUTPUT);

void pinMode(char pin, char mode);是引腳工作模式設(shè)置函數(shù)。第一個參數(shù)是引腳名,STM8S105K4單片機除了PA1、PA2,其他IO引腳都可在此作為參數(shù)。PA1、PA2接上了晶振,用來給單片機提供時鐘源,去掉晶振后還可以做IO引腳使用。第二個參數(shù)是引腳的工作模式。可設(shè)置的工作模式如下表

參數(shù)

工作模式

INPUT

輸入模式

INPUT_IT

外部中斷輸入模式

OUTPUT

輸出模式

下面是一行//開頭的代碼,雙斜杠的作用是注釋本行的內(nèi)容,在編譯器編譯程序時,不編譯此行內(nèi)容,內(nèi)容中可以出現(xiàn)中文。

注釋多行內(nèi)容的方法如下

現(xiàn)在來看主函數(shù)main()。單片機上電和復(fù)位后運行主函數(shù)。

首先調(diào)用了setup();函數(shù),接下來是while函數(shù)。while是C語言關(guān)鍵字,while是循環(huán)語句。小括號里為執(zhí)行條件,條件為真(成立)或者不等于0時,循環(huán)執(zhí)行后面大括號里的代碼;條件為假(不成立)或者等于0時,不執(zhí)行后面大括號里的代碼或者執(zhí)行最后一遍循環(huán)后跳出循環(huán)。所以while (1)是一個無限循環(huán)或者叫死循環(huán)。

digitalWrite(PC1, HIGH);

void digitalWrite(char pin, _Bool value);函數(shù)設(shè)置輸出模式的引腳輸出電平值,電平參數(shù)value為HIGH輸出高電平,為LOW輸出低電平。

編寫完程序,點擊Build編譯程序,若下方Build窗口出現(xiàn)紅字(錯誤)如下圖,找到#error并雙擊,會跳轉(zhuǎn)到錯誤代碼處。

編譯無錯誤,將下載器與單片機下載接口正確連接,點擊Debug仿真程序。菜單欄第三行有如下幾個按鈕,第一個是Run(開始運行程序),第四個是Continue(繼續(xù)運行程序),第五個是Stop Program(停止運行程序)。點擊Run按鈕,可以看到程序運行效果。

開發(fā)板上PC1引腳的排針與LED1陽極的排針通過跳線帽連接。本例程所實現(xiàn)效果是PC1所接的LED1循環(huán)亮0.5秒滅0.5秒。

退出仿真,程序自動運行。若無法運行,硬件(按鍵)復(fù)位也無效,請將單片機重新上電。

二、寄存器

pinMode(PC1, OUTPUT);

用寄存器寫即

PC_DDR_1 = 1;

PC_CR1_1 = 1;

或者

PC_DDR = PC_DDR | 0b00000010;

PC_CR1 = PC_CR1 | 0b00000010;

或者

PC_DDR |= 0b00000010;

PC_CR1 |= 0b00000010;

PC即Port C,C端口,PC1至PC7合稱C端口,STM8S105K4有A、B、C、D、E、F端口,每個端口有不同個數(shù)的引腳,總共25個IO引腳。DDR即data direction register,數(shù)據(jù)方向寄存器,用于設(shè)置IO引腳輸入輸出模式。CR1即control register 1,控制寄存器1。IO引腳作為輸出模式,配置模式如下。本實驗PC1引腳作為推挽輸出模式。

IO口配置表

配置模式

DDR位

CR1位

CR2位

配置模式

P-Buffer

輸出

1

0

0

開漏輸出

OFF

1

1

0

推挽輸出

ON

1

X

1

輸出(最快速度10MHZ)

CR1位決定

X

X

X

真正的開漏輸出(特定引腳)

未采用

0b是二進(jìn)制數(shù)前綴,0x是十六進(jìn)制數(shù)前綴。以上寄存器用二進(jìn)制表示,有8位,最左為最高位(第7位),最右為最低位(第0位)。以PC_DDR寄存器為例,寄存器第x位決定PCx引腳的輸入輸出工作模式。

=用于賦值,將等號右邊的值賦值給等號左邊。

|用于二進(jìn)制按位或運算。&用于二進(jìn)制按位與運算。按位運算無需進(jìn)位。

運算表達(dá)式

運算結(jié)果


運算表達(dá)式

運算結(jié)果

0 | 0

0

0 & 0

0

0 | 1

1

0 & 1

0

1 | 0

1

1 & 0

0

1 | 1

1

1 & 1

1

digitalWrite(PC1, LOW);

digitalWrite(PC1, HIGH);

用寄存器寫即

PC_ODR_1 = 0;

PC_ODR_1 = 1;

或者

PC_ODR = PC_ODR & 0b11111101;

PC_ODR = PC_ODR | 0b00000010;

或者

PC_ODR &= 0b11111101;

PC_ODR |= 0b00000010;

ODR即output data register,輸出數(shù)據(jù)寄存器,用于設(shè)置輸出引腳輸出電平值。

三、練習(xí)

1、循環(huán)以下步驟:

1)LED1、LED2亮1秒;

2)LED2、LED3亮1秒;

3)LED1、LED2、LED3亮1秒;

4)三個燈全滅2秒。

提示:使用IO引腳先設(shè)置工作模式;


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在Linux環(huán)境下的C語言編程中,函數(shù)的可重入性(Reentrancy)是一個至關(guān)重要的概念。它直接關(guān)系到多線程或多任務(wù)環(huán)境下程序的穩(wěn)定性和可靠性。所謂可重入函數(shù),是指一個函數(shù)可以被多個線程或任務(wù)安全地調(diào)用,而不會導(dǎo)致數(shù)...

關(guān)鍵字: Linux 庫函數(shù)

這篇文章想分享筆者在嵌入式開發(fā)過程中常用的庫函數(shù),他們的使用方法,使用場景,使用好處以及頭文件位置。1#include一般我在寫C代碼的時候都會包含此頭文件,因為一旦包含此文件后,你就可以暢快的使用bool數(shù)據(jù)類型,而不...

關(guān)鍵字: 庫函數(shù)

關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容來源:知乎作者:Clarence這篇文章想分享筆者在嵌入式開發(fā)過程中常用的庫函數(shù),他們的使用方法,使用場景,使用好處以及頭文件位置。1#include一般我在寫C代碼的時候都會包含此頭文件,...

關(guān)鍵字: 庫函數(shù)

基本概念闡述memcpy和memmove都是C語言的庫函數(shù),相比于?strcpy和?strncpy只能針對于字符類型的數(shù)組(),這兩個函數(shù)可以拷貝其他類型的數(shù)組,對于?memcpy和?memmove的區(qū)別是什么呢?這里,...

關(guān)鍵字: 庫函數(shù) ov

在嵌入式Linux的C語言開發(fā)中,C語言的基本編程依然是最重要的內(nèi)容。

關(guān)鍵字: 嵌入式 C語言 庫函數(shù)

單片機編程軟件的使用頻率極高,采用單片機編程軟件,可制造諸多系統(tǒng)。對于單片機編程軟件,小編做過諸多介紹。本文對于單片機編程軟件的介紹基于Keil,主要在于介紹該單片機編程軟件是如何處理庫函數(shù)以及寄存器的關(guān)系的。

關(guān)鍵字: 單片機編程軟件 庫函數(shù) 指數(shù)

雜記asla-lib庫函數(shù)snd_pcm_open打開流程淺析ac97聲卡intel8x0的DMA內(nèi)存substream->dma_buffer什么時候被賦值淺析ac97聲卡intel8x0的r

關(guān)鍵字: playback 庫函數(shù)

stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。獨立看門狗是限制喂狗時間在0-x內(nèi),x由你的相關(guān)寄存器決定。喂狗的時間不能過晚。窗口看門狗,所以稱之為窗口就是因為

關(guān)鍵字: STM32 庫函數(shù) 操作寄存器 窗口看門狗

首先,I2C總線由兩條線——串行數(shù)據(jù)(SDA)和串行時鐘(SCL),這是同步通信,也是半雙工通信,不能同時讀寫。每個器件都有一個唯一的地址識別,當(dāng)總線空閑時I2C兩條線都是高電平,只有當(dāng)連接到總線的器件的輸出級是

關(guān)鍵字: i2c stm32f429 庫函數(shù) 讀取eeprom

stm32f103最少有2個AD模數(shù)轉(zhuǎn)換器,每個ADC都有18個通道,可以測量16個外部和2個內(nèi)部模擬量。最大轉(zhuǎn)換頻率為1Mhz,也就是轉(zhuǎn)換時間為1us(在 ADCCLK = 14Mhz,采樣周期為1.5個時鐘周期時)。...

關(guān)鍵字: STM32 庫函數(shù) 操作寄存器 ad模數(shù)轉(zhuǎn)換
關(guān)閉