0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)模塊化編程初識(shí) 淺談51單片機(jī)模塊化編程

ss ? 作者:工程師譚軍 ? 2018-09-10 15:10 ? 次閱讀

本文主要是關(guān)于51單片機(jī)模塊化編程的相關(guān)介紹,并著重對(duì)51單片機(jī)模塊化編程進(jìn)行了詳盡的闡述。

模塊化編程

方法定義的參數(shù)

無(wú)參函數(shù):調(diào)用方法是,主掉方法不將數(shù)據(jù)傳遞給被調(diào)方法,無(wú)參函數(shù)可以帶或者不帶返回值

有參函數(shù):在調(diào)用方法時(shí),主調(diào)方法和被掉方法有數(shù)據(jù)傳輸,主調(diào)方法的數(shù)據(jù)可以給被掉方法使用,被調(diào)方法的參數(shù)可以給主調(diào)方法使用

定義方法時(shí),參數(shù)成為形式參數(shù),簡(jiǎn)稱形參,形參子啊方法為被使用時(shí)沒有確定值,知識(shí)形式上的參數(shù),調(diào)用方法時(shí)的參數(shù)稱為實(shí)參,實(shí)參可以是變量,常量,或表達(dá)式,有確定的值,是是在的參數(shù),方法定義時(shí),的形參不占內(nèi)存,只有發(fā)生調(diào)用時(shí)間,參數(shù)才被分配內(nèi)存,接受實(shí)參傳來(lái)的值

方法是形參和時(shí)參個(gè)數(shù)必須相等,對(duì)應(yīng)類型一致,且順序相同。參數(shù)名字可以相同,也可以不同,即使形參和實(shí)參名字相同,也是 兩個(gè)不同是參數(shù),占用不同的內(nèi)存

方法修飾符 方法類型 方法名稱(形參){

方法體

}

/*第三個(gè)單詞表示有無(wú)返回值,void無(wú)返回值,其余需要例如 int String 需要return

第四個(gè)為方法名 括號(hào)(參數(shù)列表,多個(gè)參數(shù),用逗號(hào)隔開)

例:public static void fucName(){

//書寫代碼

}

方法的返回值

無(wú)返回值:void,無(wú)返回值的方法,一般用來(lái)執(zhí)行指定的一組

有返回值:調(diào)用方法后,可以通過(guò)方法名待會(huì)方法值供主調(diào)方使用

return 表達(dá)式;

參數(shù)傳遞

基本數(shù)據(jù)類型/String類型作為參數(shù)傳統(tǒng),傳遞的是值,方法里對(duì)應(yīng)的類型接受這個(gè)值

數(shù)組引用數(shù)據(jù)類型作為參數(shù)傳遞,傳遞的是地址,方法里對(duì)象的類型接受這個(gè)地址,指向原有地址,新變量的值保留在原有地址

51單片機(jī)模塊化編程初識(shí)

按:在51單片機(jī)C語(yǔ)言編程中,為了提高程序的可移植性,有必要用可移植的變量類型的別名進(jìn)行編程.

把以下內(nèi)容保存到編程軟件的Include目錄,并保存為了mytype.h文件.如果你用的是Keil,這個(gè)目錄可能就是:Keil\C51\INC

/* http://www.rupeng.com/forum/thread-8057-1-1.html */

#ifndef _MYTYPE_

#define _MYTYPE_

typedef unsigned int uint16;

typedef unsigned int UINT;

typedef unsigned int uint;

typedef unsigned int UINT16;

typedef unsigned int WORD;

typedef unsigned int word;

typedef int int16;

typedef int INT16;

typedef unsigned long uint32;

typedef unsigned long UINT32;

typedef unsigned long DWORD;

typedef unsigned long dword;

typedef long int32;

typedef long INT32;

typedef signed char int8;

typedef signed char INT8;

typedef unsigned char byte;

typedef unsigned char BYTE;

typedef unsigned char uchar;

typedef unsigned char UINT8;

typedef unsigned char uint8;

typedef unsigned char BOOL;

#endif

以后在寫程序時(shí)只要寫上下面語(yǔ)句就行了:

#include

另外,http://hi.baidu.com/tuenhai/照網(wǎng)友紅金龍吸味的建議,把編程的源文件只在到工程目錄下的src目錄,其他如output文件和listing文件保存到output目錄.

LED篇第三章模塊化編程初識(shí)

好的開始是成功的一半

通過(guò)上一章的學(xué)習(xí),我想你已經(jīng)掌握了如何在程序中釋放CPU了。希望能夠繼續(xù)堅(jiān)持下去。一個(gè)良好的開始是成功的一半。我們今天所做的一切都是為了在單片機(jī)編程上做的更好。

在談?wù)摻裉斓闹黝}之前,先說(shuō)下我以前的一些經(jīng)歷。在剛開始接觸到C語(yǔ)言程序的時(shí)候,由于學(xué)習(xí)內(nèi)容所限,寫的程序都不是很大,一般也就幾百行而矣。所以所有的程序都完成在一個(gè)源文件里面。記得那時(shí)候大一參加學(xué)校里的一個(gè)電子設(shè)計(jì)大賽,調(diào)試了一個(gè)多星期,所有程序加起來(lái)大概將近1000行,長(zhǎng)長(zhǎng)的一個(gè)文件,從上瀏覽下來(lái)都要好半天。出了錯(cuò)誤簡(jiǎn)單的語(yǔ)法錯(cuò)誤還好定位,其它一些錯(cuò)誤,往往找半天才找的到。那個(gè)時(shí)候開始知道了模塊化編程這個(gè)東西,也嘗試著開始把程序分模塊編寫。最開始是把相同功能的一些函數(shù)(譬如1602液晶的驅(qū)動(dòng))全部寫在一個(gè)頭文件(.h)文件里面,然后需要調(diào)用的地方包含進(jìn)去,但是很快發(fā)現(xiàn)這種方法有其局限性,很容易犯重復(fù)包含的錯(cuò)誤。

而且調(diào)用起來(lái)也很不方便。很快暑假的電子設(shè)計(jì)大賽來(lái)臨了,學(xué)校對(duì)我們的單片機(jī)軟件編程進(jìn)行了一些培訓(xùn)。由于學(xué)校歷年來(lái)參加國(guó)賽和省賽,因此積累了一定數(shù)量的驅(qū)動(dòng)模塊,那些日子,老師每天都會(huì)布置一定量的任務(wù),讓我們用這些模塊組合起來(lái),完成一定功能。而正是那些日子模塊化編程的培訓(xùn),使我對(duì)于模塊化編程有了更進(jìn)一步的認(rèn)識(shí)。并且程序規(guī)范也開始慢慢注意起來(lái)。此后的日子,無(wú)論程序的大小,均采用模塊化編程的方式去編寫。很長(zhǎng)一段時(shí)間以來(lái),一直有單片機(jī)愛好者在QQ上和我一起交流。有時(shí)候,他們會(huì)發(fā)過(guò)來(lái)一些有問(wèn)題的程序源文件,讓我?guī)兔π薷囊幌?。同樣是長(zhǎng)長(zhǎng)的一個(gè)文件,而且命名極不規(guī)范,從頭看下來(lái),著實(shí)是痛苦,說(shuō)實(shí)話,還真不如我重新給他們寫一個(gè)更快一些,此話到不假,因?yàn)槭诸^積累了一定量的模塊,在完成一個(gè)新的系統(tǒng)時(shí)候,只需要根據(jù)上層功能需求,在底層模塊的支持下,可以很快方便的完成。而不需要從頭到尾再一磚一瓦的重新編寫。藉此,也可以看出模塊化編程的一個(gè)好處,就是可重復(fù)利用率高。下面讓我們揭開模塊化神秘面紗,一窺其真面目。

C語(yǔ)言源文件 *.c

提到C語(yǔ)言源文件,大家都不會(huì)陌生。因?yàn)槲覀兤匠懙?a target="_blank">程序代碼幾乎都在這個(gè)XX.C文件里面。編譯器也是以此文件來(lái)進(jìn)行編譯并生成相應(yīng)的目標(biāo)文件。作為模塊化編程的組成基礎(chǔ),我們所要實(shí)現(xiàn)的所有功能的源代碼均在這個(gè)文件里。理想的模塊化應(yīng)該可以看成是一個(gè)黑盒子。即我們只關(guān)心模塊提供的功能,而不管模塊內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。好比我們買了一部手機(jī),我們只需要會(huì)用手機(jī)提供的功能即可,不需要知曉它是如何把短信發(fā)出去的,如何響應(yīng)我們按鍵的輸入,這些過(guò)程對(duì)我們用戶而言,就是是一個(gè)黑盒子。

在大規(guī)模程序開發(fā)中,一個(gè)程序由很多個(gè)模塊組成,很可能,這些模塊的編寫任務(wù)被分配到不同的人。而你在編寫這個(gè)模塊的時(shí)候很可能就需要利用到別人寫好的模塊的借口,這個(gè)時(shí)候我們關(guān)心的是,它的模塊實(shí)現(xiàn)了什么樣的接口,我該如何去調(diào)用,至于模塊內(nèi)部是如何組織的,對(duì)于我而言,無(wú)需過(guò)多關(guān)注。而追求接口的單一性,把不需要的細(xì)節(jié)盡可能對(duì)外部屏蔽起來(lái),正是我們所需要注意的地方。

C語(yǔ)言頭文件 *.h

談及到模塊化編程,必然會(huì)涉及到多文件編譯,也就是工程編譯。在這樣的一個(gè)系統(tǒng)中,往往會(huì)有多個(gè)C文件,而且每個(gè)C文件的作用不盡相同。在我們的C文件中,由于需要對(duì)外提供接口,因此必須有一些函數(shù)或者是變量提供給外部其它文件進(jìn)行調(diào)用。

假設(shè)我們有一個(gè)LCD.C文件,其提供最基本的LCD的驅(qū)動(dòng)函數(shù)

LcdPutChar(char cNewValue) ; //在當(dāng)前位置輸出一個(gè)字符

而在我們的另外一個(gè)文件中需要調(diào)用此函數(shù),那么我們?cè)撊绾巫瞿兀?/p>

頭文件的作用正是在此??梢苑Q其為一份接口描述文件。其文件內(nèi)部不應(yīng)該包含任何實(shí)質(zhì)性的函數(shù)代碼。我們可以把這個(gè)頭文件理解成為一份說(shuō)明書,說(shuō)明的內(nèi)容就是我們的模塊對(duì)外提供的接口函數(shù)或者是接口變量。同時(shí)該文件也包含了一些很重要的宏定義以及一些結(jié)構(gòu)體的信息,離開了這些信息,很可能就無(wú)法正常使用接口函數(shù)或者是接口變量。但是總的原則是:不該讓外界知道的信息就不應(yīng)該出現(xiàn)在頭文件里,而外界調(diào)用模塊內(nèi)接口函數(shù)或者是接口變量所必須的信息就一定要出現(xiàn)在頭文件里,否則,外界就無(wú)法正確的調(diào)用我們提供的接口功能。因而為了讓外部函數(shù)或者文件調(diào)用我們提供的接口功能,就必須包含我們提供的這個(gè)接口描述文件----即頭文件。同時(shí),我們自身模塊也需要包含這份模塊頭文件(因?yàn)槠浒四K源文件中所需要的宏定義或者是結(jié)構(gòu)體),好比我們平常所用的文件都是一式三份一樣,模塊本身也需要包含這個(gè)頭文件。

下面我們來(lái)定義這個(gè)頭文件,一般來(lái)說(shuō),頭文件的名字應(yīng)該與源文件的名字保持一致,這樣我們便可以清晰的知道哪個(gè)頭文件是哪個(gè)源文件的描述。

于是便得到了LCD.C的頭文件LCD.h 其內(nèi)容如下。

#ifndef _LCD_H_

#define _LCD_H_

extern LcdPutChar(char cNewValue) ;

#endif

這與我們?cè)谠次募卸x函數(shù)時(shí)有點(diǎn)類似。不同的是,在其前面添加了extern 修飾符表明其是一個(gè)外部函數(shù),可以被外部其它模塊進(jìn)行調(diào)用。

#ifndef _LCD_H_

#define _LCD_H_

#endif

這個(gè)幾條條件編譯和宏定義是為了防止重復(fù)包含。假如有兩個(gè)不同源文件需要調(diào)用LcdPutChar(char cNewValue)這個(gè)函數(shù),他們分別都通過(guò)#include “Lcd.h”把這個(gè)頭文件包含了進(jìn)去。在第一個(gè)源文件進(jìn)行編譯時(shí)候,由于沒有定義過(guò) _LCD_H_ 因此 #ifndef _LCD_H_ 條件成立,于是定義_LCD_H_ 并將下面的聲明包含進(jìn)去。在第二個(gè)文件編譯時(shí)候,由于第一個(gè)文件包含時(shí)候,已經(jīng)將_LCD_H_定義過(guò)了。因此#ifndef _LCD_H_ 不成立,整個(gè)頭文件內(nèi)容就沒有被包含。假設(shè)沒有這樣的條件編譯語(yǔ)句,那么兩個(gè)文件都包含了extern LcdPutChar(char cNewValue) ; 就會(huì)引起重復(fù)包含的錯(cuò)誤。

不得不說(shuō)的typedef

很多朋友似乎了習(xí)慣程序中利用如下語(yǔ)句來(lái)對(duì)數(shù)據(jù)類型進(jìn)行定義

#define uint unsigned int

#define uchar unsigned char

然后在定義變量的時(shí)候 直接這樣使用

uint g_nTimeCounter = 0 ;

不可否認(rèn),這樣確實(shí)很方便,而且對(duì)于移植起來(lái)也有一定的方便性。但是考慮下面這種情況你還會(huì) 這么認(rèn)為嗎?

#define PINT unsigned int * //定義unsigned int 指針類型

PINT g_npTimeCounter, g_npTimeState ;

那么你到底是定義了兩個(gè)unsigned int 型的指針變量,還是一個(gè)指針變量,一個(gè)整形變量呢?而你的初衷又是什么呢,想定義兩個(gè)unsigned int 型的指針變量嗎?如果是這樣,那么估計(jì)過(guò)不久就會(huì)到處抓狂找錯(cuò)誤了。

慶幸的是C語(yǔ)言已經(jīng)為我們考慮到了這一點(diǎn)。typedef 正是為此而生。為了給變量起一個(gè)別名我們可以用如下的語(yǔ)句

typedef unsigned int uint16 ; //給指向無(wú)符號(hào)整形變量起一個(gè)別名 uint16

typedef unsigned int * puint16 ; //給指向無(wú)符號(hào)整形變量指針起一個(gè)別名 puint16

在我們定義變量時(shí)候便可以這樣定義了:

uint16 g_nTimeCounter = 0 ; //定義一個(gè)無(wú)符號(hào)的整形變量

puint16 g_npTimeCounter ; //定義一個(gè)無(wú)符號(hào)的整形變量的指針

在我們使用51單片機(jī)的C語(yǔ)言編程的時(shí)候,整形變量的范圍是16位,而在基于32的微處理下的整形變量是32位。倘若我們?cè)?位單片機(jī)下編寫的一些代碼想要移植到32位的處理器上,那么很可能我們就需要在源文件中到處修改變量的類型定義。這是一件龐大的工作,為了考慮程序的可移植性,在一開始,我們就應(yīng)該養(yǎng)成良好的習(xí)慣,用變量的別名進(jìn)行定義。

如在8位單片機(jī)的平臺(tái)下,有如下一個(gè)變量定義

uint16 g_nTimeCounter = 0 ;

如果移植32單片機(jī)的平臺(tái)下,想要其的范圍依舊為16位。

可以直接修改uint16 的定義,即

typedef unsigned short int uint16 ;

這樣就可以了,而不需要到源文件處處尋找并修改。

將常用的數(shù)據(jù)類型全部采用此種方法定義,形成一個(gè)頭文件,便于我們以后編程直接調(diào)用。

文件名 MacroAndConst.h

其內(nèi)容如下:

#ifndef _MACRO_AND_CONST_H_

#define _MACRO_AND_CONST_H_

typedef unsigned int uint16;

typedef unsigned int UINT;

typedef unsigned int uint;

typedef unsigned int UINT16;

typedef unsigned int WORD;

typedef unsigned int word;

typedef int int16;

typedef int INT16;

typedef unsigned long uint32;

typedef unsigned long UINT32;

typedef unsigned long DWORD;

typedef unsigned long dword;

typedef long int32;

typedef long INT32;

typedef signed char int8;

typedef signed char INT8;

typedef unsigned char byte;

typedef unsigned char BYTE;

typedef unsigned char uchar;

typedef unsigned char UINT8;

typedef unsigned char uint8;

typedef unsigned char BOOL;

#endif

至此,似乎我們對(duì)于源文件和頭文件的分工以及模塊化編程有那么一點(diǎn)概念了。那么讓我們趁熱打鐵,將上一章的我們編寫的LED閃爍函數(shù)進(jìn)行模塊劃分并重新組織進(jìn)行編譯。

在上一章中我們主要完成的功能是P0口所驅(qū)動(dòng)的LED以1Hz的頻率閃爍。其中用到了定時(shí)器,以及LED驅(qū)動(dòng)模塊。因而我們可以簡(jiǎn)單的將整個(gè)工程分成三個(gè)模塊,定時(shí)器模塊,LED模塊,以及主函數(shù)

對(duì)應(yīng)的文件關(guān)系如下

main.c

Timer.c --?Timer.h

Led.c --?Led.h

在開始重新編寫我們的程序之前,先給大家講一下如何在KEIL中建立工程模板吧,這個(gè)模板是我一直沿用至今。希望能夠給大家一點(diǎn)啟發(fā)。

下面我們開始編寫各個(gè)模塊文件。

首先編寫Timer.c 這個(gè)文件主要內(nèi)容就是定時(shí)器初始化,以及定時(shí)器中斷服務(wù)函數(shù)。其內(nèi)容如下。

#include

bit g_bSystemTime1Ms = 0 ; // 1MS系統(tǒng)時(shí)標(biāo)

void Timer0Init(void)

{

TMOD &= 0xf0 ;

TMOD |= 0x01 ; //定時(shí)器0工作方式1

TH0 = 0xfc ; //定時(shí)器初始值

TL0 = 0x66 ;

TR0 = 1 ;

ET0 = 1 ;

}

void Time0Isr(void) interrupt 1

{

TH0 = 0xfc ; //定時(shí)器重新賦初值

TL0 = 0x66 ;

g_bSystemTime1Ms = 1 ; //1MS時(shí)標(biāo)標(biāo)志位置位

}

由于在Led.c文件中需要調(diào)用我們的g_bSystemTime1Ms變量。同時(shí)主函數(shù)需要調(diào)用Timer0Init()初始化函數(shù),所以應(yīng)該對(duì)這個(gè)變量和函數(shù)在頭文件里作外部聲明。以方便其它函數(shù)調(diào)用。

Timer.h 內(nèi)容如下。

#ifndef _TIMER_H_

#define _TIMER_H_

extern void Timer0Init(void) ;

extern bit g_bSystemTime1Ms ;

#endif

完成了定時(shí)器模塊后,我們開始編寫LED驅(qū)動(dòng)模塊。

Led.c 內(nèi)容如下:

#include

#include “MacroAndConst.h”

#include “Led.h”

#include “Timer.h”

static uint16 g_u16LedTimeCount = 0 ; //LED計(jì)數(shù)器

static uint8 g_u8LedState = 0 ; //LED狀態(tài)標(biāo)志, 0表示亮,1表示熄滅

#define LED P0 //定義LED接口

#define LED_ON() LED = 0x00 ; //所有LED亮

#define LED_OFF() LED = 0xff ; //所有LED熄滅

void LedProcess(void)

{

if(0 == g_u8LedState) //如果LED的狀態(tài)為亮,則點(diǎn)亮LED

{

LED_ON() ;

}

else //否則熄滅LED

{

LED_OFF() ;

}

}

void LedStateChange(void)

{

if(g_bSystemTime1Ms) //系統(tǒng)1MS時(shí)標(biāo)到

{

g_bSystemTime1Ms = 0 ;

g_u16LedTimeCount++ ; //LED計(jì)數(shù)器加一

if(g_u16LedTimeCount 》= 500) //計(jì)數(shù)達(dá)到500,即500MS到了,改變LED的狀態(tài)。

{

g_u16LedTimeCount = 0 ;

g_u8LedState = ! g_u8LedState ;

}

}

}

這個(gè)模塊對(duì)外的借口只有兩個(gè)函數(shù),因此在相應(yīng)的Led.h 中需要作相應(yīng)的聲明。

Led.h 內(nèi)容:

#ifndef _LED_H_

#define _LED_H_

extern void LedProcess(void) ;

extern void LedStateChange(void) ;

#endif

這兩個(gè)模塊完成后,我們將其C文件添加到工程中。然后開始編寫主函數(shù)里的代碼。

如下所示:

#include

#include “MacroAndConst.h”

#include “Timer.h”

#include “Led.h”

sbit LED_SEG = P1^4; //數(shù)碼管段選

sbit LED_DIG = P1^5; //數(shù)碼管位選

sbit LED_CS11 = P1^6; //led控制位

void main(void)

{

LED_CS11 = 1 ; //74HC595輸出允許

LED_SEG = 0 ; //數(shù)碼管段選和位選禁止(因?yàn)樗鼈兒蚅ED共用P0口)

LED_DIG = 0 ;

Timer0Init() ;

EA = 1 ;

while(1)

{

LedProcess() ;

LedStateChange() ;

}

}

整個(gè)工程截圖如下:

結(jié)語(yǔ)

關(guān)于51單片機(jī)模塊化編程的相關(guān)介紹就到這了,如有不足之處歡迎指正。

相關(guān)閱讀推薦:8051模塊化編程分析

相關(guān)閱讀推薦:如何對(duì)一個(gè)大的項(xiàng)目進(jìn)行模塊化編程

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628497
  • 模塊化編程
    +關(guān)注

    關(guān)注

    4

    文章

    17

    瀏覽量

    7708
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)C語(yǔ)言模塊化編程

    單片機(jī)C語(yǔ)言模塊化編程下面讓我們揭開模塊化神秘面紗,一窺其真面目。
    發(fā)表于 01-14 16:46

    單片機(jī)C語(yǔ)言模塊化編程

    單片機(jī)C語(yǔ)言模塊化編程
    發(fā)表于 05-22 22:00

    怎么使用單片機(jī)實(shí)現(xiàn)模塊化編程

    `使用stc89c52單片機(jī),怎么實(shí)現(xiàn)模塊化編程?頭文件和.c文件怎么聯(lián)系?頭文件里面包不包含子程序?`
    發(fā)表于 05-28 09:24

    單片機(jī)模塊化編程有哪些步驟?

    單片機(jī)模塊化編程有哪些步驟?有大神可以解決這個(gè)問(wèn)題嗎
    發(fā)表于 07-14 06:37

    單片機(jī)模塊化是如何進(jìn)行編程的?

    單片機(jī)模塊化是如何進(jìn)行編程的?
    發(fā)表于 10-21 06:20

    什么是模塊化編程?模塊化編程的注意事項(xiàng)

    單片機(jī)零基礎(chǔ)入門(8-4)模塊化編程---LED1602調(diào)試工具一、回顧二、什么是模塊化編程?1、傳統(tǒng)方式
    發(fā)表于 02-23 07:14

    8051模塊化編程分析

    本文以“60秒倒計(jì)時(shí)電路”為例談一談51 單片機(jī)匯編語(yǔ)言模塊化編程的一點(diǎn)技巧
    發(fā)表于 06-30 11:04 ?3172次閱讀
    8051<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>分析

    單片機(jī)模塊化編程方法

    基于51單片機(jī)模塊化學(xué)習(xí),是一個(gè)不錯(cuò)的手冊(cè),值得收藏
    發(fā)表于 11-25 11:26 ?62次下載

    單片機(jī)的C語(yǔ)言模塊化編程

    單片機(jī)的C語(yǔ)言模塊化編程
    發(fā)表于 10-13 11:16 ?51次下載
    <b class='flag-5'>單片機(jī)</b>的C語(yǔ)言<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>

    51單片機(jī)如何進(jìn)行模塊化編程

    51單片機(jī)是對(duì)所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是Intel的8004單片機(jī),后來(lái)隨著Flash rom
    的頭像 發(fā)表于 09-11 09:11 ?3.2w次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>如何進(jìn)行<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>

    單片機(jī)】Keil+Proteus流水燈(模塊化編程

    【征服單片機(jī)】實(shí)戰(zhàn)篇:Keil+Proteus流水燈(模塊化編程)主要是Keil的模塊化編程,同時(shí)實(shí)現(xiàn)了一個(gè)小實(shí)驗(yàn),通過(guò)Keil
    發(fā)表于 11-17 11:06 ?15次下載
    【<b class='flag-5'>單片機(jī)</b>】Keil+Proteus流水燈(<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>)

    51單片機(jī)-矩陣鍵盤模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板

    51單片機(jī)-矩陣鍵盤模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板
    發(fā)表于 11-21 09:21 ?28次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>-矩陣鍵盤<b class='flag-5'>模塊</b>-長(zhǎng)短按鍵&數(shù)碼管顯示-<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>模板

    經(jīng)驗(yàn)分享|十年老司機(jī)的單片機(jī)模塊化編程

    經(jīng)驗(yàn)分享|十年老司機(jī)的單片機(jī)模塊化編程
    發(fā)表于 11-23 17:51 ?33次下載
    經(jīng)驗(yàn)分享|十年老司機(jī)的<b class='flag-5'>單片機(jī)</b><b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>

    單片機(jī)工程模塊化操作_適用單片機(jī)編程新手

    對(duì)于一些接觸單片機(jī)編程不久的小萌新來(lái)說(shuō),模塊化編程這個(gè)概念剛接觸的時(shí)候可能會(huì)很懵,到底什么是模塊化編程
    發(fā)表于 11-23 17:51 ?26次下載
    <b class='flag-5'>單片機(jī)</b>工程<b class='flag-5'>模塊化</b>操作_適用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>編程</b>新手

    單片機(jī)零基礎(chǔ)入門(8-5)模塊化編程

    單片機(jī)零基礎(chǔ)入門(8-4)模塊化編程---LED1602調(diào)試工具一、回顧二、什么是模塊化編程?1、傳統(tǒng)方式
    發(fā)表于 12-31 18:55 ?20次下載
    <b class='flag-5'>單片機(jī)</b>零基礎(chǔ)入門(8-5)<b class='flag-5'>模塊化</b><b class='flag-5'>編程</b>