單片機的程序設(shè)計課件_第1頁
單片機的程序設(shè)計課件_第2頁
單片機的程序設(shè)計課件_第3頁
單片機的程序設(shè)計課件_第4頁
單片機的程序設(shè)計課件_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目2單片機的程序設(shè)計 2.1C語言的程序結(jié)構(gòu)2.2C51的運算符及表達式

2.3C51的數(shù)據(jù)2.4C語言的函數(shù)2.5C語言的數(shù)組2.6程序設(shè)計實例項目2單片機的程序設(shè)計 2.1C語言的程單片機的開發(fā)實例——點亮一盞LED燈問題描述:通過C語言編程,實現(xiàn)單片機開發(fā)板上點亮一盞LED燈。實驗所需軟件:Keil、Progisp實驗步驟:1、熟悉硬件電路2、掌握開發(fā)軟件的使用方法3、編寫程序代碼并進行編譯、運行拓展:1、同時點亮幾盞LED燈2、設(shè)計流水燈單片機的開發(fā)實例——點亮一盞LED燈問題描述:通過C單片機的程序設(shè)計課件程序代碼#include<reg51.h>main(){P1=0xF7;}程序代碼#include<reg51.h>請用C語言編寫程序計算234+78的和main(){inta,b,c;a=234;b=78;c=a+b;printf(“234+78=%d”,c);}請用C語言編寫程序計算234+78的和main()1.C51語言C語言編譯調(diào)試工具效率高,數(shù)據(jù)類型及運算符豐富,經(jīng)過不斷完善,能滿足單片機的開發(fā)要求,形成了單片機C語言。把51單片機C語言稱為C51語言。用C51編寫單片機程序時,需要根據(jù)單片機存儲結(jié)構(gòu)及內(nèi)部資源定義相應(yīng)的數(shù)據(jù)類型和變量,而標(biāo)準的C語言不需要考慮這些問題。另外,C51包含的數(shù)據(jù)類型、變量存儲模式、輸入輸出處理、函數(shù)等方面與標(biāo)準的C語言也有一定的區(qū)別。其他的語法規(guī)則、程序結(jié)構(gòu)及程序設(shè)計方法則與標(biāo)準的C語言相同。1.C51語言C語言編譯調(diào)試工具C51語言的特點編程者不需要了解單片機的指令系統(tǒng),僅要求對單片機的存儲器結(jié)構(gòu)有初步的了解,至于存儲器的分配、尋址方式及數(shù)據(jù)類型等完全由編譯器管理。程序有規(guī)范化的結(jié)構(gòu),可以分為不同的函數(shù),這種方式可以使程序結(jié)構(gòu)化,將可變的選擇與特殊操作組合在一起,增強程序的可讀性。編程和程序的調(diào)試時間顯著縮短,從而提高了編程的效率,提供的庫函數(shù)包含許多標(biāo)準的子程序,具有較強的數(shù)據(jù)處理能力,可以將編好的程序很容易地移植到新程序。

C51作為一種非常方便的語言得到了廣泛的支持,目前已經(jīng)成為單片機開發(fā)的主要編程語言。C51語言的特點編程者不需要了解單2.簡單的C51程序【例】如下圖所示,在P1.0口上接有一個LED發(fā)光二極管,要求讓發(fā)光二極管發(fā)光。2.簡單的C51程序【例】如下圖所示,在P1.0口上接有#include<reg51.h>sbitP1_0=P1^0;voidmain(){ P1_0=0;}程序如下:程序的開始是一個文件包含處理。這段程序中包含的是reg51.h文件,以.h為后綴的稱為頭文件,該頭文件的作用是把特殊功能寄存器中的符號和地址對應(yīng)起來,這里主要是應(yīng)用到P1這個符號,如果沒有包含reg51.h文件,C51編譯器不知道P1具體指什么,在編譯過程中就會發(fā)生錯誤。給P1.0取名為P1_0,是通過編譯器中增加的關(guān)鍵字sbit來定義的程序最后是主函數(shù),每一個C51程序有且只有一個主函數(shù),函數(shù)后面使用一對大括號“{}”,在“{}”中書寫具體內(nèi)容。#include<reg51.h>程序如下:程序的開始是一(1)一個C51程序從main函數(shù)開始執(zhí)行,不管main函數(shù)在什么位置。(2)C51中字母區(qū)分大小寫,如定義是sbitP1_0,若后面寫成p1_0,在編譯時就會出現(xiàn)錯誤。(3)C51書寫自由,一行可以寫幾個語句,一個語句也能寫在幾行上。(4)每個語句必須以分號結(jié)束。(5)C51中的注釋可以采用兩種符號。第一種是“/*…*/”符號,從“/*”開始直到“*/”為止,中間的內(nèi)容都是注釋。第二種是“//”引導(dǎo)的注釋語句,這種注釋只對本行有效。由此可見:(1)一個C51程序從main函數(shù)開始執(zhí)行,不管main函2.1C語言的程序結(jié)構(gòu)在結(jié)構(gòu)上可以把C51程序分為3類,即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。2.1.1順序結(jié)構(gòu)順序結(jié)構(gòu)是一種最基本、最簡單的編程結(jié)構(gòu),在這種結(jié)構(gòu)下,程序按低地址向高地址順序逐條執(zhí)行指令代碼,如右圖所示。過程A過程B過程C2.1C語言的程序結(jié)構(gòu)在結(jié)構(gòu)上可請用C語言編寫程序計算234+78的和main(){inta,b,c;a=234;b=78;c=a+b;printf(“234+78=%d”,c);}請用C語言編寫程序計算234+78的和main()2.1.2選擇結(jié)構(gòu)1、if語句(1) if(表達式)語句如果表達式為“真”,則執(zhí)行語句,否則執(zhí)行if語句后面的語句,如:if(a<5)b=3;2.1.2選擇結(jié)構(gòu)1、if語句(1) if(表達式)(2) if(表達式)語句1 else語句2如果表達式為“真”,則執(zhí)行語句1,否則執(zhí)行語句2,如:if(a<5)b=3;elseb=-3;(2) if(表達式)例2.1單片機的P1.0接一小燈,P1.1接一開關(guān),當(dāng)開關(guān)閉合時,小燈亮;當(dāng)開關(guān)斷開時,小燈滅。請畫出硬件電路圖,并寫出程序代碼。#include<reg51.h>voidmain(){while(1){if(P1^1==0)P1^0=0;elseP1^0=1;}}例2.1單片機的P1.0接一小燈,P1.1接一開關(guān),當(dāng)開關(guān)(3) if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3

……

elseif(表達式m)語句melse語句m+1如:if(a>10)b=1;elseif(a>6)b=2;elseif(a>2)b=3;elseb=4;(3) if(表達式1)如:單片機的程序設(shè)計課件(4)if語句的嵌套if(表達式1)if(表達式2)語句1else語句2elseif(表達式3)語句3else語句4使用if嵌套語句特別要注意if和else配對,else總是和最近的if配對

(4)if語句的嵌套if(表達式1)使用if嵌套語句特別要2、switch語句

實際問題中,往往遇到以一個變量或表達式的值為判斷條件,將此變量或表達式的值分成幾段,每一段對應(yīng)一種選擇或操作,這種情況用if語句來嵌套非常麻煩,于是,C51提供了switch語句。switch語句的一般結(jié)構(gòu)如下:switch(表達式){case常量表達式1:語句1,break;case常量表達式2:語句2,break;

case常量表達式n:語句n,break;default:語句n+1,break;}2、switch語句實際問題中,往往遇2.1.3循環(huán)結(jié)構(gòu)構(gòu)成循環(huán)結(jié)構(gòu)的主要有while、do-while和for等語句。

1、while循環(huán)語句while語句的一般表達形式為:while(表達式){語句}當(dāng)表達式的判斷為“真”時,執(zhí)行大括號內(nèi)的語句,否則不執(zhí)行。2.1.3循環(huán)結(jié)構(gòu)構(gòu)成循環(huán)結(jié)構(gòu)的主要有while、do-w2、do-while循環(huán)語句do-while語句是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立,其一般形式為:do{語句}while(表達式);

分析程序:P33例2.42、do-while循環(huán)語句do-while語句是3、for循環(huán)語句for語句的一般形式為:for(表達式1;表達式2;表達式3){語句}for循環(huán)語句的執(zhí)行過程如下。(1) 先求解表達式1。(2) 求解表達式2,如果結(jié)果為“真”,即條件成立,則執(zhí)行循環(huán)體語句;如果結(jié)果為“假”,轉(zhuǎn)到第(5)步。(3) 求解表達式3。(4) 轉(zhuǎn)回第(2)步。(5) 退出for循環(huán)語句,執(zhí)行下面的語句。3、for循環(huán)語句for語句的一般形式為:for(表達式1

表達式3

表達式2

表達式1

循環(huán)體語句

表達式3表達式2真假表達式1循環(huán)體語句【例】流水燈的設(shè)計:在單片機的P1.0-P1.7上分別連接8個發(fā)光二極管,編程實現(xiàn)8個LED燈循環(huán)點亮。程序如下:#include<reg51.h>#defineucharunsignedcharvoiddelay() //延時子程序{ uchari,j; for(i=0;i<110;i++);for(j=0;j<200;j++)}voidmain(){ ucharx,y;while(1){y=0x01;for(x=0;x<8;x++){P1=~y;delay();y<<=1;}}}【例】流水燈的設(shè)計:在單片機的P1.0-P1.7上分別連接84、break語句和continue語句

在一個循環(huán)語句中,可以通過判斷條件來退出循環(huán),也可以通過break語句來強制退出循環(huán)。continue語句用于結(jié)束本次循環(huán),即跳過循環(huán)體下面的語句,而直接進行下一次是否循環(huán)的判斷。【例】單片機的P3.0接開關(guān)K1,P3.0接開關(guān)K2,要求按下K1后,則從D1開始依次點亮,至D8后停止并全部熄滅;待再次按下K1,重復(fù)上面過程;如果中間K2被按下,則燈立即全部熄滅,并返回初始狀態(tài)。4、break語句和continue語句在一個循環(huán)#include"regx51.h"voidDelay(unsignedintdelaytime) //延時子程序{unsignedchari;for(;delaytime>0;delaytime--)for(i=0;i<=124;i++);}voidmain(){unsignedcharlight=0xfe;unsignedchari;while(1){if((P3_0)==0){ light=0xfe;P1=light; for(i=0;i<=7;i++) { Delay(1000); if((P3_1)==0) break; light<<=1; P1=light;}P1=0xff; }}}#include"regx51.h"voidmain(2.2C51的運算符及表達式C51的運算符主要有:算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值及復(fù)合賦值運算符。2.2C51的運算符及表達式2.2.1.賦值運算符和賦值表達式(1)賦值運算符“=”優(yōu)先級較底,右結(jié)合性。(2)賦值表達式一般形式:變量名=表達式

賦值的類型轉(zhuǎn)換規(guī)則:在賦值運算中,當(dāng)“=”兩側(cè)類型不一致時,系統(tǒng)自動將右邊表達式的值轉(zhuǎn)換成左側(cè)變量的類型,再賦值給該變量。如:x=1+9;x=y=5;2.2.1.賦值運算符和賦值表達式

2.2.2算術(shù)運算符和算術(shù)表達式

(1)基本的算術(shù)運算符

+-*/%(模運算或取余運算符)注:1.都是雙目運算符,即需要兩個操作數(shù)2.對/,若兩個整數(shù)相除,結(jié)果為整數(shù)(取整)3.對于%,要求%兩側(cè)的操作數(shù)均為整型數(shù)據(jù),所得結(jié)果的符號與左側(cè)操作數(shù)符號相同。

如:7/5=1,5/7=0-93%23=-193%-23=12.2.2算術(shù)運算符和算術(shù)表達式

(1)基本的算(2)自增,自減運算符++自增--自減注:1、++和--是單目運算符2、++和--只能用于變量,不能用與常量和表達式。3、++j先自增,再使用j++先使用,后自增

如:a=2b=++a后b=3a=3b=a++后b=2a=3單片機的程序設(shè)計課件2.2.3關(guān)系運算符和關(guān)系表達式(1)關(guān)系運算符及優(yōu)先級<,<=,>,>=,==,!=前四個優(yōu)先級相同,后兩個優(yōu)先級相同,前四個優(yōu)先級高于后兩個。注:在優(yōu)先級上算術(shù)運算符>關(guān)系運算符>賦值運算符2.2.3關(guān)系運算符和關(guān)系表達式(2)關(guān)系表達式用關(guān)系運算符將兩個表達式連接起來的表達式稱為關(guān)系表達式,關(guān)系表達式的值為邏輯值,真和假,1代表真,0代表假。

a>ba=4b=3關(guān)系表達式為真,值為1(2)關(guān)系表達式2.2.4邏輯運算符和邏輯表達式(1)邏輯運算符及其優(yōu)先級&&邏輯與||邏輯或!邏輯非注意:1、&&與||是雙目運算符,!是單目運算符2、在優(yōu)先級上!〉&&〉||2.2.4邏輯運算符和邏輯表達式(2)邏輯表達式邏輯表達式值為邏輯量(真或假)執(zhí)行規(guī)則:邏輯表達式是不完全執(zhí)行的,只有當(dāng)一定要執(zhí)行下一個邏輯運算符才能確定表達式的值時,才執(zhí)行該運算符。如:a&&b&&c若a=0則表達式為0a||b||c若a=1,則表達式為1(2)邏輯表達式2.2.5位運算符及其表達式按位與&,按位或|,按位異或^按位取反~,左移<<,右移>>(1)按位與運算符&

如:chara=3,b=6a&b=2000000110000011000000010作用:1)清零:讓要清零的數(shù)與0按位與即可2)保留某些位,而將其余的位清零。單片機的程序設(shè)計課件(2)按位或運算符|0|0=00|1=11|0=11|1=1按位或的作用是將指定的位置置1(3)異或運算符^0^0=01^1=00^1=11^0=1作用:1)與1異或,使其定位翻轉(zhuǎn)。任何數(shù)與1異或都會變成相反數(shù)。2)與0異或,使指定位保留原值。任何數(shù)與0異或都保持不變。(2)按位或運算符|(4)位取反運算符~如:unsignedchara=0x9a,b;b=~a;a值不變,b=0x65(5)位左移運算符<<(左移1位相當(dāng)與乘2)如:unsignedchara=15a=a<<100001111a=a<<1左移1位a=30a=a<<2左移2位a=60單片機的程序設(shè)計課件(6)位右移運算>>(右移1位相當(dāng)于除2)inta=15:a=a>>2后a=3注:1、左移運算中高位移出舍棄不用,低位補02、右移運算中低位移出舍棄不用,高位對無符號數(shù)補0,對有符號數(shù)高位補符號位。(6)位右移運算>>(右移1位相當(dāng)于除2)2.2.6復(fù)合賦值運算符賦值號前加上其他運算符構(gòu)成復(fù)合賦值運算符,c51提供了下列十個復(fù)合賦值運算符+=,一=,*=,/=,%=,&=,1=,^=,〈〈=,〉〉=a+=ba=(a+b)x*=a+bx=(x*(a+b))a&=ba=(a&b)a<<=4a=(a<<4)2.2.6復(fù)合賦值運算符單片機控制系統(tǒng)的設(shè)計與制作試題2

要求:用單片機實現(xiàn)搶答器的設(shè)計。當(dāng)四個開關(guān)中的某一個開關(guān)按下時,數(shù)碼管顯示器上顯示該開關(guān)對應(yīng)的選手編號(1~4),且此時其他選手不能再搶答。當(dāng)按下復(fù)位鍵后,重新開始搶答。請先設(shè)計硬件電路,再畫出程序流程圖,寫出程序代碼。單片機控制系統(tǒng)的設(shè)計與制作試題2要求:用單片機實現(xiàn)單片機的程序設(shè)計課件#include"REGX52.H"consttab[]={0xf9,0xa4,0xb0,0x99};//通過查表來顯示對應(yīng)數(shù)字1,2,3,4voiddisp(intn){P2_4=0;//數(shù)碼管控制位使能P0=tab[n];//查表來顯示數(shù)字}main(){charanswer=1;//搶答標(biāo)志使能P2_4=1;//數(shù)碼管控制位無顯示P2_0=1;P2_1=1;P2_2=1;P2_3=1;//按鍵定義為輸入#include"REGX52.H"while(1){while(answer)//當(dāng)搶答標(biāo)志為1時執(zhí)行,為0時表示搶答結(jié)束,//不執(zhí)行下面搶答掃描{if(P2_0==0){disp(0);//顯示對應(yīng)搶答號碼answer=0;//搶答標(biāo)志取消}elseif(P2_1==0){disp(1);answer=0;}elseif(P2_2==0){disp(2);answer=0;}elseif(P2_3==0){disp(3);answer=0;}}}}while(1)單片機控制系統(tǒng)的設(shè)計與制作試題3

某企業(yè)承擔(dān)用單片機實現(xiàn)雙路防盜聲光報警器的電氣控制系統(tǒng)的設(shè)計與制作任務(wù),其原理如下圖1所示。設(shè)計要求:正常時SW1為斷開狀態(tài),SW2為閉合狀態(tài)。當(dāng)小偷翻窗入室,會導(dǎo)致SW1閉合或SW2斷開時,同時啟動聲光報警:直流蜂鳴器(BUZZER)通電發(fā)聲,LED1與LED2交替閃亮,交替時間為0.5秒(時間精度不作嚴格要求),即BUZ1連續(xù)發(fā)出聲音,同時LED1亮?xí)r,LED2滅,LED1滅時,LED2亮。單片機控制系統(tǒng)的設(shè)計與制作試題3單片機的程序設(shè)計課件#include<REGX52.H>sbitkey1=P0^0;sbitkey2=P0^1;sbitled1=P0^2;sbitled2=P0^3;sbitfengmingqi=P0^4;voiddelay(unsignedinta){// unsignedinti; while(--a){ for(i=0;i<600;i++); } }#include<REGX52.H>main(){fengmingqi=0;while(1){ if(key1==0||key2==1) { fengmingqi=1; led1=0; led2=1; delay(50); led1=1; led2=0; delay(50); } if(key1==1&&key2==0) { fengmingqi=0; led1=1; led2=1;} }}main()C51數(shù)據(jù)類型與標(biāo)準C數(shù)據(jù)類型的最大不同之處:位型。位型(bit)字符型(char)整型(int)長整型(long)浮點型(float)雙精度浮點型(double)數(shù)組類型(array)結(jié)構(gòu)體類型(struct)共用體(union)枚舉(enum)基本類型構(gòu)造類型指針類型空類型數(shù)據(jù)類型2.3C51數(shù)據(jù)類型與運算C51數(shù)據(jù)類型與標(biāo)準C數(shù)據(jù)類型的最大不同之處:位型。位型(b2.3.1常量與變量常量是指在程序執(zhí)行過程中其值不能改變的量。在C51中支持整型常量、浮點型常量、字符型常量和字符串型常量。變量是在程序運行過程中其值可以改變的量。一個變量由兩部分組成:變量名和變量值。變量必須先定義,后使用。位類型bit:位類型是C51編譯器的一種擴充數(shù)據(jù)類型。利用它可以定義一個位類型變量,其值是一個二進制位,只有0或1。2.3.1常量與變量常量是指在程序位類型符有兩個:bit和sbit。可以定義兩種位變量。bit位類型符用于定義一般的可位處理位變量。它的格式如下:bit位變量名;在格式中可以加上各種修飾,但注意存儲器類型只能是bdata、data、idata。只能是片內(nèi)RAM的可位尋址區(qū),嚴格來說只能是bdata。【例】bit型變量的定義。 bitdataa1;/*正確*/ bitbdataa2;/*正確*/ bitpdataa3;/*錯誤*/ bitxdataa4;/*錯誤*/位類型符有兩個:bit和sbit??梢远x兩種位變量sbit位類型符用于定義在可位尋址字節(jié)或特殊功能寄存器中的位,定義時須指明其位地址,可以是位直接地址,可以是可位尋址變量帶位號,也可以是特殊功能寄存器名帶位號。格式如下:sbit位變量名=位地址;如位地址為位直接地址,其取值范圍為0x00~0xff;如位地址是可位尋址變量帶位號或特殊功能寄存器名帶位號,則在它前面須對可位尋址變量或特殊功能寄存器進行定義。字節(jié)地址與位號之間、特殊功能寄存器與位號之間一般用“^”作間隔?!纠縮bit型變量的定義。 sbitOV=0xd2; sbitCY=oxd7; unsignedcharbdataflag; sbitflag0=flag^0; sfrP1=0x90; sbitP1_0=P1^0; sbitP1_1=P1^1; sbitP1_2=P1^2;sbit位類型符用于定義在可位尋址字節(jié)或特殊功能寄存

特殊功能寄存器變量MCS-51系列單片機片內(nèi)有許多特殊功能寄存器,通過這些特殊功能寄存器可以控制MCS-51系列單片機的定時器、計數(shù)器、串口、I/O及其它功能部件,每一個特殊功能寄存器在片內(nèi)RAM中都對應(yīng)于一個字節(jié)單元或兩個字節(jié)單元。在C51中,允許用戶對這些特殊功能寄存器進行訪問,訪問時須通過sfr或sfr16類型說明符進行定義,定義時須指明它們所對應(yīng)的片內(nèi)RAM單元的地址。格式如下:sfr或sfr16特殊功能寄存器名=地址;sfr用于對MCS-51單片機中單字節(jié)的特殊功能寄存器進行定義,sfr16用于對雙字節(jié)特殊功能寄存器進行定義。特殊功能寄存器名一般用大寫字母表示。地址一般用直接地址形式,具體特殊功能寄存器地址見前面內(nèi)容。【例】特殊功能寄存器的定義。sfrPSW=0xD0

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論