已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
- 1 舵機(jī)遠(yuǎn)距離數(shù)字控制 摘要 隨著船舶工業(yè)的發(fā)展以前我們所用的模擬電路控制舵機(jī)存在著這樣或那樣的問題已經(jīng)收到越來越多的關(guān)注。當(dāng)傳輸距離很長的時(shí)候,模擬電子線路就會(huì)容易收到外部信號(hào)的干擾從而出現(xiàn)舵機(jī)的角度出現(xiàn)大的偏差。并且如果反饋電位器長時(shí)間工作就會(huì)出現(xiàn)磨損的情況,另外模擬電路和電源的漂移等等諸多的問題都影響舵機(jī)準(zhǔn)確性?,F(xiàn)在很多大型的船舶都采用動(dòng)舵輪或者是液壓舵 ,但由于它是機(jī)械式的控制所以它的控制受人的反應(yīng)熟讀的影響,誤差范圍大,精確度不高。 本設(shè)計(jì)采用的控制器件有 ARM2148 和 STC89C52 單片機(jī)。采用 E6B2-CWZ5G 作為角度傳感器,通過ARM2148 控制舵機(jī)傳動(dòng),將角度傳給 STC89C52 單片機(jī)控制的 LCD1602 來顯示。單片機(jī)會(huì)定時(shí)采集舵機(jī)的角度從而實(shí)時(shí)的顯示相應(yīng)角度。其中 ARM2148 為核心控制器, STC89C52 單片機(jī)為輔助控制器。核心控制器與輔助控制器通過串口數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,從而實(shí)現(xiàn)對舵機(jī)的遠(yuǎn)程控制。這種數(shù)字電路控制舵機(jī)的方法精確度高,結(jié)構(gòu)簡單。數(shù)字電路控制舵機(jī),再結(jié)合輪船的動(dòng)力系統(tǒng), GPS 技術(shù)與 GIS 技術(shù)從而實(shí)現(xiàn)船舶的自動(dòng)駕駛。相對于汽車無人駕駛其難度更低,安全性跟高,前景很廣闊。 關(guān)鍵 詞: ARM2148;角度傳感器;遠(yuǎn)程控制;自動(dòng)駕駛; 目錄 1 緒論 . 3 2 系統(tǒng)相關(guān)技術(shù)分析 .錯(cuò)誤 !未定義書簽。 2.1 核心控制器件的選擇 . 錯(cuò)誤 !未定義書簽。 2.2 輔助器件的選擇 .錯(cuò)誤 !未定義書簽。 2.3 角度傳感器的選擇 .錯(cuò)誤 !未定義書簽。 2.4 顯示器件的選擇 . -5- 2.5 電動(dòng)機(jī)驅(qū)動(dòng)模塊的選擇 . -5- 2.6 小結(jié) . -6- 3 系統(tǒng)硬件電路設(shè)計(jì) .錯(cuò)誤 !未定義書簽。 3.1 電源的設(shè)計(jì) .錯(cuò)誤 !未定義書簽。 3.2 LCD 液晶顯示電路設(shè)計(jì) .錯(cuò)誤 !未定義書簽。 3.3 驅(qū)動(dòng)電路設(shè)計(jì) . -8- 4 系統(tǒng)軟件設(shè)計(jì) .錯(cuò)誤 !未定義書簽。 4.1 整體流程圖設(shè)計(jì) .錯(cuò)誤 !未定義書簽。 4.2 整體程序設(shè)計(jì)論證 .錯(cuò)誤 !未定義書簽。 4.2.1 角度檢測程序: .錯(cuò)誤 !未定義書簽。 4.2.2LCD1602 液晶顯示程序 .錯(cuò)誤 !未定義書簽。 4.2.3 串口通信程序 .錯(cuò)誤 !未定義書簽。 5 實(shí)現(xiàn)相關(guān)技術(shù) .錯(cuò)誤 !未定義書簽。 5.1 ARM2148 的簡介及運(yùn)用領(lǐng)域 錯(cuò)誤 !未定義書簽。 2 5.2 單片機(jī)的簡介及運(yùn)用 . 錯(cuò)誤 !未定義書簽。 6 總結(jié) .錯(cuò)誤 !未定義書簽。 致謝信 .錯(cuò)誤 !未定義書簽。 參考文獻(xiàn) .錯(cuò)誤 !未找到引用源。 附 錄程序清單和專利申請書 .錯(cuò)誤 !未定義書簽。 3 1.緒論 我們采用數(shù)字電路控制舵機(jī)是考慮了模擬電路控制舵機(jī)的缺點(diǎn)的,正是為了克服這些缺點(diǎn),從而跟好對舵機(jī)進(jìn)行遠(yuǎn)程控制,提高其精確度。論文中包括本次設(shè)計(jì)的整體簡介,硬件連接,軟件編程。 本次設(shè)計(jì)采用核心控制器件 ARM2148 和輔助控制器件 STC89C52 單片機(jī)。我們選擇ARM2148 是因?yàn)槠浔容^實(shí)用,也是初學(xué)者首先接觸的因此比較熟悉。至于單片機(jī)的 懸著 是由于其易用,外圍模塊較少。 系統(tǒng)的硬件包括: ARM 模塊、單 片機(jī)最小系統(tǒng)、 L298 電動(dòng)機(jī)驅(qū)動(dòng)模塊、角度傳感器、電動(dòng)機(jī)、 蓄電池, LCD1602、編碼器等。 軟件部分包括:電動(dòng)機(jī)驅(qū)動(dòng)模塊程序、 ARM 控制電動(dòng)機(jī)模塊、單片機(jī)控制 LCD1602顯示模塊。 4 2.系統(tǒng)相關(guān)技術(shù)分析 整體設(shè)計(jì)如下圖所示:采用 ARM2148 為核心控制器件, 采用STC89C52 來控制 LCD1602 來動(dòng)態(tài)顯示舵機(jī)角度,采用 C 語言編程實(shí)現(xiàn)各種邏輯的算法和邏輯控制,角度傳感器的脈沖信號(hào)作為中端引入 ARM2148,然后通過串口線通過單片機(jī)控制的液晶顯示顯示相應(yīng)的角度。按鍵 控制舵機(jī)左轉(zhuǎn)還是右轉(zhuǎn)。 圖 1 總體結(jié)構(gòu)圖 2.1 核心控制器件的選擇 核心控制器件的選擇沒有選擇單片機(jī)而是選擇 ARM2148 來控制是由于本次設(shè)計(jì)采用的是三級(jí)流水線模式。它需要軟件有很快的處理指令的速度。為了避免 52 單片機(jī)執(zhí)行指令過多出現(xiàn)卡死的情況,來實(shí)現(xiàn)多個(gè)操作同時(shí)進(jìn)行,使處理和存儲(chǔ)之間的操作更加流暢連續(xù),能提供 0.9MIPS/MHZ 的指令執(zhí)行速度,這樣在舵機(jī)快速偏轉(zhuǎn)時(shí),處理器仍然可以遠(yuǎn)遠(yuǎn)滿足編碼器瞬間給出的眾多條代碼值,使系統(tǒng)更加穩(wěn)定。并且我們首先接觸的也是 ARM2148 這款軟件相對于其它款的我們更熟悉。在整個(gè)系統(tǒng)中 ARM2148 起著控制電動(dòng)機(jī)驅(qū)動(dòng)模塊使電動(dòng)機(jī)運(yùn)轉(zhuǎn),同時(shí)接受來自角度傳感器的數(shù)據(jù)即舵機(jī)旋轉(zhuǎn)角度然后將其傳輸給STC89C52 單片機(jī)從而實(shí)現(xiàn)角度的顯示。因此它是核心模塊。 2.2 輔助器件的選擇 輔助模塊只需接受來自 ARM2148 的關(guān)于舵機(jī)角度的數(shù)據(jù)和控制 LCD1602 液晶顯示。由于 STC89C52單片機(jī)功耗低、性能高、靈活性高且使我們經(jīng)常接觸到的單片機(jī)類軟件,所以我們選擇了這款單片機(jī)。 2.3 角度傳感器的選擇 角度傳感我們我們采用工業(yè)用 E6B2-CWZ5G 角度傳感器,它擁有非常低的阻尼,在軸上固定一重物只需要 10 來克就能將實(shí)時(shí)角度準(zhǔn)確的傳輸?shù)?ARM2148 中。它是一種增量式的旋轉(zhuǎn)譯碼器,它是通過內(nèi)部兩個(gè)光敏接受管轉(zhuǎn)化其角度碼盤的時(shí)序和相位關(guān)系,從而得到其角度碼盤角度位移量增加或減少。增加為正方向,減少為反方向。它具有價(jià)格低廉和簡易的優(yōu)勢,因此我們選擇了它。如下圖為它的工作原理: 角度傳感器 主控制系統(tǒng)()() 液晶顯示器 輔助控制系統(tǒng) 按鍵控制 電 機(jī)驅(qū)動(dòng)模塊 串口線 5 圖 2 E6B2-CWZ5G 工作原理圖 2.4 顯示器件的選擇 顯示模塊我們有兩種設(shè)計(jì)方案,分別為數(shù)碼管顯示和液晶顯示。數(shù)碼管靜態(tài)顯示編程簡單,但其占用的 I/O 口過多 ,電路復(fù)雜,成本高。動(dòng)態(tài)顯示又不能滿足太復(fù)雜的電路。因此我們選擇液晶顯示。液晶顯示就克服了數(shù)碼管顯示的缺點(diǎn),同時(shí)它還具有功耗低、顯示信息多、操作簡便等優(yōu)點(diǎn)。 2.5 電動(dòng)機(jī)驅(qū)動(dòng)模塊的選擇 驅(qū)動(dòng)模塊我們選擇的是 L298N, L298N 是 ST 公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動(dòng)芯片。該芯片采用 15 腳封裝。它內(nèi)含含兩個(gè) H 橋的高電壓大電流全橋式驅(qū)動(dòng)器,可以用來驅(qū)動(dòng)直流電動(dòng)機(jī)和步進(jìn)電動(dòng)機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端, 使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用 L298N 芯片驅(qū)動(dòng)電機(jī),該芯片可以驅(qū)動(dòng)一臺(tái)兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動(dòng)兩臺(tái)直流電機(jī)。而且 L298N 有過電流保護(hù)功能,當(dāng)出現(xiàn)電機(jī)卡死時(shí),可以保護(hù)電路和電機(jī)等。 因此,我們采用安全性更高的 L298N 驅(qū)動(dòng)芯片來驅(qū)動(dòng)電機(jī) ,。以下為該芯片的相關(guān)參數(shù): 額定電流 2A 額定電壓 12.5V 額定功率 25W 最大電流 3A 最大電壓 46V 2.6 小結(jié) 經(jīng)過一番的論證與比較,我們決定了系統(tǒng)各個(gè)主要模塊的方案如下:電機(jī) 驅(qū)動(dòng)模塊采用 L298N;角度傳感模塊采用 E6B2-CWZ5G 角度傳感器;液晶顯示模塊采用現(xiàn)成的數(shù)碼管;電源采用單電源雙輸出模塊。 硬件電路設(shè)計(jì) 3.1 電源的設(shè)計(jì) 圖 3 電源原理圖 6 3.2 LCD 液晶顯示電路設(shè)計(jì) 圖 4 液晶顯示 3.3 驅(qū)動(dòng)電路設(shè)計(jì) 圖 5 驅(qū)動(dòng)電路 3.系統(tǒng)軟件設(shè)計(jì) 4.1 整體流程圖設(shè)計(jì) EN A6EN B11IN15IN27IN310IN412OUT12OUT23OUT313OUT414ISEN A1ISEN B15VS4VSS9GND8U1L298N0.1uFC2104100uFC1+5V +12VD11N4007D21N4007D31N4007D41N4007D51N4007D61N4007D71N4007D81N40070.1uFC4104100uFC3+5V+12V電機(jī)驅(qū)動(dòng) L298NLED11KR112PWMA12Power 5V1234IN1-IN41KR21KR31KR4LED2LED3LED41KR51KR61KR71KR812PWMB12Power 12V12M112M212 34TLP521-112 34TLP521-212 34TLP521-312 34TLP521-4+5V +5V+5V+5V 7 N Y N Y Y 4.2 整體程序設(shè)計(jì)論證 4.2.1 角度檢測程序 我們采用的角度傳感器是通過計(jì)算脈沖的數(shù)量來計(jì)算小車的偏轉(zhuǎn)角的。由于脈沖的時(shí)間很短,如果采用端口掃描那么在 ARM2148 沒有執(zhí)行掃描時(shí)就會(huì)錯(cuò)過一些脈沖的檢測,數(shù)初始化各種參數(shù) 開始 偏轉(zhuǎn) 左轉(zhuǎn)(大于現(xiàn)有角度)度) 向單片機(jī)發(fā)送角度 右轉(zhuǎn)(小于現(xiàn)有角度) 檢測限位開關(guān) 檢測串口 和現(xiàn)有角度對比 8 據(jù)就會(huì)出現(xiàn)錯(cuò)誤。我們采用外部中斷來計(jì)算角度,程序很短所以可以迅速的執(zhí)行不會(huì)耽誤其它程序執(zhí)行的執(zhí)行,數(shù)值在 0-900,實(shí)際值為 0-90 度。 /*/ * 函數(shù)名稱: void _irq IRQ_Eint3(void) * 功能描述: 外部中斷計(jì)算旋轉(zhuǎn)角度 * 參 數(shù): 每一個(gè)角度有不同的脈沖組成 /*/ void _irq IRQ_Eint3(void) /* a2 脈沖觸發(fā)中斷服務(wù)主程序 */ / EXTINT = EINT3; /* clear interrupt 中斷服務(wù)主程序 */ k=IOPIN0; /輸入狀態(tài) if(k&1KEY3)=0) /測試 b2 脈沖位置 eint2_counter+; /* 如果超前 +*/ else eint2_counter-; /* 如果超前 +*/ ii5=eint2_counter ; /脈沖數(shù)傳送到 ii5 寄存器 EXTINT =8; /* clear interrupt 中斷服務(wù)主程序 */ / 清除 EINT3 中斷標(biāo)志 VICVectAddr = 0x00; / 通知 VIC 向量中斷結(jié)束 void EINT1_Handler (void) _irq/* a1 脈沖觸發(fā)中斷服務(wù)主程序 */ IENABLE; /* handles nested interrupt 嵌套中斷 */ k=IOPIN0; /輸入狀態(tài) if(k&1KEY1)=0) /測試 b 脈沖位置 KEY1= b /IOSET1 = 0x000F0000; eint1_counter+; /* 如果超前 +*/ else /IOCLR1 = 0x000F0000; eint1_counter-; /*如果反轉(zhuǎn) - */ /測試原點(diǎn)位置 if(k&1KEY2)=1&(ii3 =0) ) /原本原點(diǎn)位置從 0 改變?yōu)?1 eint1_counter=1000; ii3 = k&1KEY2 ; / 記錄 z 原點(diǎn)位置 0、 1,KEY2=z ii4 =eint1_counter ; /脈沖數(shù)傳送到 ii4 寄存器 IDISABLE; 9 IOPIN1=0xf50000; VICVectAddr = 0; EXTINT =2; /* clear interrupt 中斷服務(wù)主程序 */ 4.2.2 LCD1602 液晶顯示程序 本系統(tǒng)采用的是 1602 液晶顯示。前面我給大家介紹了選擇該軟件的原因。它的顯示是由 STC89C52 控制的。它顯示的角度由操作臺(tái)操作,它將操作臺(tái)實(shí)時(shí)操作顯示出來,同時(shí)由串口線發(fā)送數(shù)據(jù)給 ARM2148 控制舵機(jī)的旋轉(zhuǎn)。 程序如下: # include /* P1-DB0 DB7 P2.0-RS P2.1-RW P2.2-E */ # define LCD_DB P1 sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /*定義函數(shù) */ # define uchar unsigned char # define uint unsigned int void LCD_init(void);/ void LCD_write_command(uchar command);/寫指令函數(shù) 10 void LCD_write_data(uchar dat);/寫數(shù)據(jù)函數(shù) void LCD_disp_char(uchar x,uchar y,uchar dat);/在某個(gè)屏幕位置上顯示一 個(gè)字符 ,X( 0-16),y(1-2) /void LCD_check_busy(void);/檢查忙函數(shù)。我沒用到此函數(shù),因?yàn)橥ㄟ^ 率極 低。 void delay_n40us(uint n);/延時(shí)函數(shù) /* /*初始化函數(shù) * void LCD_init(void) LCD_write_command(0x38);/設(shè)置 8 位格式, 2 行, 5x7 LCD_write_command(0x0c);/整體顯示,關(guān)光標(biāo),不閃爍 LCD_write_command(0x06);/設(shè)定輸入方式,增量 不移位 LCD_write_command(0x01);/清除屏幕顯示 delay_n40us(100); /* /*寫指令函數(shù) * void LCD_write_command(uchar dat) LCD_DB=dat; LCD_RS=0;/指令 11 LCD_RW=0;/寫入 LCD_E=1;/允許 LCD_E=0; delay_n40us(1); /* /*寫數(shù)據(jù)函數(shù) * void LCD_write_data(uchar dat) LCD_DB=dat; LCD_RS=1;/數(shù)據(jù) LCD_RW=0;/寫入 LCD_E=1;/允許 LCD_E=0; delay_n40us(1); /* /*顯示 一個(gè)字符函數(shù) * void LCD_disp_char(uchar x,uchar y,uchar dat) uchar address; 12 if(y=1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); /* /*檢查忙函數(shù) * void LCD_check_busy() do LCD_E=0; /for 循環(huán)作延時(shí),普通指令只要 1 次循就可完成。清屏指令 LCD_RS=0; /要用 200 次 循環(huán)便能完成。 LCD_RW=1; LCD_DB=0xff; LCD_E=1; while(LCD_DB7=1); */ /*延時(shí)函數(shù) * void delay_n40us(uint n) 13 uint i; uchar j; for(i=n;i0;i-) for(j=0;j2;j+); /在這個(gè)延時(shí)循環(huán)函數(shù)中我只做了 2 次循環(huán), /* /*主函數(shù) * void main(void) LCD_init(); LCD_disp_char(0,1,A); while(1); 4.2.3 串口通信程序 串口在本設(shè)計(jì)中起著至關(guān)重要的作用,它連接了單片機(jī)和 ARM,它將 ARM 接受的角度傳感器的數(shù)據(jù)送給單片機(jī)讓單片機(jī)把實(shí)時(shí)角度與操作臺(tái)的操作角度對比然后將指令在送給 ARM 再由 ARM 控制舵機(jī)左轉(zhuǎn)還是右轉(zhuǎn)。 程序如下: /* P0.14 中斷功能演示 按下板子 INT 鍵, 2 組 4 個(gè) LED 交替滅或亮 . */ #include LPC214x.H /* LPC21xx definitions */ #include type.h #include irq.h 14 #include extint.h #include Config.H /* standard I/O .h-file */ #pragma _printf_args; /#include #include / #define uchar unsigned char #define CR 0x0D #define UART_BAUD(baud)(unsigned int)(FOSC*PLL_M ) / (baud *4 *16 ) #define uint unsigned int #define RW 22 /讀寫控制端 0 為寫 1 為讀 #define RS 4 /A0 為 1 時(shí)是數(shù)據(jù), 0 時(shí)為指令數(shù)據(jù) #define Elcm 21 / #define busy 0x0800 extern Scan_Key(void); /int printf( char ) ; extern int ii4,ii5; int xx1, x,xx4,xx5,ii6 ; / int i2,k , i3 ; unsigned int io_data=1,rcv_dat; unsigned char const mcu123=WWW.MCU222.COM ; unsigned long val1,val3,val; int i3,i2 ,t=0x31 , tmp ; uchar mcu124=0x34 ; uchar mcu122= ; long su44; unsigned char key,i,i4, strdata20 ; /* 系統(tǒng)設(shè)置 , Fosc、 Fcclk、 Fcco、 Fpclk 必須定義 */ #define Fosc 12000000 /Crystal frequence,10MHz25MHz, should be the same as actual status. /應(yīng)當(dāng)與實(shí)際一至晶振頻率 ,10MHz25MHz,應(yīng)當(dāng)與實(shí)際一至 #define Fcclk (Fosc*1) /System frequence,should be (132)multiples of Fosc,and should be equal or less than 60MHz. /系統(tǒng)頻率,必 須為 Fosc 的整數(shù)倍 (132),且 =60MHZ #define Fcco (Fcclk *1) /CCO frequence,should be 2、 4、 8、 16 multiples of Fcclk, ranged from 156MHz to 320MHz. /CCO 頻率,必須為 Fcclk 的 2、 4、 8、 16 倍,范圍為 156MHz320MHz #define Fpclk (Fcclk / 4) * 1 /VPB clock frequence , must be 1、 2、 4 multiples of (Fcclk / 4). /VPB 時(shí)鐘頻率,只能為 (Fcclk / 4)的 1、 2、 4 倍 #define BEEP 18); / 0X1; 0;/ 0 U0DLL = (unsigned char)Baud; / 0X86; 0X5D; / 8 U0LCR = 0x03; /* DLAB = 0 */ /* * 函數(shù)名稱: UART0_GetByte() * 函數(shù)功能:從串口接收 1 字節(jié)數(shù)據(jù),使 用查詢方式接收。 * 入口參數(shù):無 * 出口參數(shù):接收到的數(shù)據(jù) */ void UART0_GetByte (void) while (U0LSR & 0x01) =0); / 等待接收標(biāo)志置位 rcv_dat = U0RBR; / 讀取數(shù)據(jù) U0LSR =0x60; /return (rcv_dat); /* 接收一個(gè)字節(jié) */ int Get_Byte (void) /* Read character from Serial Port */ while (!(U0LSR & 0x01); return (U0RBR); 16 /* * 函數(shù)名稱: UART0_GetStr() * 函數(shù)功能:從串口接收 * 入口參數(shù): s 指向接收數(shù)據(jù)數(shù)組的指針 * n 接收的個(gè)數(shù) * 出口參數(shù): 無 */ void UART0_GetStr (unsigned int n) / unsigned char *s, for ( ; n0; n-) UART0_GetByte () ; / UART0_GetByte () ; strdata tmp=rcv_dat ; / *s=rcv_dat ; / *s=rcv_dat; tmp+; /* * 函數(shù)名稱: UART0_SendByte() * 函數(shù)功能:向串口發(fā)送字節(jié)數(shù)據(jù),并等待發(fā)送完畢,查詢方式。 * 入口參數(shù): dat 要發(fā)送的數(shù)據(jù) * 出口參數(shù):無 */ void UART0_SendByte (unsigned char dat) U0THR = dat; / 寫入數(shù)據(jù) while (U0LSR & 0x20) = 0); / 等待數(shù)據(jù)發(fā)送完畢 /* * 函數(shù)名稱: UART0_SendStr() * 函數(shù)功 能:向串口發(fā)送一字符串 * 入口參數(shù): str 要發(fā)送的字符串的指針 * 出口參數(shù):無 */ void UART0_SendStr (unsigned int const *str) while (1) if (*str = 0) break; / 遇到結(jié)束符,退出 UART0_SendByte(*str+); / 發(fā)送數(shù)據(jù) /* 發(fā)送一個(gè)字節(jié) */ void Sent_Byte2(unsigned char data) 17 U0THR = data; / 發(fā)送數(shù)據(jù) while( (U0LSR&0x20)=0 ); / 等待數(shù)據(jù)發(fā)送完畢 int sendchar (int ch) /* Write character to Serial Port */ if (ch = n) while (!(U0LSR & 0x20); U0THR = CR; /* output CR */ while (!(U0LSR & 0x20); return (U0THR = ch); /* 發(fā)送一串字符 */ void Sent_Str (unsigned char const *str) while(1) if( *str = 0 ) break; Sent_Byte2(*str+); / 發(fā)送數(shù)據(jù) void delay(unsigned int i) unsigned int k=300; while(i0) i-; while(k1)k-; / void delayms2(unsigned int i) /* Delay function */ unsigned int n; while(i1) for(n=18;n1;n-); i-; 18 void delayms (unsigned int i) /* Delay function */ unsigned int n; while(i1) for(n=8535;n1;n-); i-; void delay1s(unsigned char i) while(i1) i-; delayms(20); void init_port(void) /port initialized IODIR1=0x00FF0000; IODIR0=0x00600010; / IODIR0=0x40600010; void Io_Set(uchar pin) /單個(gè) IO 口置位函數(shù) unsigned int io_data=1; io_data=io_datapin; IOSET0=io_data; /IOSET0 為 IO 線 上置位寄存器, 1 有效, 0 無 void Io_Clr(uchar pin) /單個(gè) IO 口清零函數(shù) unsigned int io_data=1; io_data=io_datapin; IOCLR0=io_data; /IOCLR0 為 IO 線上清零寄存器, 1 有效, 0 無 void Io_Set1(uchar pin) /單個(gè) IO 口置位函數(shù) unsigned int io_data=1; io_data=io_datapin; IOSET1=io_data; /IOSET0 為 IO 線上置位寄存器, 1 有效, 0 無 void Io_Clr1(uchar pin) /單個(gè) IO 口清零函數(shù) 19 unsigned int io_data=1; io_data=io_datapin; IOCLR1=io_data; /IOCLR0 為 IO 線上清零寄存器, 1 有效, 0 無 void Sent_Byte(unsigned char data) unsigned char i; for(i=0;i1; /void init_port(void) / /port initialized /IODIR1=0x00FF0000; /IODIR0=0x40620010; / /*= 正常讀寫操作之前必須檢測 LCD 控制器狀態(tài) : CS=1 RS=0 RW=1 DB7: 0 LCD 控制器空閑 ; 1 LCD 控制器忙 =*/ void WaitForEnable( void ) /unsigned int i; Io_Clr(RS); delay(1); Io_Set(RW); delay(1); Io_Set(Elcm); delayms(30); / i=IO1PIN; /讀 P1 while( IO1PIN & busy ); Io_Clr(Elcm); 20 /*= 寫控制字符子程序 : E=1 RS=0 RW=0 =*/ void LcdWrite_CMD( uchar CMD,uchar AttribC ) if (AttribC) WaitForEnable(); / 檢測忙信號(hào) ? Io_Clr(RS); delay(2); Io_Clr(RW); delay(2); Sent_Byte(CMD); Io_Set(Elcm); delay(2); delay(2); Io_Clr(Elcm); delay(2); /*= 當(dāng)前位置寫字符子程序 : E =1 RS=1 RW=0 =*/ void LcdWrite_D( char dataW ) WaitForEnable(); / 檢測忙信號(hào) Io_Set(RS); delay(2); Io_Clr(RW); delay(2); Sent_Byte(dataW); Io_Set(Elcm); delay(2); Io_Clr(Elcm); delay(2); /*= 顯示光標(biāo)定位 21 =*/ void LocateXY12864(char posx,char posy) uchar temp; / posy &= 0x1; / if ( posy )temp |= 0x98; / /if ( posy )temp |= 0x40; / temp = posx & 0x0f; temp = posx ; temp = posx +temp-1; WaitForEnable() ; / temp |= 0x80; LcdWrite_CMD(temp,1); /指令寫定位 void LocateXY( char posx,char posy) uchar temp; temp = posx & 0xf; posy &= 0x1; if ( posy )temp |= 0x40; / temp |= 0x80; LcdWrite_CMD(temp,0);/指令寫定位 /*= 按指定位置顯示數(shù)出一個(gè)字符 =*/ void DispOneChar(uchar x,uchar y,uchar Wdata) LocateXY ( x, y ); / 定位顯示地址 LocateXY12864( x, y ); LcdWrite_D( Wdata); / 寫字符 void DispOneChar2(uchar x,uchar y,uchar Wdata) / LocateXY( x, y ); /1602 定位顯示地址 / LocateXY( x, y ); / 定位顯示地址 /lcd_pos(x, y); LcdWrite_D(t ); / 寫字符 /*= 顯示字符串 =*/ void disp(uchar x,uchar y,const unsigned char *ptr) uchar i,l=0; while (ptrl 31)l+; 22 for (i=0;il;i+) DispOneChar(x+,y,ptri); if ( x = 16 ) x = 0; y = 1; /初始化 void lcdreset(void) LcdWrite_CMD(0x38, 0); /顯示模式設(shè)置(不測試忙信號(hào))共三次 delayms(50); LcdWrite_CMD(0x38, 0); delayms(50); LcdWrite_CMD(0x38, 0); delayms(50); LcdWrite_CMD( 0x38, 1); LcdWrite_CMD( 0x08, 1); LcdWrite_CMD( 0x01, 1); LcdWrite_CMD( 0x06, 1); LcdWrite_CMD( 0x0f, 1); /*= 顯示字符串 (電壓) =*/ void disp1(uchar x,uchar y,int ii) uchar i,l=5; / L 規(guī)定數(shù)字位數(shù) vv1,:小數(shù)點(diǎn)參數(shù) unsigned int hu10 ; /u1 , LocateXY( x, y ); / 定位顯示地址 xx1=ii ; /脈沖數(shù)傳送到 xx1(借用專用變量 ) hu2=xx1%100000/10000+0;/取余數(shù)求整數(shù) ,加 0x30 hu3=xx1%10000/1000+0;/(xx1-hu2*100000) ; hu4=xx1%10000/1000+0;/ 1000 位余數(shù) hu5=xx1%1000/100+0;/v1/100 位余數(shù) /1000 位 v / hu6 =xx1%100/10+0; /10 位余數(shù) hu7=xx1%10+0; /取個(gè)位余數(shù) 23 t=0; x=0; for (i=1;i31)l+; for (i=0;il;i+) DispOneChar(x+,y,ptri); if ( x = 16 ) x = 0; y = 1; t=t +1 ; /* * Main Function main() */ int main (void) /* 初始化中斷 */ int i22; unsigned char j1,j2 ; unsigned int i1,k1; init_port(); delay(1); / lcdreset(); / disp(0,0 , zeg hz ) ; delay(1); /UART0_Ini () ; 24 / U0FCR = 0x81; / 使能 FIFO,并設(shè)置觸發(fā)點(diǎn)為 8 字節(jié) / U0FCR = 0x00; /關(guān)閉 FIFO 設(shè)置觸發(fā)為 1 字節(jié) delay(1); /Sent_Str(a1); delay(1); / printf (0x34) ; EINTInit(); /disp1(4,1 , ii4 ); EXTINT = 0x09; / 清除 EINT0、 EINT3 中斷標(biāo)志 VICIntEnable = (1 14)|(1 17); Init_Uart0(UART_BAUD(9600) ; Sent_Str( dddd) ; while( 1 ) /一直等 . / disp(0,1 , dfghg ) ; / ; k1=IOPIN0; /輸入狀態(tài) k1=k1&0x20; if(k1=0x20) /測試 b 脈沖位置 j2=1; else j2=0; / disp(1,1 ,xx) ; / delay(1); / j1=0; if(j2=1) / Init_Uart0(UART_BAUD(9600) ; / UART0_GetStr( 12); / 從串口接收 12 個(gè)字符 Sent_Str(4321) ; Sent_Str(asdfg) ; for (i1=0;i112;) tmp=0; i1+; if(0x37= strdata4) Sent_Byte2(strdatai1); / 回傳接收到的數(shù)據(jù) if(0x41= strdata1&0x41= strdata2 ) /輸入 AA 開頭即可讀出后 3 位 for (j1=4;j18;j1+ ) Sent_Byte2(strdataj1); / 回傳接收到的數(shù)據(jù) / UART0_SendByte (strdataj1); 25 / ii6=strdataj1; DispOneChar2(3+j1,1,strdataj1) ; /disp1(4,1 ,ii6) ; i2=0; if(j2=0) / EINTInit(); / EXTINT = 0x0f; / 清除 EINT0、 EINT3 中斷標(biāo)志 /VICIntEnable = (1 14)|(1 17)|(1 80) disp1(4,0 ,ii4 ) ; xx5=ii4; i22=0; / delay(10 ); delayms(1) ; i22+; if( xx4=ii5 ) /PLLCON else if ( i2280) disp1(4,1 ,ii5 ) ; xx4=ii5; i22=0; / delay(1 ); / delayms(1) ; i22+; / Scan_Key() ; / / return 0; /* * End Of File */ 26 4.系統(tǒng)實(shí)現(xiàn)的相關(guān)技術(shù) 5.1 ARM2148 簡介及運(yùn)用領(lǐng)域 定義 嵌入式操作系統(tǒng)( Embedded Operating System,簡稱: EOS)是指用于 嵌入式系統(tǒng) 的 操作系 統(tǒng) 。嵌入式操作系統(tǒng)是一種用途廣泛的 系統(tǒng)軟件 ,通常包括與硬件相關(guān)的底層 驅(qū)動(dòng) 軟件、系統(tǒng) 內(nèi)核 、設(shè)備驅(qū)動(dòng)接口、 通信協(xié)議 、 圖形界面 、標(biāo)準(zhǔn)化 瀏覽器 等。嵌入式操作系統(tǒng)負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬件資源的分配、任務(wù) 調(diào)度 ,控制、協(xié)調(diào)并發(fā)活動(dòng)。它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達(dá)到系統(tǒng)所要求的功能 。 特點(diǎn) 1)系統(tǒng) 內(nèi)核 小。由于 嵌入式系統(tǒng) 一般是應(yīng)用于小型電子裝置的, 系統(tǒng)資源 相對有限,所以 內(nèi)核 較之 傳統(tǒng)的操作系統(tǒng)要小得多。 比如 Enea 公司的 OSE 分布式系統(tǒng) , 內(nèi)核 只有 5K。 2)專用性強(qiáng)。 嵌入式 系統(tǒng) 的個(gè)性化很強(qiáng),其中的軟件系統(tǒng)和硬件的結(jié)合非常緊密,一般要針對硬件進(jìn)行系統(tǒng)的移植,即使在同一品牌、同一系列的產(chǎn)品中也需要根據(jù)系統(tǒng)硬件的變化和增減不斷進(jìn)行修改。同時(shí)針對不同的任務(wù),往往需要對系統(tǒng)進(jìn)行較大更改,程序的編譯下載要和系統(tǒng)相結(jié)合,這種修改和 通用軟件 的 “升級(jí) ”是完全兩個(gè)概念。 3)系統(tǒng)精簡。 嵌入式系統(tǒng) 一般沒有系統(tǒng)軟件和應(yīng)用軟件的明顯區(qū)分,不要求其功能設(shè)計(jì)及實(shí)現(xiàn)上過于復(fù)雜,這樣一方面利于 控制系統(tǒng) 成本,同時(shí)也利于實(shí)現(xiàn)系統(tǒng)安全。 4)高實(shí)時(shí)性的系統(tǒng)軟件 (OS)是 嵌入式軟件 的基本要求。而且軟件要求固態(tài)存儲(chǔ),以提高速度; 軟件代碼 要求高質(zhì)量和高可靠性。 5) 嵌入式軟件開發(fā) 要想走向標(biāo)準(zhǔn)化,就必須使用多任務(wù)的操作系統(tǒng)。 嵌入式系統(tǒng) 的 應(yīng)用程序 可以沒有操作系統(tǒng)直接在芯片上運(yùn)行;但是為了合 理地調(diào)度多任務(wù)、利用 系統(tǒng)資源 、 系統(tǒng)函數(shù) 以及和專家 庫函數(shù) 接口,用戶必須自行選配 RTOS( Real Time Operating System)開發(fā)平臺(tái),這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開 發(fā)時(shí)間,保障 軟件質(zhì)量 。 6) 嵌入式系統(tǒng)開發(fā) 需要開發(fā)工具和環(huán)境。由于其本身不具備 自舉 開發(fā)能力,即使設(shè)計(jì)完成以后用戶通常也是不能對其中的程序功能進(jìn)行修改的,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā) ,這些工具和環(huán)境一般是基于 通用計(jì)算機(jī) 上的軟硬件設(shè)備以及各種邏輯分析儀、混合信號(hào)示波器等。開發(fā)時(shí)往往有主機(jī)和目標(biāo)機(jī)的概念,主機(jī)用于程序的開發(fā),目標(biāo)機(jī)作為最后的執(zhí)行機(jī),開發(fā)時(shí)需要交替結(jié)合進(jìn)行。 核心 嵌入式系統(tǒng)的核心是 嵌入式微處理器 。 嵌入式微處理器 一般具備以下 4 個(gè)特點(diǎn): 1)對實(shí)時(shí)任務(wù)有很強(qiáng)的支持能力,能完成多任務(wù)并且有較短的 中斷響應(yīng)時(shí)間 ,從而使內(nèi)部的代碼和實(shí)時(shí)內(nèi)核心的執(zhí)行時(shí)間減少到最低限度。 2)具有功能很強(qiáng)的存儲(chǔ)區(qū)保護(hù)功能。這是由于 嵌入式系統(tǒng) 的 軟件結(jié)構(gòu) 已模塊化, 27 而為了避免在軟件模塊之間出現(xiàn)錯(cuò)誤的交叉作用,需要設(shè)計(jì)強(qiáng)大的存儲(chǔ)區(qū)保護(hù)功能,同時(shí)也有利于軟件診斷。 3)可擴(kuò)展的處理器結(jié)構(gòu),以能最迅速地開發(fā)出滿足應(yīng)用的最高性能的 嵌入式微處理器 。 4)嵌入式微處理器 必須功耗很低,尤其 是用于便攜式的無線及移動(dòng)的計(jì)算和通信設(shè)備中靠電池供電的 嵌入式系統(tǒng) 更是如此,如需要功耗只有 mW 甚至 W 級(jí)。 應(yīng)用 工業(yè)控制 基于嵌入式芯片的工業(yè)自動(dòng)化設(shè)備將獲得長足的發(fā)展,目前已經(jīng)有大量的 8、 16、 32 位嵌入式微控制器在應(yīng)用中,網(wǎng)絡(luò)化是提高生產(chǎn)效率和產(chǎn)品質(zhì)量、減少人力資源主要途徑,如工業(yè)過程控制、數(shù)字機(jī)床、電力系統(tǒng)、電網(wǎng)安全、電網(wǎng)設(shè)備監(jiān)測、石油化工系統(tǒng)。就傳統(tǒng)的工業(yè)控制產(chǎn)品而言,低端型采用的往往是 8位 單片機(jī) 。但是隨著技術(shù)的發(fā)展, 32位、 64位的處理器逐漸成為工業(yè)控制設(shè)備的核心,在未來幾年內(nèi)必將獲得長足的發(fā)展。 交通管理 在車輛導(dǎo)航、 流量控制 、信息監(jiān)測與汽車服務(wù)方面,嵌入式系統(tǒng)技術(shù)已經(jīng)獲得了廣泛的應(yīng)用,內(nèi)嵌GPS 模塊, GSM 模塊的移動(dòng)定位 終端 已經(jīng)在各種運(yùn)輸行業(yè)獲得了成功的使用。目前 GPS 設(shè)備已經(jīng)從尖端產(chǎn)品進(jìn)入了普通百姓的家庭,只需要幾千元,就可以隨時(shí)隨地找到你的位置。 家庭智能管理系統(tǒng) 水、電、煤氣表的遠(yuǎn)程 自動(dòng)抄表 ,安全防火、防盜系統(tǒng),其中嵌有的專用控制芯片將代替?zhèn)鹘y(tǒng)的人工檢查,并實(shí)現(xiàn)更高,更準(zhǔn)確和更安全的性能。目前在服務(wù)領(lǐng)域,如遠(yuǎn)程點(diǎn)菜器等已經(jīng)體現(xiàn)了嵌入式系統(tǒng)的優(yōu)勢。 機(jī)器人 嵌入式 芯片的發(fā)展將使 機(jī)器人 在微型化,高智能方面優(yōu)勢更加明顯,同時(shí)會(huì)大幅度降低機(jī)器人的價(jià)格,使其在工業(yè)領(lǐng)域和服務(wù)領(lǐng)域獲得更廣泛的應(yīng)用。 這些應(yīng)用中,可以著重于在控制方面的應(yīng)用。就遠(yuǎn)程家電控制而言,除了開發(fā)出支持 TCP/IP 的嵌入式系統(tǒng)之外,家電產(chǎn)品控制協(xié)議也需要制訂和統(tǒng)一,這需要家電生產(chǎn)廠家來做。同樣的道理,所有基于網(wǎng)絡(luò)的遠(yuǎn)程控制器件都需要與嵌入式系統(tǒng)之間實(shí)現(xiàn)接口,然后再由嵌入式系統(tǒng)來控制并通過網(wǎng)絡(luò)實(shí)現(xiàn)控制。所以 ,開發(fā)和探討嵌入式系統(tǒng)有著十分重要的意義。 28 5.2 單片機(jī)的簡介及運(yùn)用 定義 單片機(jī)是一種集成在 電路 芯片,是采用 超大規(guī)模集成電路 技術(shù)把具有數(shù)據(jù)處理能力的中央處理器 CPU 隨機(jī)存儲(chǔ)器 RAM、 只讀存儲(chǔ)器 ROM、多種 I/O 口和中斷系統(tǒng)、定時(shí)器 /計(jì)時(shí)器 等功能(可能還包括顯示驅(qū)動(dòng)電路、 脈寬調(diào)制 電路、模擬多路轉(zhuǎn)換器、 A/D 轉(zhuǎn)換器 等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的 計(jì)算機(jī)系統(tǒng) 。從上世紀(jì) 80 年代,由當(dāng)時(shí)的 4 位、 8 位單片機(jī),發(fā)展到現(xiàn)在的 32 位 300M 的高速單片機(jī)。 從上世紀(jì) 80 年代,由當(dāng)時(shí)的 4 位, 8 位單片機(jī),發(fā)展到現(xiàn)在的 32 位 300M 的高速單片機(jī)。 工作過程 單片機(jī)自動(dòng)完成賦予它的任務(wù)的過程,也就是單片機(jī) 執(zhí)行程序的過程,即一條條執(zhí)行的指令的過程,所謂指令就是把要求單片機(jī)執(zhí)行的各種操作用的命令的形式寫下來,這是在設(shè)計(jì)人員賦予它的指令系統(tǒng)所決定的,一條指令對應(yīng)著一種基本操作;單片機(jī)所能執(zhí)行的全部指令,就是該單片機(jī)的指令系統(tǒng),不同種類的單片機(jī),其指令系統(tǒng)亦不同。為使單片機(jī)能自動(dòng)完成某一特定任務(wù),必須把要解決的問題編成一系列指令(這些指令必須是選定單片機(jī)能識(shí)別和執(zhí)行的指令),這一系列指令的集合就成為程序,程序需要預(yù)先存放在具有存儲(chǔ)功能的部件 存儲(chǔ)器中。存儲(chǔ)器由許多存儲(chǔ)單元(最小的存儲(chǔ)單位)組成,就像大樓房有許多房 間組成一樣,指令就存放在這些單元里,單元里的指令取出并執(zhí)行就像大樓房的每個(gè)房間的被分配到了唯一一個(gè)房間號(hào)一樣,每一個(gè)存儲(chǔ)單元也必須被分配到唯一的地址號(hào),該地址號(hào)稱為存儲(chǔ)單元的地址,這樣只要知道了存儲(chǔ)單元的地址,就可以找到這個(gè)存儲(chǔ)單元,其中存儲(chǔ)的指令就可以被取出,然后再被執(zhí)行。 程序通常是順序執(zhí)行的,所以程序中的指令也是一條條順序存放的,單片機(jī)在執(zhí)行程序時(shí)要能把這些指令一條條取出并加以執(zhí)行,必須有一個(gè)部件能追蹤指令所在的地址,這一部件就是程序計(jì)數(shù)器 PC(包含在 CPU 中),在開始執(zhí)行程序時(shí),給 PC 賦以程序中第一 條指令所在的地址,然后取得每一條要執(zhí)行的命令, PC 在中的內(nèi)容就會(huì)自動(dòng)增加,增加量由本條指令長度決定,可能是 1、 2或 3,以指向下一條指令的起始地址,保證指令順序執(zhí)行。 運(yùn)用領(lǐng)域 1.在 智能儀器 儀表上的應(yīng)用 : 單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的 傳感器 ,可實(shí)現(xiàn)諸如電壓、 功率 、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機(jī)控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或 數(shù)字電路 更加強(qiáng)大。例如精密的測量設(shè)備( 功率計(jì) , 示波器 ,各種分析儀)。 2.在工業(yè)控制中的應(yīng)用 : 用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、 數(shù)據(jù)采集系統(tǒ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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《班組安全教育課程》課件
- 單位管理制度集粹選集【員工管理】十篇
- 單位管理制度合并選集【人力資源管理】十篇
- 七年級(jí)下《皇帝的新裝》蘇教版-課件
- 單位管理制度范例匯編【職員管理篇】十篇
- 《標(biāo)準(zhǔn)化裝修》課件
- 《項(xiàng)目管理手冊》附件1至附件123
- (高頻非選擇題25題)第1單元 中華人民共和國的成立和鞏固(解析版)
- 2019年高考語文試卷(新課標(biāo)Ⅰ卷)(解析卷)
- 2015年高考語文試卷(新課標(biāo)Ⅱ卷)(解析卷)
- 安徽省安慶市四中學(xué)2023-2024學(xué)年七年級(jí)數(shù)學(xué)第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 部編版七年級(jí)語文上冊(課本全冊)課后習(xí)題參考答案
- 2022-2023學(xué)年成都市高二上英語期末考試題(含答案)
- 大學(xué)英語語法專項(xiàng)練習(xí)題及答案
- 高中英語高頻詞匯拓展延伸
- 2023年浙江杭州西湖文化旅游投資集團(tuán)有限公司招聘筆試題庫含答案解析
- 班主任名工作室個(gè)人工作總結(jié)6篇 名班主任工作室總結(jié)
- 巧克畢業(yè)論文(南昌大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測試答案
- 大象版二年級(jí)科學(xué)上冊期末試卷(及答案)
- 榕江縣銻礦 礦業(yè)權(quán)出讓收益計(jì)算結(jié)果的報(bào)告
- 機(jī)電常用材料進(jìn)場驗(yàn)收要點(diǎn)
評論
0/150
提交評論