




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目一智慧校園門禁智能控制
《微處理器程序設(shè)計(jì)》教學(xué)目標(biāo)和技能要求知識(shí)目標(biāo)1、了解微處理器芯片的應(yīng)用場(chǎng)景;2、熟悉實(shí)驗(yàn)平臺(tái),讓微處理器“動(dòng)起來(lái)”;3、掌握微處理器最小系統(tǒng)設(shè)計(jì)以及GPIO控制方法;4、了解矩陣鍵盤工作原理、數(shù)碼管顯示原理;5、掌握C語(yǔ)言中數(shù)組、循環(huán)以及位變量的使用。能力目標(biāo)1、能利用開發(fā)工具進(jìn)行微處理器最小系統(tǒng)電路設(shè)計(jì);2、能利用單片機(jī)的C語(yǔ)言編寫程序控制單個(gè)或多個(gè)LED燈做各類顯示;3、能控制單個(gè)或多個(gè)數(shù)碼管靜態(tài)和動(dòng)態(tài)顯示;4、能利用微處理器的I/O口功能通過(guò)按鍵控制簡(jiǎn)單輸出;5、能利用獨(dú)立鍵盤和矩陣鍵盤控制微處理器輸出;6、能綜合應(yīng)用微處理器的鍵盤接口和顯示接口技術(shù)完成智能門禁系統(tǒng)功能實(shí)現(xiàn);7、能利用微處理拓展技術(shù)設(shè)計(jì)課題。知識(shí)導(dǎo)圖任務(wù)1.1讓LED燈亮起來(lái)任務(wù)目標(biāo)
本任務(wù)培養(yǎng)學(xué)生具備使用Proteus仿真軟件設(shè)計(jì)硬件電路并利用KeiluVision4編程軟件編寫簡(jiǎn)單程序的能力。通過(guò)本任務(wù),學(xué)生能夠設(shè)計(jì)微處理器最小系統(tǒng)以及簡(jiǎn)單的硬件電路,通過(guò)編寫程序控制一個(gè)LED燈亮和滅以及一排LED燈做霓虹燈的顯示效果,并通過(guò)開發(fā)板的驅(qū)動(dòng),下載相關(guān)可執(zhí)行文件,使得開發(fā)板上的LED燈亮起來(lái)。任務(wù)1.1讓LED燈亮起來(lái)知識(shí)準(zhǔn)備1、微處理器最小系統(tǒng)
若要使系統(tǒng)正常運(yùn)行,必須確保單片機(jī)的最小系統(tǒng)穩(wěn)定工作。51單片機(jī)的最小系統(tǒng)由以下幾部分組成:晶振電路、復(fù)位電路、電源電路。時(shí)鐘振蕩電路復(fù)位電路任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施1、微處理器最小系統(tǒng)最小系統(tǒng)電路圖如下:任務(wù)1.1讓LED燈亮起來(lái)知識(shí)準(zhǔn)備一、C51基礎(chǔ)知識(shí)二、KeilC程序的變量使用三、C語(yǔ)言的函數(shù)構(gòu)成1、主函數(shù)的定義voidmain(){//定義變量while(1){//死循環(huán)//循環(huán)體}}
任務(wù)1.1讓LED燈亮起來(lái)知識(shí)準(zhǔn)備2、循環(huán)語(yǔ)句①while循環(huán)while(表達(dá)式){
循環(huán)體}當(dāng)表達(dá)式條件成立,則執(zhí)行循環(huán)體,然后繼續(xù)判斷表達(dá)式條件是否成立,如此循環(huán);若條件不成立,結(jié)束循環(huán),執(zhí)行下面的語(yǔ)句。②for循環(huán)for(表達(dá)式1;表達(dá)式2;表達(dá)式3){
循環(huán)體}for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量改值){
循環(huán)體}任務(wù)1.1讓LED燈亮起來(lái)知識(shí)準(zhǔn)備3、數(shù)組
一維數(shù)組的定義格式為:類型說(shuō)明符
數(shù)組名[常量表達(dá)式];比如:inta[10];它表示定義了一個(gè)整形數(shù)組,數(shù)組名為a,此數(shù)組有10個(gè)元素,10個(gè)元素的數(shù)據(jù)類型都是整型。第1個(gè)元素為a[0],第2個(gè)元素的值為a[1];最后。一個(gè)元素的值為a[9]。在定義數(shù)組時(shí)[]中的下標(biāo)表示元素個(gè)數(shù),在使用數(shù)組中的某一個(gè)元素時(shí)下標(biāo)表示第幾個(gè)元素。四、微處理器程序框架單片機(jī)C程序的大體框架結(jié)構(gòu)如下:initial(…){…}Function1(…){…}任務(wù)1.1讓LED燈亮起來(lái)知識(shí)準(zhǔn)備…Function_n(…){…}InterruptFunction1()interrupt1{…}…InterruptFunction()interruptn{…}任務(wù)1.1讓LED燈亮起來(lái)知識(shí)準(zhǔn)備voidmain(){initial();…;//其他在initial()函數(shù)和while循環(huán)以外的代碼while(1){…}}
如果代碼較長(zhǎng),可按功能把不同的函數(shù)分組放在不同的C文件中。例如通??梢园裪nitial()函數(shù)單獨(dú)放在initial.c中。一個(gè)C文件的代碼盡量不要太長(zhǎng),否則會(huì)造成查找和維護(hù)上的麻煩。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施一、Proteus硬件電路設(shè)計(jì)軟件的安裝二、KeiluVision軟件編程軟件安裝三、普中科技A7開發(fā)板驅(qū)動(dòng)安裝四、普中科技A7開發(fā)板程序下載
任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施子任務(wù)一讓LED燈亮起來(lái)1、硬件電路設(shè)計(jì)
利用Proteus仿真軟件在最小系統(tǒng)電路基礎(chǔ)上增加一個(gè)LED發(fā)光二極管和300歐姆限流電阻,硬件電路設(shè)計(jì)如圖1-24。電源和地的圖標(biāo)按照?qǐng)D1-24中箭頭1-3順序放置。箭頭2所指的是電源,箭頭3所指是地。保存文件為“1LED_1.DSN”,保存到“1單燈閃爍”文件夾下。圖1-24最小電路圖任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施2、軟件編程
LED發(fā)光二極管陰極連接單片機(jī)P1.0,陽(yáng)極通過(guò)限流電阻連接電源,當(dāng)P1.0端輸出低電平時(shí),LED燈點(diǎn)亮,輸出高電平時(shí),LED中沒(méi)有電流流過(guò),則LED燈不亮。P1.0輸出低電平延時(shí)一段時(shí)間后輸出高電平延時(shí)相同時(shí)間,如此循環(huán),就能控制LED以一定的頻率閃爍。從而實(shí)現(xiàn)本模塊任務(wù)。2.1keiluv4的使用。雙擊桌面圖標(biāo),打開keil開發(fā)軟件,按箭頭1點(diǎn)開Project菜單,選擇箭頭2所指“NewuVisionProject”菜單,創(chuàng)建新項(xiàng)目,如圖1-25。項(xiàng)目名為“1led_1”,保存類型為“*.uvproj”,點(diǎn)擊“保存”,將新建的項(xiàng)目保存到和硬件電路同一個(gè)文件夾下。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-25新建項(xiàng)目任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-27選擇芯片的生成廠商任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-28選擇芯片型號(hào)任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-29將標(biāo)準(zhǔn)的51庫(kù)添加到項(xiàng)目中圖1-30添加標(biāo)準(zhǔn)庫(kù)后的界面任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-31新建一個(gè)c文件圖1-32將新建文件添加到項(xiàng)目菜單中任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-33將新建的c文件添加到項(xiàng)目中圖1-34添加文件后的主界面任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-35設(shè)置項(xiàng)目參數(shù)圖1-36“OptionsforTarget'Target1'”對(duì)話框任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-37“Output”選項(xiàng)卡圖1-38編寫代碼界面任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施圖1-39代碼編譯界面任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施3、仿真調(diào)試4、開發(fā)板運(yùn)行把hex文件下載到開發(fā)板上,按電路圖上的連線方式連接好開發(fā)板,點(diǎn)亮開發(fā)板上的一個(gè)LED燈。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施子任務(wù)二“行云流水”的LED燈1、硬件電路設(shè)計(jì)
利用Proteus仿真軟件在最小系統(tǒng)電路基礎(chǔ)上增加8個(gè)LED發(fā)光二極管和八個(gè)300歐姆限流電阻,硬件電路設(shè)計(jì)如圖。放置元件方法和模塊一中方法一樣。保存文件為“2流水燈.DSN”,保存到“1-3流水燈”文件夾下。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施2、軟件編程
八個(gè)LED發(fā)光二極管陰極分別連接到單片機(jī)P1.0到P.7,陽(yáng)極通過(guò)限流電阻連接電源,當(dāng)P1.0端輸出低電平時(shí),LED1燈點(diǎn)亮,輸出高電平時(shí),LED1中沒(méi)有電流流過(guò),則LED1燈不亮。P1.0輸出低電平,P1.1到P1.7端口輸出高電平,延時(shí)一段時(shí)間后P1.1輸出低電平同時(shí)P1.0,P1.2到P1.7端口輸出高電平,延時(shí)相同時(shí)間.連接到P1端口的8位上的8個(gè)LED燈輪流被點(diǎn)亮一段時(shí)間,如同行云流水一樣,本項(xiàng)目因此得名流水燈。如此循環(huán)往復(fù)。從而實(shí)現(xiàn)本模塊任務(wù)。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施2、軟件編程下面我們對(duì)P1的8位做詳細(xì)分析。如表流水燈分析。P17P16P15P14P13P12P11P10變量s的值11111110s=0xfeP1=s;11111101s=s<<1;s=s+1;P1=s;11111011同上11110111同上11101111同上11011111同上10111111同上01111111同上LED8LED7LED6LED5LED4LED3LED2LED1
任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施我們有注意到,0的位置在左移,一直左移到最高位后又回到最低位。(1)設(shè)置變量s的初始值為0xfe,即s=11111110;P1=s;此時(shí)第一個(gè)LED1點(diǎn)亮,其余7個(gè)熄滅;(2)(a)s=s<<1;即s=11111100;(b)s=s+1;即s=11111101;(c)P1=s;即P1=11111101;此時(shí)第二個(gè)LED2點(diǎn)亮,其余熄滅。(3)重復(fù)步驟(2)的(a)(b)(c)8次。用for循環(huán)實(shí)現(xiàn)(2)的功能。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施代碼如下:s=0xfe;//s的初始值為11111110//循環(huán)8次for(k=0;k<8;k++){//k=0時(shí);k=1時(shí);...k=7時(shí)k=8,循環(huán)結(jié)束
P1=s;//P1=11111110;P1=11111101...P1=01111111
delay(100);//延時(shí)
s=s<<1;//s=11111100; s=11111010... s=11111110
s=s+1;//s=11111101; s=11111011... s=11111111
}按子任務(wù)一的方法創(chuàng)建項(xiàng)目2flow.uvproj,新建2flow.c文件并將此文件添加到項(xiàng)目中,設(shè)置項(xiàng)目參數(shù)。在2flow.c中編寫代碼,編譯調(diào)試到?jīng)]有錯(cuò)誤,生成2flow.hex文件。任務(wù)1.1讓LED燈亮起來(lái)任務(wù)實(shí)施3、仿真調(diào)試
4、開發(fā)板運(yùn)行任務(wù)1.2讓數(shù)碼管“動(dòng)起來(lái)”知識(shí)準(zhǔn)備1、七段數(shù)碼管工作原理
七段數(shù)碼管一般由八個(gè)發(fā)光二極管組成,其中由七個(gè)細(xì)長(zhǎng)的發(fā)光二極管組成數(shù)字顯示段,它的顯示段可以獨(dú)立地控制發(fā)光或熄滅,這樣不同段的組合就形成了不同的數(shù)字或英文字母,另外一個(gè)圓形的發(fā)光二極管顯示小數(shù)點(diǎn),如圖1-62。圖1-62七段數(shù)碼管外部引腳和內(nèi)部結(jié)構(gòu)任務(wù)1.2讓數(shù)碼管“動(dòng)起來(lái)”知識(shí)準(zhǔn)備2、LED數(shù)碼管靜態(tài)顯示靜態(tài)顯示是指使用數(shù)碼管顯示字符時(shí),數(shù)碼管的公共端恒定接地(共陰極)或+5V電源(共陽(yáng)極)。將每個(gè)數(shù)碼管的八個(gè)段控制引腳分別與單片機(jī)的一個(gè)八位I/O端口相連接。只要I/O端口有顯示字型碼輸出,數(shù)碼管就顯示給定字符,并保持不變,直到I/O端口輸出新的段碼。采用靜態(tài)顯示方式,較小的電流就可獲得較高的亮度,且占用CPU時(shí)間少,編程簡(jiǎn)單,便于監(jiān)測(cè)和控制,但占用單片機(jī)的I/O端口線多,n位數(shù)碼管的靜態(tài)顯示需占用8n個(gè)I/O端口,其限制了單片機(jī)連接數(shù)碼管的個(gè)數(shù)。同時(shí),硬件電路復(fù)雜,成本高,因此,數(shù)碼管靜態(tài)顯示方式適合顯示位數(shù)較少的場(chǎng)合。任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”知識(shí)準(zhǔn)備3、LED數(shù)碼管動(dòng)態(tài)顯示
在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,往往需要采用各種顯示器件來(lái)顯示控制信息和處理結(jié)果。當(dāng)采用數(shù)碼管顯示且位數(shù)較多時(shí),一般采用數(shù)碼管動(dòng)態(tài)顯示控制方式。
動(dòng)態(tài)顯示是一種按位輪流點(diǎn)亮各位數(shù)碼管,高速交替地進(jìn)行顯示,利用人的視覺(jué)暫留作用,使人感覺(jué)看到多個(gè)數(shù)碼管同時(shí)顯示的控制方式。采用動(dòng)態(tài)顯示時(shí),某一時(shí)段,只讓其中一位數(shù)碼管的“位選端”有效,并送出相應(yīng)的字型顯示編碼。此時(shí),其他位的數(shù)碼管因“位選端”無(wú)效而處于熄滅狀態(tài),下一時(shí)段按順序選通另外一位數(shù)碼管,并送出相應(yīng)的字型顯示編碼,按此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷地顯示出相應(yīng)的字符。數(shù)碼管動(dòng)態(tài)顯示電路通常是將所有數(shù)碼管的八個(gè)顯示段分別并聯(lián)起來(lái),僅用一個(gè)并行I/O端口控制,稱為“段選端”。各位數(shù)碼管的公共端稱為“位選端”,由另一個(gè)I/O端口控制。任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”知識(shí)準(zhǔn)備3、LED數(shù)碼管動(dòng)態(tài)顯示
與靜態(tài)顯示方式相比,當(dāng)顯示位較多時(shí),動(dòng)態(tài)顯示方式可節(jié)省I/O端口資源,硬件電路簡(jiǎn)單,但其顯示的亮度低于靜態(tài)顯示方式。由于CPU要不斷地依次運(yùn)行掃描顯示程序,將占用CPU更多的時(shí)間。動(dòng)態(tài)顯示方式在實(shí)際應(yīng)用中,由于需要不斷地掃描數(shù)碼管才能得到穩(wěn)定顯示效果,因此在程序中不能有比較長(zhǎng)時(shí)間的停止數(shù)碼管掃描的語(yǔ)句,否則會(huì)影響顯示效果,甚至無(wú)法顯示。若顯示位數(shù)較少,采用靜態(tài)顯示方式更加簡(jiǎn)便。任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施子任務(wù)一單個(gè)數(shù)碼管的“告白”1、硬件電路設(shè)計(jì)利用Proteus仿真軟件在最小系統(tǒng)電路基礎(chǔ)上增加一個(gè)共陽(yáng)極數(shù)碼管,數(shù)碼管的abcdefg段分別連接300歐姆限流電阻后連接到對(duì)應(yīng)的P2^0,P2^1到P2^7和,共陽(yáng)極端連接vcc電源。硬件電路設(shè)計(jì)如圖1-63。保存文件為“單個(gè)數(shù)碼管顯示.DSN”,保存到“1-4單個(gè)數(shù)碼管顯示”文件夾下。圖1-63硬件電路設(shè)計(jì)圖任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施2、軟件編程
七段數(shù)碼管的a到g段以及dp段分別連接八個(gè)限流電阻后連接到P2.0,P2.1…..P2.7,8個(gè)led的共陽(yáng)極連接電源,當(dāng)P2口的某一位為低電平,則對(duì)應(yīng)的led段就被點(diǎn)亮。共陽(yáng)極數(shù)碼管顯示相應(yīng)的數(shù)字的字型碼值可查講義或自己寫。將0-F的字型碼值存放到一個(gè)數(shù)組中。在文件夾“3單個(gè)數(shù)碼管顯示”下新建項(xiàng)目smg.uvproj。項(xiàng)目中添加一個(gè)smg.c文件,在此文件中編寫代碼。定義數(shù)組,里面存放0-f的字型碼值,數(shù)據(jù)類型為無(wú)符號(hào)字符型。unsignedchartable[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x02,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數(shù)碼管編碼,輸出低電平,適合共陽(yáng)數(shù)碼管。Table[0]是“0”的碼值,table[1]是“1”的碼值……table[15]是F的碼值。任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施2、軟件編程利用for循環(huán),循環(huán)16次,一次顯示0-f,代碼如下:for(k=0;k<16;k++){
P2=table[k];
delay(100);}3、仿真調(diào)試4、開發(fā)板運(yùn)行圖1-65開發(fā)板連線圖
圖1-64仿真運(yùn)行效果
任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施子任務(wù)二動(dòng)態(tài)顯示紀(jì)念日1、LED數(shù)碼管動(dòng)態(tài)顯示原理在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,往往需要采用各種顯示器件來(lái)顯示控制信息和處理結(jié)果。當(dāng)采用數(shù)碼管顯示且位數(shù)較多時(shí),一般采用數(shù)碼管動(dòng)態(tài)顯示控制方式。動(dòng)態(tài)顯示是一種按位輪流點(diǎn)亮各位數(shù)碼管,高速交替地進(jìn)行顯示,利用人的視覺(jué)暫留作用,使人感覺(jué)看到多個(gè)數(shù)碼管同時(shí)顯示的控制方式。采用動(dòng)態(tài)顯示時(shí),某一時(shí)段,只讓其中一位數(shù)碼管的“位選端”有效,并送出相應(yīng)的字型顯示編碼。此時(shí),其他位的數(shù)碼管因“位選端”無(wú)效而處于熄滅狀態(tài),下一時(shí)段按順序選通另外一位數(shù)碼管,并送出相應(yīng)的字型顯示編碼,按此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷地顯示出相應(yīng)的字符。數(shù)碼管動(dòng)態(tài)顯示電路通常是將所有數(shù)碼管的8個(gè)顯示段分別并聯(lián)起來(lái),僅用一個(gè)并行I/O任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施端口控制,稱為“段選端”。各位數(shù)碼管的公共端稱為“位選端”,由另一個(gè)I/O端口控制。
與靜態(tài)顯示方式相比,當(dāng)顯示位較多時(shí),動(dòng)態(tài)顯示方式可節(jié)省I/O端口資源,硬件電路簡(jiǎn)單,但其顯示的亮度低于靜態(tài)顯示方式。由于CPU要不斷地依次運(yùn)行掃描顯示程序,將占用CPU更多的時(shí)間。動(dòng)態(tài)顯示方式在實(shí)際應(yīng)用中,由于需要不斷地掃描數(shù)碼管才能得到穩(wěn)定顯示效果,因此在程序中不能有比較長(zhǎng)時(shí)間的停止數(shù)碼管掃描的語(yǔ)句,否則會(huì)影響顯示效果,甚至無(wú)法顯示。若顯示位數(shù)較少,采用靜態(tài)顯示方式更加簡(jiǎn)便。任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施2、硬件電路設(shè)計(jì)
首先新建文件夾“1-5數(shù)碼管動(dòng)態(tài)顯示”。
利用Proteus仿真軟件在最小系統(tǒng)電路基礎(chǔ)上在P0口增加8個(gè)300歐姆限流電阻,此處用一個(gè)300歐姆的排阻(排阻功能和8個(gè)300歐姆電阻一樣)和8個(gè)共陽(yáng)極數(shù)碼管,8個(gè)數(shù)碼管的a段led連接在一起,g段也連接在一起,用總線和網(wǎng)標(biāo)表示具體連接。利用P3口的P30、P31、P32分別連接74HC138三八譯碼器的ABC引腳,三八譯碼器的八個(gè)輸出引腳分別連接八個(gè)三極管的基極,8個(gè)三極管的發(fā)射極連接在一起后連接電源,八個(gè)集電極分別連接八個(gè)數(shù)碼管的共陽(yáng)極,以給數(shù)碼管供電,在某一個(gè)時(shí)刻,只有一個(gè)數(shù)碼管的共陽(yáng)極上有電源,其他7個(gè)沒(méi)有電源,因此P0端口輸出的數(shù)碼管的碼值代碼的數(shù)字就顯示在有電源的那個(gè)數(shù)碼管上。任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施2、硬件電路設(shè)計(jì)
為了使得三八譯碼器正常工作,需要將74HC138的E1接電源,E2和E3連接電源地。ABC的電平?jīng)Q定了Y0到Y(jié)7的輸出電平。74HC138的引腳圖如圖1-66,管腳說(shuō)明如表1-10,真值表如表1-11圖1-6674HC138的引腳
表1-1074HC138引腳說(shuō)明
表1-1174HC138真值表
任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施2、硬件電路設(shè)計(jì)硬件電路設(shè)計(jì)如圖1-69。保存文件為“4數(shù)碼管動(dòng)態(tài)顯示.DSN”,保存到“1-5數(shù)碼管動(dòng)態(tài)顯示”文件夾下。圖1-69電路圖任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施3、軟件編程
根據(jù)真值表可知:cba的值為000時(shí),Y0=0,Y1…Y7為1,三極管Q1導(dǎo)通,Vcc電源連通網(wǎng)標(biāo)P30,第一個(gè)數(shù)碼管接上電源,P0的碼值代表的數(shù)字放在數(shù)組的第一個(gè)元素table[bir[0]]中,并在第一個(gè)數(shù)碼管上顯示;同樣的,當(dāng)cba的值為001時(shí),Y0=1,Y1=0,Y2…Y7為1,三極管Q2導(dǎo)通,第二個(gè)數(shù)碼管接上電源,P0的碼值代表的數(shù)字存放在數(shù)組的第二個(gè)元素table[bir[1]]中,并在第二個(gè)數(shù)碼管上顯示;當(dāng)cba的二進(jìn)制值每次加1,則數(shù)碼管依次接通電源,這樣就能使得數(shù)碼管從第一個(gè)到第八個(gè)輪流被點(diǎn)亮顯示數(shù)組中對(duì)應(yīng)的數(shù)字。數(shù)組table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x02,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數(shù)碼管編碼,輸出低電平,適合共陽(yáng)數(shù)碼管,任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施數(shù)組bir[8]={2,0,2,1,0,2,1,4};//存放需要顯示的生日利用table[bir[k]],隨著k的值從0增加到7,bir[k]就是數(shù)組bir第k個(gè)元素,table[bir[k]]就顯示第k個(gè)元素的碼值代表的數(shù)字。定義變量s初始值為0x00,P3=s;P3=0x00;實(shí)現(xiàn)第一個(gè)數(shù)碼管接通電源,k=0;P0=table[bir[0]];顯示數(shù)字2;s=s+1;s=0x01;P3=s;即P3=0x01,實(shí)現(xiàn)第二個(gè)數(shù)碼管接通電源,k=1,P0=table[bir[1]];顯示數(shù)字0,依次類推,通過(guò)for循環(huán),實(shí)現(xiàn)8個(gè)數(shù)碼管動(dòng)態(tài)顯示bir[8]中的8個(gè)數(shù)字。3、仿真調(diào)試圖1-71仿真運(yùn)行效果
任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施4、開發(fā)板運(yùn)行圖1-72開發(fā)板運(yùn)行效果圖
任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施子任務(wù)三能力拓展任務(wù)描述:8個(gè)數(shù)碼管動(dòng)態(tài)穩(wěn)定顯示“360ANDQQ”和“20210214”輪流切換顯示。1、硬件電路設(shè)計(jì)同上一個(gè)任務(wù)的電路圖2、軟件編程在table2[8]數(shù)組中存放360andqq的字符碼值Unsignedchartable2[16]={0xb0,0x02,0xc0,0x88,0xab,0xa1,0x98,0x98};//360Andqq的碼值在第一個(gè)for循環(huán)的下面添加一個(gè)for循環(huán)s=0x00;P3=s;//00000000for(k=0;k<8;k++){ P0=~table[bir[k]]; delay(10);
s=s+1;//00000001 P3=s;}任務(wù)1.2
讓數(shù)碼管“動(dòng)起來(lái)”任務(wù)實(shí)施第二個(gè)for循環(huán)中只要修改P0=~table2[8],即s=0x00;P3=s;//00000000for(k=0;k<8;k++){ P0=~table2[bir[k]]; delay(10);
s=s+1;//00000001 P3=s;
}
為了能夠看清楚每一次8個(gè)數(shù)碼管顯示的內(nèi)容,可以讓每一次顯示循環(huán)100次,不至于使得兩組數(shù)據(jù)切換太快。3、仿真調(diào)試4、開發(fā)板運(yùn)行項(xiàng)目一智慧校園門禁智能控制
《微處理器程序設(shè)計(jì)》任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)目標(biāo)
通過(guò)本任務(wù)的設(shè)計(jì)和制作,介紹微處理器和獨(dú)立式按鍵、矩陣鍵盤等輸入器件之間的接口和編程應(yīng)用。培養(yǎng)學(xué)生具備利用微處理器的IO口的能力,并能通過(guò)按鍵控制簡(jiǎn)單輸出并能利用獨(dú)立鍵盤控制LED燈和數(shù)碼管做不同的顯示。知識(shí)準(zhǔn)備一、獨(dú)立式按鍵
獨(dú)立式按鍵是直接用I/O口線構(gòu)成的單個(gè)按鍵,其特點(diǎn)是每個(gè)按鍵單獨(dú)占用一根I/O口線,每個(gè)按鍵的工作不會(huì)影響其他I/O口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O口線,因此在按鍵較多時(shí),I/O口線浪費(fèi)較大,不宜采用。獨(dú)立式按鍵的軟件常采用查詢式結(jié)構(gòu),先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對(duì)應(yīng)的按鍵已按下,然后再轉(zhuǎn)向該鍵的功能處理程序即可。任務(wù)1.3
“活用”獨(dú)立按鍵知識(shí)準(zhǔn)備二、按鍵去抖動(dòng)
通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān)。由于機(jī)械觸點(diǎn)的彈性作用,按鍵在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng)。鍵抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為了確保CPU對(duì)鍵的一次閉合僅作一次處理,必須去除抖動(dòng)。按鍵的機(jī)械抖動(dòng)可采用硬件電路來(lái)消除,也可以采用軟件方法進(jìn)行去抖。軟件去抖編程思路:在檢測(cè)到有鍵按下時(shí),先執(zhí)行10ms左右的延時(shí)程序,然后再重新檢測(cè)該鍵是否仍然按下,以確認(rèn)該鍵按下不是因抖動(dòng)引起的。同理,在檢測(cè)到該鍵釋放時(shí),也采用先延時(shí)再判斷的方法消除抖動(dòng)的影響。任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施
子任務(wù)一奇妙的轉(zhuǎn)向燈控制
獨(dú)立按鍵控制燈光報(bào)警,具體應(yīng)用在汽車轉(zhuǎn)向燈的控制。汽車在轉(zhuǎn)向的時(shí)候需要亮起轉(zhuǎn)向燈,以提醒周圍的車和行人注意。雙閃燈即危險(xiǎn)報(bào)警閃光燈,雙閃燈是一種提醒其他車輛與行人注意本車發(fā)生了特殊情況的信號(hào)燈。在駕車過(guò)程中遇到濃霧天氣,能見度低于50m時(shí),由于視線不好,司機(jī)不僅應(yīng)該開啟前、后霧燈,同時(shí)還應(yīng)該開啟危險(xiǎn)報(bào)警閃光燈,即汽車兩側(cè)的轉(zhuǎn)向燈同時(shí)閃爍,以提醒過(guò)往車輛及行人注意。特別是提醒后方行駛的車輛應(yīng)保持應(yīng)有的安全距離和必要的安全車速,避免緊急剎車而引起追尾事故。本任務(wù)中,我們要利用單片機(jī)驅(qū)動(dòng)前后左右四個(gè)發(fā)光二極管來(lái)模擬左右轉(zhuǎn)向及雙閃燈,發(fā)光二級(jí)管的亮滅過(guò)程即雙閃燈的閃爍過(guò)程,亮滅之間的時(shí)間間隔通過(guò)單片機(jī)延時(shí)500ms完成。任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施1、硬件電路設(shè)計(jì)
將單刀三擲開關(guān)的公共端接地,另外三個(gè)端子分別連接P1.0、P1.1和P1.2端口。四個(gè)led燈分別連接在P0.0到P0.3端口。如圖1-75所示。開關(guān)狀態(tài)為低電平或高電平,開關(guān)狀態(tài)作為單片機(jī)的輸入信號(hào),讀取P1端口開關(guān)狀態(tài)的輸入信號(hào),控制P0端口上相連的led燈做不同的顯示。圖1-75電路圖
任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施2、軟件編程當(dāng)SW1打到上端,則P1.0為低電平,P1.1和P1.2為高電平,此時(shí)左側(cè)前后兩個(gè)led燈閃爍,表示汽車左轉(zhuǎn)。當(dāng)SW1打到下端,則P1.2為低電平,P1.0和P1.1為高電平,此時(shí)右側(cè)前后兩個(gè)led燈閃爍,表示汽車右轉(zhuǎn)。當(dāng)SW1打到中間端,則P1.1為低電平,P1.0和P1.2為高電平,此時(shí)前后左右四個(gè)led燈閃爍即汽車燈雙跳,表示汽車處于報(bào)警提醒狀態(tài)。首先利用sbit定義四個(gè)led燈和左轉(zhuǎn)右轉(zhuǎn)雙閃開關(guān)所在端口。sbitled1=P0^0;sbitled2=P0^1;sbitled3=P0^2;sbitled4=P0^3;sbitsl=P1^0;sbitsm=P1^1;sbitsr=P1^2;任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施在主函數(shù)的while循環(huán)中,左轉(zhuǎn)燈的狀態(tài)受左轉(zhuǎn)開關(guān)控制,當(dāng)左轉(zhuǎn)開關(guān)接地,則左轉(zhuǎn)燈亮一段時(shí)間后熄滅一段時(shí)間,可以用下面幾行代碼表示。led1=sl;led2=sl;delay(100);led1=1;led2=1;delay(100);如果左轉(zhuǎn)開關(guān)未被接通,即P1.0為高電平,則左轉(zhuǎn)燈一直是熄滅的。同樣,右轉(zhuǎn)燈閃爍代碼如下:led3=sr;led4=sr;delay(100);led3=1;led4=1;delay(100);雙跳的四個(gè)led燈的狀態(tài)受中間開關(guān)即P1.1的控制,代碼如下:led1=sm;led2=sm;led3=sm;led4=sm;delay(100);led1=1;led2=1;led3=1;led4=1;delay(100);任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施3、仿真調(diào)試
編譯調(diào)試程序下載到仿真電路,運(yùn)行hex,控制開關(guān)的連接端口狀態(tài),觀察四個(gè)led燈的狀態(tài)。4、開發(fā)板運(yùn)行
將四個(gè)led發(fā)光二極管和三個(gè)按鍵開關(guān)如圖1-76連接,將hex文件下載到開發(fā)板后,分別按下k1,k2,k3,觀察四個(gè)led的狀態(tài)。圖1-76開發(fā)板運(yùn)行效果圖
任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施
子任務(wù)二流水燈受控制啦
利用連接在微處理器端口上的按鍵控制8個(gè)led燈做流水燈效果顯示,按下按鍵,8個(gè)燈流水顯示一次,然后全部熄滅,只有再次按下按鍵才流水顯示一次。1、硬件電路設(shè)計(jì)將獨(dú)立按鍵k1連接到P3.6端口,在P1口上連接8個(gè)led燈。如圖1-77圖1-77電路圖及連線圖任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施2、軟件編程(1)基本功能實(shí)現(xiàn)
將前面做過(guò)的流水燈程序編寫成一個(gè)子函數(shù)voidflowled();voidflowled(){s=0xfe;//s的初始值為11111110, //循環(huán)8次for(k=0;k<8;k++){//k=0時(shí);k=1時(shí);...k=7時(shí);k=8時(shí)循環(huán)結(jié)束 P1=s;//P1=11111110;P1=11111101...P1=01111111 delay(100);//延時(shí) s=s<<1;//s=11111100; s=11111010... s=11111110 s=s+1;//s=11111101; s=11111011... s=11111111
}}任務(wù)1.3
“活用”獨(dú)立按鍵任務(wù)實(shí)施
主函數(shù)的while循環(huán)中判斷是否有按鍵按下,只有按鍵按下,才進(jìn)入流水燈子函數(shù),否則,所有燈熄滅。完整的程序如下:#include<reg51.h>sbitsw=P3^6;bit sw_last;inti,j,k;unsignedchars;//延時(shí)函數(shù)voiddelay(intnum){for(i=0;i<num;i++)for(j=0;j<100;j++)
;}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施
//流水燈函數(shù)voidflowled(){s=0xfe;//s的初始值為11111110//循環(huán)8次for(k=0;k<8;k++){//k=0時(shí);k=1時(shí);...k=7時(shí)
k=8,循環(huán)結(jié)束 P1=s;//P1=11111110;P1=11111101...P1=01111111 delay(100);//延時(shí) s=s<<1;//s=11111100; s=11111010... s=11111110 s=s+1;//s=11111101; s=11111011... s=11111111}}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施//主函數(shù)voidmain(){sw_last=1;//按鍵上次狀態(tài)默認(rèn)為松開,while(1){ if(!sw&&sw_last){//按鍵按下 flowled(); } sw_last=sw;//更新按鍵狀態(tài)P1=0xff;//全部熄滅}}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施(2)功能拓展
基本功能為按下一次按鍵,流水燈顯示一次后8個(gè)燈全部熄滅。若是按一次按鍵,流水燈循環(huán)顯示6次后熄滅,只需在按鍵按下后讓流水燈子函數(shù)循環(huán)6次即可。部分代碼如下:if(!sw&&sw_last){//按鍵按下 for(n=0;n<6;n++){ flowled();
}
}……3、仿真調(diào)試
編譯調(diào)試程序下載到仿真電路,運(yùn)行hex,按下獨(dú)立按鍵,控制流水燈,觀察8個(gè)led做流水燈的效果。任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施4、開發(fā)板運(yùn)行將八個(gè)led發(fā)光二極管和一個(gè)獨(dú)立按鍵開關(guān)如下圖連接,將hex文件下載到開發(fā)板后,按下k1觀察八個(gè)led的流水燈效果。圖1-78開發(fā)板連線任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施
子任務(wù)三“紀(jì)念日”去哪兒了
利用連接在微處理器端口上的獨(dú)立按鍵控制8個(gè)共陰極數(shù)碼管顯示生日。按下一次按鍵,數(shù)碼管顯示生日,延時(shí)一段時(shí)間后熄滅,只有再次按下按鍵才再次顯示生日。1、硬件電路設(shè)計(jì)
硬件電路在原來(lái)的數(shù)碼管動(dòng)態(tài)顯示電路基礎(chǔ)上增加獨(dú)立按鍵設(shè)計(jì)。在P1.0端口連接一按鍵接地,同上連接10K電阻后連上電源。圖1-69電路圖任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施2、軟件編程(1)基本功能實(shí)現(xiàn)
將前面做過(guò)的多個(gè)數(shù)碼管動(dòng)態(tài)顯示的程序編寫成一個(gè)子函數(shù)voiddisplay();voiddisplay(){s=0x00;P3=s;//00000000for(k=0;k<8;k++){
P0=table[bir[k]]; delay(10);
s=s+1;//00000001
P3=s;}}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施
主函數(shù)的while循環(huán)中判斷是否有按鍵按下,只有按鍵按下,才進(jìn)入數(shù)碼管顯示子函數(shù),否則,所有數(shù)碼管熄滅。While循環(huán)中按鍵判斷代碼如下:while(1){
if(!sw&&sw_last){//按鍵按下
for(n=0;n<10;n++){//循環(huán)10次用于仿真調(diào)試,下載到開發(fā)板的程序n<100以使人眼能看清數(shù)碼管顯示的內(nèi)容,否則次數(shù)過(guò)少,數(shù)碼管顯示一閃而過(guò),還未看清就熄滅。可以適當(dāng)選擇循環(huán)次數(shù)。
display();}
}
sw_last=sw;//更新按鍵狀態(tài)}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施
(2)能力拓展
基本功能為按下一次按鍵,數(shù)碼管顯示生日后熄滅。若是按一次按鍵,數(shù)碼管可以顯示另外一組數(shù)據(jù),比如20210214,重寫定義一個(gè)數(shù)組bir2,只需在第二次按鍵按下后顯示bir2數(shù)組里的內(nèi)容。第三次按下按鍵回到第一次按鍵的狀態(tài)。可以設(shè)置為奇數(shù)次和偶數(shù)次按鍵,奇數(shù)次按鍵顯示bir1數(shù)組的內(nèi)容,偶數(shù)次按鍵顯示bir2數(shù)組內(nèi)容。先定義位變量key_count,表示按鍵奇偶次,重寫定義顯示的兩個(gè)數(shù)組bir1和bir2:部分代碼如下:bitkey_count=0;//定義按鍵次數(shù)位變量,默認(rèn)為偶數(shù)次unsignedcharbir1[8]={2,0,0,1,0,9,1,1};unsignedcharbir2[8]={2,0,2,1,0,2,1,4};用if語(yǔ)句判斷按鍵是否按下,如果按下,則按鍵次數(shù)變量取反,原來(lái)是偶數(shù)次的,現(xiàn)在為奇數(shù)次,反之亦然。任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施
if(!sw&&sw_last){//按鍵按下 key_count=!key_count;//按鍵次數(shù)取反for(n=0;n<3;n++){ display(); }}……修改display()函數(shù),增加按鍵奇偶次判斷。voiddisplay(){if(key_count){ //奇數(shù)次按鍵s=0x00;P3=s;//00000000for(k=0;k<8;k++){ P0=table[bir1[k]]; //P0=~table[bir[k]]; delay(10);
s=s+1;//00000001 P3=s;}
}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施else{ //偶數(shù)次按鍵
s=0x00;
P3=s;//00000000
for(k=0;k<8;k++){ P0=table[bir2[k]]; //P0=~table[bir[k]]; delay(10);
s=s+1;//00000001 P3=s;
}}}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施3、仿真調(diào)試
上述程序編譯調(diào)試程序下載到仿真電路,運(yùn)行hex,控制獨(dú)立按鍵按下次數(shù),觀察八個(gè)數(shù)碼管的動(dòng)態(tài)顯示效果。
發(fā)現(xiàn)顯示子函數(shù)運(yùn)行完畢后,第一個(gè)數(shù)碼管會(huì)顯示最后一個(gè)數(shù)字,如果需要熄滅所有的數(shù)碼管,改如何修改程序呢?
只要在按鍵按下后if語(yǔ)句成立的符合語(yǔ)句最后一行增加一個(gè)數(shù)碼管全部熄滅的子函數(shù)display_off()。while(1){
if(!sw&&sw_last){//按鍵按下
key_count=!key_count;//取反 for(n=0;n<100;n++){
display(); } display_off(); //熄滅所有數(shù)碼管
}
sw_last=sw;}//while任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施熄滅所有的數(shù)碼管的子函數(shù)如下:輪流選中8個(gè)數(shù)碼管,熄滅每個(gè)數(shù)碼管中的八段led。voiddisplay_off(){
s=0x00;
P3=s;//00000000for(k=0;k<8;k++){P0=0xff; //共陽(yáng)極數(shù)碼管熄滅 //P0=~0xff; //共陰極數(shù)碼管熄滅 delay(10);
s=s+1;//00000001
P3=s;}}任務(wù)1.3“活用”獨(dú)立按鍵任務(wù)實(shí)施4、開發(fā)板運(yùn)行
仿真電路中是共陽(yáng)極數(shù)碼管,開發(fā)板中八個(gè)是共陰極數(shù)碼管,因此需要將共陽(yáng)極的碼值取反后變?yōu)楣碴帢O的碼值,即P0=~table[bir[k]];并且縮短延時(shí)時(shí)間,增減顯示的循環(huán)次數(shù)。重新編譯程序下載到開發(fā)板,按仿真圖中按鍵和數(shù)碼管與單片機(jī)的端口連接開發(fā)板上對(duì)應(yīng)的端口。如圖1-79。按下k1奇數(shù)次和偶數(shù)次,觀察八個(gè)數(shù)碼管的顯示狀態(tài)。圖1-79開發(fā)板連線及運(yùn)行效果
任務(wù)1.4
“巧用”矩陣鍵盤任務(wù)目標(biāo)通過(guò)本任務(wù)的設(shè)計(jì)和制作,培養(yǎng)學(xué)生具備利用微處理器矩陣式鍵盤進(jìn)行控制顯示的能力。
由16(4×4)個(gè)按鍵組成的4行4列矩陣式鍵盤連接微處理器的I/O端口,每個(gè)按鍵代表的數(shù)值分別為0~15,數(shù)碼管顯示按鍵的值。
任務(wù)1.4
“巧用”矩陣鍵盤知識(shí)準(zhǔn)備
單片機(jī)應(yīng)用系統(tǒng)中,若使用按鍵較多時(shí),通常采用矩陣式(也稱行列式)鍵盤。矩陣鍵盤由行線和列線組成,按鍵位于行、列線的交差點(diǎn)上,其結(jié)構(gòu)如圖1-80。4×4的行、列結(jié)構(gòu)可以構(gòu)成含有16個(gè)按鍵的鍵盤。顯然,在按鍵數(shù)量較多時(shí),矩陣式鍵盤較之獨(dú)立式鍵盤要節(jié)省很多I/O口。矩陣式鍵盤中,行、列線分別連接到按鍵開關(guān)的兩端。識(shí)別矩陣式鍵盤常用掃描法,按鍵按下時(shí),與此鍵相連的行線與列線導(dǎo)通,其影響該鍵所在行線和列線的電平。
識(shí)別矩陣式鍵盤按鍵可采用逐列掃描法或行列反轉(zhuǎn)法。圖1-80矩陣式鍵盤結(jié)構(gòu)圖
任務(wù)1.4“巧用”矩陣鍵盤任務(wù)實(shí)施1、硬件電路設(shè)計(jì)
硬件電路在最小電路基礎(chǔ)上,通過(guò)P2端口連接300歐姆限流電阻后連接共陽(yáng)極數(shù)碼管的7段碼。P1端口低4位分別連接矩陣鍵盤的四列,高4位分別連接矩陣鍵盤的四行。4行4列分別連接上拉電阻后接電源。圖1-81電路圖
任務(wù)1.4
“巧用”矩陣鍵盤任務(wù)實(shí)施2、軟件編程
基本功能如下:16個(gè)按鍵,分別代表數(shù)字0~9和英文字符A~F。系統(tǒng)上電時(shí),數(shù)碼管不顯示。
逐列掃描法按鍵識(shí)別過(guò)程如下:先讓行輸出全部為1,列全部為0,以P1為例,則語(yǔ)句為“P1=0xF0;”,用變量temp保存P1口值,假設(shè)S0按下,則temp不等于0xF0,接著再延時(shí)消抖,再去讀P1口的值,若temp仍不等于0xF0,則有按鍵按下;接著讓第一列為0(P1.0為低電平),其它行為1,即P1=0xFE;接著讀P1的值,即“temp=P1;”,若“0”號(hào)鍵按下,則P1.4和P1.0接通,P1.4引腳為低電平,此時(shí)temp值為0xee;若按下“1”號(hào)鍵,則temp值為0xde,通過(guò)判斷temp值即可判斷按下了哪個(gè)鍵。接著讓第二列為0(P1.1為低電平),其它行為1,用同樣的方法可判斷是否有鍵“4”、“5”、“6”或“7”按下;接著讓第三列為0(P1.2為低電平),其它行為1,用同樣的方法可判斷是否有鍵“8”、“9”、“A”或“B”任務(wù)1.4
“巧用”矩陣鍵盤任務(wù)實(shí)施接著讓第四列為0(P1.3為低電平),其它行為1,用同樣的方法可判斷是否有鍵“C”、“D”、“E”或“F”按下。voidmain()//主函數(shù){unsignedchardisp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~9、A~F的共陽(yáng)極顯示碼
P2=0x00;//讓共陽(yáng)極數(shù)碼管亮一下后熄滅,驗(yàn)證數(shù)碼管工作正常delay(100);P2=0xff;
while(1){
keynum=scan_key();//讀取按鍵值
P2=disp[keynum];//顯示按鍵值
}任務(wù)1.4
“巧用”矩陣鍵盤任務(wù)實(shí)施//函數(shù)名:scan_key//函數(shù)功能:判斷是否有鍵按下,如果有鍵按下,逐列掃描法得到鍵值//形式參數(shù):無(wú)//返回值:鍵值0~15,charscan_key(){//第一列輸出低電平,讀取第一列的四行中是否有按鍵按下P1=0xfe;//11111110
temp=P1;//xxxx1110
temp=temp&0xf0;//11110000
if(temp!=0xf0){//有按鍵按下
temp=P1;//11101110->0//11011110->1//10111110->2//01111110->3
switch(temp){ case0xee://11101110 keynum=0; break; case0xde://11011110 keynum=1; break; case0xbe://10111110 keynum=2; break; case0x7e://01111110 keynum=3; break;
}//swtich
}//if任務(wù)1.4
“巧用”矩陣鍵盤任務(wù)實(shí)施//第二列輸出低電平,讀取第二列的四行中是否有按鍵按下P1=0xfd;//11111101temp=P1;//xxxx1110
temp=temp&0xf0;//11110000
if(temp!=0xf0){//有按鍵按下
temp=P1;//11101101->4//11011101->5//10111101->6//01111101->7
switch(temp){
case0xed://11101101
keynum=4; break;
case0xdd://11011101
keynum=5; break;
case0xbd://10111101
keynum=6;break;
case0x7d://01111101
keynum=7; break;
}//swtich
}任務(wù)1.4
“巧用”矩陣鍵盤任務(wù)實(shí)施//第三、四列輸出低電平,讀第三、四列的四行中是否有按鍵按下的方法同上面。3、仿真調(diào)試
編譯調(diào)試程序下載到仿真電路,運(yùn)行hex,按下矩陣鍵盤按鍵,數(shù)碼管顯示的值。如圖1-82。
4、開發(fā)板運(yùn)行將矩陣鍵盤用扁帶線連接在單片機(jī)的P1號(hào)端口,將單片機(jī)的P2號(hào)端口和共陽(yáng)極靜態(tài)級(jí)數(shù)碼管連接。將hex文件下載到開發(fā)板后,分別按下矩陣鍵盤中的按鍵,觀察數(shù)碼管顯示的數(shù)值。如圖1-83。圖1-82仿真運(yùn)行效果圖圖1-83開發(fā)板連線及運(yùn)行效果圖項(xiàng)目一智慧校園門禁智能控制
《微處理器程序設(shè)計(jì)》任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)目標(biāo)
通過(guò)本任務(wù)的設(shè)計(jì)和制作,培養(yǎng)學(xué)生利用微處理器矩陣鍵盤實(shí)現(xiàn)智慧校園門禁的智能控制的能力。
首先設(shè)置一個(gè)默認(rèn)的數(shù)字作為密碼。從矩陣盤中按下某一個(gè)按鍵,如果這個(gè)按鍵的值和設(shè)置的密碼的值相同,則數(shù)碼管顯示“8”或者顯示按鍵值,發(fā)光二極管點(diǎn)亮。門鎖所連接的電機(jī)轉(zhuǎn)動(dòng)正向轉(zhuǎn)動(dòng)。否則數(shù)碼管交替顯示“E”和“-”,門鎖不動(dòng),發(fā)光二極管不亮,并且蜂鳴器報(bào)警任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施知識(shí)準(zhǔn)備一、直流電機(jī)介紹
直流電機(jī)的結(jié)構(gòu)應(yīng)由定子和轉(zhuǎn)子兩大部分組成。直流電機(jī)運(yùn)行時(shí)靜止不動(dòng)的部分稱為定子,定子的主要作用是產(chǎn)生磁場(chǎng),由機(jī)座、主磁極、換向極、端蓋、軸承和電刷裝置等組成。運(yùn)行時(shí)轉(zhuǎn)動(dòng)的部分稱為轉(zhuǎn)子,其主要作用是產(chǎn)生電磁轉(zhuǎn)矩和感應(yīng)電動(dòng)勢(shì),是直流電機(jī)進(jìn)行能量轉(zhuǎn)換的樞紐,所以通常又稱為電樞,由轉(zhuǎn)軸、電樞鐵心、電樞繞組、換向器和風(fēng)扇等組成。直流電機(jī)沒(méi)有正負(fù)之分,在兩端加上直流電就能工作。交換接線,可以形成正反轉(zhuǎn)。任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施
門禁密碼預(yù)先設(shè)置好。用戶進(jìn)門前按下矩陣鍵盤中的某一個(gè)按鍵,若此按鍵的值和設(shè)置的密碼一致,則連接門鎖的電機(jī)轉(zhuǎn)動(dòng)而開門,同時(shí)門口的照明燈點(diǎn)亮,數(shù)碼管顯示“8”或者按鍵值。若是按鍵錯(cuò)誤,則電機(jī)不轉(zhuǎn)動(dòng),門禁不打開,門口燈不亮,數(shù)碼管交替顯示“E”“-”三次,同時(shí)蜂鳴器報(bào)警。1、硬件電路設(shè)計(jì)
門鎖用電機(jī)表示,仿真圖中電機(jī)連接微處理器的P3.3和P3.4,報(bào)警蜂鳴器通過(guò)三極管連接到微處理器的P3.7。數(shù)碼管連接到P2端口。矩陣鍵盤連接方式是“子任務(wù)四矩陣鍵盤控制數(shù)碼管顯示”一樣。硬件電路如圖1-87任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施圖1-87硬件電路圖任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施2、軟件編程(1)設(shè)置密碼
定義一個(gè)變量password表示設(shè)定的密碼,在主函數(shù)中給password設(shè)置的初始值密碼為9。 password=9;(2)讀取矩陣鍵盤值
編寫scan_key();子函數(shù),得到按鍵值,沒(méi)有按鍵按下的話,按鍵值變量keynum值為20;(3)門禁打開還是關(guān)閉
判斷讀取到的按鍵值是否和設(shè)置的密碼一致,如果一致則打開門禁,即點(diǎn)亮led燈,數(shù)碼管顯示“8”,也可顯示按鍵的值,給電機(jī)正向通電,將電源正向加到電機(jī)上,電機(jī)轉(zhuǎn)動(dòng)延時(shí)一段時(shí)間后而開鎖。若是要關(guān)鎖則微處理器給電機(jī)反向通電,電源反向加到電機(jī)兩端,電機(jī)反轉(zhuǎn)一段時(shí)間后停止表示門鎖關(guān)閉。若是輸入錯(cuò)誤,led燈不亮,數(shù)碼管循環(huán)顯示三次“E”和“-”,電機(jī)不工作,但是蜂鳴器導(dǎo)通報(bào)警。調(diào)用scan_key()子函數(shù)讀取按鍵值,keynum=scan_key();判斷是否有按鍵按下,如果沒(méi)有按鍵按下,什么都不做。任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施if(keynum==20){
led=1;//燈不亮
beep=1;//蜂鳴器不響
P2=0xff;//數(shù)碼管不顯示}如果有按鍵按下,判斷按鍵值是否為設(shè)定的密碼值,如果是,點(diǎn)亮led,數(shù)碼管顯示按鍵值,電機(jī)正轉(zhuǎn)并延時(shí)一段時(shí)間。elseif(keynum==password){
led=0;//燈亮
P2=table[keynum];//數(shù)碼管顯示密碼
jdq1=1;jdq2=0; delay(500);dq1=0;jdq2=1;//此處電機(jī)反轉(zhuǎn)模擬關(guān)鎖
delay(500);
jdq1=0;jdq2=0;//電機(jī)停轉(zhuǎn)
keynum=20;}任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施如果不是設(shè)定密碼值,led不亮,數(shù)碼管顯示“E”和“-”,并且蜂鳴器報(bào)警三次停止。 else{ keynum=20; for(k=0;k<3;k++){ led=1; beep=0; P2=table[14];//"E" delay(50); P2=0x3f;//00111111"-" delay(50);
beep=1; delay(100);
}//for
}//else任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施3、仿真調(diào)試
編譯調(diào)試程序下載到仿真電路,運(yùn)行hex,按下矩陣鍵盤按鍵,觀察電機(jī),數(shù)碼管,led燈和蜂鳴器的狀態(tài)。圖1-88仿真運(yùn)行效果任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施4、開發(fā)板運(yùn)行
將矩陣鍵盤、數(shù)碼管、發(fā)光二極管led、蜂鳴器、電機(jī)和微處理器的連接如圖所示,將hex文件下載到開發(fā)板后,分別按下矩陣鍵盤中的按鍵,觀察數(shù)碼管,電機(jī)和蜂鳴器以及發(fā)光二極管led燈的狀態(tài)。圖1-89開發(fā)板連線圖任務(wù)1.5智慧校園門禁智能控制項(xiàng)目實(shí)施任務(wù)實(shí)施
仿真電路中直流電機(jī)由微處理器的兩個(gè)端口直接控制,但實(shí)際上微處理器端口電流無(wú)法驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng),直流電機(jī)在開發(fā)板上通過(guò)專用驅(qū)動(dòng)芯片后才能正常轉(zhuǎn)動(dòng)。電機(jī)和芯片,芯片和微處理器的連接如圖,電機(jī)兩端連接驅(qū)動(dòng)芯片輸出,驅(qū)動(dòng)芯片的輸入端連接微處理器的某一個(gè)輸出端口,當(dāng)微處理器輸出為高電平時(shí),電機(jī)轉(zhuǎn)動(dòng)。項(xiàng)目一智慧校園門禁系統(tǒng)設(shè)計(jì)
《微處理器程序設(shè)計(jì)》任務(wù)1.6企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)目標(biāo)
通過(guò)本任務(wù)的設(shè)計(jì)和制作,培養(yǎng)學(xué)生利用微處理器矩陣鍵盤實(shí)現(xiàn)學(xué)生宿舍儲(chǔ)物柜門鎖的智能控制。
智能門禁密碼只設(shè)置了一位,電機(jī)直連仿真電路中的微處理器端口,本任務(wù)密碼可以設(shè)置多位,同時(shí)電機(jī)通過(guò)兩個(gè)繼電器連接微處理器輸出口。學(xué)生按鍵和設(shè)定的密碼一致,則開柜,否則柜子不開。知識(shí)準(zhǔn)備
首先需要了解繼電器的工作原理,微處理器端口的輸出電流很小,無(wú)法驅(qū)動(dòng)門鎖電機(jī)工作,因此需要在微處理器和門鎖之間加以一繼電器作為驅(qū)動(dòng)。繼電器線圈中有電流通過(guò)時(shí),開關(guān)被吸合到常開端,沒(méi)有電流時(shí),開關(guān)和常閉端連接。因此可以通過(guò)微處理器端口輸出高電平給繼電器線圈通電;輸出低電平,讓繼電器不工作。任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)準(zhǔn)備
如果需要控制電機(jī)的正轉(zhuǎn)和反轉(zhuǎn),那就需要用兩個(gè)繼電器,同一個(gè)時(shí)刻只有一個(gè)繼電器導(dǎo)通,另一個(gè)繼電器是不工作的,通過(guò)電路的連接,我們可以做到第1個(gè)繼電器工作,第2個(gè)繼電器不工作的時(shí)候使得電機(jī)的兩端接通正向電壓,當(dāng)?shù)?個(gè)繼電器不工作,第2個(gè)繼電器工作的時(shí)候,使得電機(jī)的兩端接通負(fù)向電壓,從而控制兩個(gè)繼電器的導(dǎo)通狀態(tài)來(lái)控制電機(jī)的正反轉(zhuǎn)。如下圖1-92(a)所示。為簡(jiǎn)化設(shè)計(jì),仿真時(shí)可先不考慮繼電器驅(qū)動(dòng),電機(jī)的正反轉(zhuǎn)直接由微處理器的P3.3和P3.4控制。如圖1-92(b)圖(a)繼電器與直流電機(jī)連接圖(b)直流電機(jī)與單片機(jī)直接連接圖1-92直流電機(jī)與繼電器或單片機(jī)的連接圖
任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施
宿舍儲(chǔ)物柜門鎖密碼預(yù)先設(shè)置好三位密碼。學(xué)生開柜門前按下矩陣鍵盤中的某三個(gè)按鍵,若此按鍵的值和設(shè)置的密碼一致,則連接門鎖的電機(jī)轉(zhuǎn)動(dòng)而開柜門,同時(shí)柜門邊的照明燈點(diǎn)亮,數(shù)碼管顯示按鍵次數(shù)。若是按鍵錯(cuò)誤,則電機(jī)不轉(zhuǎn)動(dòng),門禁不打開,門邊燈不亮,蜂鳴器報(bào)警。1、硬件電路設(shè)計(jì)
門鎖用電機(jī)表示,仿真中圖電機(jī)連接微處理器的P3.3和P3.4,報(bào)警蜂鳴器通過(guò)三極管連接到微處理器的P3.7。數(shù)碼管連接到P2端口。仿真電路圖和智能門禁設(shè)計(jì)的圖一樣,任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施2、軟件編程(1)設(shè)置密碼
定義一個(gè)變量password表示設(shè)定的三位密碼,在主函數(shù)中給password設(shè)置的初始值密碼為123。 password=123;(2)讀取矩陣鍵盤值
編寫scan_key();子函數(shù),得到按鍵值。(3)門禁打開還是關(guān)閉
判斷按鍵次數(shù)和讀取到的按鍵值,數(shù)碼管顯示按鍵的次數(shù),在第三次按鍵時(shí),對(duì)三次按鍵值進(jìn)行運(yùn)算,得到一個(gè)三位數(shù),判斷這個(gè)三位數(shù)是否和設(shè)置的密碼一致,如果一致則打開門禁,即點(diǎn)亮led燈,給電機(jī)正向通電,將電源正向加到電機(jī)上,電機(jī)轉(zhuǎn)動(dòng)延時(shí)一段時(shí)間后而開鎖。若是要關(guān)鎖則微處理器給電機(jī)反向通電,電源反向加到電機(jī)兩端,電機(jī)反轉(zhuǎn)一段時(shí)間后停止表示門鎖關(guān)閉。若是輸入錯(cuò)誤,led燈不亮,電機(jī)不工作,但是蜂鳴器導(dǎo)通報(bào)警。任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施調(diào)用scan_key()子函數(shù)讀取按鍵值,keynum_rd=scan_key();在主函數(shù)的while循環(huán)中,讀按鍵值,如果還沒(méi)有按鍵,即按鍵次數(shù)為0,則燈不亮,蜂鳴器不報(bào)警,數(shù)碼管不顯示,處于初始狀態(tài)。if(press_count==0){
led=1;beep=1;P2=0xff;}
如果有按鍵按下,則數(shù)碼管顯示按鍵次數(shù),并且只有當(dāng)?shù)谌伟存I后,判斷三次按鍵的值是否和設(shè)置密碼一致,若一致,則亮燈,電機(jī)正轉(zhuǎn)一段時(shí)間后反轉(zhuǎn)一段時(shí)間,停止轉(zhuǎn)動(dòng)。若不一致,則燈不亮,蜂鳴器報(bào)警三次后停止。任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施if(press_count==3){//第三次按鍵后得到一個(gè)三位數(shù)if((keynum_rd==password)&&(run_en)){//三次按鍵的三位數(shù)和設(shè)置密碼相同led=0; //燈亮
jdq1=1;jdq2=0;beep=1;//開鎖
delay(100);
jdq1=0;jdq2=1;beep=1;//關(guān)鎖
delay(100);
jdq1=0;jdq2=0;led=1;//電機(jī)停止,燈滅
run_en=0;//電機(jī)不允許轉(zhuǎn),
beep_en=1;//蜂鳴器允許報(bào)警
}if((keynum_rd!=password)&&(beep_en)){//輸入和設(shè)置不一致
任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施
led=1;run_en=1;beep_en=0;//燈不亮,電機(jī)允許轉(zhuǎn),//蜂鳴器不允許報(bào)警
for(k=0;k<3;k++){//報(bào)警循環(huán)三次 beep=0;P2=table[14];delay(100); beep=1;P2=0xbf;;delay(100);
}
}
beep=1;//蜂鳴器不叫
}
elsebeep=1;//不是三次按鍵則不報(bào)警
}//按鍵次數(shù)不為0任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施
其中,run_en和beep_en是位變量,控制電機(jī)轉(zhuǎn)動(dòng)和蜂鳴器報(bào)警的允許與否。
讀取按鍵的子函數(shù)和上個(gè)任務(wù)的子函數(shù)稍有區(qū)別。一旦有按鍵按下,給keynum變量賦予按鍵值的同時(shí),需要給按鍵次數(shù)變量press_count加1,按鍵的狀態(tài)變量立即更新為按下的狀態(tài),key_last1=0表示按鍵按下,否則,表示按鍵松開。下面是第一列的四行的四個(gè)按鍵的代碼。//讀取按鍵的值unsignedintscan_key(){//第一列四行 P1=0xfe;//11111110 temp=P1;
temp=temp&0xf0; if((temp!=0xf0)&&(key_last1)){ temp=P1;任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施
switch(temp){ case0xee:keynum=0;press_count++;key_last1=0;break; case0xde:keynum=1;press_count++;key_last1=0;break;
case0xbe:keynum=2;press_count++;key_last1=0;break;
case0x7e:keynum=3;press_count++;key_last1=0;break;
default:break; }//switch }//if if(temp==0xf0){key_last1=1;}其他三列四行的代碼和上面的類似。任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施
根據(jù)按鍵次數(shù),給三位按鍵值的百位十位和個(gè)位分別賦值,在第三次按鍵時(shí),將百位十位和個(gè)位數(shù)拼接成一個(gè)三位數(shù),這個(gè)就是要和設(shè)置密碼進(jìn)行比對(duì)的按鍵值。在生成了一個(gè)三位數(shù)后馬上返回這個(gè)數(shù)給主函數(shù)讀取按鍵的地方。任務(wù)1.6
企業(yè)案例——儲(chǔ)物柜門鎖智能控制任務(wù)實(shí)施//根據(jù)按鍵次數(shù)記錄三位數(shù)的值switch(press_count){
case1:keynum_bai=keynum;break;
case2:keynum_shi=keynum;break;
case3:if(add_en){
keynum3=keynum_bai*100+keynum_shi*10+keynum;
add_en=0;
}
returnkeynum3;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《語(yǔ)文詩(shī)歌欣賞:《春望》教學(xué)計(jì)劃》
- 汽車美容店業(yè)務(wù)轉(zhuǎn)讓合同
- 會(huì)計(jì)師事務(wù)所審計(jì)工作流程預(yù)案
- 提升客戶服務(wù)質(zhì)量措施
- 好官壞學(xué)生教育手冊(cè)
- 旅游服務(wù)安全免責(zé)協(xié)議書
- 農(nóng)業(yè)生產(chǎn)管理實(shí)施方案
- 商務(wù)往來(lái)文書格式規(guī)范與范例匯編
- 市場(chǎng)營(yíng)銷團(tuán)隊(duì)績(jī)效考核標(biāo)準(zhǔn)
- 高科技人才引進(jìn)及培養(yǎng)項(xiàng)目合作協(xié)議
- 口語(yǔ)教程4整套課件完整版教學(xué)教程最全電子講義教案
- 高壓氧艙課件
- 加德納多元智能測(cè)評(píng)量表【復(fù)制】
- 譯林英語(yǔ)四年級(jí)下冊(cè)4B各單元教學(xué)反思
- QC成果提高大跨度多節(jié)點(diǎn)曲面鋼桁架一次安裝合格率
- 國(guó)家電網(wǎng)有限公司十八項(xiàng)電網(wǎng)重大反事故措施(修訂版)
- 環(huán)氧乙烷固定床反應(yīng)器課程設(shè)計(jì)
- 班、團(tuán)、隊(duì)一體化建設(shè)實(shí)施方案
- 如何建構(gòu)結(jié)構(gòu)性思維 課后測(cè)試
- 施工方案(行車拆除)
- 開網(wǎng)店全部流程PPT課件
評(píng)論
0/150
提交評(píng)論