娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

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

正在發生

2021年02月06日 | STM8學習筆記二:51、arduino、stm8不同單片機的點燈方式

發布者:玄幻劍客 來源: eefocus關鍵字:STM8  單片機 手機看文章 掃描二維碼
隨時隨地手機看文章

我在學習單片機的過程中懵懵懂懂地學了半桶水,以上幾種單片機都學過一點,但是都不是很精,最近想把自己學過的知識梳理一遍,所以就做了這個筆記。

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

1、51單片機的點燈方式:

我用的51單片機是AT89S52,51單片機的設置和電路接線非常簡單。這也是51比較好學的原因。

#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) //延遲函數

{

unsigned int i,j;

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

}

2、arduino的點燈方式:

我用的是arduino uno的板子,arduino的設置和接線都相當簡單,這正是電子愛好者最容易上手arduino的原因。

/*

LED閃爍程序

*/

// 大多數Arduino板的Pin 13會連接一個LED

int LED = 13;

void setup() {

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

pinMode(LED, OUTPUT);

}

void loop() {

digitalWrite(LED, HIGH); //開燈

delay(1000); // 等1秒

digitalWrite(LED, LOW); // 關燈

delay(1000); // 等1秒

}

3、STM8的兩種點燈代碼。

STM8和STM32有兩種編碼方式:庫函數模式和寄存器模式。寄存器模式與51單片機的編碼方式類似,即通過設置寄存器來控制IO口輸入輸出;庫函數模式則是通過調用官方提供的標準固件庫,來實現對IO口的控制。

固件庫可以這么理解,官方按照一定的標準格式,將寄存器的設置封裝在固件庫里,我們應用時,可以不用去記繁雜的各種寄存器設置方法,只要應用官方提供的固件庫標準接口函數即可實現對單片機的控制。

庫函數模式雖然不可避免地增加了代碼長度和一定的復雜度,但是從編程方式的簡易化、代碼的可讀性和通用性以及復雜工程的系統化等方面有極其明顯的優勢。

但是寄存器模式也有它自己的優勢,代碼短,結構簡單,執行效率高,在一些對系統資源比較緊張的工程中比較適用。

(1)庫函數版本:

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

如下圖所示:

其中“Driver”文件夾下的“led.c”文件是用戶,也就是我們自己編寫的驅動文件。用戶在使用中,只需要編寫“led.c”驅動文件和“main.c”主函數就好了。

整個工程項目加入分層的思想,將對以后的移植非常有利。打個比方:底層和應用層隔離。底層驅動與應用層無關,“main.c”函數在“led.c”驅動文件中已經寫好,這些才與硬件有關,這樣需要移植到不同硬件時,“main.c”主函數可以不做任何修改,只需要修改和底層相關的“led.c”驅動。

下面是“led.c”驅動程序示范。

#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);//關掉LED

}

void LED1_Toggle(void)

{

GPIO_WriteReverse(LED1_PORT,LED1_PIN);//翻轉LED狀態

}

注:GPIO的輸入輸出和管腳模式設置準備在另一個筆記里詳述,此處不詳細展開。

這里還要注意的是“led.h”,這個文件定義了操作硬件哪個具體的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

在這個頭文件里,我們定義了LED1對應的是芯片的PB5腳,這跟我用來測試的stm8s103f3最小系統板的設置是符合的,PB5腳接了一個測試用的LED。

所以以后要使用更多的pin腳來控制LED燈或pin腳輸出,可以按以上“led.c”和“led.h”的形式來編寫驅動程序。

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

#include "stm8s.h"

#include "stm8s_clk.h"

#include "led.h"

void delay() //延遲函數

{

int i,j;

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

{

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

}

}

int main(void)

{

/*設置內部高速時鐘16M為主時鐘*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

LED_Init(); //LED驅動程序初始化

LED1_Close(); //關閉LED1

while(1)

{

LED1_Toggle(); // LED1狀態翻轉

delay(); //延遲函數

}

}

主函數沒什么太多好講的,基本上思路跟前面51和arduino是一樣的。在實踐過程中我碰到過兩個問題,一個是時鐘設置的問題,另一個是由于ASSERT報錯的問題。這兩個問題我準備都另外寫文說明一下,這里就不重復了。

(1)寄存器版本:

寄存器版本的程序簡單了,有多種寫法,下面是我寫的一個例子:

#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)

{

/*設置內部高速時鐘16M為主時鐘*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

GPIOB->DDR = 0x20;//配置GPIOB的方向寄存器,設置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寄存器配置可以參考下表。


關鍵字:STM8  單片機 引用地址:STM8學習筆記二:51、arduino、stm8不同單片機的點燈方式

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

推薦閱讀

2月5日,全球人形機器人領導者優必選旗下Alpha系列的全新產品Alpha Ebot正式上線京東眾籌。Alpha Ebot是針對中國高端家庭的一款個性化智能教育機器人,具備語音交互、行為習慣管理、中英翻譯、百科問答、編程課程學習等多項功能,并內置了行為習慣養成體系,可以幫助孩子培養良好的行為習慣,重新定義了教育機器人產品。圖為Alpha Ebot市場呈爆發式增長...
在2004年由威爾·史密斯主演的科幻大片《我,機器人》中,片中的機器人公司亮出了一句響亮的廣告詞——“2035年,這是個機器的時代。”而現實生活中,機器手雖然在自動生產線等領域有越來越廣泛的應用,但它依然是冷冰冰工具的形象,具有高度智慧的機器人離普通人的生活依舊遙遠。不過,隨著近兩年人工智能迎來了一段爆發性成長之后,機器具備了更精準地獲...
要想讓一個IO口作為外部中斷的中斷源必須有三個設置。第一,必須將該IO口的方向設置為輸入;第二,選擇外部中斷的觸發方式,即選擇是上升沿觸發還是下降沿觸發;第三,使能該IO口的中斷。比如,如果我們想設置P1.0口作為外部中斷源就可以這樣設置:P1DIR&= ~BIT0;//方向設置為輸入 P1IES |= BIT0;//觸發方式設置P1IE |=BIT0;//使能中斷其中觸發方式設...
2月5日上午消息,有傳言稱蘋果將在明年年初推出一款虛擬現實頭戴設備(VR),外媒《The Information》根據他們直接了解的消息,報道了此設備預期的一些細節。  該設備將配備十多個用于跟蹤手部動作的攝像頭,以及兩個超高分辨率的8K顯示屏和先進的眼睛跟蹤技術。攝像頭將能夠通過顯示部分傳遞真實世界的視頻給用戶,從而創建虛擬和現實的混合...

史海拾趣

問答坊 | AI 解惑

呵呵,要比賽了,題要出什么那

本帖最后由 paulhyde 于 2014-9-15 09:38 編輯 呵呵,要比賽了,題要出什么那 網上各種各樣的題都有。哎  …

查看全部問答∨

arm p0.14使用求助

片子為lpc2200系列 開始jtag檢測不到mcu,后來p0.14上拉后,成功檢測到芯片,原因衛p0.14為低,進入isp狀態。       現在芯片資源比較緊張,本來p0.14是盡量不用為好,但是現在必須用作外部中斷引腳,大家有什么好的方案,不 ...…

查看全部問答∨

急!!WINCE5.0中EDB得問題。

以下是我寫的代碼得一部分 CEOID ceOid; DWORD dwIndex = 0; CEPROPVAL pRecord; memset(&pRecord,0,LocalSize(&pRecord)); pRecord.propid = BQCONTENT_ID;  //屬性 pRecord.wLenData = 0; pRecord.val.lpwstr = _T("haha ...…

查看全部問答∨

請問哪里有Intel C++ Compiler 2.0 for windows ce professional下?

請問哪里有Intel C++ Compiler 2.0 for windows ce professional下? 里面是不是帶了Intel C++ Software development tool suite 2.0  for intel xscale microarchitecture,professional?…

查看全部問答∨

str911fma44x6keil程序下載到ram中運行

我用keil做str911fma44x6 的調試,想把軟件下到RAM中運行,可是只要開中斷pc都會飛到flash地址,請問如何實現所有軟件都在RAM中運行?不像STR7,STR9找不到任何RAM remap的設置。請大家指點!…

查看全部問答∨

基于IEEE802.15.4的應用開發

這學期搞了個校長基金項目,也是頭次做項目!一接手就是個從來沒接觸過的IEEE802.15.4網絡節點設計,看了下項目資料,知道就是設計一個網絡節點來采集數據,然后發往上位機!整個網絡中有協調器,路由器和采集節點,就像一個計算機網絡一樣!大一看 ...…

查看全部問答∨

dsp如何選型

想用dsp做超聲波流量計,(本人dsp新人)看了ti的官網 有幾個系列很是動心  工控應用 低功耗 多核 arm+dsp   tms320f2812 : 看介紹已經有公司用F2810做了UFM  TMS320C5532  TMS320C6474  omap L132 ...…

查看全部問答∨

準備申請MSP430團購做個手持定位系統

準備申請MSP430團購做個手持定位系統,主要看中了它的低功耗,手持加GPS不知道效果怎么樣,很想試試…

查看全部問答∨

LED燈珠的走向

已經在LED照明行業工作了2個多也,對于LED照明稍微了解一點。但是有一個特別大的困惑就是LED照明燈珠的走向是什么樣。我們公司生產所用的室內照明和室外照明的燈具都是用1-3W的大功率LED燈珠,從來不用什么3014或3528或2835一樣的燈珠,但是我看其 ...…

查看全部問答∨

各位有能能用的msp430超聲波測距代碼嗎?

本想自己寫,可惜沒時間了。。網上找到的基本不能用…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 衡山县| 八宿县| 德清县| 阜宁县| 蓬安县| 乌海市| 肇源县| 天柱县| 澜沧| 柳河县| 崇州市| 大同县| 南乐县| 简阳市| 两当县| 肥乡县| 松滋市| 洛隆县| 彭州市| 日照市| 信宜市| 巫溪县| 尼木县| 汉中市| 含山县| 全南县| 商水县| 宣恩县| 璧山县| 赣州市| 栖霞市| 招远市| 扎鲁特旗| 厦门市| 温州市| 鸡东县| 萨嘎县| 罗江县| 老河口市| 永年县| 东乡族自治县|