




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 陜西理工學(xué)院畢業(yè)設(shè)計畢業(yè)設(shè)計 題 目 用PG12864LCD設(shè)計的指針式電子鐘 學(xué)生姓名 王康康 學(xué)號 1110064047 所在院(系) 物理與電信工程學(xué)院 專業(yè)班級 電子信息科學(xué)與技術(shù)1102 指導(dǎo)教師 楊創(chuàng)華 完成地點(diǎn) 實(shí)驗樓1104教室 2015年5月目錄引言11 設(shè)計任務(wù)及方案論證11.1設(shè)計任務(wù)與要求11.2 總體方案論證與設(shè)計12系統(tǒng)硬件設(shè)置12.1 STC89C51單片機(jī)簡介12.2顯示模塊設(shè)計32.2.1 PG12864LCD的特性介紹42.2.2 LCD12864引腳介紹42.2.3 12864內(nèi)部功能器件及相關(guān)功能52.2.4 12864液晶與單片機(jī)接口電路62.3設(shè)置
2、模塊82.4 振蕩電路92.5 復(fù)位電路93系統(tǒng)軟件設(shè)計93.1總體軟件設(shè)計93.2 時鐘函數(shù)模塊103.3 指針時鐘設(shè)計113.3.1 實(shí)現(xiàn)功能113.3.2實(shí)現(xiàn)算法113.3.3 函數(shù)設(shè)計133.4 顯示函數(shù)模塊153.4.1實(shí)現(xiàn)功能173.4.2 函數(shù)設(shè)計173.5.1 功能183.5.2 函數(shù)183.6主函數(shù)模塊194.設(shè)計結(jié)果205.使用方法206.設(shè)計進(jìn)度207.教學(xué)單位可以提供的條件20致謝21參考文獻(xiàn)21用PG12864LCD設(shè)計的指針式電子鐘王康康(陜西理工學(xué)院物理與電信工程學(xué)院電子信息科學(xué)與技術(shù)專業(yè)電信1102班,陜西漢中 723000)指導(dǎo)教師:楊創(chuàng)華 摘要本設(shè)計采用的是
3、STC89C51單片機(jī),通過單片機(jī)內(nèi)部定時器定時實(shí)現(xiàn)時鐘定時計數(shù)功能,并以模擬時鐘的形式顯示在LCD_12864上。同時可通過三個按鍵可實(shí)現(xiàn)時間的調(diào)節(jié)。 關(guān)鍵詞時鐘 AT89C51單片機(jī) LCD12864液晶By using the analog electronic clock design PG12864LCDWang kangkang (Grade11,Class2,Major Electronic Information Science and Technology,Physics Dept.,Shaanxi University of Technology,Hanzhong 7230
4、00,Shaanxi)Tutor:Yang chuanghua Abstract :This design uses STC89C51 microcontroller, through the MCU internal timer from time to time to achieve the clock timing and counting function and in the form of analog clock display on the LCD 12864. At the same time can be adjusted by the three keys to real
5、ize the time. Keywords: AT89C51microcontroller LCD12864 LCD clock引言如今二十一電子鐘、機(jī)械式手表等鐘表已經(jīng)普遍存在于市場,并且鐘表已經(jīng)成為人們生活中不可缺少的一部分。在生活中到處都能看到其身影。當(dāng)穿行于馬路上時總會看到幾乎每個人手腕上戴著一塊手表。當(dāng)大人家里做客時總能看到大廳里面掛著個鐘表。當(dāng)打開手機(jī)時屏幕上依舊是鐘表的畫面。時間伴隨著我們鐘表也成為我們生活中必不可少的一大部分。當(dāng)今市場有好多電子鐘,但大多數(shù)是純數(shù)字式的,指針式的電子鐘比較新穎,而且具有真實(shí)表盤式時鐘的效果。用PG12864LCD設(shè)計的模擬電子鐘采用PG1286
6、4LCD液晶屏,用來模擬表盤與時分秒指針指示當(dāng)前時鐘,此模擬指針式電子鐘實(shí)現(xiàn)的功能為:在PG12864顯示屏上顯示圓形表盤與時分秒三個指針表示當(dāng)前時刻;三個按鍵,K1鍵用來選擇工作模式;K2鍵用來選擇調(diào)整時分秒;K3鍵用來調(diào)節(jié)大小。1 設(shè)計任務(wù)及方案論證 1.1設(shè)計任務(wù)與要求利用單片機(jī)等器件做一個簡易的模擬指針式時鐘,硬件設(shè)計以單片機(jī)為主,主要包括顯示模塊、復(fù)位模塊、時鐘模塊。采用PG12864液晶屏作為顯示單元,液晶屏上顯示圓形表盤、時、分、秒指針,并且設(shè)置按鈕可以調(diào)節(jié)時間,軟件設(shè)計主要是通過單片機(jī)編程軟件Keil C51設(shè)計,模擬仿真是利用仿真軟件Proteus對所設(shè)計的硬件電路和程序進(jìn)行
7、調(diào)試。 1.2 總體方案論證與設(shè)計在設(shè)計中要包含顯示模塊,控制器,設(shè)置模塊;方案一:利用基于MFC的Windows應(yīng)用程序在屏幕上顯示一個指針式時鐘,并可通過菜單選項對時間調(diào)節(jié),設(shè)計的時鐘畫面清晰,顯示準(zhǔn)確,但缺點(diǎn)是時間必須與系統(tǒng)機(jī)器時間一樣,不可以隨意設(shè)置時間,另外此方案涉及微軟基礎(chǔ)類庫,對于不熟悉的我們難度較大。方案二:因此我們采用另一套方案,顯示模塊用LCD12864模塊,可以顯示系統(tǒng)時間;整個代碼實(shí)現(xiàn)主要由51單片機(jī)來實(shí)現(xiàn);設(shè)置模塊為按鍵處理可自行調(diào)節(jié)時間,整體流程以AT89C51單片機(jī)為控制核心,將得到的數(shù)據(jù)通過LCD12864模塊顯示出來,同時通過相應(yīng)的按鍵調(diào)整相應(yīng)的值,此方案具有
8、設(shè)計簡單,成本低廉,可執(zhí)行度高等優(yōu)點(diǎn),因此采用本方案。圖2.1 STC89C51管腳圖2系統(tǒng)硬件設(shè)置 2.1 STC89C51單片機(jī)簡介 在設(shè)計中可用STC89C5代替AT89C51,此芯片具有速度更高,功能更全,壽命更長,價格更低等優(yōu)點(diǎn);我們采用雙列直插40引腳的 STC89C51,它可以實(shí)現(xiàn)ISP在線編程功能,然而AT89C51則不可以,將AT89C51的程序通過軟件直接下載到STC89C51中后,就可以代替AT單片機(jī)直接工作,基本上都不需要做修改就可以正常工作了,STC公司推出的51系列單片機(jī)芯片是兼容其它51單片機(jī)的,而51單片機(jī)作為單片機(jī)界的應(yīng)用最廣泛芯片,幾乎每一個高等院校、普通學(xué)
9、校、網(wǎng)站、業(yè)余單片機(jī)培訓(xùn)都是用51單片機(jī)作為基礎(chǔ)而學(xué)習(xí)的,正是因為如此可以利用的參考資料和例子也是最多的, 而且由于STC89C51自帶有EEPROM,其在程序中更是可以直接修改,斷電之后也不會丟失數(shù)據(jù)。STC89C51單片機(jī)管腳圖如圖2.1所示:STC89C51單片機(jī)的引腳介紹:-VCC:供電電壓-GND:接地 -P0口:P0口是一個8位雙向I/O口,當(dāng)每個引腳第一次被寫1時,定義其為高阻態(tài)輸入,此外P0能夠用來作為外部程序數(shù)據(jù)存儲器,為此它可以被定義為數(shù)據(jù)/地址的第八位,在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此外
10、P0作為數(shù)據(jù)口時,需外接上拉電阻。-P1口:P1口緩沖器能接收輸出4TTL門電流,當(dāng)P1口管腳寫入1后,由于P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,所以被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,正是由于內(nèi)部上拉的緣故,在FLASH編程和校驗時,P1口可以作為第八位地址接收;-P2口:P2口也是一個內(nèi)部具有上拉電阻的8位雙向I/O口,P2口緩沖器同樣可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入,并因此在作為輸入時,P2口的管腳被外部拉低,將輸出電流,正是由于內(nèi)部上拉的緣故,P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)
11、存儲器進(jìn)行存取時,P2口輸出地址的高八位,在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容,P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 -P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流,當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入,作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 此外P3口除了作為一般的I/O口外,更重要的用途是它還有復(fù)用功能,如下所示:§P3.0 RXD第二功能可作
12、為串行輸入口;§P3.1 TXD第二功能可作為串行輸出口;§P3.2 /INT0(外部中斷0);§P3.3 /INT1(外部中斷1);§P3.6/WR第二功能可作為外部數(shù)據(jù)寄存器寫選通;§P3.7/RD第二功能可作為外部數(shù)據(jù)寄存器讀選通;§P3口同時為閃爍編程和編程校驗接受一些控制信號;§RST:復(fù)位輸入,當(dāng)振蕩器復(fù)位時,要保持RST腳兩個機(jī)器周期的高電平,當(dāng)STC89C51通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復(fù)位;初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為
13、高電平,指針堆棧寫入07H,其它專用的寄存器被寫“0”,RESET由高轉(zhuǎn)低時,單片機(jī)內(nèi)部即從0000H地址開始執(zhí)行,但是,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài)。 表2.1 8051的初始態(tài)表 特殊功能寄存器 初始態(tài) 特殊功能寄存器 初始態(tài) ACC 00H B 00H PSW 00H SP 07H DPH 00H TH0 00H DPL 00H TL0 00H IP xxx00000B TH1 00H IE 0xx00000B TL1 00H TMOD 00H TCON 00H SCON xxxxxxxxB SBUF 00H P0-P3 1111111B PCON 0xxxxx
14、xxB AALE/PROG:地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié),當(dāng)訪問外部存儲器時,在FLASH編程期間,此引腳用于輸入編程脈沖;而在平常,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6,因此它可用作對外部輸出的脈沖或用于定時目的,然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖,如想禁止ALE的輸出可在SFR8EH地址上置0,此時ALE只有在執(zhí)行MOVX,MOVC指令時ALE才起作用;另外,該引腳被略微拉高,如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效1;-PSEN:外部程序存儲器的選通信號,在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN
15、有效,但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn); -EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器,注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器,在FLASH編程期間,此引腳也用于施加12V編程電源(VPP); -XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入; -XTAL2:來自反向振蕩器的輸出;振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出,該
16、反向放大器可以配置為片內(nèi)振蕩器,石晶振蕩和陶瓷振蕩均可采用,如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接,有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度1。 2.2顯示模塊設(shè)計 本設(shè)計顯示模塊采用不帶字庫PGLCD12864。2.2.1 PG12864LCD的特性介紹 PG12864LCD是像素可尋址的圖形液晶顯示屏模塊,PG12864LCD特性如下: §工作電壓為+5V,可自帶驅(qū)動LCD所需的負(fù)電壓; §全屏幕點(diǎn)陣,點(diǎn)陣數(shù)為128列*64行,可顯示8行*4行個(16*16點(diǎn)陣)漢字,也可完成圖像,字符的顯
17、示3; §與CPU接口采用5條位控制總線和8位并行數(shù)據(jù)總線輸入輸出; §內(nèi)部有顯示數(shù)據(jù)鎖存器,自帶EL驅(qū)動; §簡單的操作指令; §數(shù)據(jù)口可以采用串行傳輸與并行傳輸2.2.2 LCD12864引腳介紹 表2.2 LCD12864引腳管腳號管腳名稱管腳功能描述1VSS接地2VDD接電壓3V0液晶顯示器驅(qū)動電壓4RSRS=“H”表示DB7-DB0為顯示數(shù)據(jù);RS=“L”表示DB7-DB0為顯示指令數(shù)據(jù)5R/WR/W=“H”,E=“H”數(shù)據(jù)被讀到DB7-DB0R/W=“L”,E=“HL”數(shù)據(jù)被寫到IR或DR6ER/W=“L”,E信號下降沿鎖存DB7DB0R/W
18、=“H”,E=“H”DDRAM數(shù)據(jù)讀到DB7DB07DB0數(shù)據(jù)線8DB1數(shù)據(jù)線9DB2數(shù)據(jù)線10DB3數(shù)據(jù)線11DB4數(shù)據(jù)線12DB5數(shù)據(jù)線13DB6數(shù)據(jù)線14DB7數(shù)據(jù)線15CS1H:選擇芯片(右半屏)信號16CS2H:選擇芯片(左半屏)信號17RET復(fù)位低電平有效18VOUT驅(qū)動負(fù)電壓19LED+背光電源20LED-背光接地 通過DB0- DB7數(shù)據(jù)線和AT89C51IO口連接,對應(yīng)的管腳必須有效,在顯示的時候,要通過列驅(qū)動和行驅(qū)動來控制液晶屏顯示,在驅(qū)動時,對應(yīng)的都有相應(yīng)的控制器來控制3,由于其顯示分為左半屏和右半屏,當(dāng)CS0為1時,左半屏開顯示;CS1為1時,右半屏開顯示,12864管
19、腳功能如表2-2所示。2.2.3 12864內(nèi)部功能器件及相關(guān)功能§指令寄存器(IR)指令寄存器是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對應(yīng);當(dāng)D/I=0時,在E信號下降沿的作用下,指令碼寫入指令寄存器。§數(shù)據(jù)寄存器(DR)數(shù)據(jù)寄存器是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對應(yīng),當(dāng)D/I=1時,在下降沿作用下,圖形顯示數(shù)據(jù)寫入數(shù)據(jù)寄存器,或在E信號高電平作用下由數(shù)據(jù)寄存器讀到DB0-DB7數(shù)據(jù)總線,DR和DDRAM之間的數(shù)據(jù)傳輸是12864模塊內(nèi)部自動執(zhí)行的4。§忙標(biāo)志(BF)BF標(biāo)志提供內(nèi)部工作情況,BF=1表示模塊內(nèi)部操作在忙狀態(tài),此時模塊不接受外部指令和數(shù)據(jù);B
20、F=0時,模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù),利用STATUS READ指令,可以將BF讀到DB7總線,從而檢驗?zāi)K工作狀態(tài)。§顯示控制觸發(fā)器DFF 此觸發(fā)器是用于模塊屏幕顯示開和關(guān)狀態(tài)的控制,DFF=1為開顯示(DISPLAY OFF),DDRAM的內(nèi)容就顯示在屏幕上;DFF=0為關(guān)顯示(DISPLAY OFF),關(guān)閉屏幕,DDF的狀態(tài)是由指令DISPLAY ON/OFF和RST信號控制的。§XY地址計數(shù)器 XY地址計數(shù)器是一個9位計數(shù)器,高3位是X地址計數(shù)器,低6位為Y地址計數(shù)器,XY地址計數(shù)器實(shí)際上是作為DDRAM的地址指針,X地址計數(shù)器為D
21、DRAM的頁指針,Y地址計數(shù)器為DDRAM的列地址指針。X地址計數(shù)器是沒有記數(shù)功能的,只能用指令設(shè)置;Y地址計數(shù)器具有循環(huán)記數(shù)功能,當(dāng)數(shù)據(jù)寫進(jìn)去時,Y的地址數(shù)據(jù)就會自動加1,Y地址指針可以表示從0-63;§顯示數(shù)據(jù)RAM(DDRAM)DDRAM是存儲圖形顯示數(shù)據(jù)的。數(shù)據(jù)為1表示顯示選擇,數(shù)據(jù)為0表示顯示非選擇,DDRAM與地址和顯示位置的關(guān)系見DDRAM地址表。§Z地址計數(shù)器Z地址計數(shù)器可以循環(huán)記數(shù),共有六位,它是用于顯示行掃描,當(dāng)完成一行掃描,這個計數(shù)器的內(nèi)容就會自動加1,并指向下一行數(shù)據(jù)掃描,當(dāng)復(fù)位后Z地址計數(shù)器自動清0;Z地址計數(shù)器可以用DISPLAY START L
22、INE指令預(yù)置,所以,就由這條指令控制屏幕顯示的起始行,因為DDRAM共64行,因此可以循環(huán)滾動顯示64行5。各功能指令介紹如下顯示開/關(guān)指令 R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00000111111/0DB0為1時,LCD開顯示;DB0為0,關(guān)閉顯示。顯示起始行(ROW)設(shè)置指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00011顯示起始行(063)該指令設(shè)置了屏幕最上一行顯示RAM的行號,要想實(shí)現(xiàn)滾屏顯示的效果,可以改變顯示起始行設(shè)置指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00010111頁號
23、(07)4、列地址(Y Address)設(shè)置指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00001顯示列地址(063)顯示RAM的64行可按8行為一頁將其分為8頁;設(shè)置了頁地址和列地址,就唯一確定了顯示RAM中的一個單元,這樣CPU就可以用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進(jìn)一個字節(jié)的數(shù)據(jù)。讀狀態(tài)指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB010BUSY0ON/OFFREST0000該指令用來查詢12864內(nèi)部控制器的狀態(tài),各參量含義如下:BUSY:1-內(nèi)部在工作,也就是忙狀態(tài);0-正常狀態(tài)ON/OFF:1-顯示關(guān)閉;0-顯示打
24、開RESET:1-復(fù)位狀態(tài);0-正常狀態(tài)在BUSY和RESET狀態(tài)時,除讀狀態(tài)指令外,其它指令均對12864模塊內(nèi)部無效5,除此之外在操作之前要查詢BUSY狀態(tài),以確定是否可以對12864模塊進(jìn)行操作。寫數(shù)據(jù)指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB001寫顯示數(shù)據(jù)讀數(shù)據(jù)指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB011讀顯示數(shù)據(jù) 要提醒的是,每次進(jìn)行讀數(shù)據(jù)之前,都要有一次空讀操作,緊接著才會讀出想要讀的單元中的數(shù)據(jù),而且每當(dāng)完成一次讀、寫數(shù)據(jù)指令,內(nèi)部的列地址就會自動加1, 2.2.4 12864液晶與單片機(jī)接口電路 在
25、實(shí)際編程時,12864與單片機(jī)的連接有并行和串行兩種方式可以選擇,串行模式占用引腳較少(2個),速度較慢;并行模式占用引腳較多(11個),但傳輸速度較快,因為一次傳8位,速度自然就快,因此我們采用并行傳輸。12864的數(shù)據(jù)口DB0-DB7分別接單片機(jī)的P1.0-P1.7用來傳輸數(shù)據(jù);控制口RS、RW、EN分別接P3.2、P3.1、P3.0。 順便在此和大家分享一下調(diào)試中遇到的各種問題及如何應(yīng)對: 一:硬件問題1:這種情況是新手最常碰到的問題,碰到這種情況首先要確定你的接線沒有任何問題,如果是51單片機(jī),用P0口一定要加10K的上拉電阻,不然程序正常了也顯示不出來。2: 另外要注意第三腳VO的連
26、接方式,這個是對比度電位引腳,實(shí)際中常采用10k的可變電阻滑動端連接VO腳,固定端的一段接VCC,另外一端應(yīng)根據(jù)實(shí)際硬件連接。如果用的是1602,另一端直接接到GND就可以了,但是對于12864就應(yīng)該看18腳的標(biāo)記了,如果寫的是NC ,那么另一端直接接地,如果是VEE,那么就應(yīng)該接到18腳,因為這時的18腳是負(fù)壓輸出端。 根據(jù)這點(diǎn)確定你的對比對調(diào)節(jié)電路接法正確無誤。3:關(guān)于串并行選擇的問題。串并行選擇對于有字庫的12864適用(1602的四線驅(qū)動也可以叫做串行驅(qū)動),如果有PSB引腳,那么你的屏應(yīng)該可以支持串并行了。串并行的選擇決定于PSB引腳的電位,一般是低電平為串行模式,高電平為并行模式。
27、有些同志在使用的時候?qū)SB進(jìn)行了電位定義但是沒有任何顯示,這是你應(yīng)該注意一下LCM板上焊點(diǎn),尤其是和PSB引腳相連的那些起跳線作用的焊點(diǎn)。因為大多廠家在出廠的時候就預(yù)先設(shè)置為并行模式,也就是接到高電位上(VCC)。碰到這種情況把焊點(diǎn)跳線重新焊接一下,接到低電位上就可以了。模式選擇錯誤不顯示是小問題,由于屏電路的不同,可能你在驅(qū)動的時候損壞屏或者單片機(jī),因為選擇不對,定義的電位相當(dāng)于短路。二:軟件問題 軟件問題一般也就是定義的引腳不對,這種情況出現(xiàn)于真正的初學(xué)者,在copy別人的程序或者屏本身的模板程序沒有修改引腳的定義,這種情況比較簡單,只需要把引腳對應(yīng)的端口重新定義一下就可以了。三:顯示不
28、清楚A:屏上的VO引腳(3腳)電位不對如果你按照上面的說法接了對比度電路,這時你只需要調(diào)節(jié)電位器的旋鈕就可以了,最終可以得到你滿意的對比度,使顯示最清晰。一般這個腳的電壓是 - 6.2V左右,這個電壓的顯示效果是最好的。B:電源問題很多同學(xué)在現(xiàn)成的實(shí)驗板上做試驗,電源取自電腦USB口,這種情況容易出現(xiàn)顯示不清楚的情況,原因是供電電流不夠,因為電腦的口為500mA供電。碰到此類情況,用外接電源,肯定可以解決。所謂的網(wǎng)上的那些個底層驅(qū)動程序,個人覺得沒有必要,所謂知其然知其所以然,就是這個道理。 圖2-3 12864接口電路引腳號12864引腳STC89C51引腳7-14DB0-DB7P1.0-P
29、1.75WRP3.14RSP3.26CEP3.017RST地表2.3 12864引腳分配 2.3設(shè)置模塊設(shè)置模塊采用三個按鍵與單片機(jī)與GND連接按鍵與單片機(jī)的接口電路如圖2-4所示。圖2-4 按鍵電路 按鍵一端與GND連接,另一端與單片機(jī)GPIO口連接(相應(yīng)的引腳接到P3.0, P3.1. P3.3上),當(dāng)I/O為低電平則按鍵按下;其中K1:模式選擇鍵(正常計時與調(diào)節(jié)時間模式)K2:時分秒選擇按鍵K3:調(diào)節(jié)時/分/秒大小。按鍵選用觸動開關(guān)。 2.4 振蕩電路圖2-5 振蕩電路振蕩電路選為內(nèi)部振蕩方式。由于所要設(shè)計的時間由內(nèi)部自帶的定時器中斷和軟件計數(shù)相結(jié)合產(chǎn)生的,故從計算方便以及系統(tǒng)的效率角度
30、出發(fā),設(shè)計選用12兆頻率的晶振,其電路如圖2-5所示。2.5 復(fù)位電路單片機(jī)采用高電平(I/O口為1時)復(fù)位。單片機(jī)選用12兆頻率晶振,起振為一毫秒,所以兩個機(jī)器周期的用時為兩微秒。單片機(jī)單次上電復(fù)位所需的最短延時應(yīng)該大于上電延時與單片機(jī)起振延時兩者之和。延遲一個時間還太小,不能夠促使單片機(jī)有一個較好的工作開始7。復(fù)位電路使單片機(jī)保持在復(fù)位狀態(tài)并且維持一個延時,這樣可以給電源電壓從上升到穩(wěn)定的一個等待時間;在電壓穩(wěn)定,再進(jìn)行一個延時狀態(tài),給時鐘振蕩器由起振到穩(wěn)定的一個延時;在單片機(jī)開始進(jìn)入運(yùn)行狀態(tài)之前,至少推遲2個機(jī)器周期的延時間。當(dāng)單片機(jī)RET端為高電平的時單片機(jī)復(fù)位,主要是復(fù)位電路由電阻、
31、電容晶振組成;電容充電的時RST端為高電平,此時單片機(jī)開始復(fù)位;當(dāng)該電容電充滿,此時單片機(jī)完成復(fù)位。 初始化i<2i=0 i=0開中斷通過K2,K3調(diào)節(jié)時分秒否是是否圖3-1系統(tǒng)圖圖2-6 復(fù)位電路 3系統(tǒng)軟件設(shè)計 3.1總體軟件設(shè)計軟件設(shè)計是較難部分,利用keil軟件編寫程序,并生成Hex文件,下載到單片機(jī)。由于本程序涉及的模塊較多,所以編寫程序采用模塊化設(shè)計,C語言具有編寫靈活性好、移植方便、便于模塊化設(shè)計的優(yōu)點(diǎn),所以采用如果時為12令是其為0 時加一分=60? 分加一秒=60?繼續(xù)執(zhí)行上面的步驟20次中斷到?jīng)]秒加一開相關(guān)中斷,裝初值開定時器,定時模式開始 中斷次數(shù)計數(shù)圖3-2 時鐘
32、框圖C語言給單片機(jī)編寫程序??驁D如圖3-1所示。其中K1:模式選擇鍵(正常計時與調(diào)節(jié)時間模式) K2:用于時/分/秒選擇按鍵K3:用于調(diào)節(jié)時/分/秒大小按鍵i:用于統(tǒng)計K1鍵按下的次數(shù)3.2 時鐘函數(shù)模塊時鐘定時由單片機(jī)內(nèi)部定時器中斷來完成。中斷50ms來一次,20次為一秒。因此20次中斷秒加一同時秒針轉(zhuǎn)過一格。同理秒滿60分加一同時分針轉(zhuǎn)一格。當(dāng)分滿60時加一同時時針走一下6。時鐘部分如圖3-2所示。 3.3 指針時鐘設(shè)計 3.3.1 實(shí)現(xiàn)功能實(shí)現(xiàn)指針時鐘的動態(tài)顯示,并且具有可以在LCD_12864顯示器上畫點(diǎn)以、畫線以及畫圓的功能。 3.3.2實(shí)現(xiàn)算法LCD_12864模擬時鐘畫圖主要采用
33、Bresenham的算法。Bresenham算法是計算機(jī)圖形學(xué)領(lǐng)域使用最廣泛的直線掃描轉(zhuǎn)換方法。Bresenham算法,可以說是DDA算法的簡化,兩者大致的異同:DDA算法,是某一個長的方向,每一次變化一個單位或者一個單位像素,另外一個方向的變化量可以通過浮點(diǎn)運(yùn)算和四舍五入計算得到。而Bresenham算法對于下一個點(diǎn)的坐標(biāo)的取值,則是通過判斷一個反復(fù)迭代的誤差因數(shù)是否大于零,而在迭代的計算誤差因數(shù)的時候,只用到了整型數(shù)的加法和移位操作,計算量非常小,是最高效的單步畫線算法。由于Bresenham算法僅用到了整形數(shù)的加法和移位操作,大大減少了計算機(jī)運(yùn)算量,便于在小型的計算機(jī)系統(tǒng)中(例如單片機(jī)系
34、統(tǒng)等)實(shí)現(xiàn)其功能。也就是這個原因,Bresenham算法的運(yùn)用更為廣泛了。其原理是:通過各行、各列像素中心構(gòu)造一組虛擬網(wǎng)格線,按直線從起點(diǎn)到終點(diǎn)的順序計算直線各垂直網(wǎng)格線的交點(diǎn),然后確定該列像素中與此交點(diǎn)最近的像素。該算法的優(yōu)點(diǎn)在于可以采用增量計算,使得對于每一列,只要檢查一個誤差項的符號,就可以確定該列所求的像素。1)畫直線LCD畫直線,也就是確定直線光柵化后的一系列坐標(biāo),在LCD點(diǎn)陣中顯示出來,也有人叫直線光柵化。實(shí)現(xiàn)這種光柵直線的算法有中點(diǎn)畫線法Bresenham算法是DDA算法畫線算法的一種改進(jìn)算法。本質(zhì)上它也是采取了步進(jìn)的思想。不過它比DDA算法作了優(yōu)化,避免了步進(jìn)時浮點(diǎn)數(shù)運(yùn)算,同時
35、為選取符合直線方程的點(diǎn)提供了一個好思路。首先通過直線的斜率確定了在x方向進(jìn)行單位步進(jìn)還是y方向進(jìn)行單位步進(jìn):當(dāng)斜率k的絕對值|k|<1時,在x方向進(jìn)行單位步進(jìn);當(dāng)斜率k的絕對值|k|>1時,在y方向進(jìn)行單位步進(jìn)。 下面以|k|<1時推導(dǎo)Bresenham算法的數(shù)學(xué)依據(jù):已知有一直線y = kx+b,|k|<1。我們通過斜率確定了x方向為單位步進(jìn)。當(dāng)x = Xm時,y = Ym。那么當(dāng)x 執(zhí)行一個單位步進(jìn)時(即x = Xm+1時),y等于Ym還是等于Ym+1更符合這個直線方程呢?單憑肉眼我們很難得出結(jié)論,最好的辦法當(dāng)然是比較Ym和Ym+1和真實(shí)的方程的y值的差是多少(即Y
36、real = k*(Xm+1)+b),看看哪一個更靠近真實(shí)的方程的y值。我們設(shè) Dupper = Ym+1 - Yreal = Ym+1 - k*(Xm+1)+b); 表示Ym+1和方程真實(shí)值的差Ddown = Yreal - Ym = k*(Xm+1)+b)- Ym; 表示Ym和方程真實(shí)值的差那就是我們要比較Dupper和Ddown的大小。假設(shè)Diff = Dupper - Ddown = (Ym+1 - k*(Xm+1)+b) - (k*(Xm+1)+b)- Ym) 令X 為線段x方向的間距,Y 為線段y方向的間距。Pm = X* Diff = 2*X* Ym-2*Y*
37、 Xm-2*Y-X*(2b-1);那么Pm+1 = Pm+2*X*(Ym+1- Ym)-2*Y;其中Ym+1- Ym取0還是1,取決于Pm的符號。根據(jù)等式Diff = Dupper - Ddown = (Ym+1 - k*(Xm+1)+b) - (k*(Xm+1)+b)- Ym)以及k = Y/X,我們可以得出起始像素(x0,y0)的參數(shù)p0的值:P0 =X-2*Y;同理我們推出|k|>1的情況,Qm = 2*Xm*Y-2*Ym*X+(2b-2)*X+Y;Qm+1 = Qm+2*(Xm+1-Xm)*Y-2*X;其中Xm+1-Xm等于0還是1,取決于Qm的符號其中第一個參數(shù)Q0 = Y-2
38、*X; 明白了數(shù)學(xué)原理,我們很快能確定算法步驟:1. 輸入線段的起點(diǎn)和終點(diǎn)。2. 判斷線段的斜率是否存在(即起點(diǎn)和終點(diǎn)的x坐標(biāo)是否相同),若相同,即斜率不存在,只需計算y方向的單位步進(jìn)(Y+1次),x方向的坐標(biāo)保持不變即可繪制直線。3. 計算線段的斜率k,分為下面幾種情況處理a. k等于0,即線段平行于x軸,即程序只需計算x方向的單位步進(jìn),y方向的值不變b. |k|等于1,即線段的x方向的單位步進(jìn)和y方向的單位步進(jìn)一樣,皆為1。直接循環(huán)X次計算x和y坐標(biāo)。4. 根據(jù)輸入的起點(diǎn)和終點(diǎn)的x、y坐標(biāo)值的大小決定x方向和y方向的單位步進(jìn)是1還是-16. 畫出第一個點(diǎn)。7. 若|k| <
39、1,設(shè)m =0,計算P0,如果Pm>0,下一個要繪制的點(diǎn)為(Xm+單位步進(jìn),Ym),Pm+1 = Pm -2*Y;否則要繪制的點(diǎn)為(Xm+單位步進(jìn),Ym+單位步進(jìn))Pm+1 = Pm+2*X-2*Y;8. 重復(fù)執(zhí)行第七步X-1次;9. 若|k| <1,設(shè)m =0,計算Q0,如果Qm>0,下一個要繪制的點(diǎn)為(Xm,Ym+單位步進(jìn)),Pm+1 = Pm -2*X;否則要繪制的點(diǎn)為(Xm+單位步進(jìn),Ym+單位步進(jìn))Pm+1 = Pm+2*Y-2*X;10. 重復(fù)執(zhí)行第9步Y(jié)-1次;2)畫圓Bresenham畫圓算法又稱中點(diǎn)畫圓算法,與Bresenham 直線算法一樣,其基本的方法是
40、利用判別變量來判斷選擇最近的像素點(diǎn),判別變量的數(shù)值僅僅用一些加、減和移位運(yùn)算就可以計算出來。為了簡便起見,考慮一個圓心在坐標(biāo)原點(diǎn)的圓,而且只計算八分圓周上的點(diǎn),其余圓周上的點(diǎn)利用對稱性就可得到。只需要知道了圓上的一個點(diǎn)的坐標(biāo) (x, y) ,利用八對稱性,我們馬上就能得到另外七個對稱點(diǎn)的坐標(biāo)。將圓平均分為8個部分1.只要畫出1中1/8圓的圓周,剩下的就可以通過對稱關(guān)系畫出這個圓X變化從0->R那為什么不采用從-R->R呢,Y=+-sqrt(R2-x2);dy/dx=-x/(sqrt(R2-x2) =-x/y所以采用從-R到R,每次橫坐標(biāo)增1,計算量大,而且在(x=+-R,y=0)處
41、,x的很小變化就引起了y的很大變化。 所以不是采用x從-R->R變化。而是采用1/8畫圓法。2.在2這1/8圓周上,x值單調(diào)增加,y值單調(diào)遞減,且fabs(dx/dy)=fabs(-x/y)<=1;所以圓周上相應(yīng)點(diǎn)的y值變化小于1,假設(shè)當(dāng)前點(diǎn)為(x1,y1)這下個點(diǎn)為(x1+1,y1)或(x1+1,y1-1)d1=(x1+1)2+y12-R2;d2=R2-(x1+1)2-(y1-1)2;p=d1-d2 ,若p>0 選點(diǎn)(x1+1,y1-1)否則選點(diǎn)(x1+1,y1)接下來就是求p了,p=2(x1+1)2+2y12-2y1-2R2+1。P1=3-2R(坐標(biāo)為x=0,y
42、=R)然后仿照線段算法得出p(i+1)=p(i)+4(Xi-Yi)+10(pi>0)否則P(i+1)=p(i)+4Xi+6這樣就可以成功畫出1/8圓弧了3.接下來的問題,是剩下的部分怎么處理存儲器將前1/8的坐標(biāo)存儲起來,然后通過鏡像求出其他圓弧坐標(biāo),調(diào)整順序輸出,即可得到。 3.3.3 函數(shù)設(shè)計1:實(shí)現(xiàn)功能從指定坐標(biāo)處繪制一個點(diǎn)或擦除一個點(diǎn)2:實(shí)現(xiàn)依據(jù)通過LCD_set_XY確定坐標(biāo),然后根據(jù)擦除還是繪制再確定點(diǎn)在坐標(biāo)的位置,再判斷是擦除還是繪制,最后使用LCD_write_byte函數(shù)寫入數(shù)據(jù)。圖3.3為流程圖。定位XY坐標(biāo)向LCD繪/擦出點(diǎn)開始結(jié)束 圖3-3 擦/繪點(diǎn) 確定線段兩端
43、點(diǎn)的坐標(biāo)關(guān)系沿兩間的軌跡繪點(diǎn)或擦點(diǎn)開始結(jié)束圖3-4 繪直線框圖 2: void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit Mode)第 13 頁 共 26 頁(1)實(shí)現(xiàn)功能在LCD_12864上繪制一條線段(2)實(shí)現(xiàn)依據(jù)利用兩點(diǎn)式(直線方程)在直線點(diǎn)的軌跡上繪制/擦除點(diǎn)以完成繪線。(3)具體流程圖如圖3-4所示。 3:void Clock_Plate()(1)實(shí)現(xiàn)功能繪制一個指針式模擬時鐘的圓盤。(2)實(shí)現(xiàn)依據(jù)利用圓的軌跡方程找到點(diǎn)的坐標(biāo),再根據(jù)點(diǎn)的坐標(biāo)繪制圖形。(3) 流程圖圖3-5所示。確定圓心坐標(biāo)及其半徑長度沿圓的軌跡進(jìn)行繪點(diǎn)開始結(jié)束 圖3
44、-5 繪制指針圓盤框圖重繪秒針重繪分針開始結(jié)束重繪時針圖3-7 重新繪制指針判斷重新繪哪一條指針擦除指針上一秒狀態(tài)開始結(jié)束圖3-6 繪制指針框圖 圖3-8 隨時間繪制指針繪制時針表盤開始讀取時間根據(jù)時間繪制時分秒針結(jié)束4:void Repaint_A_Hand(uchar i)(1) 實(shí)現(xiàn)功能根據(jù)當(dāng)前時間繪制對應(yīng)的指針,并擦除上次顯示的指針(2) 實(shí)現(xiàn)依據(jù)利用圓的弧度與時間的對應(yīng)關(guān)系,由于圓的弧度隨時間而變化,據(jù)此從圓心到圓弧對應(yīng)時間的位置畫出直線就是指針。(3) 繪制指針框圖如圖3-6所示。 5:void Display_HMS_Hand()第 15 頁 共 26 頁(1)實(shí)現(xiàn)功能重新繪制模
45、擬的秒針、分針、時針。 (2)實(shí)現(xiàn)依據(jù)調(diào)用Repaint_A_Hand函數(shù)設(shè)置當(dāng)前參 數(shù),據(jù)此繪制當(dāng)前時間對應(yīng)的指針。(3)重新繪制指針如圖3-7所示。第 1 頁 共 26 頁 6:void Display_ClockZhizhen()(1)實(shí)現(xiàn)功能讀取時間繪制指針時鐘到LCD_12864上 (2)實(shí)現(xiàn)依據(jù)讀取時間,由于指針隨時間而變化,繪制的模擬指針時鐘,另外判斷調(diào)節(jié)按鍵的鍵值是否為退出鍵的鍵值,若是則返回菜單界面。 (3)流程圖如圖3-8所示。 3.4 顯示函數(shù)模塊通過LCD_Check_Busy()檢測LCD是否忙碌,通過LCD_Write_Command向LCD發(fā)送寫命令,通過void
46、 LCD_Write_Data向lcd發(fā)送寫數(shù)據(jù)命令,通過LCD_Initialize初始化12864顯示屏。由于用的LCD_12864是自帶字庫的,故可以直接顯示字符和漢字,同時根據(jù)液晶顯示屏的要求對應(yīng)圓盤的大小都是可以規(guī)定的。1) lcd_12864寫命令函數(shù)void writecmd(uchar cmd)/ LCD_12864液晶寫命令 while(readstatus() & 0x80)!= 0x00); /LCD_12864液晶顯示讀狀態(tài) LCDDATA=0x00; RW=0; RS=0; EN=0; LCDDATA=cmd; delay(2); EN=1; delay(3)
47、; EN=0;2) lcd_12864寫數(shù)據(jù)函數(shù)void writedate(uchar date) /LCD_12864液晶寫數(shù)據(jù) while(readstatus() &0x80 )!=0x00); LCDDATA=0x00; RW=0; RS=1; EN=0; LCDDATA=date; delay(2); EN=1; delay(3); EN=0;3) LCD_12864液晶顯示讀狀態(tài)函數(shù)uchar readstatus()/LCD_12864液晶顯示讀狀態(tài) uchar i; LCDDATA=0xff; RW=1; RS=0; EN=0; delay(2); EN=1; del
48、ay(3); i=LCDDATA; delay(3); EN=0; return(i);4) LCD_12864液晶讀數(shù)據(jù)函數(shù)uchar readdate()/LCD_12864液晶讀數(shù)據(jù) uchar i; while(readstatus() &0x80 )!=0x00); RW=1; RS=1; EN=0; delay(2); EN=1; delay(3); i=LCDDATA; delay(3); EN=0; return i; 5) LCD_12864液晶初始化函數(shù)void LCD_init()/ LCD_12864液晶初始化 writecmd(0x30); delayms(1
49、); writecmd(0x30); delayms(1); writecmd(0x0c); delayms(1); writecmd(0x01); delayms(1); writecmd(0x06); delayms(1);3.4.1實(shí)現(xiàn)功能通過LCD_12864顯示指針式電子時鐘。3.4.2 函數(shù)設(shè)計1:uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2)(1)實(shí)現(xiàn)功能寫雙參函數(shù)(2)實(shí)現(xiàn)依據(jù)狀態(tài)位char Status_BIT_01():用于判斷是讀/寫指令還是讀/寫數(shù)據(jù)2:uchar LCD_Write_Comma
50、nd_P1(uchar cmd,uchar para1)(1)實(shí)現(xiàn)功能寫單參數(shù)函數(shù)(2)實(shí)現(xiàn)依據(jù)通過態(tài)位char Status_BIT_01(),判斷是讀/寫指令還是讀/寫數(shù)據(jù)3:uchar LCD_Write_Command(uchar cmd)(1)實(shí)現(xiàn)功能寫無參數(shù)函數(shù)(2)實(shí)現(xiàn)依據(jù)狀態(tài)位char Status_BIT_01():用于判斷是讀/寫指令還是讀/寫數(shù)據(jù)4:uchar LCD_Write_Data(uchar dat)(1)實(shí)現(xiàn)功能寫數(shù)據(jù)(2)實(shí)現(xiàn)依據(jù)通過判斷狀態(tài)位char Status_BIT_03(),數(shù)據(jù)是否為自動寫狀態(tài)5:void Set_LCD_POS(uchar ro
51、w,uchar col)reentrant(1)實(shí)現(xiàn)功能設(shè)置當(dāng)前顯示地址(2)實(shí)現(xiàn)依據(jù)通過調(diào)用寫雙參數(shù)函數(shù),使LCD完成準(zhǔn)備工作。6:void cls()(1)實(shí)現(xiàn)功能清屏(2)實(shí)現(xiàn)依據(jù)先調(diào)用雙參數(shù)、無參數(shù)函數(shù)來配置地址指針,再判斷狀態(tài)位Status_BIT_3(),來判斷是否要進(jìn)行寫數(shù)據(jù),然后調(diào)用寫數(shù)據(jù)(LCD_Write_Data())函數(shù),當(dāng)向LCD寫好數(shù)據(jù),再調(diào)用無參函數(shù)來完成自動寫結(jié)束,最后在重置地址指針5。(3)流程圖,如圖3.9所示。設(shè)置正常顯示模式置ROM為0000將RAM中寫滿0X00開始結(jié)束圖3.9 設(shè)置當(dāng)前地址7:char LCD_Initialise()(1)實(shí)現(xiàn)功能L
52、CD的初始化(2)實(shí)現(xiàn)依據(jù)通過雙參數(shù)LCD_Write_Command_P2來在LCD上顯示區(qū)首地址,文本區(qū)顯示區(qū)寬度,圖形顯示區(qū)首地址,圖形顯示區(qū)寬度,通過LCD_Write_Command_P1()(寫單參數(shù)函數(shù))及無參函數(shù)實(shí)現(xiàn)光標(biāo)形狀,及顯示方式設(shè)置。3.5中斷服務(wù)函數(shù)模塊通過單片機(jī)內(nèi)部定時器定時50毫秒,中斷20次為一毫秒。此時秒針加1,當(dāng)滿60,分加一;當(dāng)分滿60時加一;由于采用12進(jìn)制計時,故時滿12則清零。 3.5.1 功能 時分秒計時功能 3.5.2 函數(shù)void exter0() interrupt 1 /中斷服務(wù)函數(shù) TH0=(65536-50000)/256;/定時器裝載初值約為50ms TL0=(65536-50000)%256; tt+
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 808-2019地下空間安全使用檢查規(guī)范
- DB31/T 1385-2022科技成果分類評價和價值潛力評價規(guī)范
- DB31/T 1380-2022社會消防技術(shù)服務(wù)機(jī)構(gòu)質(zhì)量管理要求
- DB31/T 1292-2021歷史風(fēng)貌區(qū)保護(hù)性征收基地保護(hù)管理指南
- DB31/ 834-2014中空玻璃單位產(chǎn)品能源消耗限額
- DB31/ 267-2015燃料含硫量和灰分限值
- 2025裝修項目經(jīng)理合同示范文本
- 2024年健康運(yùn)動信息測量產(chǎn)品資金申請報告代可行性研究報告
- 水土保持項目環(huán)境保護(hù)與可持續(xù)發(fā)展合同
- 繼承房產(chǎn)質(zhì)量問題處理與質(zhì)量保障協(xié)議
- 消防安全主題班會課件(共17張ppt)
- 《全球通史》課件
- 北師版六年級解方程練習(xí)200題
- 外貿(mào)鎖檢測報告樣式EN12209
- 無損檢測人員登記表
- DB33-T 2048-2017(2021)民宿基本要求與評價
- 1員工培訓(xùn)記錄表表格類
- 某大學(xué)論文答辯模板課件
- 50以內(nèi)加減法練習(xí)題打印版(100題)
- 基礎(chǔ)體溫表格基礎(chǔ)體溫表
- 煤炭項目建議書【范文參考】
評論
0/150
提交評論