日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年02月06日(星期四)

正在發(fā)生

2021年02月06日 | STM8學(xué)習(xí)筆記二:51、arduino、stm8不同單片機(jī)的點(diǎn)燈方式

發(fā)布者:玄幻劍客 來(lái)源: eefocus關(guān)鍵字:STM8  單片機(jī) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

我在學(xué)習(xí)單片機(jī)的過(guò)程中懵懵懂懂地學(xué)了半桶水,以上幾種單片機(jī)都學(xué)過(guò)一點(diǎn),但是都不是很精,最近想把自己學(xué)過(guò)的知識(shí)梳理一遍,所以就做了這個(gè)筆記。

學(xué)習(xí)單片機(jī)有句話叫“萬(wàn)物之初在于點(diǎn)燈”(誰(shuí)說(shuō)的?不知道,可能是魯迅∩0∩),所以我在這篇筆記里比較一下這三種單片機(jī)的4種點(diǎn)燈方式。

1、51單片機(jī)的點(diǎn)燈方式:

我用的51單片機(jī)是AT89S52,51單片機(jī)的設(shè)置和電路接線非常簡(jiǎn)單。這也是51比較好學(xué)的原因。

#include
sbit LED1=P1^0; //P1口0 pin接LED,并在程序里定義
void delay(unsigned int z);
void main()
{

while(1)
{

D1=0;
delay(100);
D1=1;
delay(100);

}

}

void delay(unsigned int z) //延遲函數(shù)

{

unsigned int i,j;

for(i=0;ifor(j=0;j<100;j++);

}

2、arduino的點(diǎn)燈方式:

我用的是arduino uno的板子,arduino的設(shè)置和接線都相當(dāng)簡(jiǎn)單,這正是電子愛好者最容易上手arduino的原因。

/*

LED閃爍程序

*/

// 大多數(shù)Arduino板的Pin 13會(huì)連接一個(gè)LED

int LED = 13;

void setup() {

// 將LED代表的13pin腳定義為輸出

pinMode(LED, OUTPUT);

}

void loop() {

digitalWrite(LED, HIGH); //開燈

delay(1000); // 等1秒

digitalWrite(LED, LOW); // 關(guān)燈

delay(1000); // 等1秒

}

3、STM8的兩種點(diǎn)燈代碼。

STM8和STM32有兩種編碼方式:庫(kù)函數(shù)模式和寄存器模式。寄存器模式與51單片機(jī)的編碼方式類似,即通過(guò)設(shè)置寄存器來(lái)控制IO口輸入輸出;庫(kù)函數(shù)模式則是通過(guò)調(diào)用官方提供的標(biāo)準(zhǔn)固件庫(kù),來(lái)實(shí)現(xiàn)對(duì)IO口的控制。

固件庫(kù)可以這么理解,官方按照一定的標(biāo)準(zhǔn)格式,將寄存器的設(shè)置封裝在固件庫(kù)里,我們應(yīng)用時(shí),可以不用去記繁雜的各種寄存器設(shè)置方法,只要應(yīng)用官方提供的固件庫(kù)標(biāo)準(zhǔn)接口函數(shù)即可實(shí)現(xiàn)對(duì)單片機(jī)的控制。

庫(kù)函數(shù)模式雖然不可避免地增加了代碼長(zhǎng)度和一定的復(fù)雜度,但是從編程方式的簡(jiǎn)易化、代碼的可讀性和通用性以及復(fù)雜工程的系統(tǒng)化等方面有極其明顯的優(yōu)勢(shì)。

但是寄存器模式也有它自己的優(yōu)勢(shì),代碼短,結(jié)構(gòu)簡(jiǎn)單,執(zhí)行效率高,在一些對(duì)系統(tǒng)資源比較緊張的工程中比較適用。

(1)庫(kù)函數(shù)版本:

首先是建立一個(gè)工程,建立STM8工程的方法可以參考我前一個(gè)筆記。

如下圖所示:

其中“Driver”文件夾下的“l(fā)ed.c”文件是用戶,也就是我們自己編寫的驅(qū)動(dòng)文件。用戶在使用中,只需要編寫“l(fā)ed.c”驅(qū)動(dòng)文件和“main.c”主函數(shù)就好了。

整個(gè)工程項(xiàng)目加入分層的思想,將對(duì)以后的移植非常有利。打個(gè)比方:底層和應(yīng)用層隔離。底層驅(qū)動(dòng)與應(yīng)用層無(wú)關(guān),“main.c”函數(shù)在“l(fā)ed.c”驅(qū)動(dòng)文件中已經(jīng)寫好,這些才與硬件有關(guān),這樣需要移植到不同硬件時(shí),“main.c”主函數(shù)可以不做任何修改,只需要修改和底層相關(guān)的“l(fā)ed.c”驅(qū)動(dòng)。

下面是“l(fā)ed.c”驅(qū)動(dòng)程序示范。

#include "led.h"

void LED_Init(void)

{

GPIO_Init(LED1_PORT,LED1_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );

//定義LED的管腳的模式

}

void LED1_Open(void)

{

GPIO_WriteLow(LED1_PORT,LED1_PIN);//打開LED

}

void LED1_Close(void)

{

GPIO_WriteHigh(LED1_PORT,LED1_PIN);//關(guān)掉LED

}

void LED1_Toggle(void)

{

GPIO_WriteReverse(LED1_PORT,LED1_PIN);//翻轉(zhuǎn)LED狀態(tài)

}

注:GPIO的輸入輸出和管腳模式設(shè)置準(zhǔn)備在另一個(gè)筆記里詳述,此處不詳細(xì)展開。

這里還要注意的是“l(fā)ed.h”,這個(gè)文件定義了操作硬件哪個(gè)具體的pin腳。如下面程序:

#ifndef __LED_H

#define __LED_H

#include "stm8s_gpio.h"

#define LED1_PIN GPIO_PIN_5

#define LED1_PORT GPIOB

void LED_Init(void);

void LED1_Open(void);

void LED1_Close(void);

void LED1_Toggle(void);

#endif

在這個(gè)頭文件里,我們定義了LED1對(duì)應(yīng)的是芯片的PB5腳,這跟我用來(lái)測(cè)試的stm8s103f3最小系統(tǒng)板的設(shè)置是符合的,PB5腳接了一個(gè)測(cè)試用的LED。

所以以后要使用更多的pin腳來(lái)控制LED燈或pin腳輸出,可以按以上“l(fā)ed.c”和“l(fā)ed.h”的形式來(lái)編寫驅(qū)動(dòng)程序。

然后就是“main.c”主程序:

#include "stm8s.h"

#include "stm8s_clk.h"

#include "led.h"

void delay() //延遲函數(shù)

{

int i,j;

for(i=0;i<1000;i++)

{

for(j=0;j<1000;j++);

}

}

int main(void)

{

/*設(shè)置內(nèi)部高速時(shí)鐘16M為主時(shí)鐘*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

LED_Init(); //LED驅(qū)動(dòng)程序初始化

LED1_Close(); //關(guān)閉LED1

while(1)

{

LED1_Toggle(); // LED1狀態(tài)翻轉(zhuǎn)

delay(); //延遲函數(shù)

}

}

主函數(shù)沒(méi)什么太多好講的,基本上思路跟前面51和arduino是一樣的。在實(shí)踐過(guò)程中我碰到過(guò)兩個(gè)問(wèn)題,一個(gè)是時(shí)鐘設(shè)置的問(wèn)題,另一個(gè)是由于ASSERT報(bào)錯(cuò)的問(wèn)題。這兩個(gè)問(wèn)題我準(zhǔn)備都另外寫文說(shuō)明一下,這里就不重復(fù)了。

(1)寄存器版本:

寄存器版本的程序簡(jiǎn)單了,有多種寫法,下面是我寫的一個(gè)例子:

#include "stm8s.h"

#include "stm8s_clk.h"

void delay()

{

int i,j;

for(i=0;i<1000;i++)

{

for(j=0;j<1000;j++);

}

}

int main(void)

{

/*設(shè)置內(nèi)部高速時(shí)鐘16M為主時(shí)鐘*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

GPIOB->DDR = 0x20;//配置GPIOB的方向寄存器,設(shè)置pin5為輸出模式

GPIOB->CR1 = 0x20;//配置GPIOB_5為推挽輸出

GPIOB->CR2 = 0x00;

while(1)

{

GPIOB->DDR = 0x20;//GPIOB_5輸出高電平,亮

delay();

GPIOB->DDR = 0x00;//GPIOB_5輸出低電平,暗

delay();

}

}

STM8的GPIO寄存器配置可以參考下表。


關(guān)鍵字:STM8  單片機(jī) 引用地址:STM8學(xué)習(xí)筆記二:51、arduino、stm8不同單片機(jī)的點(diǎn)燈方式

上一篇:STM8學(xué)習(xí)筆記三——錯(cuò)誤:no definition for "assert_failed"
下一篇:IAR for STM8學(xué)習(xí)筆記(一)建立工程

推薦閱讀

據(jù)路透社援引知情人士透露,上周日,經(jīng)過(guò)博通公司的內(nèi)部討論,其對(duì)競(jìng)爭(zhēng)對(duì)手高通的收購(gòu)價(jià)格將從當(dāng)前的每股 70 美元提高到每股 80 美元至 82 美元。這樣一來(lái),整個(gè)收購(gòu)案的花費(fèi)也會(huì)隨之水漲船高,從 1050 億美元提高到 1200 億美元左右。不僅如此,博通向高通承諾一筆價(jià)格不菲的“分手費(fèi)”,以防監(jiān)管機(jī)構(gòu)阻撓該交易,同時(shí)也借此消除外界對(duì)于此次收...
在2004年由威爾·史密斯主演的科幻大片《我,機(jī)器人》中,片中的機(jī)器人公司亮出了一句響亮的廣告詞——“2035年,這是個(gè)機(jī)器的時(shí)代。”而現(xiàn)實(shí)生活中,機(jī)器手雖然在自動(dòng)生產(chǎn)線等領(lǐng)域有越來(lái)越廣泛的應(yīng)用,但它依然是冷冰冰工具的形象,具有高度智慧的機(jī)器人離普通人的生活依舊遙遠(yuǎn)。不過(guò),隨著近兩年人工智能迎來(lái)了一段爆發(fā)性成長(zhǎng)之后,機(jī)器具備了更精準(zhǔn)地獲...
云計(jì)算,智能手機(jī)和LTE服務(wù)使網(wǎng)絡(luò)流量顯著的增加。為了支持這些增加的流量,IT設(shè)備,如那些用于數(shù)據(jù)中心的高端服務(wù)器的速度必須增加,這對(duì)信號(hào)完整性測(cè)試的工程師提出了挑戰(zhàn),因此需要更先進(jìn)的測(cè)試儀器,例如矢量網(wǎng)絡(luò)分析儀(VNA),如下圖1中所示。成本/性能權(quán)衡更高的數(shù)據(jù)傳輸速率引入新的設(shè)計(jì)挑戰(zhàn)(如印刷電路板的導(dǎo)體趨膚效應(yīng)和介電損耗),以及設(shè)計(jì)權(quán)...
文/ 智能相對(duì)論作者/ 離離近日,波士頓動(dòng)力的網(wǎng)紅大黃狗Spot因?yàn)閷W(xué)會(huì)“做家務(wù)”而登上了微博熱搜。繼跨年夜的芭蕾小碎步之后,再次引起全網(wǎng)熱議。這次的“進(jìn)化”要?dú)w功于波士頓動(dòng)力新推出的Spot系列三大新品──Spot Enterprise、Spot Arm以及全新升級(jí)系統(tǒng)Scout。軟件與硬件的同時(shí)更新讓這只大黃狗get了跳繩、撿垃圾、挖土種花、收拾衣服、寫字、拖重物...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved