版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、任務(wù)六 帶時(shí)間顯示的交通燈,任課教師:李靖,教學(xué)內(nèi)容 單片機(jī)控制數(shù)碼管 數(shù)組 教學(xué)目標(biāo)掌握數(shù)碼管的控制方法掌握數(shù)組的應(yīng)用,本任務(wù),1.LED顯示器結(jié)構(gòu) LED顯示器內(nèi)部由多個(gè)發(fā)光二極管組成。,,6.1 單片機(jī)控制數(shù)碼管顯示 ?。瓎蝹€(gè)LED數(shù)碼顯示的控制,顯示字形與字段碼關(guān)系,a,,,字形,字段碼,,2.字形與字段碼,LED數(shù)碼管顯示字形與字段碼關(guān)系,舉例:單個(gè)數(shù)碼管與P1口接口電路,單個(gè)數(shù)碼管顯示單一數(shù)字如何編程實(shí)現(xiàn)
2、?例如:顯示0,--單個(gè)LED數(shù)碼顯示的控制,實(shí)現(xiàn)交替顯示1、2兩個(gè)數(shù)字呢?,3.LED數(shù)碼顯示方式及控制電路,,--多LED數(shù)碼顯示的控制,1)靜態(tài)顯示方式,2)動態(tài)顯示方式,(1)靜態(tài)顯示方式,74LS373,74ls373是常用的三態(tài)輸出的八 D 鎖存器輸出端 O0~O7 可直接與總線相連。 當(dāng)三態(tài)允許控制端 OE 為低電平時(shí),Q0~Q7為正常邏輯狀態(tài),可用來驅(qū)動負(fù)載或總線。當(dāng) OE 為高電平時(shí),Q0~Q7 呈高阻態(tài).當(dāng)鎖存
3、允許端 LE 為高電平時(shí),Q 隨數(shù)據(jù) D 而變。當(dāng) LE 為低電平時(shí),D 被鎖存在已建立的數(shù)據(jù)電平。真值表:,3.LED數(shù)碼顯示方式及電路,特點(diǎn): 所有位選線(數(shù)碼管公共端)連接在一起,每個(gè)數(shù)碼管必須接一個(gè)8位鎖存器用來鎖存待顯示的字形碼。送入一次字形碼顯示字形一直保持,直到送入新字形碼為止。優(yōu)點(diǎn):占用CPU時(shí)間少,顯示便于監(jiān)測和控制。缺點(diǎn):硬件電路比較復(fù)雜,成本較高。靜態(tài)顯示接口電路有許多種,,(1)靜態(tài)顯示方式:,字段碼,位
4、選線,三個(gè)數(shù)碼管分別顯示0、1、2數(shù)字?,并行口靜態(tài)顯示電路,字段碼,0,0,,位選線,,,(2) 4位LED動態(tài)顯示電路,輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時(shí)都在顯示。,(2)動態(tài)顯示,特點(diǎn):將所有數(shù)碼管的段選線并聯(lián)在一起,通過控制位選信號來控制數(shù)碼管的點(diǎn)亮。數(shù)碼管采用動態(tài)掃描顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時(shí)應(yīng)略小于靜態(tài)顯示電路中的限流電
5、阻。,(2)動態(tài)顯示方式,三個(gè)數(shù)碼管分別顯示0、1、2數(shù)字?,(2)動態(tài)顯示方式,6.2 數(shù)組--構(gòu)造數(shù)據(jù)類型,什么是數(shù)組,什么是數(shù)組元素,如何表示,數(shù)組的定義,數(shù)組的初始化,數(shù)組元素的引用,6.2 數(shù)組--構(gòu)造數(shù)據(jù)類型,數(shù)組是一種將同類型數(shù)據(jù)集合管理的數(shù)據(jù)結(jié)構(gòu)。,數(shù)組是一種變量,將一組相同數(shù)據(jù)形態(tài)的變量以一個(gè)相同的變量名稱來表示,即數(shù)組名,其中每個(gè)分量稱數(shù)組元素。,既然是變量,使用前必須聲明(定義)。,數(shù)組常用于查表控制,6.2 數(shù)組
6、,數(shù)組中元素按順序存放在一個(gè)連續(xù)的存儲空間中,即最低的地址存放第一個(gè)元素,最高的地址存放最后一個(gè)元素。元素順序用下標(biāo)表示: 數(shù)組名[下標(biāo)],數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式];,定義了一個(gè)一維整形數(shù)組a,10表示有10個(gè)元素:a[0],a[1],a[2],……a[8],a[9],,,定義了一個(gè)一維字符數(shù)組s1,5表示有5個(gè)元素:s1[0],s1[1],s1[2],s1[3],s1[4],1.一維數(shù)組的定義和初始化,6.2 數(shù)組,不同的數(shù)
7、據(jù)類型,為每個(gè)數(shù)組元素預(yù)留的存儲器空間也不相同.對于運(yùn)行時(shí)無需修改的數(shù)組,通常將其定義為code存儲器類型,以節(jié)省數(shù)據(jù)存儲器的空間。,char table[8];,該數(shù)組含有幾個(gè)元素?,各數(shù)組元素如何表示?,編譯器為它們各分配多少存儲單元?,1.一維數(shù)組的定義和初始化,例如:int num[3]={30,21,1};//整數(shù)數(shù)組char LCM[9]=“Testing.”;//此字符數(shù)組相當(dāng)于字符串,注意:字符串的結(jié)尾以“\0”
8、作為結(jié)束符,在定義數(shù)組的同時(shí),為數(shù)組元素賦值,稱為數(shù)組的初始化。,初始化賦值的一般形式:數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式]={值1,值2,…};,6.2 數(shù)組,1.一維數(shù)組的定義和初始化,6.2 數(shù)組,(1)在定義數(shù)組時(shí),對全部數(shù)組元素賦初值此時(shí)可以省略數(shù)組的長度,1.一維數(shù)組的定義和初始化,(2)在定義數(shù)組時(shí),對部分?jǐn)?shù)組元素賦初值,6.2 數(shù)組,1.一維數(shù)組的定義和初始化,6.2 數(shù)組,1.一維數(shù)組的定義和初始化,(3)在對全部數(shù)組元
9、素賦初值時(shí),可以不指定數(shù)據(jù)長度,6.2 數(shù)組,1.一維數(shù)組的定義和初始化,(4)當(dāng)初值的個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)時(shí),編譯出錯(cuò),unsigned char a[10]={1,2,3,4,5};char string1[]=“Welcome to china.”;unsigned char a[]={1,2,3,4,5};unsigned char a[10];,這些數(shù)組定義及初始化合理嗎?若合理各數(shù)組元素的初始化內(nèi)容是什么?若
10、不合理說出理由。,6.2 數(shù)組,1.一維數(shù)組的定義和初始化,,數(shù)組名[下標(biāo)];,下標(biāo)可以是整型常量、整型變量和整型表達(dá)式。,表示引用數(shù)組a中的第2個(gè)元素,表示引用數(shù)組a中的第6個(gè)元素,表示引用數(shù)組a中的第16個(gè)元素,,,,6.2 數(shù)組,2.一維數(shù)組的引用,單個(gè)數(shù)碼管連續(xù)顯示0-9如何編程實(shí)現(xiàn)?,6.2 數(shù)組,1.一維數(shù)組的定義和初始化,#includeunsigned char seg[10]={0xc0,0xf9,0xa4,0xb0
11、,0x99, 0x92,0x82,0xf8,0x80,0x90};void main(){ unsigned int i, j; while(1) { for(i=0;i0;j--); } }},實(shí)例6-2 數(shù)碼管靜態(tài)顯示案例 利用下圖,在三個(gè)數(shù)碼管中分別顯示0~2。,實(shí)例6-2 數(shù)碼管靜態(tài)顯示案例,#includeunsigned char seg[10]={0xc0,0
12、xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void main(){unsigned int i ,ctr=0xfe; P2=0xff;//4個(gè)數(shù)碼管均可送數(shù) for(i=0;i<3;i++) { P0=seg[i];//相應(yīng)段碼被送出到P0 P2=ctr;//ctr中哪一位為0表示相應(yīng)數(shù)碼管被鎖定 ctr<<=1;//右移使數(shù)碼管從第1個(gè)
13、到第3個(gè)依次被鎖 } while(1);},說明:74LS373的LE端為1表示送數(shù),為0表示鎖存,ctr的變化與此相關(guān),實(shí)例6-3 動態(tài)顯示案例 利用下圖實(shí)現(xiàn)從左至右分別顯示0~3共4個(gè)數(shù)字。,實(shí)例6-3 數(shù)碼管動態(tài)顯示,#includeunsigned char seg[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char co
14、n[4]={0xfe,0xfd,0xfb,0xf7};unsigned int i=0;void main(){TMOD=2; TH0=6;TL0=6; EA=1;ET0=1;TR0=1; while(1);},void isr_time0() interrupt 1{ P1=con[i]; P2=seg[i]; i++; if(i==4) i=0;},第十一周上機(jī)任務(wù):,1、某啤酒自動生產(chǎn)線,每
15、檢測一瓶,數(shù)碼管顯示該數(shù)字,檢測到10瓶后重新計(jì)數(shù)顯示(較易),課后準(zhǔn)備程序,實(shí)訓(xùn)課上用proteus演示,檢測信號用按鈕代替。要求:電路圖自行設(shè)計(jì),2、P189 題 6-2(易)3、P189 題 6-3(難),自選一題,演示登記。題目及程序?qū)懺谧鳂I(yè)本上,本周四上機(jī)題目,設(shè)計(jì)一個(gè)電路,要求:1)開關(guān)1閉合,開關(guān)2斷開時(shí),數(shù)碼管顯示數(shù)字1,3,5 ;2)開關(guān)2閉合,開關(guān)1斷開時(shí),數(shù)碼管顯示數(shù)字2,4,6 ;3)開關(guān)1、開關(guān)2均
16、斷開時(shí),數(shù)碼管顯示數(shù)字0,課下準(zhǔn)備程序,上機(jī)用proteus仿真顯示結(jié)果,二維數(shù)組,x[0][0] x[0][1] x[0][2]x[1][0] x[1][1] x[1][2],數(shù)據(jù)類型 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];,,行,列,,int a[3,4], b(3,4);int c[ ][ ], d(3)(4);,6.2 數(shù)組,2.二維數(shù)組的定義和初始化,該數(shù)組含有哪些元素?,(1)分行對二維數(shù)組初始化,int
17、a[2][3]={{1,2,3},{4,5,6}};初始化后: 1 2 3 4 5 6,方法直觀!,6.2 數(shù)組,2.二維數(shù)組的定義和初始化,(2)按數(shù)組排列的順序初始化,數(shù)據(jù)較多時(shí)容易遺漏,不易檢查!,,(3)對全部數(shù)組元素初始化,可省略行號,列號不能省,,int a[ ][3]={1,2,3,4,5,6};初始化后: 1 2
18、 3 4 5 6,,int a[ ][3]={1,2,3,4,5,6,7};結(jié)果: 1 2 3 4 5 6 7 0 0,(4)對部分元素賦初值,int a[2][3]={{1,2},{4}};,等價(jià)于?,結(jié)果: 1 2 0 4 0 0,a[3][4]=3;
19、a[1,2]=1;,數(shù)組名[行下標(biāo)][列下標(biāo)],a[3][4]=3;a[1,2]=1;,引用:,/* 下標(biāo)越界 */,/* a[1][2]=1; */,6.2 數(shù)組,2.二維數(shù)組的引用,這兩個(gè)引用正確?,用二層循環(huán)語句處理數(shù)組,通常外循環(huán)控制行,內(nèi)循環(huán)控制列。,例如:unsigned char a[2][3]={{1,2,3},{4,5,6}};,6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,for(i=0;i<2;i++) for(j
20、=0;j<3;j++) P2=a[i][j];,6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,,很多場所需要用點(diǎn)陣圖形顯示器顯示數(shù)字、字母或漢字,不論顯示圖形還是文字,都是控制組成這些圖形或文字的各個(gè)點(diǎn)所在位置相對應(yīng)的LED器件發(fā)光。通常事先把需要顯示的圖形文字轉(zhuǎn)換成點(diǎn)陣圖形,其顯示方式是先根據(jù)所需要的字符提取字符點(diǎn)陣,將點(diǎn)陣文件存入ROM,形成字符編碼;由字符編碼組成語句;使用時(shí),單片機(jī)按照語句順序提取編碼送出到點(diǎn)陣顯示。
21、LED點(diǎn)陣中要用到的一個(gè)典型數(shù)據(jù)結(jié)構(gòu)就是二維數(shù)組。,數(shù)組中的元素為什么要存入ROM?如何存入ROM?,6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,LED陣列的連接:把同一列陽極連接在一起,同一行的陰極連在一起,6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,先送出發(fā)光管亮滅的數(shù)據(jù)(顯示信號),然后送出列選通信號(掃描信號);一列一列反復(fù)輪回,當(dāng)這樣輪回的速度足夠快時(shí)(每秒24次以上),由于人眼的視覺暫留現(xiàn)象就能看到顯示屏上穩(wěn)定的顯示了。,6.2 數(shù)組,2.
22、二維數(shù)組的應(yīng)用,P10,P11,P12,P13,P14,P15,P16,P30,P30,P30,P30,P30,,每列顯示什么數(shù)據(jù)?,{0x00, 0x42, 0x7f, 0x40, 0x00},6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,P10,P11,P12,P13,P14,P15,P16,P30,P30,P30,P30,P30,,每列顯示什么數(shù)據(jù)?,{0x42,0x61,0x51,0x49,0x46},6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,un
23、signed char code digit_code[10][5]={ {0x3e,0x41,0x41,0x41,0x3e}, {0x00,0x42,0x7f,0x40,0x00}, {0x42,0x61,0x51,0x49,0x46}, {0x22,0x41,0x49,0x49,0x36}, {0x18,0x14,0x12,0x7f,0x10}, {0x27,0x45,0x45,0x45,0x39}, {0x3c,0x4a
24、,0x49,0x49,0x30}, {0x01,0x71,0x09,0x05,0x36}, {0x36,0x49,0x49,0x49,0x36}, {0x06,0x49,0x49,0x29,0x1e}};,由此用二維數(shù)組表示出了能夠顯示0~9的點(diǎn)陣字符編碼:,常用LED陣列有5×7 LED、 5×8 LED、 8×8 LED,6.2 數(shù)組,2.二維數(shù)組的應(yīng)用,常用的驅(qū)動電路:,實(shí)例6-4 用二維數(shù)組實(shí)現(xiàn)
25、LED點(diǎn)陣0~9的顯示,在程序中定義了一個(gè)delay()函數(shù),該函數(shù)是一個(gè)延時(shí),確定了輪流顯示字符時(shí)每個(gè)字符顯示的時(shí)間;定時(shí)器0初始化為24MHz下的4ms中斷,這個(gè)4ms是顯示某個(gè)字符時(shí)每一列顯示的持續(xù)時(shí)間,5列循環(huán)顯示,直到上述的delav()所確定的時(shí)間段耗完,轉(zhuǎn)去顯示下一個(gè)字符。由于Proteus所用的點(diǎn)陣是共陰極的,所以數(shù)組與前述不一致,正好反相。,#includeunsigned char code digit_code
26、[10][5]= { {0x41,0x3e,0x3e,0x3e,0x41}, //0 {0x7f,0x3d,0x00,0x3f,0x7f}, //1 {0x3d,0x1e,0x2e,0x36,0x39}, //2 {0x5d,0x3e,0x36,0x36,0x49}, //3 {0x67,0x6b,0x6d,0x00,0x6f}, //4 {0x58,0x3a,0x3a,0x3a,0x46}, //5 {0
27、x43,0x35,0x36,0x36,0x4f}, //6 {0x7e,0x0e,0x76,0x7a,0x7d}, //7 {0x49,0x36,0x36,0x36,0x49}, //8 {0x79,0x36,0x36,0x56,0x61} //9};unsigned char num=0;unsigned char colm=0;void delay();//用于設(shè)定每個(gè)數(shù)之間顯示的延時(shí)時(shí)間void init_
28、time0();//這是什么函數(shù)?void isr_time0();,void init_time0(){ TMOD = (TMOD&0xf0)|0x01; TL0=-8000; TH0=(-8000)>>8; EA=1; ET0=1; TR0=1;},void main(){init_time0();while(1){ delay(); nu
29、m =(num +1) %10; }} void delay(){ unsigned i,j; for(i=0;i<1000;i++) for(j=0;j<500;j++);},void init_time0(){ TMOD = (TMOD&0xf0)|0x01; TL0=-8000; TH0=(-8000)>>8; EA=1;ET
30、0=1; TR0=1;}void isr_time0() interrupt 1 { TL0=-8000; TH0=(-8000)>>8; colm=(colm+1)%5;P1=digit_code[num][colm];P3=(0x01<<colm);},字符數(shù)組就是存放字符型數(shù)據(jù)的數(shù)組,字符數(shù)組中一個(gè)元素存放一個(gè)字符。,6.2 數(shù)組,3.字符數(shù)組,字符數(shù)組的定義方法:unsigne
31、d char a[10]={‘C’,’5’,’1’};如果大括號中提供的初值個(gè)數(shù)(即字符個(gè)數(shù))大于數(shù)組長度,則作語法錯(cuò)誤處理;如果初值個(gè)數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面的那些元素,其余的元素自動定為空字符(即’\0’);如果提供的初值個(gè)數(shù)與預(yù)定的數(shù)組長度相同,在定義的時(shí)候可以忽略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個(gè)數(shù)確定數(shù)組長度,例如:unsigned char a[10]={‘C’,’5’,’1’};static
32、 char a[]=”Welcome!”static char a[2][3]={{‘h’,’o’,’w’}, {‘w’,’h’,’y’} };,6.2 數(shù)組,3.字符數(shù)組,案例10 設(shè)計(jì)計(jì)時(shí)器,計(jì)時(shí)器:使6位數(shù)碼管具有顯示 時(shí).分.秒. 的功能,晶振12MHz,#includeunsigned char seg[10]={0xc0,0xf9,0xa4,0
33、xb0,0x99, 0x92,0x82,0xf8,0x80,0x90};unsigned char con[6]={0x1,0x2,0x4,0x8,0x10,0x20};unsigned char hh=0; //小時(shí)初值unsigned char mm=0;//分鐘初值unsigned char ss=0;//秒初值unsigned char count=100;//定時(shí)10ms*100=1svoid main()
34、{ TMOD=1; TH0=-10000>>8; TL0=-10000; EA=1;ET0=1;TR0=1; while(1);},案例10 設(shè)計(jì)計(jì)時(shí)器,void isr_time0() interrupt 1{unsigned char i=0, j; unsigned char time[6];TH0=-10000>>8;TL0=-10000;coun
35、t--;if(count==0){ count=100; ss++; if(ss==60) { ss=0; mm++; if(mm==60) { mm=0; hh++; if(hh==24) hh=0; } }},time[0]=hh/10;time[1]=hh%10; time[2]=mm/10;time[3]=mm%10;ti
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c51單片機(jī)03數(shù)碼管
- led數(shù)碼管顯示控制
- 數(shù)碼管課件
- 595驅(qū)動數(shù)碼管
- c51溫度采集控制報(bào)告
- 數(shù)碼管按鍵顯示
- proteus之?dāng)?shù)碼管
- 十?dāng)?shù)碼管與led點(diǎn)陣控制綜合
- 單片機(jī)控制數(shù)碼管顯示程序
- led數(shù)碼管顯示
- 595驅(qū)動數(shù)碼管
- 基于51單片機(jī)的led數(shù)碼管動態(tài)顯示
- c51溫度采集控制報(bào)告
- 數(shù)碼管引腳圖判斷
- c51題答案
- 模塊3-數(shù)碼管顯示接口控制
- 單片機(jī)控制數(shù)碼管顯示數(shù)字
- 單片機(jī)驅(qū)動數(shù)碼管顯示設(shè)計(jì)-c語言
- 基于c51的溫度控制系統(tǒng)
- 數(shù)碼管引腳圖齊全
評論
0/150
提交評論