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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目2單片機的程序設計 2.1C語言的程序結構2.2C51的運算符及表達式

2.3C51的數據2.4C語言的函數2.5C語言的數組2.6程序設計實例項目2單片機的程序設計 2.1C語言的程單片機的開發實例——點亮一盞LED燈問題描述:通過C語言編程,實現單片機開發板上點亮一盞LED燈。實驗所需軟件:Keil、Progisp實驗步驟:1、熟悉硬件電路2、掌握開發軟件的使用方法3、編寫程序代碼并進行編譯、運行拓展:1、同時點亮幾盞LED燈2、設計流水燈單片機的開發實例——點亮一盞LED燈問題描述:通過C單片機的程序設計課件程序代碼#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語言編譯調試工具效率高,數據類型及運算符豐富,經過不斷完善,能滿足單片機的開發要求,形成了單片機C語言。把51單片機C語言稱為C51語言。用C51編寫單片機程序時,需要根據單片機存儲結構及內部資源定義相應的數據類型和變量,而標準的C語言不需要考慮這些問題。另外,C51包含的數據類型、變量存儲模式、輸入輸出處理、函數等方面與標準的C語言也有一定的區別。其他的語法規則、程序結構及程序設計方法則與標準的C語言相同。1.C51語言C語言編譯調試工具C51語言的特點編程者不需要了解單片機的指令系統,僅要求對單片機的存儲器結構有初步的了解,至于存儲器的分配、尋址方式及數據類型等完全由編譯器管理。程序有規范化的結構,可以分為不同的函數,這種方式可以使程序結構化,將可變的選擇與特殊操作組合在一起,增強程序的可讀性。編程和程序的調試時間顯著縮短,從而提高了編程的效率,提供的庫函數包含許多標準的子程序,具有較強的數據處理能力,可以將編好的程序很容易地移植到新程序。

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

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

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

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

1、while循環語句while語句的一般表達形式為:while(表達式){語句}當表達式的判斷為“真”時,執行大括號內的語句,否則不執行。2.1.3循環結構構成循環結構的主要有while、do-w2、do-while循環語句do-while語句是先執行循環體,然后判斷循環條件是否成立,其一般形式為:do{語句}while(表達式);

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

表達式3

表達式2

表達式1

循環體語句

表達式3表達式2真假表達式1循環體語句【例】流水燈的設計:在單片機的P1.0-P1.7上分別連接8個發光二極管,編程實現8個LED燈循環點亮。程序如下:#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;}}}【例】流水燈的設計:在單片機的P1.0-P1.7上分別連接84、break語句和continue語句

在一個循環語句中,可以通過判斷條件來退出循環,也可以通過break語句來強制退出循環。continue語句用于結束本次循環,即跳過循環體下面的語句,而直接進行下一次是否循環的判斷。【例】單片機的P3.0接開關K1,P3.0接開關K2,要求按下K1后,則從D1開始依次點亮,至D8后停止并全部熄滅;待再次按下K1,重復上面過程;如果中間K2被按下,則燈立即全部熄滅,并返回初始狀態。4、break語句和continue語句在一個循環#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的運算符主要有:算術運算符、關系運算符、邏輯運算符、位運算符、賦值及復合賦值運算符。2.2C51的運算符及表達式2.2.1.賦值運算符和賦值表達式(1)賦值運算符“=”優先級較底,右結合性。(2)賦值表達式一般形式:變量名=表達式

賦值的類型轉換規則:在賦值運算中,當“=”兩側類型不一致時,系統自動將右邊表達式的值轉換成左側變量的類型,再賦值給該變量。如:x=1+9;x=y=5;2.2.1.賦值運算符和賦值表達式

2.2.2算術運算符和算術表達式

(1)基本的算術運算符

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

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

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

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

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

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

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

某企業承擔用單片機實現雙路防盜聲光報警器的電氣控制系統的設計與制作任務,其原理如下圖1所示。設計要求:正常時SW1為斷開狀態,SW2為閉合狀態。當小偷翻窗入室,會導致SW1閉合或SW2斷開時,同時啟動聲光報警:直流蜂鳴器(BUZZER)通電發聲,LED1與LED2交替閃亮,交替時間為0.5秒(時間精度不作嚴格要求),即BUZ1連續發出聲音,同時LED1亮時,LED2滅,LED1滅時,LED2亮。單片機控制系統的設計與制作試題3單片機的程序設計課件#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數據類型與標準C數據類型的最大不同之處:位型。位型(bit)字符型(char)整型(int)長整型(long)浮點型(float)雙精度浮點型(double)數組類型(array)結構體類型(struct)共用體(union)枚舉(enum)基本類型構造類型指針類型空類型數據類型2.3C51數據類型與運算C51數據類型與標準C數據類型的最大不同之處:位型。位型(b2.3.1常量與變量常量是指在程序執行過程中其值不能改變的量。在C51中支持整型常量、浮點型常量、字符型常量和字符串型常量。變量是在程序運行過程中其值可以改變的量。一個變量由兩部分組成:變量名和變量值。變量必須先定義,后使用。位類型bit:位類型是C51編譯器的一種擴充數據類型。利用它可以定義一個位類型變量,其值是一個二進制位,只有0或1。2.3.1常量與變量常量是指在程序位類型符有兩個:bit和sbit。可以定義兩種位變量。bit位類型符用于定義一般的可位處理位變量。它的格式如下:bit位變量名;在格式中可以加上各種修飾,但注意存儲器類型只能是bdata、data、idata。只能是片內RAM的可位尋址區,嚴格來說只能是bdata。【例】bit型變量的定義。 bitdataa1;/*正確*/ bitbdataa2;/*正確*/ bitpdataa3;/*錯誤*/ bitxdataa4;/*錯誤*/位類型符有兩個:bit和sbit。可以定義兩種位變量sbit位類型符用于定義在可位尋址字節或特殊功能寄存器中的位,定義時須指明其位地址,可以是位直接地址,可以是可位尋址變量帶位號,也可以是特殊功能寄存器名帶位號。格式如下:sbit位變量名=位地址;如位地址為位直接地址,其取值范圍為0x00~0xff;如位地址是可位尋址變量帶位號或特殊功能寄存器名帶位號,則在它前面須對可位尋址變量或特殊功能寄存器進行定義。字節地址與位號之間、特殊功能寄存器與位號之間一般用“^”作間隔。【例】sbit型變量的定義。 sbitOV=0xd2; sbitCY=oxd7; unsignedcharbdataflag; sbitflag0=flag^0; sfrP1=0x90; sbitP1_0=P1^0; sbitP1_1=P1^1; sbitP1_2=P1^2;sbit位類型符用于定義在可位尋址字節或特殊功能寄存

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

溫馨提示

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

評論

0/150

提交評論