MCS-51單片機(jī)控制與C語言_第1頁
MCS-51單片機(jī)控制與C語言_第2頁
MCS-51單片機(jī)控制與C語言_第3頁
MCS-51單片機(jī)控制與C語言_第4頁
MCS-51單片機(jī)控制與C語言_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第10章 MCS51單片機(jī)控制與C語言下頁10.1 C語言與MCS5110.2 C51數(shù)據(jù)類型及在MCS-51中的存儲方式10.3 C51數(shù)據(jù)的存儲類型與MCS-51存儲結(jié)構(gòu)10.4 MCS-51特殊功能存放器(SFR)的C51定義10.5 MCS-51并行接口的C51定義10.6 位變量的C51定義10.7 用C語言寫51單片機(jī)軟件的一般方法10.8 常用C51軟件設(shè)計10.1 C語言與MCS51 C語言是一種編譯型語言,兼顧了多種高級語言的特點(diǎn),并具有匯編語言的某些特征.用C語言開發(fā)單片機(jī)應(yīng)注意以下幾點(diǎn): 必須要考慮其存儲器結(jié)構(gòu),尤其必須考慮其片內(nèi)數(shù)據(jù)存儲器與特殊功能存放器結(jié)構(gòu),以按實(shí)際地

2、址處理端口數(shù)據(jù)對數(shù)據(jù)類型與變量的定義,必須要與單片機(jī)的存儲結(jié)構(gòu)相關(guān)聯(lián),否那么編譯器不能正確地映射定位。上頁下頁回目錄存放器的分配和存儲器的管理可由C編譯器自動管理語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法與標(biāo)準(zhǔn)的C語言程序設(shè)計相同。 10.1 C語言與MCS51 用C語言開發(fā)單片機(jī)應(yīng)注意以下幾點(diǎn): 上頁下頁回目錄10.1 C語言與MCS51 用C語言編寫的應(yīng)用程序必須經(jīng)單片機(jī)的C語言編譯器(簡稱C51),轉(zhuǎn)換生成單片機(jī)可執(zhí)行的代碼程序。支持MCS51系列單片機(jī)的C語言編譯器有很多種。其中KEIL/Franklin以它的代碼緊湊和使用方便等特點(diǎn)優(yōu)于其它編譯器。本章是針對這種編譯器介紹 MCS51單片機(jī)C語

3、言程序設(shè)計。 10.2 C51數(shù)據(jù)類型及在MCS-51中的存儲方式.C51的數(shù)據(jù)類型 Franklin C51編譯器具體支持的數(shù)據(jù)類型有:位型(bit)、無符號字符(unsigned char)、有符號字符(singed char)、無符號整型(unsigned int )、有符號整型(signed int )、無符號長整型(unsigned long )、有符號長整型(signed long )、浮點(diǎn)型(float)和指針類型等。表10.1 Franklin C51的數(shù)據(jù)類型數(shù)據(jù)類型長度(bit)長度(byte)值域bit110,1unsigned char810255signed char

4、81128127unsigned int 162065535signed int 1623276832767unsigned long32404294967295signed long 32421474836482147483647float 3241.176E383.40E+38(6位數(shù)字)double6481.176E383.40E+38(10位數(shù)字)一般指針243存儲空間065535. C51數(shù)據(jù)在MCS-51中的存儲方式 位變量(bit):與MCS-51硬件特性操作有關(guān)的可以定義成位變量。位變量必須定位在MCS-51單片機(jī)片內(nèi)RAM的位尋址空間中。 字符變量(char):字符變量的長度

5、為1 byte即8位。這很適宜MCS-51單片機(jī),因為MCS-51單片機(jī)每次可處理8位數(shù)據(jù)。對于無符號變量(unsigned char)的值域范圍是0255。. C51數(shù)據(jù)在MCS-51中的存儲方式對于有符號字符變量(signed char),最具有重要意義的位是最高位上的符號標(biāo)志位(msb)。此位為1代表負(fù),為0代表正。有符號字符變量和無符號字符變量在表示0127的數(shù)值時,其含義是一樣的,都是00 x7F。負(fù)數(shù)一般用補(bǔ)碼表示,即用11111111表示-1, 用11111110表示-2。當(dāng)進(jìn)行乘除法運(yùn)算時,符號問題就變得十分復(fù)雜,而C51編譯器會自動地將相應(yīng)的庫函數(shù)調(diào)入程序中來解決這個問題。

6、整型變量(int): 整型變量的長度為16位。MCS-51系列單片機(jī)將int型變量的高位字節(jié)數(shù)存放在低地址字節(jié)中,低位字節(jié)數(shù)存放在高地址字節(jié)中。有符號整型變量(signed int)也使用msb位作符號標(biāo)志位,并使用二進(jìn)制補(bǔ)碼表示數(shù)值??芍苯邮褂脦追N專用的機(jī)器指令來完成多字節(jié)的加、減、乘、除運(yùn)算。整型變量值0 x1234以圖10.1所示的方式存放在內(nèi)存中。. C51數(shù)據(jù)在MCS-51中的存儲方式圖10.1 整型數(shù)的存儲結(jié)構(gòu) 0 x120 x34+0+1地址 0 x120 x340 x560 x78.+0+1+2+3地址 圖10.2 長整型變量的存儲結(jié)構(gòu) . C51數(shù)據(jù)在MCS-51中的存儲方式

7、 在編程時,如果只強(qiáng)調(diào)運(yùn)算速度而不進(jìn)行負(fù)數(shù)運(yùn)算時,最好采用無符號(unsigned)格式。 無符號字符類型的使用:無論何時,應(yīng)盡可能使用無符號字符變量,因為它能直接被MCS-51所接受。基于同樣的原因,也應(yīng)盡量使用位變量。有符號字符變量雖然也只占用一個字節(jié),但需要進(jìn)行額外的操作來進(jìn)行測試代碼的符號位。這無疑會降低代碼效率。. C51數(shù)據(jù)在MCS-51中的存儲方式10.3 C51數(shù)據(jù)的存儲類型與MCS-51存儲結(jié)構(gòu)表 10.2 C51存儲類型與MCS-51存儲空間的對應(yīng)關(guān)系存儲類型 與存儲空間的對應(yīng)關(guān)系 data 直接尋址片內(nèi)數(shù)據(jù)存儲區(qū),訪問速度快(128字節(jié)) bdata 可位尋址片內(nèi)數(shù)據(jù)存儲

8、區(qū),允許位與字節(jié)混合訪問(16字節(jié)) idata 間接尋址片內(nèi)數(shù)據(jù)存儲區(qū),可訪問片內(nèi)全部RAM地址空間(256字節(jié)) pdata 分頁尋址片外數(shù)據(jù)存儲區(qū)(256字節(jié))由MOVX Ri訪問(i=0,1) xdata 片外數(shù)據(jù)存儲區(qū)(64 KB)由MOVX DPTR訪問 code 程序存儲器64 KB空間,由MOVC DPTR訪問表10.3 C51存儲類型及其數(shù)據(jù)長度和值域存儲類型長度(bit)長度(byte)值域范圍data810255idata810255pdata810255xdata162065 535code162065 53510.3 C51數(shù)據(jù)的存儲類型與MCS-51存儲結(jié)構(gòu)帶存儲類

9、型的變量的定義的一般格式為: 數(shù)據(jù)類型 存儲類型 變量名帶存儲類型的變量定義舉例:char data var1;bit bdata flags;unsigned int pdata var2;unsigned char vector34;10.3 C51數(shù)據(jù)的存儲類型與MCS-51存儲結(jié)構(gòu)10.4 MCS-51特殊功能存放器(SFR)的C51定義 MCS-51單片機(jī)中,除了程序計數(shù)器PC和4組工作存放器組外,其它所有的存放器均為特殊功能存放器(SFR),分散在片內(nèi)RAM區(qū)的高128字節(jié)中,地址范圍為80H0FFH。SFR中有11個存放器具有位尋址能力. 為了能直接訪問這些SFR,F(xiàn)rankli

10、n C51提供了一種自主形式的定義方法,這種定義方法與標(biāo)準(zhǔn)C語言不兼容,只適用于對MCS-51系列單片機(jī)進(jìn)行C語言編程。這些定義在頭文件reg51.h中.10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h#ifndef _REG51_H_#define _REG51_H_/* BYTE Register */sfr P0 = 0 x80;sfr P1 = 0 x90;sfr P2 = 0 xA0;sfr P3 = 0 xB0;sfr PSW = 0 xD0;sfr ACC = 0 xE0;sfr B = 0 xF0;sfr SP = 0 x81;sfr DPL

11、= 0 x82;sfr DPH = 0 x83;sfr PCON = 0 x87;sfr TCON = 0 x88;sfr TMOD = 0 x89;sfr TL0 = 0 x8A;sfr TL1 = 0 x8B;sfr TH0 = 0 x8C;sfr TH1 = 0 x8D;sfr IE = 0 xA8;sfr IP = 0 xB8;sfr SCON = 0 x98;sfr SBUF = 0 x99;10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h/* BIT Register

12、 */* PSW */sbit CY = 0 xD7;sbit AC = 0 xD6;sbit F0 = 0 xD5;sbit RS1 = 0 xD4;sbit RS0 = 0 xD3;sbit OV = 0 xD2;sbit P = 0 xD0;10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h/* TCON */sbit TF1 = 0 x8F;sbit TR1 = 0 x8E;sbit TF0 = 0 x8D;sbit TR0 = 0 x8C;sbit IE1 = 0 x8B;sbit IT1 = 0 x8A;sbit IE0 = 0 x89;sbit I

13、T0 = 0 x88;10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h/* IE */sbit EA = 0 xAF;sbit ES = 0 xAC;sbit ET1 = 0 xAB;sbit EX1 = 0 xAA;sbit ET0 = 0 xA9;sbit EX0 = 0 xA8;10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h/* IP */ sbit PS = 0 xBC;sbit PT1 = 0 xBB;sbit PX1 = 0 xBA;sbit PT0 = 0 xB9;sbit PX0 = 0 xB8;10.4 M

14、CS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h/* P3 */sbit RD = 0 xB7;sbit WR = 0 xB6;sbit T1 = 0 xB5;sbit T0 = 0 xB4;sbit INT1 = 0 xB3;sbit INT0 = 0 xB2;sbit TXD = 0 xB1;sbit RXD = 0 xB0;10.4 MCS-51特殊功能存放器(SFR)的C51定義.頭文件 reg51.h/* SCON */sbit SM0 = 0 x9F;sbit SM1 = 0 x9E;sbit SM2 = 0 x9D;sbit REN = 0 x9C;sbit

15、 TB8 = 0 x9B;sbit RB8 = 0 x9A;sbit TI = 0 x99;sbit RI = 0 x98;#endif10.5 MCS-51并行接口的C51定義 MCS-51系列單片機(jī)并行I/O接口除了芯片上的4個I/O口(P0P3)外,還可以在片外擴(kuò)展I/O口。MCS-51單片機(jī)I/O口與數(shù)據(jù)存儲器統(tǒng)一編址,即把一個I/O口當(dāng)作數(shù)據(jù)存儲器中的一個單元來看待。 使用C51進(jìn)行編程時,MCS-51片外擴(kuò)展的I/O可以在一個頭文件中定義,absacc.h就是這個頭文件.10.5 MCS-51并行接口的C51定義absacc.h頭文件#ifndef _ABSACC_H_#defin

16、e _ABSACC_H_#define CBYTE (unsigned char volatile code *) 0)#define DBYTE (unsigned char volatile data *) 0)#define PBYTE (unsigned char volatile pdata *) 0)#define XBYTE (unsigned char volatile xdata *) 0)#define CWORD (unsigned int volatile code *) 0)#define DWORD (unsigned int volatile data *) 0)

17、#define PWORD (unsigned int volatile pdata *) 0)#define XWORD (unsigned int volatile xdata *) 0)10.5 MCS-51并行接口的C51定義#ifdef _CX51_#define FVAR(object, addr) (*(object volatile far *) (addr)#define FARRAY(object, base) (object volatile far *) (base)#define FCVAR(object, addr) (*(object const far *) (

18、addr)#define FCARRAY(object, base) (object const far *) (base)#else#define FVAR(object, addr) (*(object volatile far *) (addr)+0 x10000L)#define FCVAR(object, addr) (*(object const far *) (addr)+0 x810000L)#define FARRAY(object, base) (object volatile far *) (base)+0 x10000L)#define FCARRAY(object,

19、base) (object const far *) (base)+0 x810000L)#endif#endifabsacc.h頭文件 對于片外擴(kuò)展I/O口,那么根據(jù)硬件譯碼地址,將其視作為片外數(shù)據(jù)存儲器的一個單元,使用#define語句進(jìn)行定義。例如#include #define PORTA XBYTE 0 xFFC0 將PORTA定義為外部I/O口,地址為 FFC0H,長度為8位。 一旦在頭文件或程序中對這些片外I/O口進(jìn)行定義后,在程序中就可以自由使用變量名與其實(shí)際地址的聯(lián)系。10.5 MCS-51并行接口的C51定義.位變量C51定義。使用C51編程時,定義了位變量后,就可以用定義

20、了的變量來表示MCS-51的位尋址單元。 位變量的C51定義的一般語法格式如下: 位類型標(biāo)識符(bit) 位變量名; 例如:bit direction_bit ;/* 把direction_bit定義為位變量 */bit look_pointer ;/* 把look_pointer定義為位變量 */10.6 位變量的C51定義.函數(shù)可包含類型為“bit的參數(shù),也可以將其作為返回值。例如: bit func(bit b0, bit b1) /* 變量b0,b1作為函數(shù)的參數(shù) */ return (b1); /* 變量b1作為函數(shù)的返回值 */ 10.6 位變量的C51定義.對位變量定義的限制。位

21、變量不能定義成一個指針,如不能定義:bit * bit_pointer。不存在位數(shù)組,如不能定義:bit b_array 。 在位定義中,允許定義存儲類型,位變量都被放入一個位段,此段總位于MCS-51片內(nèi)的RAM區(qū)中。因此,存儲類型限制為data和idata,如果將位變量的存儲類型定義成其它存儲類型都將編譯出錯。10.6 位變量的C51定義例1 先定義變量的數(shù)據(jù)類型和存儲類型:bdata int ibase; /* 定義ibase為bdata整型變量 */bdata char bary4;/* bary4定義為bdata字符型數(shù)組 */然后可使用sbit定義可獨(dú)立尋址訪問的對象位:sbit

22、mybit0 = ibase0 ;/* mybit0定義為ibase的第0位 */sbit mybit15 = ibase15;/* mybit0定義為ibase的第15位 */sbit Ary07 = bary07 ;/* Ary07定義為abry0的第7位 */sbit Ary37 = bary37 ;/* Ary37定義為abry3的第7位 */10.6 位變量的C51定義10.7 用C語言寫51單片機(jī)軟件的一般方法.C語言控制8051單片機(jī)的I/O口例:編寫程序使P1.3上接的LED發(fā)光管每隔約0.3秒閃爍一次./文件名:LED1.C#include /標(biāo)準(zhǔn)頭文件sbit LED=P1

23、3; /LED接于P1.3void main(void) /主函數(shù)無返回值 int j; /整型變量j while(1) /死循環(huán) LED=0; /亮 for(j=0;j30000;j+);/延時 LED=1; /滅 for(j=0;j30000;j+); /延時 10.7 用C語言寫51單片機(jī)軟件的一般方法.C語言控制8051單片機(jī)的I/O口.C語言對MCS-51單片機(jī)位處理器的應(yīng)用如:sbit spcialbit=0 xe1; /spcialbit為ACC.1bit bitval; /定義bitval為位變量bit button;bitval=spcialbit; /bitval=ACC.

24、1If(bitval)button=0;else button=1; /butoon與bitval相反button=!bitval; /butoon與bitval相反.C語言管理MCS-51單片機(jī)內(nèi)部定時器例:用查詢方法在LED口上輸出10Hz的方波.晶振頻率11.0592Hz.#include sbit LED=P13;Void INIT_TMR1(void) TMOD=0 x11; /T1方式1 TH1=0 x4C; /定時0.05S初值 TL1=0; TR1=1; /啟動T1Void main(void) INIT_TMR1(); while(1) /死循環(huán) if(TF1=1) /溢出

25、LED=LED; /取反 TF1=0; /清TF1 TH1=0 x4C; /重置初值 TL1=0; .C語言管理MCS-51單片機(jī)中斷系統(tǒng)例:用中斷方法在LED口上輸出10Hz的方波.晶振頻率11.0592Hz./文件名:TINT.C#includeSbit LED=P13;Void INIT_TMR1(void); TMOD=0 x11; TH1=0 x4C; TL1=0; TR1=1;void INIT_TMRINT(void) ET1=1;EA=1:void TMR1_INT_SRV(void) interrupt 3 /interrupt3 T1中斷關(guān)鍵字 TH1=0 x4C; LED

26、=LED;void main(void) /中斷由硬件自動調(diào)用 INIT_TMR1(); INIT_TMR1INT(); while(1) .C語言管理MCS-51單片機(jī)中斷系統(tǒng)例:將一個鍵接到外部中斷0的端口線上,按鍵接通將引起INT0中斷.中斷效勞程序?qū)ED點(diǎn)亮(“0)一會,然后熄滅,等待下次中斷./文件名:EXTINT.C#includesbit LED=P13;void EXT0_INIT(void); EX0=1;IT0=1;EA=1; /開INT0中斷,下降沿觸發(fā)Void EXT0_INT_SRV(void) interrupt 0 data int j; /整型j在片內(nèi)RAM區(qū)

27、 LED=0; /亮 for(j=0;j30000;j+); /延時 for(j=0;j30000;j+); LED=1; /滅void main(void) EXT0_INIT(); while(1);.C語言管理MCS-51單片機(jī)中斷系統(tǒng)10.8 常用C51軟件設(shè)計/ 軟件實(shí)驗一 存儲器塊清零xdata unsigned char Buffer256 _at_ 0 x8000;void main() unsigned int index; unsigned char xdata * ptr; ptr = &Buffer; / 起始地址 for (index = 0; index = 255

28、; index+) *ptr+ = 0; / 清0, 地址加一 /軟件實(shí)驗二 將 Number 拆為三個 BCD 碼, 并存入 Result 數(shù)組void main() unsigned char Result3; unsigned char Number; Number = 123; Result0 = Number / 100; / 除以 100, 得百位數(shù) Result1 = (Number % 100) / 10; / 余數(shù)除以 10, 得十位數(shù) Result2 = Number % 10; / 余數(shù)為個位數(shù)10.8 常用C51軟件設(shè)計10.8 常用C51軟件設(shè)計/軟件實(shí)驗三將 兩位十

29、六進(jìn)制數(shù)變?yōu)槎€ ASCII 碼, 并存入 Result 數(shù)組code unsigned char ASCIITable16 = 0123456789ABCDEF; / 定義數(shù)字對應(yīng)的ASCII表void main() unsigned char Result2; unsigned char Number; Number = 0 x1a; /兩位十六進(jìn)制數(shù) Result0 = ASCIITableNumber / 16; / 高四位 Result1 = ASCIITableNumber & 0 xf; / 低四位10.8 常用C51軟件設(shè)計/軟件實(shí)驗四 內(nèi)存塊移動xdata unsigned

30、char Buffer1256 _at_ 0 x8000;xdata unsigned char Buffer2256 _at_ 0 x8800;void main() unsigned int index; unsigned char xdata * ptr1; unsigned char xdata * ptr2; ptr1 = &Buffer1; ptr2 = &Buffer2; for (index=0; index = 255; index+) *ptr2+ = *ptr1+; 10.8 常用C51軟件設(shè)計void Func0() void Func1() void Func2()

31、void Func3() void FuncEnter(unsigned char FuncID) switch (FuncID) case 0: Func0(); break; case 1: Func1(); break; case 2: Func2(); break; case 3: Func3(); break; default: break; void main() FuncEnter(0); FuncEnter(1); FuncEnter(2); FuncEnter(3); while(1);/軟件實(shí)驗五 程序跳轉(zhuǎn)表10.8 常用C51軟件設(shè)計#define Size 10unsi

32、gned char ArraySize;void main () bit Change; unsigned char index; unsigned char Temp; do Change = 0; for (index = 0; index Arrayindex+1) Change = 1; Temp = Arrayindex; Arrayindex = Arrayindex+1; Arrayindex+1 = Temp; while (Change);/軟件實(shí)驗六 數(shù)據(jù)排序 10.8 常用C51軟件設(shè)計#include void delay() unsigned int i; for (

33、i=0; i20000; i+) void main() unsigned char index; unsigned char LED; while (1) LED = 1; /初值為1,點(diǎn)亮最低位 for (index=0; index 8; index+) P1 = LED;/點(diǎn)亮位某位 LED = 1;/按位左移一位 delay(); P1口做輸出口,接八只發(fā)光二極管,編寫程序,使發(fā)光二極管循環(huán)點(diǎn)亮。硬件實(shí)驗一 P1口輸入、輸出實(shí)驗10.8 常用C51軟件設(shè)計#include sbit Output = P10;void Delay() unsigned int i; for (i=0;

34、 i20000; i+) ;void main() while (1) Output = 0; Delay(); Output = 1; Delay(); 用單片機(jī)的端口,輸出電平控制繼電器的吸合和斷開,實(shí)現(xiàn)對外部裝置的控制。硬件實(shí)驗二 繼電器控制實(shí)驗10.8 常用C51軟件設(shè)計xdata unsigned char CS245 _at_ 0 x8000;void main() unsigned char b; while (1) b = CS245; /輸入狀態(tài)在b中 硬件實(shí)驗三 用74LS245讀入數(shù)據(jù)擴(kuò)展一片74LS245,來讀入開關(guān)狀態(tài)。 10.8 常用C51軟件設(shè)計xdata uns

35、igned char CS273 _at_ 0 x8000;void main() unsigned char i, b; b = 1; for (i=0; i8; i+) CS273 = b; b = 1; 擴(kuò)展一片74LS273作為輸出口,控制八個LED燈。硬件實(shí)驗四 用74LS273輸出數(shù)據(jù)10.8 常用C51軟件設(shè)計/ 輸出 50% (5:5) 占空比 PWM#include sbit OUTPUT = P10;void Delay(unsigned char CNT) unsigned char i; while (CNT-) for (i=0; i50; i+) ; void ma

36、in() while (1) OUTPUT = 0; Delay(5); OUTPUT = 1; Delay(5); 硬件實(shí)驗五 PWM轉(zhuǎn)換電壓實(shí)驗用P1端口輸出不同占空比的脈沖,通過PWM轉(zhuǎn)換電壓電路轉(zhuǎn)換成電壓。 10.8 常用C51軟件設(shè)計#include sbit Speaker = P10;void Delay() unsigned char i; for (i=0; i50; i+);void main() while (1) Speaker = 0; Delay(); Speaker = 1; Delay(); 硬件實(shí)驗六 音頻控制實(shí)驗用端口輸出不同頻率的脈沖,控制喇叭發(fā)出不同音調(diào)

37、 10.8 常用C51軟件設(shè)計#define mode 0 x82 / 方式0,PA,PC輸出,PB輸入xdata unsigned char PortA _at_ 0 x8000 ; / Port Axdata unsigned char PortB _at_ 0 x8001 ; / Port Bxdata unsigned char PortC _at_ 0 x8002 ; / Port Cxdata unsigned char CAddr _at_ 0 x8003 ; / 控制字地址void delay(unsigned char CNT) unsigned int i; while (

38、CNT- !=0) for (i=20000; i !=0; i-);硬件實(shí)驗七 8255輸入、輸出實(shí)驗 利用8255可編程并行口芯片,實(shí)現(xiàn)輸入/輸出實(shí)驗,實(shí)驗中用8255PA口作輸出,PB口作輸入。10.8 常用C51軟件設(shè)計void main() register unsigned char i, dd; CAddr = mode; / 方式0, PA,PC輸出, PB輸入 while(1) dd = 0 x80; for(i = 0; i= 1; / 移位 delay(1); / 延時 ; dd = PortB; / PB輸入 PortA = dd; / 再輸出到PA delay(2);

39、 10.8 常用C51軟件設(shè)計#include void Send164(unsigned char b) SCON = 0; / 串口方式0 SBUF = b; / 輸出 bvoid main() Send164(0 x55);/輸出#01010101 while(1);利用單片機(jī)的串行口輸出,利用74LS164移位轉(zhuǎn)換成并行數(shù)據(jù),接在LED燈上顯示。 硬件實(shí)驗八 串行數(shù)轉(zhuǎn)換并行數(shù)實(shí)驗10.8 常用C51軟件設(shè)計#include sbit LD = P10;unsigned char Read165() LD = 0; LD = 1; SCON = 0 x10;/串口方式0 while (!

40、RI) ; return(SBUF);void main() unsigned char b; b = Read165();硬件實(shí)驗九 并行數(shù)轉(zhuǎn)換串行數(shù)實(shí)驗將外接的并行數(shù)利用74LS165讀入,并且移位轉(zhuǎn)換成串行數(shù),利用單片機(jī)串行口讀入。 10.8 常用C51軟件設(shè)計#include void main() TMOD = 0 x05; / 方式1,記數(shù)器 TH0 = 0; TL0 = 0; TR0 = 1; / 開始記數(shù) while (1) P1 = TL0; / 將記數(shù)結(jié)果送P1口硬件實(shí)驗十 計數(shù)器實(shí)驗8031內(nèi)部定時計數(shù)器T0,按計數(shù)器模式和方式1工作,對P3.4T0引腳進(jìn)行計數(shù)。將其數(shù)值

41、按二進(jìn)制數(shù)在P1口驅(qū)動LED燈上顯示出來。10.8 常用C51軟件設(shè)計#include sbit LED = P10;bit LEDBuf;void ExtInt0() interrupt 0 LEDBuf = !LEDBuf; LED = LEDBuf;void main() LEDBuf = 0; LED = 0; TCON = 0 x01; / INT0下降沿觸發(fā) IE = 0 x81; / 翻開外部中斷允許位(EX0)及總中斷允許位(EA) while (1) ;用單次脈沖申請中斷,在中斷處理程序中對輸出信號進(jìn)行反轉(zhuǎn)。硬件實(shí)驗十一 外部中斷實(shí)驗10.8 常用C51軟件設(shè)計#includ

42、e #define Tick 10000 / 10000 x 100us = 1s#define T100us (256-50) / 100us時間常數(shù)(6M)unsigned int C100us; / 100us記數(shù)單元bit LEDBuf;sbit LED = P10;void T0Int() interrupt 1 C100us-; if (C100us = 0) C100us = Tick; / 100us 記數(shù)器為0, 重置記數(shù)器 LEDBuf = !LEDBuf; / 取反LED 硬件實(shí)驗十二 定時器實(shí)驗用內(nèi)部定時器中斷方式計時,實(shí)現(xiàn)每一秒鐘輸出狀態(tài)發(fā)生一次反轉(zhuǎn).10.8 常用C

43、51軟件設(shè)計void main() TMOD = 0 x02; / 方式2, 定時器 TH0 = T100us; TL0 = T100us; IE = 0 x82; / EA=1, IT0 = 1 LEDBuf = 0; LED = 0; C100us = Tick; TR0 = 1; / 開始定時 while (1) LED = LEDBuf; 10.8 常用C51軟件設(shè)計硬件實(shí)驗十六 八段數(shù)碼管顯示動態(tài)顯示一行數(shù)據(jù).10.8 常用C51軟件設(shè)計/ 硬件實(shí)驗十六 八段數(shù)碼管顯示#define LEDLen 6xdata unsigned char OUTBIT _at_ 0 x8002; /

44、 位控制口xdata unsigned char OUTSEG _at_ 0 x8004; / 段控制口xdata unsigned char IN _at_ 0 x8001; / 鍵盤讀入口unsigned char LEDBufLEDLen; / 顯示緩沖code unsigned char LEDMAP = / 八段管顯示碼 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e, 0 x79, 0 x71;void Delay(unsigned ch

45、ar CNT) unsigned char i; while (CNT- !=0) for (i=100; i !=0; i-);10.8 常用C51軟件設(shè)計void DisplayLED() unsigned char i, j; unsigned char Pos; unsigned char LED; Pos = 0 x20; / 從左邊開始顯示 for (i = 0; i = 1; / 顯示下一位 OUTBIT = 0; / 關(guān)所有八段管10.8 常用C51軟件設(shè)計void main() unsigned char i = 0; unsigned char j; while(1) LEDBuf0 = LEDMAP i & 0 x0f; LEDBuf1 = LEDMAP(i+1) & 0 x0f; LEDBuf2 = LEDMAP(i+2) & 0 x0f; LEDBuf3 = LEDMAP(i+3) & 0 x0f; LEDBuf4 = LEDMAP(i+4) & 0 x0f; LEDBuf5 = LEDMAP(i+5) & 0 x0f; i+; for(j=0; j30; j+) DisplayLED(); / 延時 10.8 常用C51軟件設(shè)計硬件實(shí)驗十七 鍵盤掃描顯示實(shí)驗利用實(shí)驗儀提供的鍵盤掃描電路和顯示電路,做一個掃描鍵盤和數(shù)碼顯示實(shí)驗

溫馨提示

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

評論

0/150

提交評論