清華大學(xué)單片機(jī)課堂PPT課件_第1頁
清華大學(xué)單片機(jī)課堂PPT課件_第2頁
清華大學(xué)單片機(jī)課堂PPT課件_第3頁
清華大學(xué)單片機(jī)課堂PPT課件_第4頁
清華大學(xué)單片機(jī)課堂PPT課件_第5頁
已閱讀5頁,還剩87頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一些例子1. LED先奇數(shù)亮,再偶數(shù)亮,循環(huán)3次;從左到右流水燈,從右到左流水燈,循環(huán)3次;兩邊到中間流水燈,中間到兩邊流水燈,循環(huán)3次;8個(gè)LED閃爍3次關(guān)閉LED,停機(jī)2. 數(shù)碼管從左到右流水顯示0-F,-,.3. 帶蜂鳴(滴滴滴)的流水燈第1頁/共92頁4. 數(shù)碼管每隔0.1s顯示765432-765398的值(六位數(shù)) 每隔0.5s流水燈數(shù)碼管顯示結(jié)束,流水燈也停止然后LED開始閃爍3s后LED關(guān)閉,數(shù)碼管顯示HELLO 5. S17每按下一次,數(shù)碼管顯示+16. S1按下,數(shù)碼管顯示0,S2按下,數(shù)碼管顯示1.S16按下,數(shù)碼管顯示F第2頁/共92頁 7. 1602液晶顯示 8. m

2、usic 9. 溫度數(shù)碼管顯示 10. 溫度液晶顯示 11. 繼電器的吸合 12. 步進(jìn)電機(jī) 此外,還有很多,有待你的開發(fā)第3頁/共92頁C51 C語言是嵌入式系統(tǒng)中一種通用的程序設(shè)計(jì)語言 特點(diǎn) 數(shù)據(jù)類型豐富 運(yùn)算符豐富 代碼率高(8051上的C語言的代碼長度,已經(jīng)做到了匯編水平的1.21.5倍。4K字節(jié)以上的程度,C語言的優(yōu)勢更能得到發(fā)揮。 ) 在關(guān)鍵部位還能嵌入?yún)R編語言代碼,從而挖掘程序的最高潛力 第4頁/共92頁C51的優(yōu)勢 應(yīng)用廣泛單片機(jī)、DSP、ARM等 C語言程序本身不依賴于硬件系統(tǒng),更易于移植 C語言有豐富的數(shù)學(xué)函數(shù),支持浮點(diǎn)運(yùn)算 C語言開發(fā)效率高,可讀性強(qiáng),可維護(hù)性強(qiáng)第5頁/共

3、92頁C51相對于ASM51的優(yōu)點(diǎn) 對單片機(jī)的指令系統(tǒng)不需要了解,僅需知道存儲(chǔ)結(jié)構(gòu)即可 寄存器的分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)均由編譯器管理 程序結(jié)構(gòu)化更強(qiáng) 豐富的庫 模塊化編程,移植性強(qiáng)第6頁/共92頁C51的數(shù)據(jù)類型 數(shù)據(jù)類型的作用? 編譯系統(tǒng)為數(shù)據(jù)安排存儲(chǔ)單元,要決定數(shù)據(jù)單元的數(shù)量數(shù)據(jù)類型數(shù)據(jù)類型長度(長度(bit)長度(長度(byte)值域范圍值域范圍bit10,1unsigned char810255signed char81128127unsigned int162065535signed int162 3276832767unsigned long324042949672

4、95signed long3242147483648 +2147483647 float3241.176E-383.40E+383.40E+38一般指針一般指針243存儲(chǔ)空間存儲(chǔ)空間065535第7頁/共92頁C51數(shù)據(jù)存儲(chǔ)類型數(shù)據(jù)存儲(chǔ)類型存儲(chǔ)類型存儲(chǔ)類型與存儲(chǔ)空間的對應(yīng)關(guān)系與存儲(chǔ)空間的對應(yīng)關(guān)系datadata直接尋址片內(nèi)數(shù)據(jù)直接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),訪問速度快(存儲(chǔ)區(qū),訪問速度快(128128字節(jié))字節(jié))bdatabdata可可位尋址片內(nèi)數(shù)據(jù)位尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),允許位與字節(jié)混合訪問(存儲(chǔ)區(qū),允許位與字節(jié)混合訪問(1616字節(jié))字節(jié))idataidata間接尋址片內(nèi)數(shù)據(jù)間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),

5、可訪問片內(nèi)全部存儲(chǔ)區(qū),可訪問片內(nèi)全部RAMRAM地址空間(地址空間(256256字節(jié))字節(jié))pdatapdata分頁尋址片外數(shù)據(jù)分頁尋址片外數(shù)據(jù)存儲(chǔ)區(qū)(存儲(chǔ)區(qū)(256256字節(jié)),由字節(jié)),由MOVX RiMOVX Ri訪問訪問xdataxdata尋址片外數(shù)據(jù)尋址片外數(shù)據(jù)存儲(chǔ)區(qū)(存儲(chǔ)區(qū)(64K64K字節(jié)),有字節(jié)),有MOVX DPTRMOVX DPTR訪問訪問codecode尋址代碼尋址代碼存儲(chǔ)區(qū)(存儲(chǔ)區(qū)(64K64K字節(jié)),有字節(jié)),有MOVC A+DPTRMOVC A+DPTR訪問訪問第8頁/共92頁C51數(shù)據(jù)存儲(chǔ)類型的擴(kuò)充數(shù)據(jù)存儲(chǔ)類型的擴(kuò)充C51定義SFR定義方法:兩個(gè)關(guān)鍵字:sfr和

6、sbit1.定義特殊功能寄存器用sfrsfr PSW=0 xD0;/*定義程序狀態(tài)字PSW的地址為D0H*/sfr TMOD=0 x89;/*TMOD的地址為89H*/sfr P1=0 x90;/*定義P1口的地址為90H*/2.定義可位尋址的特殊功能寄存器的位用sbitsbit CY=0 xD7;/*定義進(jìn)位標(biāo)志CY的地址為D7H*/sbit AC=0 xD06;/*定義輔助進(jìn)位標(biāo)志AC的地址為D6H*/sbit RS0=PSW3;/*定義RS0的地址為D3H*/ 第9頁/共92頁bit和sbit的不同 sbit要在函數(shù)最外面定義,就是說必須定義成外部變量. bit可以在函數(shù)內(nèi)部定義,也可以

7、在函數(shù)外部定義 sbit定義的是SFR(特殊功能寄存器)中可位尋址的某一位 sbit aa=P10; bit是一個(gè)數(shù)據(jù)類型,定義了位變量,在編譯時(shí),動(dòng)態(tài)分配1位的空間 bit cc=1; 第10頁/共92頁C51的運(yùn)算符1.算術(shù)運(yùn)算符 模運(yùn)算或取余運(yùn)算符為自增運(yùn)算符 為自減運(yùn)算符。+i是先加后使用,i+是先使用后加 main() int i,j; i=5; j=i+; printf(%d,%d,i,j); main() int i,j; i=5; j=+i; printf(%d,%d,i,j); 第11頁/共92頁 關(guān)系運(yùn)算符 小于 小于等于 大于 大于等于 等于! 不等于前4個(gè)優(yōu)先級(jí)高,后兩

8、個(gè)低 邏輯運(yùn)算符 & 邏輯與| 邏輯或! 邏輯非第12頁/共92頁 位運(yùn)算符 & 按位與相當(dāng)于ANL指令| 按位或 相當(dāng)于ORL指令按位異或 相當(dāng)于XRL指令 按位取反 左移(補(bǔ)0) P2=P2=2; 右移(補(bǔ)0) 第13頁/共92頁 賦值運(yùn)算符 賦值運(yùn)算符就是賦值符號(hào)“=” 復(fù)合賦值運(yùn)算符 十種:, , , , ,。按優(yōu)先級(jí)順序結(jié)合運(yùn)算。例如:a+=b 等價(jià)于a=(a+b)x*=a+b 等價(jià)于x=(x*(a+b)a&=b 等價(jià)于a=(a&b)a=4 等價(jià)于a=(a=1) c=10; else if (a=2) c=20; else if (a=3) c=30;

9、 else if (a=4) c=40; else c=0; a=3,c=?第16頁/共92頁 switch/case語句switch/case語句的一般形式如下:switch(表達(dá)式) case 常量表達(dá)式1:語句1; break;case 常量表達(dá)式2:語句2; break;case 常量表達(dá)式n:語句n; break;default :語句n+1;第17頁/共92頁;表達(dá)式循環(huán)體假(0)真(非0)while二循環(huán)語句第18頁/共92頁第19頁/共92頁 do循環(huán)體表達(dá)式假(0)真(非0)while第20頁/共92頁 2循環(huán)體假(0)真(非0)for13第21頁/共92頁 第22頁/共92

10、頁 一般,發(fā)光二極管的點(diǎn)亮電流為3mA10mA LED的壓降為1.7V(紅),2V(黃),2.2V(綠)點(diǎn)亮1個(gè)LED 電路原理圖+5V1.7V3.3V1K300 第23頁/共92頁點(diǎn)亮1個(gè)LED 電路原理圖8位雙向總線驅(qū)動(dòng)器 DIR=1,數(shù)據(jù)ABDIR=0,數(shù)據(jù)BA第24頁/共92頁第25頁/共92頁點(diǎn)亮一個(gè)LED方法1:對P2操作#includevoid main() P2=0 xfe; 方法方法2:對:對P20操作操作#includesbit P20=P20; void main() P20=0; 第26頁/共92頁1個(gè)LED的閃爍對P2操作#includevoid main() P2=

11、0 xfe; P2=0 xff; 現(xiàn)象:中度點(diǎn)亮LED要實(shí)現(xiàn)閃爍,必須加延時(shí)操作#include#define uint unsigned intvoid main() while(1) /刪去試試uint a;P2=0 xfe;a=51000; /選取 半秒while(a-); P2=0 xff;a=51000;while(a-); 第27頁/共92頁8個(gè)LED的閃爍#include#define uint unsigned intvoid main() uint a;P2=0 x00;a=51000;while(a-); P2=P2;a=51000;while(a-); 第28頁/共92頁

12、讀程序,分析現(xiàn)象#includevoid main() P2=0 xfe;while(1)P2=P21; 第29頁/共92頁#includevoid main() P2=0 xfe;while(1)unsigned int a; /注意P2=P21;a=10000;while(a-); 逐個(gè)點(diǎn)亮LED究竟逐個(gè)點(diǎn)亮LED了嗎?第30頁/共92頁流水燈方法1#include#define uint unsigned intvoid main()code uint pp9=0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; uint i,a;

13、 while(1) for(i=0;i9;i+) P2=ppi;a=51000;while(a-);第31頁/共92頁流水燈 利用語句a=_crol_(a,b)#include#include#define uchar unsigned char uchar a;void main() P2=0 xfe; while(1) P2=_crol_(P2,1); a=51000;while(a-); 延時(shí)語句的位置合理否?第32頁/共92頁延時(shí)函數(shù)void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=56;y0;y-) ; void main() P2=

14、0 xfe; while(1) delay(1000); P2=_crol_(P2,1); 第33頁/共92頁函數(shù)的定義 一般格式合法標(biāo)識(shí)符函數(shù)返回值類型缺省int型無返回值void函數(shù)體函數(shù)類型 函數(shù)名(形參類型說明表)說明部分語句部分現(xiàn)代風(fēng)格: :例 有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x,int y) int z; z=xy?x:y; return(z); 例 有參函數(shù)(傳統(tǒng)風(fēng)格) max(x,y) int x,y; int z; z=xy?x:y; return(z);例 空函數(shù) void dummy( ) 函數(shù)體為空例 無參函數(shù) void printstar( ) prin

15、tf(“*n”); 第34頁/共92頁第35頁/共92頁 形參與實(shí)參 形式參數(shù):定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名 實(shí)際參數(shù):調(diào)用函數(shù)時(shí)函數(shù)名后面括號(hào)中的表達(dá)式c=max(a,b);(main 函數(shù))(max 函數(shù))max(int x, int y) int z; z=xy?x:y; return(z); 例例 比較兩個(gè)數(shù)并輸出大者比較兩個(gè)數(shù)并輸出大者main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);int max(int x, int y) int z; z=xy?x:y; return

16、(z);形參實(shí)參第36頁/共92頁說明:說明:實(shí)參必須有確定的值實(shí)參必須有確定的值形參必須指定類型形參必須指定類型形參與實(shí)參形參與實(shí)參類型一致,個(gè)數(shù)相同類型一致,個(gè)數(shù)相同若形參與實(shí)參類型不一致,自動(dòng)按形參若形參與實(shí)參類型不一致,自動(dòng)按形參類型轉(zhuǎn)換類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換形參在函數(shù)被調(diào)用前不占內(nèi)存形參在函數(shù)被調(diào)用前不占內(nèi)存; ;函數(shù)調(diào)用函數(shù)調(diào)用時(shí)為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋時(shí)為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放放第37頁/共92頁從左到右流水燈,從右到左流水燈,熄滅,閃爍5次,重復(fù)void main() while(1) uint i;P2=0 xfe; /1for(i=0;i7;i+

17、) P2=_crol_(P2,1); delay(1000);P2=0 x7f; /2for(i=0;i7;i+)P2=_cror_(P2,1);delay(1000);P2=0 xff;for(i=0;i5;i+) /3 P2=0 x00;delay(1000);P2=0 xff;delay(1000);1: 必須要加延時(shí),不然第一個(gè)LED的點(diǎn)亮,觀察不到2:可以不要此條語句3:可以改成for(i=0;i10;i+)P2=P2;delay(1000);第38頁/共92頁例:1個(gè)LED流水,2個(gè)LED流水。8個(gè)LED流水,重復(fù)void main()uint i,j; while(1) P2=0

18、 xfe;delay(1000);for(i=1;i9;i+) for(j=1;ji;j+)P2=0 xfe; delay(1000); /1P2=_crol_(P2,1); delay(1000); 1:此行應(yīng)該放在第一個(gè)for循環(huán)中,才能實(shí)現(xiàn)每次的復(fù)位操作第39頁/共92頁 先奇數(shù)亮,再偶數(shù)亮,循環(huán)先奇數(shù)亮,再偶數(shù)亮,循環(huán)3 3次;次;從左到右流水燈,從右到左流水燈,循環(huán)從左到右流水燈,從右到左流水燈,循環(huán)3 3次;次;兩邊到中間流水燈,中間到兩邊流水燈,循環(huán)兩邊到中間流水燈,中間到兩邊流水燈,循環(huán)3 3次;次;8 8個(gè)個(gè)LEDLED閃爍閃爍3 3次次關(guān)閉關(guān)閉LEDLED,停機(jī),停機(jī)第40

19、頁/共92頁#include#include#define uint unsigned int #define uchar unsigned char void delay(uint z)uint x,y; for(x=z;x0;x-)for(y=56;y0;y-); void main() uchar temp; unsigned int i,j; for(j=0;j3;j+) /先奇數(shù)亮,再偶數(shù)亮 P2=0 xaa;delay(1000); P2=0 x55;delay(1000); 第41頁/共92頁for(j=0;j3;j+) /流水3次 temp=0 xfe;P2=temp;dela

20、y(1000); for(i=0;i7;i+) /從左到右流水燈 temp=_crol_(temp,1); P2=temp; delay(1000); temp=0 x7f;P2=temp; delay(1000); for(i=0;i7;i+) /從右到左流水燈 temp=_cror_(temp,1); P2=temp; delay(1000); 第42頁/共92頁for(j=0;j3;j+) /兩邊到中間 P2=0 x7e;delay(1000); P2=0 xbd;delay(1000); P2=0 xdb;delay(1000); P2=0 xe7;delay(1000); for(j

21、=0;j3;j+) /中間到兩邊 P2=0 xe7;delay(1000); P2=0 xdb;delay(1000); P2=0 xbd;delay(1000); P2=0 x7e;delay(1000); 第43頁/共92頁for(i=0;i3;i+) /全部閃爍3次 P2=0 x00;delay(1000); P2=0 xFF;delay(1000); P2=0 xff; /關(guān)閉LED while(1); /停機(jī)第44頁/共92頁Eg.改正下列錯(cuò)誤#includemain()a=c;int a=7,c;delay(10)void delay(); char i;for(i=0;i=255

22、;i+);#includevoid delay(char zz) char i;for(i=zz;i=255;i+);void main()int a=7,c;a=c;delay(10);第45頁/共92頁Eg.定義變量a,b,c a為內(nèi)部RAM的可位尋址區(qū)的字符變量 bdata char a; b為外部數(shù)據(jù)存儲(chǔ)區(qū)浮點(diǎn)型變量 xdata float b; c為指向xdata區(qū)的int型指針 xdata int *c; 第46頁/共92頁C51對存儲(chǔ)器和外接I/O口的絕對地址訪問 1.對存儲(chǔ)器的絕對地址訪問 利用頭文件absacc.h CBYTE(訪問code區(qū)char型) CWORD(訪問co

23、de區(qū)int型) DBYTE(訪問data區(qū)char型) DWORD(訪問data區(qū)int型) PBYTE(訪問pdata區(qū)char型) PWORD(訪問pdata區(qū)int型) XBYTE(訪問xdata區(qū)char型) XWORD(訪問xdata區(qū)int型)第47頁/共92頁 例: XWORD0=0 x9988; 即將9988H(int類型)送入外部RAM的0號(hào)和1號(hào)單元。 使用中要注意: absacc.h一定要包含進(jìn)程序。 CBYTE、DBYTE、XBYTE等函數(shù)名必須大寫。2.對外部I/O口的訪問 由于單片機(jī)的I/O口和外部RAM統(tǒng)一編址,因此對I/O口地址的訪問可用XBYTE(MOVX

24、DPTR )或PBYTE(MOVX Ri)進(jìn)行。第48頁/共92頁編程將8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中(位置不定) #include #include #define uint unsigned int void main() uint aa,bb; xdata uint result; aa=DBYTE0 x20; bb=DBYTE0 x35; result =aa*bb; 思考:結(jié)果存到哪里去了 ?n若改成 xdata uchar result;結(jié)果存放相同嗎?第49頁/共92頁指針變量說明舉例例如 long code * xdata p

25、x; /*和上面定義等同*/px為指針型變量被指向的存貯器的數(shù)據(jù)類型為長型px指向程存貯器px自身在外部數(shù)據(jù)存貯器中l(wèi)ongxdatacode*px ;第50頁/共92頁data char xdata *pd; /*與上例等效*/例如 long xdata *px; /*指針變量px指向long型xdata區(qū)(被指的數(shù)據(jù)在 xdata區(qū),每個(gè)數(shù)據(jù)占四個(gè)單元,指針自身在默認(rèn)存貯器(如不指定編譯模式在data區(qū)),指針長度為2個(gè)字節(jié)*/ 例如例如 char xdata *data pd; /* 指針變量指針變量pd指向字符型指向字符型xdata區(qū),自身在區(qū),自身在data區(qū),長度區(qū),長度2字節(jié)字節(jié)

26、*/ 第51頁/共92頁 說明: 1.” * ”號(hào)不可少,它表示變量為指針變量。 2.指針變量說明格式中的 為可選項(xiàng) 如 被指存貯類型 缺省,則指針定義為通用型 如 指針變量存貯類型 缺省、指針變量則存放在默認(rèn) 存貯區(qū)或者在data區(qū)。第52頁/共92頁 如果指針可指向任何存貯空間,指針定義為通用型指針, 表示此時(shí)指針長度為3字節(jié)第一字節(jié)第一字節(jié)第二字節(jié)第二字節(jié)第三字節(jié)第三字節(jié)存貯類型編碼存貯類型編碼所指地址的高八位所指地址的高八位所指地址的低八位所指地址的低八位存貯器類型存貯器類型idataxdatapdatadatacode編編 碼碼(v4.0)12345編編 碼碼(v5.0)001-2-

27、1通用型指針的存貯類型編碼如下:通用型指針的存貯類型編碼如下:第53頁/共92頁表中v4.0、v5.0表示 C51的版本例如指針變量px值為0 x021203 (v4.0版)或?yàn)? x001203 (v5.0版) 即指針指向xdata 區(qū)的1203H地址單元。如: char *pd; /* pd 定義為通用型指針*/第54頁/共92頁指向數(shù)組的指針變量如果用一個(gè)變量存放一個(gè)數(shù)組的地址,這個(gè)變量就稱為指向數(shù)組的指針變量.數(shù)組的起始地址稱為數(shù)組指針,一個(gè)數(shù)組a 的起始地址用a表示。指向數(shù)組的指針變量的定義和賦值 設(shè)定義了一個(gè)數(shù)組a5和一個(gè)指針變量ap: char data a5; char dat

28、a *ap; 僅此兩句并不能說明變量ap是指向數(shù)組的,還必須將數(shù)組的起始地址賦給該變量:第55頁/共92頁 ap=a; /*數(shù)組a 的起始地址賦給指針變量ap*/或 ap=&a0; /*意義同上*/也可以使定義和賦值在一條語句完成: char data *apa;或 char data * ap=&a0;2) 利用指向數(shù)組的指針變量引用數(shù)組元素 指向數(shù)組的指針變量引用數(shù)組元素有兩種方法: *(ap+i) 或 ap(i) ,它們等同于*(a+i)或a (i) 第56頁/共92頁例main() char a5=11,22,33,44,55; char b,c,d; char *ap

29、; ap=a; /* ap等于數(shù)組a5的起始地址*/ b=a+2; /* b等于數(shù)組元素a2的地址 */ c=ap+3; /* c等于數(shù)組元素a3的地址 */ d=*(ap+3); /* d等于數(shù)組元素a3的值, 即d=44 ,等同于d=a (3) */ 第57頁/共92頁編程將8051的內(nèi)部數(shù)據(jù)存儲(chǔ)器20H單元和35H單元的數(shù)據(jù)相乘,結(jié)果存到外部數(shù)據(jù)存儲(chǔ)器中(位置不定)#includevoid main()int data *point1=0 x20; int data *point2=0 x35; xdata int result; result=(*point1)*(*point2);第

30、58頁/共92頁用并行口設(shè)計(jì)用并行口設(shè)計(jì)LEDLED數(shù)碼顯示器數(shù)碼顯示器 和鍵盤電路和鍵盤電路 鍵盤和顯示器是單片機(jī)應(yīng)用系統(tǒng)中常用的輸入輸出裝置。 LED數(shù)碼顯示器是常用的顯示器之一 下面介紹用單片機(jī)并行口設(shè)計(jì)LED數(shù)碼顯示電路和鍵盤電路的方法。 第59頁/共92頁用并行口設(shè)計(jì)LED顯示電路1. LED顯示器及其原理 LED有著顯示亮度高,響應(yīng)速度快的特點(diǎn),最常用的是七段式LED顯示器,又稱數(shù)碼管。 七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。 常見LED的管腳排列見圖5.4(a)。其中COM為公共點(diǎn),根據(jù)內(nèi)部發(fā)光二極管的接線形式,可分成共陰極

31、型圖(5.4(b)和共陽極型圖(5.4(c)。 第60頁/共92頁a ab bc cd de ef fg gdpdp(a)(b)共陰極型(c)共陽極型cdedp12345678910a bfgcomcomabcefabcdefgdpcomcom圖5.45.4gd第61頁/共92頁 0 0 1 1 1 1 1 1 3fh dp g f e d c b a LEDLED數(shù)碼管的數(shù)碼管的g ga a七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不能發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之而不能發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字

32、形碼為字形碼( (段碼段碼) )a ab bc cd de ef fg gdpdpcdedp12345678910a bfgcomcomabcefcomgd如顯示如顯示”0 0”, ,字形碼為字形碼為3fh.3fh.第62頁/共92頁a ab bc cd de ef fg gdpdp12345678910a bfgcomcomabcefgx g f e d c b a 0 0 0 0 0 1 1 0 06h 顯示”1”,字形碼為06h.d第63頁/共92頁顯示顯示”2”,字形碼為字形碼為5bh.x g f e d c b a 0 1 0 1 1 0 1 1 5bh dpcoma ab bc c

33、d de ef fg gdpdpcde12345678910comcomabcefgd第64頁/共92頁顯示字符顯示字符段符號(hào)段符號(hào)共陰共陰共陽共陽03FH C0 106H F9 25BH A4 34FH B0 466H 9956DH 9267DH 82707H F8 87FH 8096FH 90A 77H 88B 7CH 83C 39H C6 D 5EH A1 E 79H 86F 71H 84H 76H FF P F3H BF 顯然共陽極和共陰極的字形碼是不同的 ,其字形碼見表第65頁/共92頁 2.LED數(shù)碼管的接口 數(shù)碼管的接口有靜態(tài)接口和動(dòng)態(tài)接口。 靜態(tài)接口為固定顯示方式,無閃爍,其電

34、路可采用一個(gè)并行口接一個(gè)數(shù)據(jù)管,數(shù)碼管的公共端按共陰或共陽分別接地或Vcc。這種接法占用接口多,如果PO口和P2口要用作數(shù)據(jù)線和地址線,僅用單片機(jī)的并行口就只能接二個(gè)數(shù)碼管。 動(dòng)態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示頻率較高時(shí),利用人眼的暫留特性 ,看不出閃爍顯示現(xiàn)象,這種顯示需要一個(gè)接口完成字形碼的輸出(字形選擇),另一接口完 成各數(shù)碼管的輪流點(diǎn)亮(數(shù)位選擇)。 第66頁/共92頁原理圖第67頁/共92頁P(yáng)10P11P12000 111S11S14S21S24位選P20 P27DP20DP27a b c d e f g dp段選第68頁/共92頁Eg.Eg.左邊第二個(gè)數(shù)碼管顯示左邊

35、第二個(gè)數(shù)碼管顯示0F,0F,熄滅,停機(jī)熄滅,停機(jī)nuchar code duma=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,0 x00; /數(shù)值數(shù)值0F 熄滅熄滅第69頁/共92頁void delay(uchar zz)uchar x,y;for(x=zz;x0;x-)for(y=56;y0;y-);void main() uchar i; P1=0 x01; for(i=0;i17;i+) P2=dumai;delay(1000); while

36、(1);有什么問題?第70頁/共92頁從左到右流水燈,從右到左流水燈,熄滅,閃爍5次,重復(fù)void main() while(1) uint i;P2=0 xfe; /1for(i=0;i7;i+) P2=_crol_(P2,1); delay(1000);P2=0 x7f; /2for(i=0;i7;i+)P2=_cror_(P2,1);delay(1000);P2=0 xff;for(i=0;i5;i+) /3 P2=0 x00;delay(1000);P2=0 xff;delay(1000);1: 必須要加延時(shí),不然第一個(gè)LED的點(diǎn)亮,觀察不到2:可以不要此條語句3:可以改成for(i=

37、0;i10;i+)P2=P2;delay(1000);第71頁/共92頁/李今鳴void delay(uint x)uint i,k; for(i=0;ix;i+) for(k=0;k60;k+); void main() char i,j,k; P2=0 xff; delay(1000); P2=0 xfe; delay(1000); for(i=0;i7;i+) P2=(P21)|1; delay(1000); for(j=0;j1)|0 x80; delay(1000); P2=0 xff; delay(1000); for(k=0;k10;k+) P2=P2; 第72頁/共92頁Eg.

38、Eg. 數(shù)碼管流水顯示數(shù)碼管流水顯示0F,0F,熄滅熄滅uint code weix=0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0;void main() uint i; for(i=0;i17;i+) P1=weixi;P2=dumai;delay(1000); 第73頁/共92頁/陳前雪#includevoid delay(int a) while(a-);int i;unchar code tab16=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c,

39、 0 x39, 0 x5e, 0 x79, 0 x71, 0 x76, 0 x73 ;void main() while(1) for(i=1;i16;i+) P1=i%8; P2=tabi;delay(51000);第74頁/共92頁數(shù)碼管顯示temp中的值(兩位數(shù))void main() uint temp=13; uint ge,shi; while(1) shi=temp/10; ge=temp%10;P1=weix0;P2=dumashi;delay(10);P1=weix1;P2=dumage;delay(10);不加延時(shí)語句會(huì)是什么現(xiàn)象?動(dòng)態(tài)顯示動(dòng)態(tài)顯示第75頁/共92頁寫一個(gè)函

40、數(shù),調(diào)用它顯示一個(gè)3位數(shù)void display(uint temp)uint ge,shi,bai;ge=temp%10;shi=temp%100/10;bai=temp/100;P1=weix0;P2=dumabai;delay(10);P1=weix1;P2=dumashi;delay(10);P1=weix2;P2=dumage;delay(10);第76頁/共92頁void main() uint num=123; while(1) display(num);第77頁/共92頁加1顯示器(000999)void main() uint num=0; while(1) if(num=1

41、000) num=0; display(num); delay(1000); num+;什么現(xiàn)象?十位,百位閃爍的厲害刷新頻率不夠第78頁/共92頁正確思路void main() uint num=0,time; while(1) for(time=0;time10;time+)display(num);/通過循環(huán)延時(shí) num+; if(num=1000) num=0;第79頁/共92頁作業(yè): 用動(dòng)態(tài)掃描方式,顯示12345678 用動(dòng)態(tài)掃描方式,顯示10009999第80頁/共92頁用并行口設(shè)計(jì)鍵盤電路 鍵盤是計(jì)算機(jī)系統(tǒng)中不可缺少的輸入設(shè)備,當(dāng)按鍵少時(shí)可接成線性鍵盤LEDLED+5 5V V

42、VccVcc-EAEARSTRST1010uF uF 1 1K KP2.0P2.08989S51S51P1.0P1.01 1K K3030P P3030P PXTAL1XTAL1XTAL2XTAL2GNDGND8989C51C51+5 5V VVccVcc-EAEARSTRST1010uF uF 1 1K K8989S51S51+5+5V V1 1K K3030P P3030P PXTAL1XTAL1XTAL2XTAL2GNDGND8989C51C51S19S19第81頁/共92頁 獨(dú)立鍵盤的檢測: 先給對應(yīng)I/O口P10賦1,然后讀取I/O口P10的狀態(tài)值 如果P10=0,則按鍵按下 否則,

43、未按下 寫程序完成按下S19,點(diǎn)亮第一個(gè)LED(P20控制)sbit P10=P10;sbit P20=P20;void main()P10=1; while(1) if(P10=0) P20=0;else P20=1; 第82頁/共92頁S17(與P32相連)每按下一次,數(shù)碼管顯示+1(09)sbit key1=P32;uint num=0;void main()P1=0 x02; P2=duma0; while(1) if(key1=0)/確定按鍵是否按下 num+; if(num=10) num=0; P2=dumanum; 什么現(xiàn)象?為什么?按下次數(shù)不能確定怎么解決?加松手判斷if(key1=0)if(key1=1)num+;if(num=10)num=0;P2=dumanum; 第83頁/共92頁鍵盤的抖動(dòng)干擾鍵盤的抖動(dòng)干擾 由于機(jī)械觸點(diǎn)的彈性振動(dòng),按鍵在按下時(shí)不會(huì)馬上穩(wěn)定地接通而在彈起時(shí)也不能一下子完全地?cái)嚅_,因而在按鍵閉合和斷開的瞬間均會(huì)出現(xiàn)一連串的抖動(dòng),這稱為按鍵的抖動(dòng)干

溫馨提示

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

評(píng)論

0/150

提交評(píng)論