單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)-文檔資料_第1頁(yè)
單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)-文檔資料_第2頁(yè)
單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)-文檔資料_第3頁(yè)
單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)-文檔資料_第4頁(yè)
單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)-文檔資料_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 第五章第五章 單片機(jī)單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)第五章第五章 單片機(jī)單片機(jī)C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)0、標(biāo)準(zhǔn)C語(yǔ)言一、C51變量定義格式變量定義格式二、 C51 運(yùn)算符、表達(dá)式及其規(guī)則三、 C51 流程控制語(yǔ)句四、C51構(gòu)造數(shù)據(jù)類型五、函數(shù)六、 C51庫(kù)函數(shù)七、C51模塊化程序設(shè)計(jì)標(biāo)準(zhǔn)標(biāo)準(zhǔn)C語(yǔ)言語(yǔ)言1、C語(yǔ)言程序的基本結(jié)構(gòu)語(yǔ)言程序的基本結(jié)構(gòu)#include 預(yù)處理命令預(yù)處理命令char fun1( ); 函數(shù)說(shuō)明函數(shù)說(shuō)明float fun2( );int x; 全局變量說(shuō)明全局變量說(shuō)明Viod main( ) 主函數(shù)主函數(shù) 聲明部分聲明部分 函數(shù)體函數(shù)體 執(zhí)行部分執(zhí)行部分 ch

2、ar fun1( ) 功能函數(shù)功能函數(shù)1 聲明部分聲明部分 函數(shù)體函數(shù)體 執(zhí)行部分執(zhí)行部分 float fun2( ) 功能函數(shù)功能函數(shù)2 函數(shù)體函數(shù)體特點(diǎn):特點(diǎn):nC語(yǔ)言是函數(shù)式語(yǔ)言,函數(shù)是程序語(yǔ)言是函數(shù)式語(yǔ)言,函數(shù)是程序基本組成基本組成nC程序必須程序必須,且只有一個(gè)且只有一個(gè)mainn不論位置,程序總從主程序開始不論位置,程序總從主程序開始n所有變量必須先定義(規(guī)定數(shù)據(jù)類所有變量必須先定義(規(guī)定數(shù)據(jù)類型),再使用型),再使用n每個(gè)語(yǔ)句必須用分號(hào)每個(gè)語(yǔ)句必須用分號(hào)“;”結(jié)束結(jié)束a)使用庫(kù)函數(shù),必須使用使用庫(kù)函數(shù),必須使用“文件包含文件包含”、函數(shù)定義、函數(shù)定義函數(shù)返回值類型函數(shù)返回值類型

3、函數(shù)名(形式參數(shù))函數(shù)名(形式參數(shù))形式參數(shù)說(shuō)明形式參數(shù)說(shuō)明局部變量說(shuō)明局部變量說(shuō)明函數(shù)體語(yǔ)句函數(shù)體語(yǔ)句一、標(biāo)準(zhǔn)一、標(biāo)準(zhǔn)C語(yǔ)言語(yǔ)言1、keil C 和和 ANSI C 的異同的異同2、變量定義格式、變量定義格式3、單片機(jī)特有的數(shù)據(jù)類型、單片機(jī)特有的數(shù)據(jù)類型一、一、C51變量定義格式變量定義格式1、keil C 和和 ANSI C 的異同的異同 C51主要針對(duì)51系列單片機(jī)的結(jié)構(gòu)進(jìn)行程序設(shè)計(jì)2、變量定義格式、變量定義格式C語(yǔ)言語(yǔ)言: 存儲(chǔ)屬性 數(shù)據(jù)類型 變量名表 (普林斯頓型存儲(chǔ)結(jié)構(gòu)) C51: 存儲(chǔ)屬性 數(shù)據(jù)類型 存儲(chǔ)類型存儲(chǔ)類型 變量名表(哈佛型存儲(chǔ)結(jié)構(gòu)) 例: static unsigne

4、d char data x1)存儲(chǔ))存儲(chǔ)屬性屬性指定變量存放區(qū)域的屬性。(確定生命周期)指定變量存放區(qū)域的屬性。(確定生命周期)l 內(nèi)部變量 (auto) 堆棧中。僅在函數(shù)調(diào)用時(shí)存在,退出消失(默認(rèn)值) (static) 固定地址。始終存在,函數(shù)體內(nèi)可訪問(wèn)。 (register) 直接使用硬件寄存器,效率高l 外部變量 (global) 固定地址,始終存在,并可訪問(wèn)(默認(rèn)值) (extern) (static) 固定地址。始終存在,若為多文件程序,僅在 所定義的模塊文件可訪問(wèn)一、一、C51變量定義格式變量定義格式C51: 存儲(chǔ)屬性 數(shù)據(jù)類型 存儲(chǔ)類型存儲(chǔ)類型 變量名表2)存儲(chǔ)類型)存儲(chǔ)類型確定

5、變量存儲(chǔ)區(qū)確定變量存儲(chǔ)區(qū)l 顯式聲明顯式聲明 unsigned char data xl 默認(rèn)存儲(chǔ)類型默認(rèn)存儲(chǔ)類型一、一、C51變量定義格式變量定義格式C51: 存儲(chǔ)屬性 數(shù)據(jù)類型 存儲(chǔ)類型存儲(chǔ)類型 變量名表2)存儲(chǔ)類型)存儲(chǔ)類型確定變量存儲(chǔ)區(qū)確定變量存儲(chǔ)區(qū)l 顯式聲明:顯式聲明: auto unsigned char data x; unsigned char data x; unsigned char x;l 默認(rèn)存儲(chǔ)類型:由默認(rèn)存儲(chǔ)類型:由Cx51編譯器存儲(chǔ)模式?jīng)Q定編譯器存儲(chǔ)模式?jīng)Q定 SMALL模式:默認(rèn)存儲(chǔ)類型為模式:默認(rèn)存儲(chǔ)類型為 data. 快速、高效快速、高效 COMPACT模式

6、:默認(rèn)存儲(chǔ)類型為模式:默認(rèn)存儲(chǔ)類型為 pdata. 片外片外RAM256B,通過(guò),通過(guò)R0/R1間接尋址。間接尋址。 LARGE模式:默認(rèn)存儲(chǔ)類型為模式:默認(rèn)存儲(chǔ)類型為 xdata. 空間空間64KB,通過(guò)數(shù)據(jù)指針,通過(guò)數(shù)據(jù)指針DPTR間接尋址。間接尋址。一、一、C51變量定義格式變量定義格式C51: 存儲(chǔ)屬性 數(shù)據(jù)類型 存儲(chǔ)類型存儲(chǔ)類型 變量名表3)數(shù)據(jù)類型)數(shù)據(jù)類型確定存儲(chǔ)單元長(zhǎng)度確定存儲(chǔ)單元長(zhǎng)度一、一、C51變量定義格式變量定義格式單片機(jī)特有的數(shù)據(jù)類型:?jiǎn)纹瑱C(jī)特有的數(shù)據(jù)類型:bit位變量,值為位變量,值為0或或1sbit聲明可位尋址空間的一個(gè)位聲明可位尋址空間的一個(gè)位sfr特殊功能寄存器

7、,特殊功能寄存器,8位位sfr16特殊功能寄存器,特殊功能寄存器,16位位C語(yǔ)言已有基本數(shù)據(jù)類型:語(yǔ)言已有基本數(shù)據(jù)類型:Char: 單字節(jié),可以存放一個(gè)字符。單字節(jié),可以存放一個(gè)字符。Int: 整數(shù),對(duì)大多數(shù)單片機(jī)開發(fā)軟件而言是雙字節(jié)大小整數(shù),對(duì)大多數(shù)單片機(jī)開發(fā)軟件而言是雙字節(jié)大小float: 單精度浮點(diǎn)數(shù)。單精度浮點(diǎn)數(shù)。double:雙精度浮點(diǎn)數(shù)。:雙精度浮點(diǎn)數(shù)。Signed、unsigned限定:限定:char、int類型類型Short、long限定:限定:int類型類型C51: 存儲(chǔ)屬性 數(shù)據(jù)類型 存儲(chǔ)類型存儲(chǔ)類型 變量名表3)數(shù)據(jù)類型)數(shù)據(jù)類型確定存儲(chǔ)單元長(zhǎng)度確定存儲(chǔ)單元長(zhǎng)度一、一、C

8、51變量定義格式變量定義格式3、單片機(jī)特殊功能寄存器的、單片機(jī)特殊功能寄存器的C51定義定義(1)sfr:聲明字節(jié)尋址的特殊功能寄存器。:聲明字節(jié)尋址的特殊功能寄存器。 例如:例如:sfr P0 = 0 x80;(2)sfr16:該關(guān)鍵字對(duì)于一些:該關(guān)鍵字對(duì)于一些8051派生系列單片機(jī),派生系列單片機(jī), 可以聲明其內(nèi)兩個(gè)連續(xù)地址的特殊功能寄存器(可以聲明其內(nèi)兩個(gè)連續(xù)地址的特殊功能寄存器(SFR)。)。 例如:例如: sfr16 T2 = 0 xCC;(3)sbit:聲明可位尋址的特殊功能寄存器標(biāo)志位。:聲明可位尋址的特殊功能寄存器標(biāo)志位。 “=”號(hào)后將絕對(duì)地址賦給變量名,聲明形式有以下號(hào)后將絕

9、對(duì)地址賦給變量名,聲明形式有以下3種:種: 用已聲明的用已聲明的sfr寄存器名寄存器名 指定位;指定位;例如:例如: sbit KEY_UP = P0 1;/ 指定指定P0的第的第1位連接位連接UP按鍵。按鍵。 用寄存器地址用寄存器地址 指定位;指定位; 例如:例如: sbit KEY_UP=0 x801; 直接用直接用寄存器標(biāo)志位地址寄存器標(biāo)志位地址 。 例如:例如: sbit KEY_UP=0 x81;一、一、C51變量定義格式變量定義格式3、單片機(jī)特殊功能寄存器的、單片機(jī)特殊功能寄存器的C51定義定義(4) 8051并行接口及位變量的并行接口及位變量的C51定義定義REG51.h和和RE

10、G52.h這兩個(gè)頭文件這兩個(gè)頭文件 sfr P0 = 0 x80;sfr P1 = 0 x90;sfr P2 = 0 xA0;sfr P3 = 0 xB0;AT89X51.H頭文件頭文件 sbit P0_0 = 0 x80;sbit P0_1 = 0 x81;sbit P0_2 = 0 x82;sfr SEGDATA = P0;/* 數(shù)碼管數(shù)據(jù)端口數(shù)碼管數(shù)據(jù)端口 */sbit SEL0 = P1 0;/* 數(shù)碼管數(shù)碼管0片選端口片選端口 */sbit SEL1 = P1 1;/* 數(shù)碼管數(shù)碼管1片選端口片選端口 */sbit KEY_SET = P1 7;/* 設(shè)置按鍵設(shè)置按鍵 */l 程序頭

11、包含定義程序頭包含定義SFR的頭文件后,可直接使用的頭文件后,可直接使用 l 為提高程序可讀性,可重定義為提高程序可讀性,可重定義 一、一、C51變量定義格式變量定義格式1、算術(shù)運(yùn)算符:、算術(shù)運(yùn)算符: * / %2、自增減運(yùn)算符:、自增減運(yùn)算符: + - - 例:若例:若 int x=3, y;求;求 y=x+ - 1,y=+x-1,y=x-+1后的后的(x,y) 結(jié)果:(結(jié)果:(4,2) (4,3) (2,4)3、復(fù)合賦值運(yùn)算符:、復(fù)合賦值運(yùn)算符: += -= *= /= %= 4、關(guān)系運(yùn)算、關(guān)系運(yùn)算 = = = !=5、邏輯運(yùn)算符:、邏輯運(yùn)算符:& , | , !6、位操作:、位操

12、作:&(與與),|(或或),(異或異或) ,(取反取反), (位右移位右移)例:例:char c=c | 0 x0f; 置位置位 c=c & 0 x0f; 清零清零 b=a2;a左移左移2位并賦值給位并賦值給b二、二、C51運(yùn)算符、表達(dá)式及規(guī)則運(yùn)算符、表達(dá)式及規(guī)則先計(jì)算先計(jì)算再自再自+先自先自+再計(jì)算再計(jì)算 7、條件運(yùn)算符、條件運(yùn)算符 ?: if 為真,則返回表達(dá)式為真,則返回表達(dá)式2的值;的值; 為假,則返回表達(dá)式為假,則返回表達(dá)式3的值的值 例:例:a=(b0) ? b : -b;if b0,then a=b ;if b=0,a=-b8、指針和地址運(yùn)算符、指針和地址運(yùn)算符

13、二、二、C51運(yùn)算符、表達(dá)式及規(guī)則運(yùn)算符、表達(dá)式及規(guī)則8、指針和地址運(yùn)算符、指針和地址運(yùn)算符 指針數(shù)據(jù)類型是一種存放指向另一個(gè)數(shù)據(jù)的地址的變量類型。指針數(shù)據(jù)類型是一種存放指向另一個(gè)數(shù)據(jù)的地址的變量類型。 變量變量 = * 指針變量指針變量 (將指針變量所指向的目標(biāo)變量的值賦給等號(hào)左邊的變量)(將指針變量所指向的目標(biāo)變量的值賦給等號(hào)左邊的變量)指針變量指針變量 = & 目標(biāo)變量目標(biāo)變量 (將目標(biāo)變量的地址賦給等號(hào)左邊的變量)(將目標(biāo)變量的地址賦給等號(hào)左邊的變量)二、二、C51運(yùn)算符、表達(dá)式及規(guī)則運(yùn)算符、表達(dá)式及規(guī)則unsigned char data A _at_ 0 x28; / 變量

14、變量A存放在地址存放在地址0 x28unsigned char data B _at_ 0 x29; / 變量變量B存放在地址存放在地址0 x29unsigned char data *P _at_ 0 x2A;/ 指針變量指針變量P存放在地址存放在地址0 x2A;/關(guān)鍵字關(guān)鍵字_at_ 用于指定變量存放的絕對(duì)地址用于指定變量存放的絕對(duì)地址A = 10; / 變量變量A初值為初值為10B = 20; / 變量變量B初值為初值為20P = &B;/ 指針指針P現(xiàn)在指向變量現(xiàn)在指向變量B*P = 100; / 指針指針P所指變量(變量所指變量(變量B)存放內(nèi)容更改為)存放內(nèi)容更改為100P

15、 = &A;/ 指針指針P現(xiàn)在指向變量現(xiàn)在指向變量AB = *P; / 變量變量B的值現(xiàn)在更改為的值現(xiàn)在更改為10二、二、C51運(yùn)算符、表達(dá)式及規(guī)則運(yùn)算符、表達(dá)式及規(guī)則8、指針和地址運(yùn)算符、指針和地址運(yùn)算符 (舉例)102029hABP28h29h2ah10028 h10二、二、keil-C51語(yǔ)言語(yǔ)言9、運(yùn)算符優(yōu)先級(jí)和結(jié)合性、運(yùn)算符優(yōu)先級(jí)和結(jié)合性9、運(yùn)算符優(yōu)先級(jí)和結(jié)合性、運(yùn)算符優(yōu)先級(jí)和結(jié)合性 單目運(yùn)算符高于雙目運(yùn)算符 算術(shù)運(yùn)算符高于關(guān)系運(yùn)算符 關(guān)系運(yùn)算符高于邏輯運(yùn)算符* 盡可能加括號(hào)明確指定操作優(yōu)先級(jí)盡可能加括號(hào)明確指定操作優(yōu)先級(jí)二、二、C51運(yùn)算符、表達(dá)式及規(guī)則運(yùn)算符、表達(dá)式及規(guī)則

16、三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言一、一、C51程序的基本結(jié)構(gòu)及其流程圖程序的基本結(jié)構(gòu)及其流程圖 三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)及其流程圖選擇結(jié)構(gòu)及其流程圖(1)串行多分支結(jié)構(gòu)流程圖)串行多分支結(jié)構(gòu)流程圖(2)并行多分支結(jié)構(gòu))并行多分支結(jié)構(gòu)三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言一、一、C51程序的基本結(jié)構(gòu)及其流程圖程序的基本結(jié)構(gòu)及其流程圖 三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)及其流程圖選擇結(jié)構(gòu)及其流程圖1.循環(huán)結(jié)構(gòu)及其流程圖循

17、環(huán)結(jié)構(gòu)及其流程圖(1)while型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu) (當(dāng)量型)(當(dāng)量型)(2)do while型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu) (直到型)(直到型)二、選擇語(yǔ)句二、選擇語(yǔ)句 選擇語(yǔ)句有三種:選擇語(yǔ)句有三種:if語(yǔ)句、語(yǔ)句、switch/case語(yǔ)句和條件表達(dá)式語(yǔ)句和條件表達(dá)式lIf 語(yǔ)句語(yǔ)句 三種形式:三種形式:1、 if (表達(dá)式)表達(dá)式) 語(yǔ)句語(yǔ)句1;/if 表達(dá)式表達(dá)式true,執(zhí)行,執(zhí)行語(yǔ)句語(yǔ)句1 2、 if (表達(dá)式)表達(dá)式) 語(yǔ)句語(yǔ)句1; else 語(yǔ)句語(yǔ)句2; 3、 if(表達(dá)式表達(dá)式1) 語(yǔ)句語(yǔ)句1;/級(jí)聯(lián)選擇級(jí)聯(lián)選擇 else if (表達(dá)式表達(dá)式2) 語(yǔ)句語(yǔ)句2; else if (

18、表達(dá)式表達(dá)式3) 語(yǔ)句語(yǔ)句3; else 語(yǔ)句語(yǔ)句 n+1; /所有表達(dá)式均不滿足時(shí)所有表達(dá)式均不滿足時(shí)三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言n#include /*abs()函數(shù)原型包含在該庫(kù)中*/nint y;nint ynumber (int x)nn if(x=0) y=100;n else if (x0) y=x+2;n else y=abs(x);n return (y);n【例】例】 根據(jù)根據(jù)X值,求出值,求出Y值。值。 X+2X0 Y =100X=0 X X0二、選擇語(yǔ)句二、選擇語(yǔ)句 選擇語(yǔ)句有三種:選擇語(yǔ)句有三種:if語(yǔ)句

19、、語(yǔ)句、switch/case語(yǔ)句和條件表達(dá)式語(yǔ)句和條件表達(dá)式lSwitch/case 語(yǔ)句語(yǔ)句 switch ( x ) case c1: 語(yǔ)句組語(yǔ)句組1;break;/if x=c1,執(zhí)行語(yǔ)句組執(zhí)行語(yǔ)句組1后退后退出出 case c2: 語(yǔ)句組語(yǔ)句組2; break; default: 語(yǔ)句組語(yǔ)句組 n+1; break;l條件表達(dá)式條件表達(dá)式 ?:三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言二、循環(huán)語(yǔ)句二、循環(huán)語(yǔ)句 循環(huán)語(yǔ)句有三種:循環(huán)語(yǔ)句有三種:for語(yǔ)句、語(yǔ)句、while語(yǔ)句和語(yǔ)句和do-while語(yǔ)句語(yǔ)句lfor 語(yǔ)句語(yǔ)句一般形式:一般形式: for (初始化;條件表達(dá)式;表達(dá)式

20、初始化;條件表達(dá)式;表達(dá)式3) 循環(huán)語(yǔ)句(組);循環(huán)語(yǔ)句(組);/循環(huán)體循環(huán)體 用于構(gòu)成當(dāng)型循環(huán):先判斷后執(zhí)行,條件為真繼續(xù)循環(huán),假結(jié)束用于構(gòu)成當(dāng)型循環(huán):先判斷后執(zhí)行,條件為真繼續(xù)循環(huán),假結(jié)束 for()中初始化及表達(dá)式可缺省,但兩個(gè)分號(hào)()中初始化及表達(dá)式可缺省,但兩個(gè)分號(hào)“;”不可缺不可缺 例:求i=1+2+3+99+100 (i=0100) main () unsignde int data i, sum=0 for (i=1; i=100; i+) sum=sum+i; /循環(huán)100次 三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言二、循環(huán)語(yǔ)句二、循環(huán)語(yǔ)句 循環(huán)語(yǔ)句有三種:循環(huán)語(yǔ)句有三

21、種:for語(yǔ)句、語(yǔ)句、while語(yǔ)句和語(yǔ)句和do-while語(yǔ)句語(yǔ)句lwhile 循環(huán)語(yǔ)句循環(huán)語(yǔ)句一般形式:一般形式: while (條件表達(dá)式)條件表達(dá)式) 循環(huán)語(yǔ)句(組);循環(huán)語(yǔ)句(組);/循環(huán)體循環(huán)體 用于構(gòu)成當(dāng)型循環(huán):先判斷后執(zhí)行,條件為真繼續(xù)循環(huán),假結(jié)束用于構(gòu)成當(dāng)型循環(huán):先判斷后執(zhí)行,條件為真繼續(xù)循環(huán),假結(jié)束ldo-while 循環(huán)語(yǔ)句循環(huán)語(yǔ)句一般形式:一般形式: do 循環(huán)語(yǔ)句(組);循環(huán)語(yǔ)句(組);/循環(huán)體循環(huán)體 while (條件表達(dá)式);條件表達(dá)式); 用于構(gòu)成直到型循環(huán):先執(zhí)行循環(huán)體,再判斷條件為真繼續(xù)循環(huán),假結(jié)束用于構(gòu)成直到型循環(huán):先執(zhí)行循環(huán)體,再判斷條件為真繼續(xù)循環(huán),假

22、結(jié)束三、三、C51流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句語(yǔ)言main ( ) unsignde int data i, sum; i=sum=0; while ( i+100) sum+ = i; main ( ) int a i, sum; i=1; sum=0; do sum+ = i ; while ( i+100) ; 四、四、C51構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型1 數(shù)組數(shù)組2 指針指針3 結(jié)構(gòu)體結(jié)構(gòu)體4 共用體共用體5 枚舉枚舉1、數(shù)組、數(shù)組l一維數(shù)組和多維數(shù)組 unsignde char data a5; unsignde char data b23;l數(shù)組的初始化 segconbitcon例:在

23、例:在LED中循環(huán)顯示中循環(huán)顯示09。#include sfr segcon=P1; sbit bitcon = P20; void main() unsigned char code led10= 0 xc0, 0 xf9, 0 xa4, 0 xb0, 0 x99, 0 x92, 0 x82 , 0 xf8,0 x80, 0 x90; unsigned int x; /*x=09*/ while(1) for(x=0; x=9;x+) segcon=ledx; bitcon=1; /* 共陽(yáng)共陽(yáng)LED*/ delay(2); 四、四、C51構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型五、函數(shù)五、函數(shù)includ

24、e / 預(yù)處理命令預(yù)處理命令longfun1( );/ 函數(shù)說(shuō)明函數(shù)說(shuō)明floatfun2( );int x,y;/ 全局變量說(shuō)明,作用域?yàn)檎麄€(gè)源程序全局變量說(shuō)明,作用域?yàn)檎麄€(gè)源程序float z;func1( )/ 功能函數(shù)功能函數(shù)1 局部變量說(shuō)明局部變量說(shuō)明; /作用域限于函數(shù)體內(nèi)作用域限于函數(shù)體內(nèi) 函數(shù)體函數(shù)體; Main( )/主函數(shù)主函數(shù) 局部變量局部變量說(shuō)明說(shuō)明; /主程序內(nèi)部定義的變量也為局部變量主程序內(nèi)部定義的變量也為局部變量 主函數(shù)體主函數(shù)體; func2( )/功能函數(shù)功能函數(shù)2 局部變量說(shuō)明局部變量說(shuō)明; 函數(shù)體函數(shù)體; 一、一、C語(yǔ)言程序的一般組成結(jié)構(gòu)語(yǔ)言程序的一般組成

25、結(jié)構(gòu)五、函數(shù)五、函數(shù)一、一、C語(yǔ)言程序的一般組成結(jié)構(gòu)語(yǔ)言程序的一般組成結(jié)構(gòu)函數(shù)定義函數(shù)定義函數(shù)返回值類型函數(shù)返回值類型 函數(shù)名(形式參數(shù))函數(shù)名(形式參數(shù))/形參作用域限于調(diào)用期間形參作用域限于調(diào)用期間形式參數(shù)說(shuō)明形式參數(shù)說(shuō)明局部變量說(shuō)明局部變量說(shuō)明函數(shù)體語(yǔ)句函數(shù)體語(yǔ)句五、函數(shù)五、函數(shù)二、二、C51中斷服務(wù)程序中斷服務(wù)程序1.中斷服務(wù)函數(shù)的定義中斷服務(wù)函數(shù)的定義 返回值類型標(biāo)識(shí)符返回值類型標(biāo)識(shí)符 函數(shù)名函數(shù)名( ) interrupt 中斷號(hào)中斷號(hào) using 寄存器組號(hào)寄存器組號(hào) 函數(shù)體語(yǔ)句函數(shù)體語(yǔ)句; 中斷函數(shù)不能進(jìn)行參數(shù)傳遞;中斷函數(shù)不能進(jìn)行參數(shù)傳遞; 中斷函數(shù)沒(méi)有返回值;建議定義為中斷

26、函數(shù)沒(méi)有返回值;建議定義為void類型類型 在任何情況下都不能直接調(diào)用中斷函數(shù),否則會(huì)產(chǎn)生編譯錯(cuò)誤。在任何情況下都不能直接調(diào)用中斷函數(shù),否則會(huì)產(chǎn)生編譯錯(cuò)誤。 C51編譯器對(duì)中斷函數(shù)自動(dòng)的現(xiàn)場(chǎng)保護(hù)和恢復(fù)。編譯器對(duì)中斷函數(shù)自動(dòng)的現(xiàn)場(chǎng)保護(hù)和恢復(fù)。(ACC、B、DPH/L、PSW) using 修飾符,修飾符,用于指定中斷函數(shù)內(nèi)部使用的工作寄存器組取值為用于指定中斷函數(shù)內(nèi)部使用的工作寄存器組取值為03 interrupt修飾符,指明函數(shù)為中斷函數(shù)。修飾符,指明函數(shù)為中斷函數(shù)。MCS51對(duì)應(yīng)的中斷號(hào)為對(duì)應(yīng)的中斷號(hào)為05。 該向量包含一個(gè)到中斷函數(shù)入口地址的絕對(duì)跳轉(zhuǎn)。該向量包含一個(gè)到中斷函數(shù)入口地址的絕對(duì)

27、跳轉(zhuǎn)。void int1( ) interrupt 2 using 1 count +; / count為全局變量為全局變量例:統(tǒng)計(jì)外中斷例:統(tǒng)計(jì)外中斷1的中斷次數(shù)的中斷服務(wù)程序的中斷次數(shù)的中斷服務(wù)程序 五、函數(shù)五、函數(shù)三、三、局部變量和全局變量局部變量和全局變量 按作用域范圍可分為兩種:即局部變量和全局變量。按作用域范圍可分為兩種:即局部變量和全局變量。1.局部變量局部變量 局部變量也稱為內(nèi)部變量。作用域僅限與函數(shù)內(nèi)局部變量也稱為內(nèi)部變量。作用域僅限與函數(shù)內(nèi) 。局部變量是在函數(shù)內(nèi)作定義說(shuō)明的。局部變量是在函數(shù)內(nèi)作定義說(shuō)明的。 int f1(int a) /a為形參,為形參, 函數(shù)調(diào)用期間有效

28、函數(shù)調(diào)用期間有效 int b,c; /b,c局部變量局部變量 main() int m, n; /m,n局部變量局部變量,作用域限于,作用域限于main函數(shù)內(nèi)函數(shù)內(nèi) 五、函數(shù)五、函數(shù)三、三、局部變量和全局變量局部變量和全局變量 按作用域范圍可分為兩種:即局部變量和全局變量。按作用域范圍可分為兩種:即局部變量和全局變量。2.全局變量全局變量全局變量也稱為外部變量,函數(shù)外部定義的變量。全局變量也稱為外部變量,函數(shù)外部定義的變量。其作用域是整個(gè)源程序。其作用域是整個(gè)源程序。 并遵循先定義后使用的原則并遵循先定義后使用的原則int a, b;/ 外部變量外部變量,作用域整個(gè)程序作用域整個(gè)程序void

29、f1( )/ 函數(shù)函數(shù)f1 float x, y;/ 外部變量,作用域外部變量,作用域f2之后。若之后。若f1對(duì)對(duì)x,y說(shuō)明說(shuō)明,則可用則可用int f2( )/ 函數(shù)函數(shù)f2 main()/ 主函數(shù)主函數(shù) 五、函數(shù)五、函數(shù)舉例:輸入正方體的長(zhǎng)寬高舉例:輸入正方體的長(zhǎng)寬高l,w,h。 求體積及三個(gè)面求體積及三個(gè)面x*y,x*z,y*z的面積。的面積。 int s1, s2, s3;int vs( int a,int b,int c) int v; v = a * b * c; s1 = a * b; s2 = b * c; s3 = a * c; return v;main() int v,

30、l, w, h; printf(ninput length,width and heightn); scanf(%d%d%d,&l,&w,&h); v = vs(l, w, h);printf(nv=%d,s1=%d,s2=%d,s3=%dn,v,s1,s2,s3);六、六、C51庫(kù)函數(shù)庫(kù)函數(shù) 1、一般、一般I/O函數(shù)函數(shù)stdio.h 六、六、C51庫(kù)函數(shù)庫(kù)函數(shù) 2、字符函數(shù)庫(kù)、字符函數(shù)庫(kù)string.h 六、六、C51庫(kù)函數(shù)庫(kù)函數(shù) 3、 標(biāo)準(zhǔn)函數(shù)庫(kù)標(biāo)準(zhǔn)函數(shù)庫(kù)stdlib.h及其它頭文件及其它頭文件(1)標(biāo)準(zhǔn)函數(shù)庫(kù)()標(biāo)準(zhǔn)函數(shù)庫(kù)(STDLIB.H)頭文件中包含類型轉(zhuǎn)換

31、和)頭文件中包含類型轉(zhuǎn)換和 存儲(chǔ)器分配函數(shù)的原型和定義,如下所列:存儲(chǔ)器分配函數(shù)的原型和定義,如下所列: atof atoi atolcalloc init_ mempool mallocrand realloc strtod strtol strtoulfreerand (2)數(shù)學(xué)函數(shù)庫(kù)()數(shù)學(xué)函數(shù)庫(kù)(math.h)頭文件中包含所有浮點(diǎn)運(yùn)算函數(shù))頭文件中包含所有浮點(diǎn)運(yùn)算函數(shù) 的定義和原型,其它的數(shù)學(xué)運(yùn)算函數(shù)也包含在該文件中,的定義和原型,其它的數(shù)學(xué)運(yùn)算函數(shù)也包含在該文件中, 所有的數(shù)學(xué)運(yùn)算函數(shù)如下:所有的數(shù)學(xué)運(yùn)算函數(shù)如下: absacosasinstanstan2 cabscoscoshex

32、pfabsfloorfmod fprestore fpsaavelabsloglog10 modf powsinsinhsqrttantanh六、六、C51庫(kù)函數(shù)庫(kù)函數(shù) 3、 標(biāo)準(zhǔn)函數(shù)庫(kù)標(biāo)準(zhǔn)函數(shù)庫(kù)stdlib.h及其它頭文件及其它頭文件(3)絕對(duì)地址訪問(wèn)()絕對(duì)地址訪問(wèn)(absacc.h)頭文件中包含的宏定義允許)頭文件中包含的宏定義允許 用戶直接訪問(wèn)用戶直接訪問(wèn)8051單片機(jī)的不同存儲(chǔ)區(qū),所有的宏定義單片機(jī)的不同存儲(chǔ)區(qū),所有的宏定義 如下:如下: CBYTE CWORD DBYTE DWORD FARRAYFCARRAY FCVAR FVAR PBYTEPWORDXBYTE XWORD(4)

33、內(nèi)部函數(shù)庫(kù)()內(nèi)部函數(shù)庫(kù)(intrins.h)包含有諸如)包含有諸如_nop_一類的單片一類的單片 機(jī)內(nèi)部操作函數(shù):機(jī)內(nèi)部操作函數(shù): _chkfloat_crol_ _cror_irol_ _iror_lrol_ _lror_nop_ _testbit_六、六、C51庫(kù)函數(shù)庫(kù)函數(shù) 3、 標(biāo)準(zhǔn)函數(shù)庫(kù)標(biāo)準(zhǔn)函數(shù)庫(kù)stdlib.h及其它頭文件及其它頭文件(5)訪問(wèn))訪問(wèn)SFR和和SFR_bit地址頭文件(地址頭文件(reg.h) C51庫(kù)提供了一些頭文件庫(kù)提供了一些頭文件reg.h,在在8051系列單片機(jī)中,這些頭文件用來(lái)定義一些指向系列單片機(jī)中,這些頭文件用來(lái)定義一些指向特殊功能寄存器常量。這些文件

34、列表如下:特殊功能寄存器常量。這些文件列表如下:reg151s.h reg152.h reg320.h reg410.h reg451.hreg452.h reg509.h reg51.h reg515.h reg515a.hreg515c.h reg517.h reg517a.h reg51f.h reg51g.hreg51gb.h reg52.h reg552.h reg592.h reg781.h七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)一、基本概念一、基本概念 程序的組成程序的組成 程序有數(shù)據(jù)說(shuō)明和數(shù)據(jù)操作兩部分組成。程序有數(shù)據(jù)說(shuō)明和數(shù)據(jù)操作兩部分組成。 從結(jié)構(gòu)化角度看,程序應(yīng)由模塊化

35、函數(shù)組成。從結(jié)構(gòu)化角度看,程序應(yīng)由模塊化函數(shù)組成。七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)一、基本概念一、基本概念 2. 常用名詞常用名詞(1)文件)文件C51文件擴(kuò)展名如下:文件擴(kuò)展名如下:.ASM或或.A51 匯編語(yǔ)言源文件匯編語(yǔ)言源文件.C或或.C51 C51語(yǔ)言源文件語(yǔ)言源文件.H 編譯時(shí)源文件中的頭文件編譯時(shí)源文件中的頭文件.LST 匯編匯編/編譯的程序和錯(cuò)誤列表文件編譯的程序和錯(cuò)誤列表文件.ERR 錯(cuò)誤報(bào)告文件錯(cuò)誤報(bào)告文件.OBJ 可重定位的目標(biāo)模塊文件可重定位的目標(biāo)模塊文件.LIB 庫(kù)文件庫(kù)文件.LNK 連接連接/定位器使用的文件定位器使用的文件.MAP或或.MAP 連接連接/

36、定位后產(chǎn)生的映像文件定位后產(chǎn)生的映像文件.HEX 連接連接/定位后產(chǎn)生的目標(biāo)文件定位后產(chǎn)生的目標(biāo)文件七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)一、基本概念一、基本概念 2. 常用名詞常用名詞(2)源程序文件)源程序文件源程序文件是由用戶編制的由一個(gè)或多個(gè)函數(shù)組成的源程序文件是由用戶編制的由一個(gè)或多個(gè)函數(shù)組成的完成特定功能的程序代碼。完成特定功能的程序代碼。 (3)目標(biāo)文件)目標(biāo)文件 目標(biāo)文件是單片機(jī)可執(zhí)行的程序文件,它包含著用戶目標(biāo)文件是單片機(jī)可執(zhí)行的程序文件,它包含著用戶開發(fā)的運(yùn)行在單片機(jī)上的機(jī)器代碼。開發(fā)的運(yùn)行在單片機(jī)上的機(jī)器代碼。(4)匯編器)匯編器/編譯器編譯器 匯編器是針對(duì)匯編語(yǔ)言程

37、序的,而編譯器是針對(duì)高級(jí)語(yǔ)言匯編器是針對(duì)匯編語(yǔ)言程序的,而編譯器是針對(duì)高級(jí)語(yǔ)言(如(如C語(yǔ)言)程序的。它們被用來(lái)將源程序翻譯成單片機(jī)語(yǔ)言)程序的。它們被用來(lái)將源程序翻譯成單片機(jī)可執(zhí)行的目標(biāo)代碼,從而產(chǎn)生一個(gè)目標(biāo)文件??蓤?zhí)行的目標(biāo)代碼,從而產(chǎn)生一個(gè)目標(biāo)文件。 七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)一、基本概念一、基本概念 2. 常用名詞常用名詞(5)段)段段與數(shù)據(jù)或者程序存儲(chǔ)器有關(guān),即程序段和數(shù)據(jù)段。段與數(shù)據(jù)或者程序存儲(chǔ)器有關(guān),即程序段和數(shù)據(jù)段。一個(gè)段有段名、類型以及屬性,它們?cè)诖鎯?chǔ)器中的位置由一個(gè)段有段名、類型以及屬性,它們?cè)诖鎯?chǔ)器中的位置由用戶指定或者由連接器用戶指定或者由連接器/定位器

38、確定。定位器確定。(6)模塊)模塊模塊是包含一個(gè)或多個(gè)段的文件。一個(gè)模塊通常為顯示、模塊是包含一個(gè)或多個(gè)段的文件。一個(gè)模塊通常為顯示、計(jì)算或與下層接口有關(guān)的函數(shù)或子程序,能夠單獨(dú)完成計(jì)算或與下層接口有關(guān)的函數(shù)或子程序,能夠單獨(dú)完成一定的功能。一定的功能。 (7)庫(kù))庫(kù)庫(kù)是包含一個(gè)或者多個(gè)模塊的文件。庫(kù)中的這些模塊通常庫(kù)是包含一個(gè)或者多個(gè)模塊的文件。庫(kù)中的這些模塊通常是由編譯或者匯編得到的可重定位的目標(biāo)模塊。是由編譯或者匯編得到的可重定位的目標(biāo)模塊。連接器僅從庫(kù)中選取與其他模塊相關(guān)的模塊進(jìn)行連接。連接器僅從庫(kù)中選取與其他模塊相關(guān)的模塊進(jìn)行連接。 七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)一、基本

39、概念一、基本概念 2. 常用名詞常用名詞(8)連接)連接/定位器定位器連接器將一個(gè)程序的多個(gè)源文件產(chǎn)生的各個(gè)目標(biāo)文件按照連接器將一個(gè)程序的多個(gè)源文件產(chǎn)生的各個(gè)目標(biāo)文件按照一定規(guī)則與用戶自定義庫(kù)文件和標(biāo)準(zhǔn)庫(kù)文件連接起來(lái)。一定規(guī)則與用戶自定義庫(kù)文件和標(biāo)準(zhǔn)庫(kù)文件連接起來(lái)。定位器將地址分配給程序中的各個(gè)段。經(jīng)過(guò)連接、定位后,定位器將地址分配給程序中的各個(gè)段。經(jīng)過(guò)連接、定位后,生成絕對(duì)目標(biāo)文件(單片機(jī)可執(zhí)行的文件)和映像文件生成絕對(duì)目標(biāo)文件(單片機(jī)可執(zhí)行的文件)和映像文件(提供給程序員的最終個(gè)空間映像表)。(提供給程序員的最終個(gè)空間映像表)。(9)應(yīng)用程序)應(yīng)用程序應(yīng)用程序是整個(gè)開發(fā)過(guò)程的最終結(jié)果,并最

40、終在單片機(jī)應(yīng)用程序是整個(gè)開發(fā)過(guò)程的最終結(jié)果,并最終在單片機(jī)用戶系統(tǒng)中運(yùn)行,完成設(shè)計(jì)功能。用戶系統(tǒng)中運(yùn)行,完成設(shè)計(jì)功能。 七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)二、二、 模塊化程序開發(fā)過(guò)程模塊化程序開發(fā)過(guò)程項(xiàng)目規(guī)劃項(xiàng)目規(guī)劃匯編源文件匯編源文件匯編匯編Ax51C源文件源文件編譯編譯Cx51庫(kù)文件庫(kù)文件鏈接鏈接/定位定位目標(biāo)文件目標(biāo)文件固化到單片機(jī)固化到單片機(jī)/或下載或下載調(diào)試通過(guò)調(diào)試通過(guò)項(xiàng)目完成項(xiàng)目完成修改修改N七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)二、二、 模塊化程序開發(fā)過(guò)程模塊化程序開發(fā)過(guò)程 每一個(gè)每一個(gè)C源文件都建立一個(gè)與之名字一樣的源文件都建立一個(gè)與之名字一樣的H文件文件 (頭文件

41、),其中僅包括該(頭文件),其中僅包括該C文件中的函數(shù)的聲明。文件中的函數(shù)的聲明。 建立一個(gè)所有的文件都要共同使用的頭文件(文件名可取建立一個(gè)所有的文件都要共同使用的頭文件(文件名可取 為為common.h),該頭文件可以包含單片機(jī)管腳使用的定義,),該頭文件可以包含單片機(jī)管腳使用的定義, 還有那些必需的編譯器系統(tǒng)頭文件還有那些必需的編譯器系統(tǒng)頭文件 (如(如reg52.h,absacc.h等等)。等等)。 每個(gè)每個(gè)C源文件應(yīng)該包含自己的頭文件以及源文件應(yīng)該包含自己的頭文件以及common.h, C文件內(nèi)可以定義該文件內(nèi)部使用的全局變量,如果在其他文件內(nèi)可以定義該文件內(nèi)部使用的全局變量,如果在

42、其他 文件中還要訪問(wèn)這個(gè)全局變量,可以在其頭文件中以文件中還要訪問(wèn)這個(gè)全局變量,可以在其頭文件中以extern 再次定義該全局變量。再次定義該全局變量。七、七、C51模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)二、二、 模塊化程序開發(fā)過(guò)程模塊化程序開發(fā)過(guò)程 主文件主文件main.c里面包含所有里面包含所有C源文件對(duì)應(yīng)的頭文件和源文件對(duì)應(yīng)的頭文件和 common.h,main.c中的函數(shù)可以再建一個(gè)頭文件中的函數(shù)可以再建一個(gè)頭文件main.h聲明,聲明, 也可以直接放在也可以直接放在main.c文件的開頭部分聲明,中斷服務(wù)程序文件的開頭部分聲明,中斷服務(wù)程序 一般也放在一般也放在main.c文件中。文件中。 對(duì)

43、于那些貫穿整個(gè)工程的變量,可以先在對(duì)于那些貫穿整個(gè)工程的變量,可以先在main.c文件中定義,文件中定義, 然后在然后在common.h文件中用文件中用extern關(guān)鍵字再次聲明一遍,哪個(gè)關(guān)鍵字再次聲明一遍,哪個(gè) 文件要使用就只需包含文件要使用就只需包含common.h文件即可。文件即可。 建立工程的時(shí)候,只要把建立工程的時(shí)候,只要把C源文件加到工程中,把源文件加到工程中,把H文件直接文件直接 放到相應(yīng)的工程目錄下,不需要加到工程里面。放到相應(yīng)的工程目錄下,不需要加到工程里面。n例1:延時(shí)程序 void delay(unsigned int x)unsigned char j;while (x

44、-)for(j=0;j125;j+) /*fosc=12MHz,T=1us*/;八、八、keil-C51應(yīng)用實(shí)例應(yīng)用實(shí)例#include /*abs()函數(shù)原型包含在該庫(kù)中*/int y;int ynumber (int x) if(x=0) y=100; else if (x0) y=x+2; else y=abs(x); return (y);【例例2】 根據(jù)根據(jù)X值,求出值,求出Y值。值。 X+2X0 Y =100X=0 X X0八、八、keil-C51應(yīng)用實(shí)例應(yīng)用實(shí)例第第10章章 Keil C51軟件使用簡(jiǎn)介軟件使用簡(jiǎn)介n軟件開發(fā)流程軟件開發(fā)流程n創(chuàng)建一個(gè)項(xiàng)目創(chuàng)建一個(gè)項(xiàng)目n從器件數(shù)據(jù)庫(kù)

45、中選擇目標(biāo)器件,并配置工具軟件的設(shè)置從器件數(shù)據(jù)庫(kù)中選擇目標(biāo)器件,并配置工具軟件的設(shè)置n用用C或匯編創(chuàng)建源程序或匯編創(chuàng)建源程序n編譯程序,生成編譯程序,生成HEX可執(zhí)行程序可執(zhí)行程序n調(diào)試程序,糾正源文件中的錯(cuò)誤調(diào)試程序,糾正源文件中的錯(cuò)誤n固化程序固化程序n軟件設(shè)置軟件設(shè)置Target對(duì)話框選項(xiàng)對(duì)話框選項(xiàng)Vision3集成開發(fā)環(huán)境集成開發(fā)環(huán)境【例3】設(shè)MCS-51單片機(jī)系統(tǒng)時(shí)鐘頻率fosc為6MHz,請(qǐng)編出利用定時(shí)/計(jì)數(shù)器T0在P1.0引腳上產(chǎn)生周期為2s,占空比為20%的方波信號(hào)的程序C程序:程序:#include #define uchar unsigned charuchar time;

46、uchar period=20;uchar high=4; sbit p1_0=P10;void timer0() interrupt 1 using 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; if (+ time=high) p1_0=0; if (time=period) time=0; p1_0=1;main() TMOD=0 x01; /*T0,方式方式1*/ TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; time=0; while(1) ; 中斷

47、定時(shí)程序設(shè)計(jì):中斷定時(shí)程序設(shè)計(jì):2S中斷服務(wù)程序中斷服務(wù)程序t=正脈寬正脈寬初值重載,初值重載,+t返回返回YNP1.0=0t=周期周期P1.0=1解:取定時(shí)值解:取定時(shí)值100ms 則需定時(shí)器計(jì)數(shù)次數(shù)則需定時(shí)器計(jì)數(shù)次數(shù)=100*103*6/12=50000C顯示程序:顯示程序:#define uchar unsigned char#define PA XBYTE 0 x0000 /定義定義A口口 #define PC XBYTE 0 x0002 /定義定義C口口 uchar data dispbuff4; /顯示緩存顯示緩存 uchar code ledtab10=0 x3f, 0 x06,

48、 0 x5b, 0 x4f, 0 x 66,0 x6d, 0 x7d, 0 x07H, 0 x7f, 0 x6f; /定義定義LED字形碼字形碼void display ( ) uchar i, x; uchar disnum=4; /顯示位數(shù)顯示位數(shù) uchar bitcom=0 x10; /顯示位控碼顯示位控碼 for ( i=0; idisnum; i+) x=disbuffi; /取顯示數(shù)據(jù)取顯示數(shù)據(jù) PA = ledtabx; /取字形碼送取字形碼送PA口口 PC = bitcom; /取位控碼送取位控碼送PC口口 bitcom=bitcom1; /位控碼左移位控碼左移1位位 del

49、ay(2); 顯示程序顯示程序初始化初始化結(jié)束結(jié)束取顯示數(shù)據(jù)取顯示數(shù)據(jù)取位控碼送取位控碼送B口口4位顯示完位顯示完YN例例4LED動(dòng)態(tài)顯示方式動(dòng)態(tài)顯示方式用用8255A8255A控制鍵盤及控制鍵盤及4 4位位LEDLED,實(shí)現(xiàn)動(dòng)態(tài)顯示,實(shí)現(xiàn)動(dòng)態(tài)顯示n5DAC的應(yīng)用,C語(yǔ)言程序設(shè)計(jì)n 設(shè)計(jì)鋸齒波發(fā)生器。幅值-5V 0,頻率500Hz,fosc=12MHzn分析:1)設(shè)計(jì)單緩沖控制電路n2)利用階梯波近似實(shí)現(xiàn)n3)T=1/500=0.002s=2msn設(shè):階梯數(shù)=256,增幅=28/256n則:階梯步距(延時(shí))=2ms/256= 7. 8 = 8us,故階梯數(shù)=2000/8=250Voutt2ms

50、鋸齒波發(fā)生器鋸齒波發(fā)生器C程序設(shè)計(jì)程序設(shè)計(jì)#include #include #define DA0832 XBYTE0 xfffe /DAC地址地址#define uchar unsigned charvoid stair(void) uchar i; while (1) for(i=0; i=250; i+) /形成鋸齒波輸出值形成鋸齒波輸出值 DA0832=i; /D/A轉(zhuǎn)換輸出轉(zhuǎn)換輸出 _nop_; /空操作空操作 n6DAC的應(yīng)用nDAC雙緩沖方式應(yīng)用同步波形輸出同時(shí)輸出X和Y波形到示波器 C程序設(shè)計(jì):程序設(shè)計(jì):#include #include #define INPUTR1 XBYTE0 xfffd /定義定義#define INPUTR2 XBYTE0 xfffe /端口端口#define DACR XBYTE0 xffff#define uchar unsigned ucharvoid dac2b (data1,data2)uchar data1,data2; INPUTR1=data1; /送數(shù)據(jù)到送數(shù)據(jù)到1#0832 INPUTR2=data2; /送數(shù)據(jù)到送數(shù)據(jù)到2#0832 DACR=0; /啟動(dòng)兩路啟動(dòng)兩路DAC轉(zhuǎn)換轉(zhuǎn)換

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論