基于ARM7 TDMI-S CPU的LPC2103的多功能電子鐘_第1頁(yè)
基于ARM7 TDMI-S CPU的LPC2103的多功能電子鐘_第2頁(yè)
基于ARM7 TDMI-S CPU的LPC2103的多功能電子鐘_第3頁(yè)
基于ARM7 TDMI-S CPU的LPC2103的多功能電子鐘_第4頁(yè)
基于ARM7 TDMI-S CPU的LPC2103的多功能電子鐘_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于ARM7TDMI-SCPU的LPC2103的多功能電子鐘一、課程設(shè)計(jì)內(nèi)容與要求1)時(shí)鐘顯示功能,采用數(shù)碼管的動(dòng)態(tài)掃描工作方式,可通過(guò)鍵盤分別選擇顯示年或者月/日或者時(shí)/分或者分/秒,2)在鍵盤電路中,第一次中斷判斷有無(wú)鍵按下,若有按下則實(shí)行定時(shí)一次,下一次中斷開(kāi)始掃描。3)具有校準(zhǔn)年、月、日、時(shí)、分的功能。4)鬧鐘功能,可按設(shè)定的時(shí)間鬧時(shí),隨時(shí)開(kāi)啟或關(guān)閉鬧鐘。

二、元器件的介紹我在這次的課程設(shè)計(jì)中使用的主芯片是LPC2103,下面對(duì)其進(jìn)行簡(jiǎn)要的介紹。LPC2103是一個(gè)基于支持實(shí)時(shí)仿真的16/32位ARM7TDMI-SCPU的微控制器,并帶有32kB的嵌入高速Flash存儲(chǔ)器,128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。較小的封裝和極低的功耗使LPC2103適用于訪問(wèn)控制器和POS機(jī)等小型應(yīng)用系統(tǒng)中;由于內(nèi)置了寬范圍的串行通信接口(2個(gè)UART、SPI、SSP和2個(gè)I2C)和8KB的片內(nèi)SRAM,LPC2103也適合用在通信網(wǎng)關(guān)和協(xié)議轉(zhuǎn)換器中。32/16位定時(shí)器、增強(qiáng)型10位ADC、定時(shí)器輸出匹配PWM特性、多達(dá)13個(gè)邊沿、電平觸發(fā)的外部中斷、32條高速GPIO,使得LPC2103微控制器特別適用于工業(yè)控制和醫(yī)療系統(tǒng)中。器件信息:管腳信息:(LQFP48管腳配置)

三、設(shè)計(jì)方案硬件電路設(shè)計(jì)介紹:1、鍵盤模塊

整個(gè)硬件上總共使用了10個(gè)獨(dú)立鍵盤,4個(gè)是開(kāi)發(fā)板上原有的按鍵,6個(gè)是我利用多余的IO引腳焊接的按鍵。按鍵在沒(méi)有被按下時(shí),10個(gè)按鍵(P0.16P0.14P0.15P0.18P0.2P0.3P0.4P0.5P0.27P0.6P0.7)通過(guò)10K的電阻連接到3.3V的高電平,當(dāng)按鍵被按下時(shí),和GND相連接,被置為低電平。2、數(shù)碼管顯示模塊

使用串行輸入/并行輸出的8位移位寄存器74HC164,該移位寄存器是上升沿有效,將8位筆段碼送給共陽(yáng)數(shù)碼管。(注:DATA為數(shù)據(jù)輸入端,接P0.26;CLK為時(shí)鐘輸入端,接P0.13),與三極管相連的是數(shù)碼管的位選端,選擇哪位數(shù)碼管被點(diǎn)亮,用于數(shù)碼管的動(dòng)態(tài)顯示。3、蜂鳴器模塊該蜂鳴器是一個(gè)無(wú)源蜂鳴器,要使用PWM驅(qū)動(dòng)。其連接的是芯片的P0.5端。

4、LED模塊LED的連接如圖所示,當(dāng)管腳置為低電平時(shí),可以將LED點(diǎn)亮,6個(gè)LED分別與LPC2103的P0.25P0.12P0.11P0.10P0.24P0.23相連。5、UART接口電路模塊由于開(kāi)發(fā)板是3.3V供電系統(tǒng),需要使用電平轉(zhuǎn)換芯片SP3232E來(lái)進(jìn)行RS-232電平轉(zhuǎn)換。SP3232E的工作電壓為3.3V,電平轉(zhuǎn)換電路如圖所示。當(dāng)使用ISP功能下載程序時(shí),需要將PC機(jī)的串口與開(kāi)發(fā)板的串口相連,按下與P0.14相連的按鍵,短接P0.14,在系統(tǒng)復(fù)位時(shí),進(jìn)入ISP狀態(tài),用于下載HEX文件。這個(gè)開(kāi)發(fā)板有兩個(gè)串口,一個(gè)用于下載程序進(jìn)主芯片,另外一個(gè)用于串口在上位機(jī)上輸出顯示各個(gè)變量的值,可用于調(diào)試程序。按鍵功能介紹:(用戶使用說(shuō)明書)

Key1(P0.16):對(duì)顯示的數(shù)碼管進(jìn)行年月日時(shí)分秒的顯示切換Key2(P0.14):在時(shí)間設(shè)置或者鬧鐘設(shè)置按鍵有效的情況下,進(jìn)行自加1的向上調(diào)節(jié),對(duì)時(shí)間或者鬧鐘進(jìn)行設(shè)置,其余情況下該按鍵是無(wú)效狀態(tài)Key3(P0.15):在時(shí)間設(shè)置或者鬧鐘設(shè)置按鍵有效的情況下,進(jìn)行自減1的向下調(diào)節(jié),對(duì)時(shí)間或者鬧鐘進(jìn)行設(shè)置,其余情況下該按鍵是無(wú)效狀態(tài)Key4(P0.18):時(shí)間設(shè)置按鍵,按下表示開(kāi)始進(jìn)行時(shí)間設(shè)置或跳出時(shí)間設(shè)置Key5(P0.2):鬧鐘設(shè)置按鍵,按下表示開(kāi)始進(jìn)行鬧鐘設(shè)置Key6(P0.3):鬧鐘設(shè)置移位按鍵,按下表示進(jìn)行鬧鐘時(shí)和分的切換設(shè)置Key7(P0.4):鬧鐘設(shè)置結(jié)束按鍵,按下表示跳出鬧鐘設(shè)置模式;另外可以關(guān)閉蜂鳴器Key8(P0.27):鬧鐘開(kāi)啟按鍵,在Key5按下的情況下按下此鍵表示開(kāi)啟該組鬧鐘Key9(P0.6):鬧鐘關(guān)閉按鍵,在Key5按下的情況下按下此鍵表示關(guān)閉該組鬧鐘Key10(P0.7):用于串口輸出信息,可以輸出當(dāng)前的時(shí)間和顯示開(kāi)啟的鬧鐘設(shè)置時(shí)間當(dāng)Key10按下時(shí),會(huì)在串口中輸出信息如圖所示:(RTC為輸出當(dāng)前時(shí)間,接下來(lái)是鬧鐘)程序設(shè)計(jì)及流程圖:

主程序流程圖:時(shí)間和鬧鐘設(shè)置程序流程圖:IO口的初始化模塊:

LPC2103控制器的引腳都具有多種功能,但是每個(gè)引腳在某一時(shí)刻只能選擇一種功能。當(dāng)使用一個(gè)功能外設(shè)時(shí),如果需要相應(yīng)的引腳參與(如GPIO等),則必須在實(shí)現(xiàn)這一功能之前先設(shè)置好引腳的功能,否則無(wú)法實(shí)現(xiàn)該外設(shè)功能。LPC2103具有兩個(gè)PINSEL寄存器,PINSEL0和PINSEL1,PINSEL0和PINSEL1寄存器中的每?jī)蓚€(gè)位控制著一個(gè)引腳的功能,所以一個(gè)引腳最多可以有4種不同的功能選擇。當(dāng)引腳選擇GPIO功能時(shí),使用寄存器IODIR可以控制引腳的方向,另外IOCLR、IOSET兩個(gè)寄存器分別可以將引腳初始化設(shè)置為低電平或者高電平。所以,在主程序開(kāi)始是時(shí)的GPIO初始化中包含如下幾個(gè)子函數(shù):voidGPIO_init(UINT8GPIO_num);

將管腳初始為GPIO功能voidGPIO_inout(UINT8GPIO_num,UINT8in_out);

設(shè)置GPIO為輸入或者輸出UINT8GPIO_READ(UINT8GPIO_num);

讀出GPIO當(dāng)前的狀態(tài)voidGPIO_SET(UINT8GPIO_num,UINT8High_Low);

GPIO初始化后置1或者置0

定時(shí)器的初始化模塊:

該程序中使用了3個(gè)定時(shí)器,定時(shí)器0、1、2。定時(shí)器0設(shè)置為PWM輸出模式,產(chǎn)生2kHZ的方波,用于驅(qū)動(dòng)無(wú)源蜂鳴器,當(dāng)設(shè)置的鬧鐘時(shí)間和當(dāng)前時(shí)間匹配時(shí),將定時(shí)器0啟動(dòng),產(chǎn)生方波驅(qū)動(dòng)蜂鳴器發(fā)出響聲提醒。

定時(shí)器1用于時(shí)間計(jì)數(shù),即當(dāng)前時(shí)鐘的計(jì)時(shí)器,它設(shè)置為1秒鐘產(chǎn)生一次中斷,其中斷程序分配為最高的優(yōu)先級(jí),當(dāng)一秒的定時(shí)時(shí)間到時(shí),在服務(wù)程序中首先清除中斷標(biāo)志位,然后秒變量進(jìn)行自加1(miao++),另外還進(jìn)行秒閃爍標(biāo)志位(g_Dot)的取反標(biāo)志,使秒標(biāo)志位能夠閃爍。

定時(shí)器2的初始化有多個(gè)功能。定時(shí)器2的優(yōu)先級(jí)是次于定時(shí)器1的,定時(shí)器設(shè)置為5毫秒產(chǎn)生一次中斷,首先是用于四位八段LRD的動(dòng)態(tài)掃描顯示,使四位數(shù)碼管的刷新頻率為50Hz,另外是10mS的標(biāo)志位(time10)自加1,當(dāng)10mS標(biāo)志位計(jì)時(shí)時(shí)間到時(shí),就執(zhí)行一次鍵盤掃描程序,即10個(gè)獨(dú)立鍵盤每10mS被掃描一次。最后是清除中斷標(biāo)志位,通知中斷服務(wù)程序結(jié)束。

時(shí)間更新子函數(shù)模塊:

該函數(shù)主要是對(duì)當(dāng)前時(shí)間的處理,定時(shí)器1對(duì)秒變量進(jìn)行了計(jì)數(shù),而此程序就是對(duì)時(shí)分秒年月日變量的值進(jìn)行判斷和限制,使其超過(guò)最大值后對(duì)其進(jìn)行歸零,比如分秒的值不能大于59,時(shí)的最大值為23。大小月以及二月份天數(shù)的處理是通過(guò)調(diào)用UINT8

yue_deal()這個(gè)函數(shù)實(shí)現(xiàn)的。該函數(shù)主要是使用一個(gè)switch

case

語(yǔ)句,對(duì)大月份返回一個(gè)值31,小月份返回30,另外通過(guò)調(diào)用UINT8

nian_deal()來(lái)判斷是平年還是閏年【閏年條件:if((nian%4==0&&nian%100!=0)||nian%400==0)】,閏年返回29,平年返回28。具體的程序見(jiàn)附錄。

數(shù)碼管動(dòng)態(tài)顯示模塊程序:

四位數(shù)碼管的刷新頻率為50Hz,即一位顯示時(shí)間為(1∕50×4)即5mS,用定時(shí)器2每5ms產(chǎn)生一次中斷進(jìn)行刷新,每次中斷產(chǎn)生時(shí)只將一位數(shù)碼管的位選端點(diǎn)亮,用voidRefresh_LED(UINT16dat)函數(shù)實(shí)現(xiàn)這一功能,由于數(shù)碼管的筆段碼輸入端接的是8位移位寄存器74HC164,故需要使用移位將筆段碼送到數(shù)碼管筆段輸入端【voiddata_shift(UINT8dat)函數(shù)】。

注:顯示程序負(fù)責(zé)當(dāng)前時(shí)間的顯示和鬧鐘設(shè)置時(shí)的顯示內(nèi)容,需要改變的是將要顯示的數(shù)值用變量display進(jìn)行保存成為十進(jìn)制的四位數(shù)。鍵盤掃描程序:

如果10毫秒定時(shí)時(shí)間到的標(biāo)志位有效,就進(jìn)入鍵盤掃描的子程序UINT8GetKey()中。通過(guò)查找資料,該部分的程序設(shè)計(jì)采用的是狀態(tài)機(jī)的思想,用如下圖所示,其中系統(tǒng)的輸入信號(hào)是與按鍵連接的I/O口電平,“1”表示按鍵處于開(kāi)放狀態(tài),“0”表示按鍵處于閉合狀態(tài)。而系統(tǒng)的輸出信號(hào)則表示檢測(cè)和確認(rèn)到一次按鍵的閉合操作,用“1”表示。

上圖給出了一個(gè)簡(jiǎn)單按鍵狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。在圖中,將一次按鍵完整的操作過(guò)程分解為3個(gè)狀態(tài),采用時(shí)間序列周期為10ms。下面對(duì)該圖做進(jìn)一步的分析和說(shuō)明,并根據(jù)狀態(tài)圖給出軟件的實(shí)現(xiàn)方法。首先,要充分體會(huì)時(shí)間序列的作用。在這個(gè)系統(tǒng)中,采用的時(shí)間序列周期為10ms,它意味著,每隔10ms檢測(cè)一次按鍵的輸入信號(hào),并輸出一次按鍵的確認(rèn)信號(hào),同時(shí)按鍵的狀態(tài)也發(fā)生一次轉(zhuǎn)換。圖中“狀態(tài)0”為按鍵的初始狀態(tài),當(dāng)按鍵輸入為“1”時(shí),表示按鍵處于開(kāi)放,輸出“0”(1/0),下一狀態(tài)仍舊為“狀態(tài)0”。當(dāng)按鍵輸入為“0”,表示按鍵閉合,但輸出還是“0”(0/0)(沒(méi)有經(jīng)過(guò)消抖,不能確認(rèn)按鍵真正按下),下一狀態(tài)進(jìn)入“狀態(tài)1”?!盃顟B(tài)1”為按鍵閉合確認(rèn)狀態(tài),它表示了在10ms前按鍵為閉合的,因此當(dāng)再次檢測(cè)到按鍵輸入為“0”時(shí),可以確認(rèn)按鍵被按下了(經(jīng)過(guò)10ms的消抖),輸出“1”表示確認(rèn)按鍵閉合(0/1),下一狀態(tài)進(jìn)入“狀態(tài)2”。而當(dāng)再次檢測(cè)到按鍵的輸入為“1”時(shí),表示按鍵可能處在抖動(dòng)干擾,輸出為“0”(1/0),下一狀態(tài)返回到“狀態(tài)0”。這樣,利用狀態(tài)1,實(shí)現(xiàn)了按鍵的消抖處理?!盃顟B(tài)2”為等待按鍵釋放狀態(tài),因?yàn)橹挥械劝存I釋放后,一次完整的按鍵操作過(guò)程才算完成。從對(duì)上圖的分析中可以知道,在一次按鍵操作的整個(gè)過(guò)程,按鍵的狀態(tài)是從“狀態(tài)0”->“狀態(tài)1”->“狀態(tài)2”,最后返回到“狀態(tài)0”的。并且在整個(gè)過(guò)程中,按鍵的輸出信號(hào)僅在“狀態(tài)1”時(shí)給出了唯一的一次確認(rèn)按鍵閉合的信號(hào)“1”(其它狀態(tài)均輸出“0”)。所以上面狀態(tài)機(jī)所表示的按鍵系統(tǒng),不僅克服了按鍵抖動(dòng)的問(wèn)題,同時(shí)也確保在一次按鍵整個(gè)的過(guò)程中,系統(tǒng)只輸出一次按鍵閉合信號(hào)(“1”)。換句話講,不管按鍵被按下的時(shí)間保持多長(zhǎng),在這個(gè)按鍵的整個(gè)過(guò)程中都只給出了一次確認(rèn)的輸出,因此在這個(gè)設(shè)計(jì)中,按鍵沒(méi)有“連發(fā)”功能,它是一個(gè)最簡(jiǎn)單和基本的按鍵。一旦有了正確的狀態(tài)轉(zhuǎn)換圖,就可以根據(jù)狀態(tài)轉(zhuǎn)換圖編寫軟件了。在軟件中實(shí)現(xiàn)狀態(tài)機(jī)的方法和程序結(jié)構(gòu)通常使用多分支結(jié)構(gòu)(IF-ELSEIF-ELSE、CASE等)實(shí)現(xiàn)。下面是根據(jù)上圖、基于狀態(tài)機(jī)方式編寫的簡(jiǎn)單按鍵接口函數(shù)GetKey()。該簡(jiǎn)單按鍵接口函數(shù)GetKey()在整個(gè)系統(tǒng)程序中應(yīng)每隔10ms調(diào)用執(zhí)行一次,每次執(zhí)行時(shí)進(jìn)入用switch結(jié)構(gòu)構(gòu)成的狀態(tài)機(jī)。switch結(jié)構(gòu)中的case語(yǔ)句分別實(shí)現(xiàn)了3個(gè)不同狀態(tài)的處理判別過(guò)程,在每個(gè)狀態(tài)中將根據(jù)狀態(tài)的不同,以及key4的值(狀態(tài)機(jī)的輸入)確定輸出值(keyreturn),和確定下一次按鍵的狀態(tài)值(keystate)。函數(shù)GetKey()的返回參數(shù)提供上層程序使用。返回值為0時(shí),表示按鍵無(wú)動(dòng)作;而返回1表示有一次按鍵閉合動(dòng)作,需要進(jìn)入按鍵處理程序做相應(yīng)的鍵處理。在函數(shù)GetKey()中定義了2個(gè)局部變量,其中keyreturn為一般普通的局部變量,每次函數(shù)執(zhí)行時(shí),keyreturn為函數(shù)的返回值,總是先初始化為0,只有在狀態(tài)1中重新置1,作為表示按鍵確認(rèn)的標(biāo)志返回。變量keystate非常重要,它保存著按鍵的狀態(tài)值,該變量的值在函數(shù)調(diào)用結(jié)束后不能消失,必須保留原值,因此在程序中定義為“局部靜態(tài)變量”。通過(guò)對(duì)按鍵的掃描程序后,就知道了哪一個(gè)獨(dú)立鍵盤的按鍵被按下了,通過(guò)voidkeysure()函數(shù)來(lái)定義每一個(gè)按鍵的功能。中斷優(yōu)先級(jí)的定義:

LPC2103的向量中斷控制器VIC(VectoredInterruptController)具有32個(gè)中斷請(qǐng)求輸入。可將這些中斷編程分為3類:FIQ、向量IRQ、非向量IRQ。其中快速中斷請(qǐng)求FIQ(FastInterruptreQuest)具有最高的優(yōu)先級(jí)。向量IRQ(VectoredIRQ)具有中等優(yōu)先級(jí)。該級(jí)別可分配32個(gè)中斷請(qǐng)求中的16個(gè)。32個(gè)請(qǐng)求中的任意一個(gè)都可分配到16個(gè)向量IRQslot中的任意一個(gè),其中slot0具有最高優(yōu)先級(jí),而slot15則為最低優(yōu)先級(jí)。非向量IRQ(Non-vectoredIRQ)的優(yōu)先級(jí)最低。

在這個(gè)多功能時(shí)鐘的程序設(shè)計(jì)中,使用了兩個(gè)中斷都是分配為向量IPQ。定時(shí)器1作為時(shí)鐘的基準(zhǔn)計(jì)數(shù)時(shí)鐘,有最高的優(yōu)先級(jí);定時(shí)器2分配為下一個(gè)優(yōu)先級(jí)。相關(guān)的語(yǔ)句設(shè)置如下:VICVectCntl0=0x20|5;

/*

定時(shí)器1分配為向量IRQ通道0*/VICVectAddr0=(UINT32)Timer1ISR;

/*

分配中斷服務(wù)程序地址0

*/VICVectCntl1=0x20|26;

/*

定時(shí)器2分配為向量IRQ通道1*/VICVectAddr1=(UINT32)Timer2ISR;

/*

分配中斷服務(wù)程序地址1

*/VICIntEnable=1<<26;

/*

定時(shí)器2中斷使能

*/VICIntEnable=1<<5;

/*

定時(shí)器1中斷使能

*/四、調(diào)試過(guò)程由于這次的設(shè)計(jì)使用的是LPC2103的開(kāi)發(fā)板,所以在硬件上不需要太多的去調(diào)試。在利用開(kāi)發(fā)板硬件資源的基礎(chǔ)上,由于這次的多功能鬧鐘設(shè)計(jì)使用的模塊較多,基本上各個(gè)模塊的調(diào)試是分開(kāi)進(jìn)行的。主要包括初始化的程序調(diào)試、按鍵子程序調(diào)試、LED顯示調(diào)試這幾部分子程序的調(diào)試。將這三部分調(diào)試成功,那么整個(gè)設(shè)計(jì)的軟件部分也就基本完成了。在該課程設(shè)計(jì)中,采用的集成開(kāi)發(fā)環(huán)境是uVision,在軟件設(shè)計(jì)過(guò)程中,有時(shí)候不小心插入了一個(gè)中文的符號(hào)(如分號(hào)),就會(huì)使軟件編譯不通過(guò),開(kāi)始在這個(gè)錯(cuò)誤上浪費(fèi)不少時(shí)間,但后來(lái)注意到了這個(gè)情況,避免了類似的錯(cuò)誤的發(fā)生。

我首先進(jìn)行的是鍵盤掃描模塊的程序設(shè)計(jì)及調(diào)試。該模塊主要由按鍵的狀態(tài)確認(rèn)函數(shù)(UINT8GetKey())和按鍵確認(rèn)函數(shù)(voidkeysure())共同完成。按鍵的狀態(tài)函數(shù)主要是由一個(gè)返回值來(lái)確認(rèn)按鍵的狀態(tài),開(kāi)始的時(shí)候,由于缺少一個(gè)語(yǔ)句:keyreturn=0;即每次進(jìn)入函數(shù)的時(shí)候要將按鍵的狀態(tài)清零,導(dǎo)致按鍵在一次按下之后就出現(xiàn)了不正常的情況,最后找到問(wèn)題的所在,就糾正了過(guò)來(lái)。由于這個(gè)模塊是我最先進(jìn)行的,所以開(kāi)始的時(shí)候我并沒(méi)有給每個(gè)按鍵定義相應(yīng)的功能,每個(gè)按鍵的功能我都是定義為每次按下對(duì)相應(yīng)的LED進(jìn)行取反操作,在之后的設(shè)計(jì)中,再在相應(yīng)的按鍵確認(rèn)語(yǔ)句下增加入相應(yīng)的功能,這也是模塊化程序設(shè)計(jì)的一個(gè)體現(xiàn)。

四位的數(shù)碼管采用的是動(dòng)態(tài)顯示模式,刷新頻率為50Hz,另外,由于開(kāi)發(fā)板的硬件采用的是移位寄存器送筆段碼,所以在軟件設(shè)計(jì)方面要用到將8位筆段碼不斷循環(huán)右移,增加了設(shè)計(jì)的難度。起初我認(rèn)為一切程序都編寫得差不多的時(shí)候,燒進(jìn)芯片的程序使數(shù)碼管顯示一片模糊,基本上顯示的都是8,后來(lái)從程序的開(kāi)始查起,終于找到原因,原來(lái)動(dòng)態(tài)顯示程序中,每次只能是一位的數(shù)碼管點(diǎn)亮,但在程序設(shè)計(jì)中,在點(diǎn)亮下一位數(shù)碼管時(shí),忘記了將上一次點(diǎn)亮的位給關(guān)掉,導(dǎo)致四位數(shù)碼管時(shí)同時(shí)被點(diǎn)亮的,最后,在點(diǎn)亮數(shù)碼管前首先將四位數(shù)碼管全部關(guān)閉,再以50Hz的頻率進(jìn)行點(diǎn)亮刷新,顯示方回到正常狀態(tài)。

最后就是在這兩個(gè)模塊的基礎(chǔ)上來(lái)對(duì)整體的程序進(jìn)行相關(guān)的調(diào)試和完善。例如在原先設(shè)置有當(dāng)進(jìn)入時(shí)間設(shè)置或者鬧鐘掛起時(shí)有LED點(diǎn)亮進(jìn)行提示,設(shè)置時(shí)間時(shí)相關(guān)的設(shè)置超過(guò)相應(yīng)的極限值,這些在最后的調(diào)試過(guò)程中得到完善,使其工作在正常的狀態(tài),調(diào)試過(guò)程也就這樣基本得到完成。五、結(jié)論

這次的課程設(shè)計(jì)基本上完成了任務(wù)書中所提出的要求。最終的成品具有如下功能:通過(guò)數(shù)碼管動(dòng)態(tài)掃描的工作方式實(shí)現(xiàn)時(shí)分秒年月日星期的顯示,利用鍵盤實(shí)現(xiàn)利用四位數(shù)碼管可以進(jìn)行如上時(shí)間的自由切換,時(shí)鐘具有時(shí)間設(shè)置和隨時(shí)的校準(zhǔn)功能。有三組可隨意設(shè)置打開(kāi)或者關(guān)閉的鬧鐘,鬧鐘匹配時(shí)有蜂鳴器響和LED閃爍兩種方式進(jìn)行提醒。利用串口可以輸出當(dāng)前時(shí)間和被掛起的鬧鐘。

綜上所述,本次的課程設(shè)計(jì)達(dá)到預(yù)期的設(shè)計(jì)要求。六、小結(jié)與討論

通過(guò)為期一個(gè)星期以來(lái)的單片機(jī)課程設(shè)計(jì),感覺(jué)自己在這么的一個(gè)過(guò)程下來(lái),還是很有收獲的。這個(gè)設(shè)計(jì)的題目老師是在亞運(yùn)放假之前就給我們的,我知道老師是希望我們用亞運(yùn)放假的時(shí)間去思考、去準(zhǔn)備的過(guò)程。

從暑假以來(lái),我就利用暑假空閑的時(shí)間,來(lái)自學(xué)ARM7TDMI-S內(nèi)核的一款芯片LPC2103,其與單片機(jī)相識(shí)的一些功能我都有涉及性的學(xué)習(xí)過(guò)了,在9月份,我買了它的開(kāi)發(fā)板,進(jìn)行相關(guān)的實(shí)踐性學(xué)習(xí)?;谏鲜龅脑?,所以這次的課程設(shè)計(jì)我就想用這款LPC2103的芯片開(kāi)進(jìn)行這次的課程設(shè)計(jì),也是對(duì)我之前的學(xué)習(xí)的一種檢驗(yàn)。以前用開(kāi)發(fā)板學(xué)習(xí)的時(shí)候,都是針對(duì)其的單獨(dú)一個(gè)功能進(jìn)行相關(guān)程序的設(shè)計(jì),而這次的課程設(shè)計(jì)會(huì)涉及比較多的功能模塊的綜合應(yīng)用,所以,開(kāi)始的時(shí)候有點(diǎn)摸不著頭腦的感覺(jué)。最后經(jīng)過(guò)幾番的思考,我就決定,針對(duì)每一個(gè)模塊,一個(gè)個(gè)進(jìn)行攻破,最終實(shí)現(xiàn)了多功能電子時(shí)鐘的全部的功能。

首先,我利用LPC2103的實(shí)時(shí)時(shí)鐘功能(RTC),先對(duì)其進(jìn)行初始化,使其的時(shí)鐘跑起來(lái),在這個(gè)基礎(chǔ)上,我最先是開(kāi)始鍵盤模塊的設(shè)計(jì),這就涉及到:鍵盤掃描,鍵盤去抖動(dòng),鍵盤判斷相關(guān)的問(wèn)題,最后經(jīng)過(guò)兩天的編程,設(shè)計(jì),調(diào)試,思考才把鍵盤模塊的問(wèn)題順利地解決了。從最初的模型規(guī)劃,到具體功能的實(shí)現(xiàn),直到最后的軟件設(shè)計(jì)和調(diào)試過(guò)程,每一個(gè)環(huán)節(jié)都讓我加深了對(duì)實(shí)際問(wèn)題的思考,有利于自己動(dòng)手能力的提高。

這次的課程設(shè)計(jì)讓我學(xué)會(huì)了系統(tǒng)地去解決一個(gè)實(shí)際的問(wèn)題,了解到了單片機(jī)設(shè)計(jì)的基本步驟、開(kāi)發(fā)設(shè)計(jì)過(guò)程中需要注意的問(wèn)題、學(xué)會(huì)處理調(diào)試過(guò)程中出現(xiàn)的問(wèn)題.,學(xué)會(huì)了巧妙運(yùn)用模塊化設(shè)計(jì)的思想,在整個(gè)的程序化設(shè)計(jì)過(guò)程中,學(xué)會(huì)將功能細(xì)化,分成一個(gè)小功能來(lái)實(shí)現(xiàn),在設(shè)計(jì)好一個(gè)功能之后,再在這個(gè)基礎(chǔ)上去增加其他的功能,最后完成整個(gè)多功能電子時(shí)鐘的設(shè)計(jì)??傊?,通過(guò)這次的課程設(shè)計(jì),檢驗(yàn)了我所學(xué)習(xí)的知識(shí),使我將平時(shí)書本上的理論知識(shí)與實(shí)踐很好地結(jié)合起來(lái),利于加深對(duì)理論知識(shí)的理解和提高自己的實(shí)際動(dòng)手操作能力。七、參考文獻(xiàn)1、《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》

出版社:北京航空航天大學(xué)出版社

2005年2、《ARM7易學(xué)通》

出版社:人民郵電出版社

2006年3、《EasyARM2103教材》

出版社:北京航空航天大學(xué)出版社

2008年4、《新編單片機(jī)原理與應(yīng)用》

出版社:西安電子科技大學(xué)出版社

2007年5、《新編單片機(jī)原理與應(yīng)用實(shí)驗(yàn)》

出版社:西安電子科技大學(xué)出版社

2005年

附錄:開(kāi)發(fā)板實(shí)物圖以下是完整的源程序:

以下是名為main.c的文件

#include<stdio.h>

/*prototypedeclarationsforI/Ofunctions*/

#include<LPC2103.H>

/*LPC21xxdefinitions

*/#include"main.h"#define

LED

(1<<23)

UINT8

keystate=0;

//按鍵的狀態(tài)標(biāo)志有0、1、2三種狀態(tài)

UINT16

key4=1023;

//按鍵的掃描輸入端

UINT8

keyreturn=0;

//按鍵的返回值

UINT8

time10=0;

//10ms標(biāo)志位UINT8

dis_bit=0;

//顯示切換標(biāo)志位

UINT8

settime=0;

//進(jìn)入時(shí)間設(shè)置標(biāo)志位

UINT8

alarm=0;

//鬧鐘設(shè)置有效標(biāo)志位

UINT8

al_shi1=0;

//以下是鬧鐘的序號(hào)和用數(shù)組儲(chǔ)存的鬧鐘時(shí)、分位

UINT8

al_num=0;

UINT8

al_shi[4];

UINT8

al_fen[4];

UINT8

al_yunxu=0;

//鬧鐘才開(kāi)始比較,確保設(shè)置期間不比較

UINT8

LS=0;

//鬧鐘時(shí)間到,鈴聲有效位,0為無(wú)效狀態(tài)

UINT8

al_on3off[4]={0,0,0,0};

//用數(shù)組記錄鬧鐘是否開(kāi)啟

UINT8al_flag=0;

//鬧鐘組數(shù)1.2.3,0表示沒(méi)有鬧鐘被掛起

UINT8

al_fen1=0;

staticUINT8g_Dot=0;

staticUINT16display=0;

//數(shù)碼管顯示緩存

UINT16

nian=2008;

//與時(shí)間相關(guān)的變量

UINT8

yue=8;

UINT8

ri=8;

UINT8

week=5;

UINT8

shi=20;

UINT8

fen=0;

UINT8

miao;

//--------------------------------------------------------------------------------voidUART1_Init(void)

{

UINT16Fdiv;

PINSEL0=0x00050000;

U1LCR=0x83;

//DLAB=1,可設(shè)置波特率

Fdiv=(Fpclk/16)/UART_BPS;

//設(shè)置波特率

U1DLM=Fdiv/256;

U1DLL=Fdiv%256;

U1LCR=0x03;

}

voidGPIO_init(UINT8GPIO_num)

//

初始為GPIO功能

{

if(GPIO_num<16)

PINSEL0

&=~(0x03<<(GPIO_num*2));

else

PINSEL1

&=~(0x03<<((GPIO_num-16)*2));

}voidGPIO_inout(UINT8GPIO_num,UINT8in_out)

//設(shè)置GPIO為輸入0或者輸出1

{

if(in_out)

IODIR|=(0x01<<GPIO_num);

//output

1

else

IODIR&=~(0x01<<GPIO_num);

//input

0

}UINT8GPIO_READ(UINT8GPIO_num)

//讀出GPIO的狀態(tài)

{

if(IOPIN&(1<<GPIO_num))

return1;

else

return0;

}voidGPIO_SET(UINT8GPIO_num,UINT8High_Low)

//GPIO置1或者置0

{

if(High_Low)

IOSET|=(0x01<<GPIO_num);

else

IOCLR|=(0x01<<GPIO_num);

}

voidLEDchange(UINT8GPIO_num)

//對(duì)二極管進(jìn)行取反

{

if((IO0PIN&(0x01<<GPIO_num))==0){

IO0SET|=(0x01<<GPIO_num);

//點(diǎn)亮發(fā)光二極管

}

elseIO0CLR|=(0x01<<GPIO_num);

}UINT8

nian_deal()

{

if((nian%4==0&&nian%100!=0)||nian%400==0)

return1;

elsereturn0;}

UINT8

yue_deal()

{

switch(yue)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

return31;

case2:

{

if(nian_deal())

return29;

elsereturn28;

}

case4:

case6:

case9:

case11:

return31;

default:

return1;

}

}

voidkeysure()

//按鍵的確認(rèn),并執(zhí)行相關(guān)功能

{

if(GPIO_READ(14)==0)

//對(duì)每一位進(jìn)行切換

{

if(settime!=0)

{

switch(dis_bit)

{

case0:

if(settime==1)

{shi++;

if(shi>23)

shi=0;

}

else{fen++;

if(fen>59)

fen=0;

}

break;

case1:

week++;

if(week>7)

week=1;

break;

case2:

nian++;

break;

case3:

if(settime==1)

{yue++;

if(yue>12)

yue=1;

}

else

{

ri++;

if(ri>yue_deal())

ri=1;

}

break;

}

}

if(alarm!=0)

{

if(alarm==1)

{

al_shi1++;

if(al_shi1>23)

al_shi1=0;

al_shi[al_num]=al_shi1;

}

else

{al_fen1++;

if(al_fen1>59)

al_fen1=0;

al_fen[al_num]=al_fen1;

}

}

}

if

(GPIO_READ(15)==0)

{

if(settime!=0)

{

switch(dis_bit)

{

case0:

if(settime==1)

{shi--;

if(shi>23)

shi=23;

}

else{fen--;

if(fen>59)

fen=59;

}

break;

case1:

week--;

if(week==0)

week=7;

break;

case2:

nian--;

break;

case3:

if(settime==1)

{yue--;

if(yue==0)

yue=12;

}

else

{

ri--;

if(ri==0)

ri=yue_deal();

}

break;

}

}

if(alarm!=0)

{

if(alarm==1)

{

al_shi1--;

if(al_shi1>23)

al_shi1=23;

al_shi[al_num]=al_shi1;

}

else

{al_fen1--;

if(al_fen1>59)

al_fen1=59;

al_fen[al_num]=al_fen1;

}

}

}

if(GPIO_READ(16)==0)

{

if(dis_bit==3)

dis_bit=0;

else

dis_bit++;

}

if(GPIO_READ(18)==0)

{

if(settime>1)

{

settime=0;

T1TCR

=0x01;

GPIO_SET(23,1);

}

else{settime++;

T1TCR

=0x00;

GPIO_SET(23,0);

}

}

if(GPIO_READ(2)==0)

{

al_yunxu=0;

alarm=1;

al_num++;

if(al_num>3)

al_num=1;

//al_num++;

}

if(GPIO_READ(3)==0)

{

alarm++;

//對(duì)鬧鐘的時(shí)分為進(jìn)行設(shè)置切換

if(alarm>2)

alarm=1;

}

if(GPIO_READ(4)==0)

{

if(alarm!=0)

{alarm=0;

al_shi1=0;

al_yunxu=1;

al_flag=0;

for(al_num=0;al_num<4;al_num++)

{

if(al_on3off[al_num]==1)

al_flag++;

}

if(al_flag!=0)

GPIO_SET(24,0);

if(al_flag==0)

GPIO_SET(24,1);

}

else

{

LS=0;

T0TCR=0x00;

//啟動(dòng)對(duì)響鈴進(jìn)行關(guān)閉

GPIO_SET(25,1);

GPIO_SET(11,1);

GPIO_SET(12,1);

}

}

if(GPIO_READ(27)==0)

{

if(alarm!=0)

{

al_on3off[al_num]=1;

}

if(settime!=0)

nian=nian+10;

//表示有鬧鐘掛起,要加上一些標(biāo)示位

}

if(GPIO_READ(6)==0)

{

if(alarm!=0)

{

al_on3off[al_num]=0;

}

if(settime!=0)

nian=nian-10;

}

if(GPIO_READ(7)==0)

{

//啟動(dòng)輸出開(kāi)啟的鬧鐘信息

printf("RTC----%02d-%02d-%02d_%02d:%02d:%02dWEEK=%d--\n",nian,yue,ri,shi,fen,miao,week);

for(al_num=0;al_num<4;al_num++)

{

if(al_on3off[al_num]==1)

{

printf("Thenumber%dalarmison.---Alarmtime--%d:%d--\n",al_num,al_shi[al_num],al_fen[al_num]);

}

}

}}

UINT8GetKey()

{

keyreturn=0;

key4=GPIO_READ(18)|(GPIO_READ(15)<<1)|(GPIO_READ(14)<<2)|(GPIO_READ(16)<<3)|(GPIO_READ(2)<<4)|(GPIO_READ(3)<<5)|(GPIO_READ(4)<<6)|(GPIO_READ(27)<<7)|(GPIO_READ(6)<<8)|(GPIO_READ(7)<<9);

switch(keystate)

{

case0:

if(key4!=1023)

//檢測(cè)到有按鍵,轉(zhuǎn)到狀態(tài)1,相當(dāng)于是消抖過(guò)程

{

keystate=1;

}

break;

case1:

if(key4!=1023)

//再次檢測(cè)到有按鍵,確認(rèn)按鍵按下,返回一個(gè)值,并轉(zhuǎn)到狀態(tài)2

{

keyreturn=1;

keystate=2;

}

else

{

keystate=0;//沒(méi)有檢測(cè)到按鍵,說(shuō)明狀態(tài)0檢測(cè)到是一個(gè)抖動(dòng),重新轉(zhuǎn)到狀態(tài)0

}

break;

case2:

if(key4==1023)

//檢測(cè)到按鍵松開(kāi),狀態(tài)轉(zhuǎn)到狀態(tài)0,一次完整的按鍵過(guò)程結(jié)束

{

keystate=0;

}

break;

}

returnkeyreturn;

}

voiddata_shift(UINT8dat)

{

UINT8i;

for(i=0;i<8;i++)

{

GPIO_SET(CLK,LOW);

if(dat&0x01){

GPIO_SET(DATA,0);

}

else{

GPIO_SET(DATA,1);

}

GPIO_SET(CLK,HIGH);

dat>>=1;

}

}

voidRefresh_LED(UINT16dat)

{

staticUINT8i=0;

UINT8a,b,c,d;

a=dat/1000;

b=dat%1000/100;

c=dat%1000%100/10;

d=dat%1000%100%10;

switch(i)

{

case0:

i++;

GPIO_SET(DIG_EN0,LOW);

data_shift(DIGData[d]);

break;

case1:

i++;

GPIO_SET(DIG_EN1,LOW);

data_shift(DIGData[c]);

break;

case2:

i++;

GPIO_SET(DIG_EN2,LOW);

if(g_Dot)

data_shift(DIGData[b]&~(0x01<<0));

else

data_shift(DIGData[b]|(0x01<<0));

break;

case3:

i=0;

GPIO_SET(DIG_EN3,LOW);

data_shift(DIGData[a]);

break;

}}/*********************************************************************************************************

**Functionname:

Timer1_ISR

**Descriptions:

定時(shí)器1中斷主程序

**inputparameters:

無(wú)

**ouputparameters:

無(wú)

**Returnedvalue:

無(wú)

*********************************************************************************************************/

void

__irqTimer1ISR(void)

{

T1IR=0x01;

/*

清除中斷標(biāo)志

*/

miao++;

if(g_Dot)

g_Dot=0;

else

g_Dot=1;

VICVectAddr=0x00;

/*

中斷向量結(jié)束

*/

}void

__irqTimer2ISR(void)

{

GPIO_SET(DIG_EN0,HIGH);

GPIO_SET(DIG_EN1,HIGH);

GPIO_SET(DIG_EN2,HIGH);

GPIO_SET(DIG_EN3,HIGH);

Refresh_LED(display);

time10++;

T2IR=0x01;

/*

清除中斷標(biāo)志

*/

VICVectAddr=0x00;

/*

中斷向量結(jié)束

*/

}void

Timer1Init(void)

{

T1TCR

=0x02;

/*

定時(shí)器1復(fù)位

*/

T1PR

=0;

/*

不設(shè)時(shí)鐘分頻

*/

T1MCR

=0x03;

/*

匹配后復(fù)位TC,并產(chǎn)生中斷

*/

T1MR0

=Fpclk;

/*

設(shè)置1秒匹配值

*/

T1IR

=0x01;

/*

清除中斷標(biāo)志

*/

T1TCR

=0x01;

/*

啟動(dòng)定時(shí)器1

*/

}

voidtimeupdate()

//時(shí)間更新函數(shù)

{

if(miao>59)

{

fen++;

if(al_flag&&al_yunxu)

//表示鬧鐘開(kāi)啟,biana!!

{

for(al_num=0;al_num<4;al_num++)

{if(fen==al_fen[al_num]&&shi==al_shi[al_num]&&al_on3off[al_num]==1)

{

al_flag--;

al_on3off[al_num]=0;

if(al_flag==0)

GPIO_SET(24,1);

LS=1;

}

}

}

miao=0;

if(fen>59)

{

shi++;

fen=0;

if(shi>23)

{

ri++;

week++;

if(week>7){week=1;}

shi=0;

if(ri>yue_deal())

{

yue++;

ri=1;

if(yue>12)

{

nian++;

yue=1;

if(nian>9999)

nian=1000;

}

}

}

}

}

}

/*********************************************************************************************************

**Functionname:

Timer0\2Init

**Descriptions:

定時(shí)器0&2初始化

**inputparameters:

無(wú)

**ouputparameters:

無(wú)

**Returnedvalue:

無(wú)

*********************************************************************************************************/

void

Timer2Init(void)

//這里也初始化了T0,用于pwm輸出,驅(qū)動(dòng)蜂鳴器

{

PINSEL0&=~(3<<10);

PINSEL0|=(2<<10);

//P0.5作MAT0.1輸出

T0TCR=0x02;

//復(fù)位

T0PR=0x00;

//不預(yù)分頻

T0PWMCON=0x02;

//MAT0.1為PWM輸出,在P0.5腳

T0MR0=Fcclk/1000;

T0MCR=0x02;

//每FCLK/1000復(fù)位一次T0

T0MR1=((Fcclk/2000)/10)*10;

T2TCR

=0x02;

/*

定時(shí)器2復(fù)位

*/

T2PR

=0;

/*

不設(shè)時(shí)鐘分頻

*/

T2MCR

=0x03;

/*

匹配后復(fù)位TC,并產(chǎn)生中斷

*/

T2MR0

=Fpclk/200;

/*

設(shè)置5毫秒匹配值

*/

T2IR

=0x01;

/*

清除中斷標(biāo)志

*/

T2TCR

=0x01;

/*

啟動(dòng)定時(shí)器2

*/

}voidPLL_Init(void)

{

PLLCON=1;

#if(Fcco/Fcclk)==2

PLLCFG=((Fcclk/Fosc)-1)|(0<<5);

#endif

#if(Fcco/Fcclk)==4

PLLCFG=((Fcclk/Fosc)-1)|(1<<5);

#endif

#if(Fcco/Fcclk)==8

PLLCFG=((Fcclk/Fosc)-1)|(2<<5);

#endif

#if(Fcco/Fcclk)==16

PLLCFG=((Fcclk/Fosc)-1)|(3<<5);

#endif

PLLFEED=0xaa;

PLLFEED=0x55;

while((PLLSTAT&(1<<10))==0);

PLLCON=3;

PLLFEED=0xaa;

PLLFEED=0x55;

}

intmain(void)

{

PLL_Init();

UART1_Init();

GPIO_init(14);

//

選擇GPIO功能

GPIO_init(15);

GPIO_init(16);

GPIO_init(18);

GPIO_init(2);

GPIO_init(3);

GPIO_init(4);

GPIO_init(27);

GPIO_init(6);

GPIO_init(7);

GPIO_inout(14,0);

//設(shè)置輸入

GPIO_inout(15,0);

GPIO_inout(16,0);

GPIO_inout(18,0);

GPIO_inout(2,0);

GPIO_inout(3,0);

GPIO_inout(4,0);

GPIO_inout(27,0);

GPIO_inout(6,0);

GPIO_inout(7,0);

GPIO_init(23);

//LED控制端的初始化

GPIO_init(24);

GPIO_init(10);

GPIO_init(11);

GPIO_init(12);

GPIO_init(25);

GPIO_inout(23,1);

GPIO_inout(24,1);

GPIO_inout(10,1);

GPIO_inout(11,1);

GPIO_inout(12,1);

GPIO_inout(25,1);

GPIO_SET(23,1);

GPIO_SET(24,1);

GPIO_SET(10,1);

GPIO_SET(11,1);

GPIO_SET(12,1);

GPIO_SET(25,1);

GPIO_init(DATA);

GPIO_init(CLK);

GPIO_init(DIG_EN0);

GPIO_init(DIG_EN1);

GPIO_init(DIG_EN2);

GPIO_init(DIG_EN3);

GPIO_inout(DATA,OUTPUT);

GPIO_inout(CLK,OUTPUT);

GPIO_inout(DIG_EN0,OUTPUT);

GPIO_inout(DIG_EN1,OUTPUT);

GPIO_inout(DIG_EN2,OUTPUT);

GPIO_inout(DIG_EN3,OUTPUT);

GPIO_SET(CLK,HIGH);

GPIO_SET(DATA,HIGH);

//GPIO_init(5);

//GPIO_inout(5,1);

//GPIO_SET(5,1);

Timer1Init();

Timer2Init();

//

定時(shí)器初始化

VICIRQStatus=1<<26;

//

IRQ中斷使能

VICIntSelect=0<<26;

//

定時(shí)器2分配為IRQ中斷

VICVectCntl1=0x20|26;

/*

定時(shí)器2分配為向量IRQ通道0

*/

VICVectAddr1=(UINT32)Timer2ISR;

/*

分配中斷服務(wù)程序地址

*/

VICIntEnable=1<<26;

/*

定時(shí)器2中斷使能

*/

VICIntSelect=0<<5;

VICVectCntl0=0x20|5;

/*

定時(shí)器1分配為向量IRQ通道0

*/

VICVectAddr0=(UINT32)Timer1ISR;

/*

分配中斷服務(wù)程序地址

*/

VICIntEnable=1<<5;

/*

定時(shí)器1中斷使能

*/

while(1)

{

timeupdate();

if(alarm!=0)

{

if(al_on3off[al_num]==0)

display=al_num*1111;

else

display=al_shi[al_num]*100+al_fen[al_num];

}

else

{

switch(dis_bit)

{case0:

display=shi*100+fen;

break;

case1:

display=miao*100+week;

break;

case2:

display=nian;

break;

case3:

display=yue*100+ri;

break;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論