版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)應(yīng)用技術(shù)主講老師:郭玲單位:廣東水利電力職業(yè)技術(shù)學(xué)院第三章單片機(jī)C語(yǔ)言及八段數(shù)碼管顯示在上章我們學(xué)習(xí)了用匯編語(yǔ)言編寫程序,并控制led燈點(diǎn)亮和閃爍。在這一章我們將學(xué)習(xí)使用C語(yǔ)言編寫單片機(jī)程序。3.1示例3.2單片機(jī)C語(yǔ)言3.2.1Cx51的數(shù)據(jù)3.2.2變量和常量3.3練習(xí)3.3.1數(shù)碼管靜態(tài)顯示3.3.2數(shù)碼管動(dòng)態(tài)顯示3.1示例上一章,我們書(shū)寫了控制led點(diǎn)亮的匯編程序該功能也可以使用C語(yǔ)言來(lái)完成令P1口清零令P1.1置1結(jié)束開(kāi)始#include<REGX52.H>main() //主程序{P1=0x0; //P1口清零
P1_1=1; //P1.1被置1,led點(diǎn)亮
while(1);}3.1示例Led閃爍的C語(yǔ)言程序編寫#include<REGX52.H>sbitLED=P1^0;voidDelay();voidmain(){while(1){LED=1;//led點(diǎn)亮
Delay(); //延時(shí)
LED=0; //led熄滅
Delay(); //延時(shí)}}voidDelay(){unsignedchari,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}4思考從上面兩個(gè)C語(yǔ)言的程序,我們發(fā)現(xiàn)了那些元素?宏定義函數(shù)賦值語(yǔ)句子程序調(diào)用循環(huán)語(yǔ)句運(yùn)算比較語(yǔ)句3.2單片機(jī)的C語(yǔ)言支持單片機(jī)開(kāi)發(fā)的除了匯編語(yǔ)言,還有C語(yǔ)言C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言,由函數(shù){}構(gòu)成。與匯編語(yǔ)言相比,C語(yǔ)言優(yōu)勢(shì):尋址、寄存器分配可由編譯器管理;程序有規(guī)范結(jié)構(gòu),可分為多個(gè)不同函數(shù),使程序結(jié)構(gòu)化,可讀性強(qiáng);關(guān)鍵字及運(yùn)算函數(shù)可用近似人的思維方式使用;已編好的程序可容易地植入新程序,是模塊化編程技術(shù)。單片機(jī)C語(yǔ)言簡(jiǎn)稱為C51C51編譯器編譯器也叫編譯程序,功能是將高級(jí)語(yǔ)言的源碼翻譯成為匯編語(yǔ)代碼,如將.C的源文件編譯成.ASM匯編文件,將.ASM匯編為.OBJ目標(biāo)文件,同時(shí)輸出單片機(jī)可執(zhí)行HEX文件。8051系列單片機(jī)已經(jīng)是工業(yè)標(biāo)準(zhǔn),從1985年開(kāi)始就有單片機(jī)的C語(yǔ)言編譯器。最著名的是德國(guó)的KEIL公司發(fā)行的KEIL系列編譯器,在市場(chǎng)上已經(jīng)銷售多年。
目前KEIL編譯器已經(jīng)開(kāi)始支持16位、32位ARM的C語(yǔ)言編譯。C51程序的構(gòu)成C語(yǔ)言的程序是由一個(gè)或多個(gè)函數(shù)構(gòu)成的,最簡(jiǎn)單的程序只有一個(gè)main函數(shù)。一個(gè)函數(shù)由兩部份組成函數(shù)的首部、即函數(shù)的第一行;包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。
函數(shù)體,即函數(shù)首部下面的大括號(hào)“{}”內(nèi)的部份。函數(shù)體一般包括:
聲明部份:定義所用到的變量,如voidDelay()中的unsignedchari,j;。執(zhí)行部份:由若干個(gè)語(yǔ)句組成。
標(biāo)識(shí)符
C語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。變量名、常數(shù)名、數(shù)組名、函數(shù)名、文件名與類型名等統(tǒng)稱為標(biāo)識(shí)符。標(biāo)識(shí)符分為預(yù)定義標(biāo)識(shí)符和用戶標(biāo)識(shí)符。說(shuō)明:C語(yǔ)言中大寫字母與小寫字母被認(rèn)為是兩個(gè)不同的字符。標(biāo)識(shí)符在命名時(shí)應(yīng)當(dāng)簡(jiǎn)單,含義清晰,這樣有助于閱讀理解程序。關(guān)鍵字
關(guān)鍵字則是編程語(yǔ)言保留的特殊標(biāo)識(shí)符,它們具有固定名稱和含義,在程序編寫中不允許標(biāo)識(shí)符與關(guān)鍵字相同。在KeilC中的關(guān)鍵字除了有ANSIC標(biāo)準(zhǔn)的32個(gè)關(guān)鍵字外,還根據(jù)51單片機(jī)的特點(diǎn)擴(kuò)展了相關(guān)的關(guān)鍵字。在KeilC的文本編輯器中編寫C程序,系統(tǒng)把保留字以不同顏色顯示,缺省顏色為天藍(lán)色。C語(yǔ)言基本語(yǔ)句(P52)
C語(yǔ)言的程序是由一個(gè)或多個(gè)函數(shù)組成的,而函數(shù)又是由若干個(gè)語(yǔ)句組成的。語(yǔ)句是由一些基本字符和定義符按照C語(yǔ)言的語(yǔ)法規(guī)定組成的,每個(gè)語(yǔ)句以分號(hào)結(jié)束,分號(hào)是C語(yǔ)句的必要組成部份。C語(yǔ)言的語(yǔ)句可分為以下5種類型:表達(dá)式語(yǔ)句函數(shù)調(diào)用語(yǔ)句控制語(yǔ)句空語(yǔ)句C51源程序的書(shū)寫通常,一個(gè)語(yǔ)句占用一行;一個(gè)語(yǔ)句用分號(hào)“;”結(jié)束不同層次結(jié)構(gòu),從不同起始位置開(kāi)始表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句是由一個(gè)表達(dá)式加一個(gè)分號(hào)構(gòu)成一個(gè)語(yǔ)句,其作用是計(jì)算表達(dá)式的值或改變變量的值。它的一般形式是:表達(dá)式;即在表達(dá)式末尾加上分號(hào),就變成了表達(dá)式語(yǔ)句。最典型的表達(dá)式語(yǔ)句是:在賦值表達(dá)式后加一個(gè)分號(hào)構(gòu)成賦值語(yǔ)句。例如:a=3是一個(gè)賦值表達(dá)式a=3;是一個(gè)賦值語(yǔ)句函數(shù)調(diào)用語(yǔ)句由一個(gè)函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成函數(shù)調(diào)用語(yǔ)句,其作用是完成特定的功能。它的一般形式是:函數(shù)名(參數(shù)列表);例如mDelay(100);//調(diào)用延時(shí)函數(shù),參數(shù)是100
控制語(yǔ)句控制語(yǔ)句用于完成一定的控制功能,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。C語(yǔ)言有9種控制語(yǔ)句,可分為以下三類。條件判斷語(yǔ)句:if語(yǔ)句、switch語(yǔ)句。循環(huán)語(yǔ)句:for語(yǔ)句、while語(yǔ)句、do-while語(yǔ)句。轉(zhuǎn)向語(yǔ)句:break語(yǔ)句、continue語(yǔ)句、goto語(yǔ)句、return語(yǔ)句。空語(yǔ)句只有一個(gè)分號(hào)的語(yǔ)句稱為空語(yǔ)句。它的一般形式是:;空語(yǔ)句是什么操作也不執(zhí)行,常用于作為循環(huán)語(yǔ)句中的循環(huán)體,表示循環(huán)體什么也不做。
注釋
注釋內(nèi)容可以單獨(dú)寫在一行上,也可以寫在一個(gè)語(yǔ)句之后;可以用/*…..*/的形式為C程序的任何一部份作注釋;KeilC也支持C++風(fēng)格的注釋,就是用“//”引導(dǎo)的后面的語(yǔ)句是注釋,例:
P1_0=!P1_0;//取反P1.0這種風(fēng)格的注釋,只對(duì)本行有效,書(shū)寫比較方便,所以在只需要一行注釋的時(shí)候,我們往往采用這種格式。C51中的函數(shù)分為兩大類:庫(kù)函數(shù)、用戶自定義函數(shù)庫(kù)函數(shù):Cx51在庫(kù)文件中已定義的函數(shù),其函數(shù)說(shuō)明在相關(guān)的頭文件中。這類函數(shù),用戶在編程時(shí)只要用include預(yù)處理指令將頭文件包含進(jìn)來(lái),直接調(diào)用即可。用戶自定義函數(shù):用戶自己定義,自己調(diào)用的一類函數(shù)。從某種意義上來(lái)看,C編程實(shí)際上是對(duì)一系列用戶函數(shù)的定義。函數(shù)的書(shū)寫一個(gè)Cx51程序僅有一個(gè)main主函數(shù),其它都是子程序函數(shù)。函數(shù)的書(shū)寫類型函數(shù)名(參數(shù)表){
數(shù)據(jù)說(shuō)明; 執(zhí)行語(yǔ)句;}voidDelay(){unsignedchari,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}程序的書(shū)寫子函數(shù)可以在主函數(shù)的前面,也可以在主程序的后面,如在后面,在初始化聲明中預(yù)先聲明。頭文件;初始化聲明;類型函數(shù)名(參數(shù)表)//子函數(shù){
數(shù)據(jù)說(shuō)明; 執(zhí)行語(yǔ)句;}類型函數(shù)名(參數(shù)表)//主函數(shù){
數(shù)據(jù)說(shuō)明; 執(zhí)行語(yǔ)句;}#include<REGX52.H>sbitLED=P1^0;voidDelay();voidmain(){while(1){LED=1;//led點(diǎn)亮
Delay(); //延時(shí)
LED=0; //led熄滅
Delay(); //延時(shí)}}voidDelay(){unsignedchari,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}#include<REGX52.H>sbitLED=P1^0;voidDelay(){unsignedchari,j;for(i=0;i<255;i++)for(j=0;j<255;j++);}voidmain(){while(1){LED=1;//led點(diǎn)亮
Delay(); //延時(shí)
LED=0; //led熄滅
Delay(); //延時(shí)
}}技能訓(xùn)練——8個(gè)led燈的循環(huán)點(diǎn)亮8個(gè)led燈共陰極接法P1口接發(fā)光二極管(LED)的陽(yáng)極,P1口的管腳輸出高電平時(shí)對(duì)應(yīng)的發(fā)光二極管點(diǎn)亮。通過(guò)程序按一定的規(guī)律向P1口的管腳輸出低電平和高電平,控制八只發(fā)光二極管循環(huán)點(diǎn)亮。LED循環(huán)點(diǎn)亮功能實(shí)現(xiàn)分析
由于LED循環(huán)點(diǎn)亮電路的LED是采用共陰極接法,這樣我們就可以通過(guò)“1”和“0”來(lái)控制LED的亮和滅。例如:在P1口輸出十六進(jìn)制數(shù)0x01(二進(jìn)制00000001B),D1被點(diǎn)亮。LED循環(huán)點(diǎn)亮功能實(shí)現(xiàn)過(guò)程如下:8個(gè)LED全滅,控制碼為0x00;D1點(diǎn)亮,P1口輸出0x01,(二進(jìn)制00000001B),延時(shí)后;D2點(diǎn)亮,P1口輸出0x02,(二進(jìn)制00000010B),延時(shí)后;D3點(diǎn)亮,P1口輸出0x03,(二進(jìn)制00000100B),延時(shí)后;……D8點(diǎn)亮,P1口輸出0x80,(二進(jìn)制10000000B),延時(shí)后;重復(fù)第二步,這樣就可以實(shí)現(xiàn)LED循環(huán)點(diǎn)亮??梢圆捎梦蛔笠普Z(yǔ)句,位左移規(guī)定將一個(gè)字節(jié)的位全部左移若干位,移位后,空白位補(bǔ)0,而溢出的位舍棄。如a=EAH,a<<28個(gè)LED循環(huán)電路程序(C語(yǔ)言)Voidmain(){unsignedchari;unsignedchartemp;P1=0x00;//十六進(jìn)制全0,熄滅所有LEDwhile(1){temp=0x01;//第一位為1for(i=0;i<8;i++){P1=temp;//temp值取反送P1口
Delay();temp=temp<<1;//temp值左移一位
}}思考1.如何改變循環(huán)點(diǎn)亮的方向?2.C51程序中用到了延時(shí)程序,該延時(shí)無(wú)法估算具體時(shí)間量,請(qǐng)查閱相關(guān)資料,將前面書(shū)寫的匯編延時(shí)模塊嵌入到C51程序中。
關(guān)鍵字:C51嵌入?yún)R編3.3.1Cx51數(shù)據(jù)(P101)一、數(shù)據(jù)類型數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型。課本P101表15列出了Keil
uvison支持的數(shù)據(jù)類型。C51數(shù)據(jù)類型
P101表15數(shù)據(jù)類型長(zhǎng)度數(shù)值范圍unsignedchar1字節(jié)0~255signedchar1字節(jié)-128~+127unsignedint2字節(jié)0~65535signedint2字節(jié)-32768~+32767unsignedlong4字節(jié)0~4294967295signedlong4字節(jié)-2147483648~+2147483647float4字節(jié)±1.175494E-38~±3.402823E+38*1~3字節(jié)對(duì)象的地址bit位0或1sfr1字節(jié)0~255sfr162字節(jié)0~65535sbit位0或1舉例unsignedchara=123;//1個(gè)字節(jié)7BHunsignedinta=123;//2個(gè)字節(jié)007BHunsignedlonga=123;//4個(gè)字節(jié)0000007BHC51基本數(shù)據(jù)類型
char字符類型長(zhǎng)度是一個(gè)字節(jié)(8位)通常用于處理字符數(shù)據(jù)的變量或常量。分無(wú)符號(hào)字符類型unsignedchar和有符號(hào)字符類型signedchar默認(rèn)值為signedcharunsignedchar表達(dá)范圍:0~255signedchar最高位是符號(hào)位,補(bǔ)碼形式,范圍-128~127C51基本數(shù)據(jù)類型
int整型長(zhǎng)度為兩個(gè)字節(jié)(16位)
分有符號(hào)signedint和無(wú)符號(hào)unsignedint,默認(rèn)值是signedintunsignedint表示的數(shù)值范圍是0~65535signedint表示的數(shù)值范圍是-32768~32767,補(bǔ)碼形式C51基本數(shù)據(jù)類型
long長(zhǎng)整型長(zhǎng)度為四個(gè)字節(jié)(32位)signedlong,unsignedlong,默認(rèn)為signedlongunsignedlong數(shù)值范圍0~4294967295signedlong數(shù)值范圍-2147483648~2147483647C51基本數(shù)據(jù)類型
float浮點(diǎn)型長(zhǎng)度為四個(gè)字節(jié)(32位)會(huì)用即可*指針型指針型本身就是一個(gè)變量,在這個(gè)變量中存放的是指向另一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占據(jù)一定的內(nèi)存單元,在C51中它的長(zhǎng)度一般為1~3個(gè)字節(jié)。
C51擴(kuò)展的數(shù)據(jù)類型
bit位變量sfr特殊功能寄存器sfr1616位特殊功能寄存器sbit可尋址位bit位變量
bit位變量與MCS-51硬件特性操作有關(guān)位變量必須定位在MCS-51單片機(jī)內(nèi)部RAM的位尋址空間中。但不能定義位指針,也不能定義位數(shù)組。bit位變量的值就是一個(gè)二進(jìn)制位,不是0就是1,類似True和False。例如:bitflag;//flag為bit位變量,其值是0或1sfr特殊功能寄存器與標(biāo)準(zhǔn)C語(yǔ)言不兼容,只適用于對(duì)MCS-51系列單片機(jī)進(jìn)行C語(yǔ)言編程。Sfr占用一個(gè)字節(jié),數(shù)值范圍為0~255。利用它可以訪問(wèn)51單片機(jī)內(nèi)部的所有特殊功能寄存器。特殊功能寄存器C51定義的一般語(yǔ)法格式如下:
sfr
特殊功能寄存器名=特殊功能寄存器的字節(jié)地址;例如:
sfrP1=0x90;這一句定義了P1為P1端口在內(nèi)部的寄存器。又如:
sfr
SCON=0x98;
//串口控制寄存器,地址為0x98
sfr
TMOD=0x89;
//定時(shí)器/計(jì)數(shù)器方式控制寄存器sfr1616位特殊功能寄存器sfr16占用兩個(gè)字節(jié)。在許多新的MCS-51系列單片機(jī)中,有時(shí)會(huì)使用兩個(gè)連續(xù)地址的特殊功能寄存器來(lái)指定一個(gè)16位的值。如52子系列的定時(shí)器/計(jì)數(shù)器2。為了有效地訪問(wèn)這類SFR,可使用關(guān)鍵字“sfr16”來(lái)定義,16位SFR定義語(yǔ)句的語(yǔ)法格式與8位SFR相同,只是“=”后面的地址必須用16位SFR的低字節(jié)地址,即低字節(jié)地址作為“sfr16”的定義地址。例如:
sfr16
T2=0xCC
//定時(shí)器/計(jì)數(shù)器2:T2低8位地址為0xCC,T2高8位地址為0xCDsbit可尋址位C51的擴(kuò)充功能支持特殊位的定義,與SFR定義一樣,關(guān)鍵字“sbit”用于定義某些特殊位,利用它可以訪問(wèn)芯內(nèi)部部的RAM中的可尋址位或特殊功能寄存器中的可尋址位。如先前我們定義:
sfrP1=0x90;因P1端口的寄存器是可位尋址的,所以我們可以定義:
sbitP1_1=P1^1;
//P1_1為P1中的P1.1引腳這樣我們?cè)谝院蟮某绦蛘Z(yǔ)句中就可以用P1_1來(lái)對(duì)P1.1引腳進(jìn)行讀寫操作了。在C語(yǔ)言里,由于P1.1不是一個(gè)合法的C語(yǔ)言變量名,得給它另起一個(gè)名字,這里起的名為P1_1,所以必須給它們建立聯(lián)系,這里使用了C51的關(guān)鍵字sbit來(lái)定義sbit
的用法有三種格式第一種格式sbit
bitname=sfrname^intconstant;其中“bitname”是一個(gè)尋址位符號(hào)名,該位符號(hào)名必須是MCS-51單片機(jī)中規(guī)定的位名稱;“sfrname”必須是已定義過(guò)的SFR的名字;“^”后的整常數(shù)是尋址位在特殊功能寄存器“sfrname”中的位號(hào),必須是0~7范圍中的數(shù)。例如:sfr
PSW=0xD0;
//定義PSW寄存器地址為0xD0sbit
OV=PSW^2;
//定義OV位為PSW.2,地址為0xD2sbit
CY=PSW^7;
//定義CY位為PSW.7,地址為0xD7sbit
的用法有三種格式第二種格式:sbit
bit-name=int
constant^intconstant;其中“=”后的intconstant為尋址地址位所在的特殊功能寄存器的字節(jié)地址;“^”符號(hào)后的intconstant為尋址位在特殊功能寄存器中的位號(hào)。例如:sbit
OV=0xD0^2;
//定義OV位地址是0xD0字節(jié)中的第2位sbit
CY=0xD0^7;
//定義CY位地址是0xD0字節(jié)中的第7位sbit
的用法有三種格式第三種格式:sbit
bit-name=intconstant;其中“=”后的intconstant為尋址位的絕對(duì)位地址。例如:sbit
OV=0xD2;
//定義OV位地址為0xD2sbit
CY=0xD7;
//定義CY位地址為0xD7
3.2.2C51中的常量與變量常量是在程序運(yùn)行過(guò)程中不能改變的,而變量是可以在程序運(yùn)行過(guò)程中不斷變化的。變量的定義可以使用所有C51編譯器支持的數(shù)據(jù)類型,而常量的數(shù)據(jù)類型只有整型、浮點(diǎn)型、字符型、字符串型和位變量。
常量常量是程序運(yùn)行過(guò)程中不能改變值的量。如固定的數(shù)據(jù)表,字庫(kù)等。常量的數(shù)據(jù)類型只有整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量。整型常量,十進(jìn)制123,十六進(jìn)制0x123
浮點(diǎn)型常量,可分為十進(jìn)制和指數(shù)形式。十進(jìn)制由數(shù)字和小數(shù)點(diǎn)組成,如0.888,3345.345,0.0。指數(shù)可以表示為[±]數(shù)字[.數(shù)字]e[±]數(shù)字。125e3,7e9,-3.0e-3字符型常量,單引號(hào),’a’,轉(zhuǎn)義符位標(biāo)量,它的值是一個(gè)二進(jìn)制。常量常量的定義方式有幾種,下面來(lái)加以說(shuō)明。#difineFalse0x0;//用預(yù)定義語(yǔ)句可以定義常量#difineTrue0x1;//這里定義False為0,True為1程序中用到False和True,在編譯時(shí),F(xiàn)alse替換為0,True替換為1。unsignedint
codea=100;//用code把a(bǔ)定義在程序存儲(chǔ)器中并賦值constunsignedintc=100;//用const定義c為無(wú)符號(hào)int常量并賦值
以上兩句它們的值都保存在程序存儲(chǔ)器中,而程序存儲(chǔ)器在運(yùn)行中是不允許被修改的,所以如果在這兩句后面用了類似a=110,a++這樣的賦值語(yǔ)句,編譯時(shí)將會(huì)出錯(cuò)。變量變量就是一種在程序執(zhí)行過(guò)程中其值能不斷變化的。要在程序中使用變量必須先用標(biāo)識(shí)符作為變量名,并指出所用的數(shù)據(jù)類型和存儲(chǔ)模式,這樣編譯系統(tǒng)才能為變量分配相應(yīng)的存儲(chǔ)空間。定義一個(gè)變量的格式如下:[存儲(chǔ)種類]數(shù)據(jù)類型[存儲(chǔ)器類型]變量名表在定義格式中除了數(shù)據(jù)類型和變量名表是必要的,其它都是可選項(xiàng)。存儲(chǔ)種類存儲(chǔ)種類有四種自動(dòng)(auto),缺省類型為自動(dòng)(auto)外部(extern)靜態(tài)(static)寄存器(register)
存儲(chǔ)器類型存儲(chǔ)器類型的說(shuō)明就是指定該變量在C51硬件系統(tǒng)中所使用的存儲(chǔ)區(qū)域,并在編譯時(shí)準(zhǔn)確的定位。存儲(chǔ)器類型說(shuō)明data直接訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器(128字節(jié)),訪問(wèn)速度最快bdata可位尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器(16字節(jié)),允許位與字節(jié)混合訪問(wèn)idata間接訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器(256字節(jié)),允許訪問(wèn)全部?jī)?nèi)部地址pdata分頁(yè)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器(256字節(jié)),用MOVX@Ri指令訪問(wèn)xdata外部數(shù)據(jù)存儲(chǔ)器(64KB),用MOVX@DPTR指令訪問(wèn)code程序存儲(chǔ)器(64KB),用MOVC@A+DPTR指令訪問(wèn)存儲(chǔ)模式
SMALL存儲(chǔ)模式把所有函數(shù)變量和局部數(shù)據(jù)段放在8051系統(tǒng)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),這使訪問(wèn)數(shù)據(jù)非??臁T趯懶⌒偷膽?yīng)用程序時(shí),變量和數(shù)據(jù)放在data內(nèi)部數(shù)據(jù)存儲(chǔ)器中是很好的,因?yàn)樵L問(wèn)速度快;但在較大的應(yīng)用程序中data區(qū)最好只存放小的變量、數(shù)據(jù)或常用的變量(如循環(huán)計(jì)數(shù)、數(shù)據(jù)索引),而大的數(shù)據(jù)則放置在別的存儲(chǔ)區(qū)域。COMPACT存儲(chǔ)模式中所有的函數(shù)和程序變量和局部數(shù)據(jù)段定位在8051系統(tǒng)的外部數(shù)據(jù)存儲(chǔ)區(qū),最多可有256字節(jié)。LARGE存儲(chǔ)模式所有函數(shù)和過(guò)程的變量和局部數(shù)據(jù)段都定位在8051系統(tǒng)的外部數(shù)據(jù)區(qū),最多可有64KB。存儲(chǔ)種類和存儲(chǔ)器類型完全無(wú)關(guān)。3.4練習(xí)——七段數(shù)碼管顯示數(shù)碼管:多個(gè)led燈組成。ABCDEFGDP由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,8字形有7個(gè)二極管,還有一個(gè)小數(shù)點(diǎn)也是led燈??娠@示1,2,…,9A,b,C,d,E,F
數(shù)碼管電路共陰數(shù)碼管:將所有l(wèi)ed的陰極都連接在一起片選片選共陽(yáng)數(shù)碼管:將所有l(wèi)ed的陽(yáng)極都連接在一起公共端做片選
數(shù)碼管電路單個(gè)數(shù)碼管——靜態(tài)顯示P83圖73數(shù)碼管顯示代碼表從高位到低位:Dp,G,F,E,D,C,B,A對(duì)應(yīng)端口口線:bit7,6,5,4,3,2,1,0數(shù)字0-9的顯示代碼:P85表14共陰:3FH,06H,5BH,4FH,66H…共陽(yáng):0C0H,0F9H,0A4H,0B0H,99H….字符A-F的顯示代碼:共陰:77H,7CH,39H,5EH,79H,71H共陽(yáng):88H,83H,0C6H,0A1H,86H,8EH
數(shù)碼管電路多個(gè)數(shù)碼管模塊,并聯(lián)連接——?jiǎng)討B(tài)顯示P84圖74四位共陰七段數(shù)碼管電路每個(gè)數(shù)碼管的同名波段輸出引線連接在一起。有片選引線,通過(guò)“片選”選擇數(shù)碼管。四個(gè)數(shù)碼管,片選端低電平時(shí)選中該數(shù)碼管。P20P21P22P23
單個(gè)數(shù)碼管靜態(tài)顯示程序設(shè)計(jì)舉例:1、令一個(gè)(最右邊)數(shù)碼管顯示數(shù)字。開(kāi)始片選結(jié)束顯示1#include<REGX51.H> main() { P2=0x0f; P2_0=0; P0=0x3f;//0x06;while(1);}
單個(gè)數(shù)碼管靜態(tài)顯示程序設(shè)計(jì)舉例:2、一個(gè)數(shù)碼管(最右邊)以0.5s間隔時(shí)間顯示數(shù)字0-9.開(kāi)始片選結(jié)束顯示1延時(shí)。。。#include<REGX51.H> main() { P2=0x0f; P2_0=0; while(){P1=0x3f;delay(); P1=0x06;delay();…P1=0x6f;delay()}}
單個(gè)數(shù)碼管靜態(tài)顯示程序設(shè)計(jì)要顯示某個(gè)數(shù)字或字母時(shí)都要去查編碼。將顯示代碼事先放置在ROM中,查表取數(shù)據(jù)(匯編中是DB指令)。單個(gè)數(shù)碼管靜態(tài)顯示程序設(shè)計(jì)顯示代碼事先放置在ROM中C51語(yǔ)句編寫unsignedcharcodetable[]={0x3f,
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};上述語(yǔ)句定義了數(shù)據(jù)類型,存儲(chǔ)器類型,以及數(shù)組table該數(shù)組里的每個(gè)元素都是usignedchar類型,且放置在ROM里。數(shù)組的地址與數(shù)組第1個(gè)元素的地址相同。每個(gè)元素地址順序增加1,因?yàn)閏har類型占用1個(gè)字節(jié)。第1個(gè)元素table[0],第2個(gè)元素table[1],….單個(gè)數(shù)碼管依次顯示數(shù)字#include<REGX51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay(){ unsignedchari,j,k;
for(i=40;i>0;i--)
for(j=40;j>0;j--)
for(k=248;k>0;k--); }main(){ P2=0x0f;//0f; P2_0=0; while(1) { P1=table[0]; delay(); P1=table[1]; delay(); ... P1=table[9]; } } 作業(yè)1:開(kāi)發(fā)板硬件電路調(diào)試調(diào)試開(kāi)發(fā)板檢查電路板,電源是否正常單片機(jī)晶振是否正常是否有漏焊、虛焊裝載學(xué)院的WAVE軟件,插上usb線,手動(dòng)查找實(shí)驗(yàn)板的usb驅(qū)動(dòng),檢查電路板usb通信是否正常。在學(xué)院的WAVE軟件下點(diǎn)擊“實(shí)驗(yàn)板測(cè)試程序”,下載測(cè)試程序,如果測(cè)試通過(guò),說(shuō)明電路板正常。同學(xué)之間可交換檢查,如有失效零部件,向電子協(xié)會(huì)領(lǐng)取新的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鴕鳥(niǎo)防病知識(shí)培訓(xùn)課件
- 中國(guó)移動(dòng)個(gè)人年終總結(jié)
- 二零二五年度建筑工程砂漿采購(gòu)合同糾紛處理協(xié)議3篇
- 時(shí)間規(guī)劃管理
- 國(guó)家石油天然氣管網(wǎng)集團(tuán)有限公司介紹
- 2025年度辦公租賃合同范本附租賃物業(yè)消防及安全責(zé)任規(guī)定3篇
- 2025版爆破工程承包與風(fēng)險(xiǎn)評(píng)估協(xié)議3篇
- 二零二五年度建筑工程基礎(chǔ)知識(shí)專業(yè)論壇組織與管理合同3篇
- 二零二五年度住房和城鄉(xiāng)建設(shè)局建筑行業(yè)信用體系建設(shè)合同2篇
- 年產(chǎn)1萬(wàn)套儲(chǔ)能柜機(jī)箱機(jī)柜新建項(xiàng)目可行性研究報(bào)告寫作模板-備案審批
- 八年級(jí)上冊(cè)科學(xué)(浙教版)復(fù)習(xí)提綱
- 商務(wù)溝通第二版第4章書(shū)面溝通
- 《動(dòng)物遺傳育種學(xué)》動(dòng)物醫(yī)學(xué)全套教學(xué)課件
- 基金會(huì)項(xiàng)目基金捐贈(zèng)立項(xiàng)表
- OCT青光眼及視野報(bào)告
- 人音版小學(xué)音樂(lè)四年級(jí)下冊(cè)課程綱要
- 初中語(yǔ)文人教七年級(jí)上冊(cè)朝花夕拾學(xué)生導(dǎo)讀單
- 山西鄉(xiāng)寧焦煤集團(tuán)臺(tái)頭煤焦公司礦井兼并重組整合項(xiàng)目初步設(shè)計(jì)安全專篇
- 弱電工程自檢報(bào)告
- DB33∕T 628.1-2021 交通建設(shè)工程工程量清單計(jì)價(jià)規(guī)范 第1部分:公路工程
- (完整版)八年級(jí)上綜合性學(xué)習(xí)-我們的互聯(lián)網(wǎng)時(shí)代-練習(xí)卷(含答案)
評(píng)論
0/150
提交評(píng)論