版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章LCD驅(qū)動移植6.1認(rèn)識LCD相關(guān)硬件原理6.2LCD參數(shù)設(shè)置6.3內(nèi)核LCD驅(qū)動機(jī)制6.4Linux2.6.32的LCD驅(qū)動源碼分析6.5移植內(nèi)核中的LCD驅(qū)動6.1認(rèn)識LCD相關(guān)硬件原理6.1.1LCD概述6.1.2LCD控制器6.1.3LCD控制器方塊圖6.1.4LCD控制器操作6.1.5LCD控制寄存器6.1.1LCD概述LCD(液晶顯示)模塊可以顯示漢字、字符和圖形,同時還具有低壓、低功耗、體積小、重量輕和超薄等很多優(yōu)點。1.LCD顯示屏的分類2.LCD的常用參數(shù)3.LCD的顯示原理1.LCD顯示屏的分類常見的液晶顯示屏按物理結(jié)構(gòu)可分為4種,即扭曲向列型(TN-LCD)、超扭曲向列型(STN-LCD)、雙層超扭曲向列型(DSTN-LCD)和薄膜晶體管型(TFT-LCD)。在寫驅(qū)動程序時要根據(jù)不同類型對LCD控制器進(jìn)行控制。2.LCD的常用參數(shù)市場上的LCD顯示屏從廠家、型號、規(guī)格等來說不盡相同,了解LCD的主要參數(shù)對進(jìn)行LCD驅(qū)動開發(fā)非常有用,因為寫驅(qū)動程序時就需要對LCD的參數(shù)進(jìn)行設(shè)置。PPI(PixelPerInch)是指每平方英寸所擁有的像素數(shù)目。分辨率:市面上的分辨率標(biāo)準(zhǔn)多種多樣,主要有VGA、SVGA、UXGA和SXGA+。BPP(BitPerPixel),即每個像素使用多少位來表示其顏色。3.LCD的顯示原理一幅圖像被稱為一幀,每幀由多個行排列組成,每行又由多個像素組成,每個像素的色彩使用若干位數(shù)據(jù)來表示。顯示器從屏幕的左上方開始,一行一行地取得每個像素的數(shù)據(jù)并顯示出來,當(dāng)顯示到一行的最右邊時,跳到下一行的最左邊開始顯示下一行;當(dāng)顯示完所有行后,重新跳到左上方開始下一幀的顯示。顯示器沿著“Z”字形的路線進(jìn)行掃描,同時使用幀掃描信號和行掃描信號來同步每一幀和每一行。6.1.2
LCD控制器LCD控制器的功能是產(chǎn)生控制時序和信號,從而驅(qū)動LCD。用戶只需要通過讀寫LCD控制器的一系列寄存器來完成配置。S3C2440的LCD控制器由一個邏輯單元組成,它的作用是把LCD圖像數(shù)據(jù)從一個位于系統(tǒng)內(nèi)存的buffer傳送到一個外部的LCD驅(qū)動器。LCD控制器還支持1BPP、2BPP、4BPP、8BPP的調(diào)色板TFT彩色屏,并且支持64K色(16BPP)和16M色(24BPP)非調(diào)色板真彩顯示。6.1.3
LCD控制器方塊圖LCD控制器的接口時序分為STN和TFT兩種。S3C2440的LCD控制器可以同時支持STN和TFT的LCD顯示屏,根據(jù)實際需要對控制器進(jìn)行不同的設(shè)置可以產(chǎn)生不同的時序。6.1.4LCD控制器操作S3C2440的LCD控制器分STN控制和TFT控制,目前市面上主流的LCD為TFT-LCD。S3C2440的TFTLCD控制器支持1、2、4、8BPP調(diào)色板彩色模式及16BPP、24BPP無調(diào)色板真彩模式。1.24BPP顯示2.16BPP3.8BPP4.256色調(diào)色板1.24BPP顯示24BPP顯示模式使用24位表示一個像素點,每種顏色用8比特位來表示。LCD控制器從內(nèi)存中獲得某個像素的24位顏色值后直接通過VD[23:0]數(shù)據(jù)線發(fā)送給LCD驅(qū)動器。VD23222120191817161514131211109876543210RED76543210
GREEN
76543210
BLUE
765432102.16BPP16BPP模式用16位來表示一個像素點的值。這16位數(shù)據(jù)的格式分為兩種:5:6:5和5:5:5:1,前者使用高5位表示紅色,中間6位表示綠色,低5位表示藍(lán)色;后者用高15位表示紅、綠、藍(lán)3種顏色,每種顏色用5位表示,最低位表示透明度。VD23222120191817161514131211109876543210RED43210NC
NC
NCGREEN
543210
BLUE
43210
3.8BPP8BPP顯示模式使用8位來表示一個像素點,然而對3種基色平均下來,每種基色只能使用不到3位的數(shù)據(jù)來表示,即每種基色最多不過8階,這不能表示更豐富的色彩。4字節(jié)可以表示4個8BPP的像素,字節(jié)與像素的對應(yīng)順序也是可以編程選擇的。4.256色調(diào)色板S3C2440為TFT顯示器提供256色調(diào)色板,調(diào)色板是一塊256×16的內(nèi)存,使用16BPP的格式來表示8BPP模式下各索引值的顏色。INDEX\BitPos1514131211109876543210Address00HR4R3R2R1R0G5G4G3G2G1G0B4B3B2B1B00X4D00040001HR4R3R2R1R0G5G4G3G2G1G0B4B3B2B1B00X4D000404…
FFHR4R3R2R1R0G5G4G3G2G1G0B4B3B2B1B00X4D0007FCNumberofDV232221201915141312111076543
6.1.5
LCD控制寄存器S3C2440提供了LCD控制器,其中有17個控制寄存器,包括LCDCON1~LCDCON5及LCDSADDR1-LCDSADDR3等。1.LCD控制寄存器LCDCON12.LCD控制寄存器LCDCON23.LCD控制寄存器LCDCON34.LCD控制寄存器LCDCON45.LCD控制寄存器LCDCON56.幀內(nèi)存地址寄存器1.LCD控制寄存器LCDCON1LCDCON1用于選擇LCD類型、設(shè)置像素時鐘、使能LCD輸出信號等。功
能位描
述初始狀態(tài)LINECNT(只讀)[27:18]每輸出一個有效行其值減10CLKVAL[17:8]用于設(shè)置VCLK的值STN:VCLK=HCLK/(CLKVAL×2)TFT:VCLK=HCLK/((CLKVAL+1)×2)0MMODE[7]用于設(shè)置VM信號的反轉(zhuǎn)效率,只用于TFT屏0PNRMODE[6:5]設(shè)置LCD的類型00:4位雙掃描(STN)01:4位單掃描(STN)10:8位單掃描(STN)11:TFT屏0BPPMODE[4:1]選擇BPP模式,對于TFT屏1000:1BPP1001:2BPP1010:4BPP1011:8BPP1100:16BPP1101:24BPP(STN)0ENVID[0]信號輸出使能位0:禁止,1:使能02.LCD控制寄存器LCDCON2用于設(shè)置垂直方向各信號的時間參數(shù)。功
能位描
述初始值VBPD[31:24]VSYNC信號之后,還要經(jīng)過(VBPD+1)個HSYNC信號周期才會出現(xiàn)有效行數(shù)據(jù)0LINEVAL[23:14]LCD的行數(shù):(LINEVAL+1)行0VFPD[13:6]一幀中的有效數(shù)據(jù)完成后,到下一個VSYNC信號有效前的無效行數(shù)目:(VFPD+1)0VSPW[5:0]表示VSYNC信號的寬度為(VSPW+1)個HSYNC信號周期,這(VSPW+1)行的數(shù)據(jù)無效03.LCD控制寄存器LCDCON3用于設(shè)置水平方向各信號的時間參數(shù)。功
能位描
述初始值HBPD[25:19]HSYNC信號脈沖之后,還要經(jīng)過(HBPD+1)個VCLK信號周期,才出現(xiàn)有效數(shù)據(jù)0HOZVAL[18:8]LCD的水平寬度:(HOZVAL+1)個像素0HFPD[7:0]一行中的有效數(shù)據(jù)完后,到下一個HSYNC信號有效前的無效像素個數(shù):HFPK+104.LCD控制寄存器LCDCON4對于TFT屏,這個寄存器用來設(shè)置HSYNC信號的脈沖寬度。功
能位描
述初始值MVAL[15:8]STN屏用0HSPW[7:0]表示脈沖寬度為(HSPW+1)個VCLK信號周期0WLH[7:0]STN屏用05.LCD控制寄存器LCDCON5用于設(shè)置各個控制信號的極性,并可從中讀取狀態(tài)信息。功
能位描
述初始值VSTATUS[16:15]只讀,垂直狀態(tài)00:處于VSYNC信號脈沖期間01:處于VSYNC信號結(jié)束到行有效之間10:處于行有效期間11:處于行有效結(jié)束到下一個VSYNC信號之間0HSTATUS[14:13]只讀,描述水平狀態(tài)00:處于HSYNC信號脈沖期間01:處于HSYNC信號結(jié)束到像素有效之間10:處于像素有效期間11:處于像素有效結(jié)束到下一個HSYNC信號之間0BPP24BL[12]設(shè)置TFT屏的顯示模式為24BPP時,一個4字節(jié)中哪3個字節(jié)有效。0:低3字節(jié)有效;1:高3字節(jié)有效0FRM565[11]設(shè)置TFT屏的顯示模式為16BPP時,數(shù)據(jù)的格式0:5:5:5:1;1:5:6:50INVVCLK[10]設(shè)置VCLK信號有效沿的極性0:下降沿讀取數(shù)據(jù);1:在上升沿讀取數(shù)據(jù)0INVVLINE[9]設(shè)置VLINE/HSYNC脈沖的極性0:正常極性;1:反轉(zhuǎn)的極性05.LCD控制寄存器LCDCON5功
能位描
述初始值INVVFRAME[8]設(shè)置VFRAME/VSYNC脈沖的極性0:正常極性;1:反轉(zhuǎn)的極性0INVD[7]設(shè)置VD數(shù)據(jù)線表示數(shù)據(jù)的極性0:正常極性;1:反轉(zhuǎn)的極性0INVVDEN[6]設(shè)置VDEN信號的極性0:正常極性;1:反轉(zhuǎn)的極性0INVPWREN[5]設(shè)置PWREN信號的極性0:正常極性;1:反轉(zhuǎn)的極性0INVLEND[4]設(shè)置LEND信號的極性0:正常極性;1:反轉(zhuǎn)的極性0PWREN[3]LCD_PWREN信號輸出使能0:禁止;1:使能0ENLEND[2]LEND信號輸出使能0:禁止;1:使能0BSWP[1]字節(jié)交換使能0:禁止;1:使能0HWSWP[0]半字交換使能0:禁止;1:使能06.幀內(nèi)存地址寄存器幀內(nèi)存可以很大,而真正要顯示的區(qū)域稱為視口,它處于幀內(nèi)存之內(nèi)。s3c2440有3個幀內(nèi)存地址寄存器,這3個寄存器用于確定幀內(nèi)存的起始地址,定位視口在幀內(nèi)存的位置。功
能位描
述初始值LCDBANK[29:21]用于保存幀內(nèi)存起始地址的A[30:22],幀內(nèi)存起始地址必須為4M對齊0LCDBASEU[20:0]對于雙掃描,用于表示上半幀的內(nèi)存起始地址對于單掃描,用于表示幀的內(nèi)存起始地址06.幀內(nèi)存地址寄存器功
能位描
述初始值LCDBASEL[20:0]對于雙掃描,用于保存下半幀的起始地址對于單掃描,用于保存幀的結(jié)束地址其值按如下公式計算:LCDBASEL=CLDBASEU+(PAGEWIDTH+OFFSIZE)*(LINEVAL+1)0功
能位描
述初始值OFFSIZE[21:11]虛擬屏長度表示上一行最后一個數(shù)據(jù)與下一行第一個數(shù)據(jù)間地址差值的一半,即以半字為單位的地址差0PAGEWIDTH[10:0]虛擬屏的寬度,這個值決定視口的寬度,以半字為單位06.2LCD參數(shù)設(shè)置LCD驅(qū)動編寫的主要任務(wù)就是根據(jù)所使用的LCD屏正確地設(shè)置對應(yīng)的LCD寄存器參數(shù)。前面已經(jīng)講述了S3C2440LCD各控制寄存器。1.設(shè)置VFRAME、VLINE2.設(shè)置VCLK3.幀速率1.設(shè)置VFRAME、VLINEVFRAME和VLINE信號可以根據(jù)液晶屏的尺寸和顯示模式來設(shè)置,它們對應(yīng)LCDCON2寄存器的HOZVAL和LINEVAL值,設(shè)置方法如下:HOZVAL=(水平尺寸/VD數(shù)據(jù)位)-1彩色液晶屏:水平尺寸=3×水平像素點數(shù)VD數(shù)據(jù)位=BBP數(shù)(不分單雙掃描)LINVAL=垂直尺寸-1(單掃描)LINVAL=垂直尺寸/2-1(雙掃描)2.設(shè)置VCLKLCD控制器輸出的VCLK是直接由系統(tǒng)總線(AHB)的工作頻率HCLK直接分頻得到的。VCLK=HCLK/((CLKVAL+1)×
2)3.幀速率幀速率就是VSYNC信號的頻率。幀速率與VSYNC、VBPD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL和CLKVAL的域有關(guān),它們是LCDCON1/2/3/4。大多數(shù)LCD驅(qū)動器需要它們合適的幀速率。幀速率按如下公式計算:FrameRate=1/[{(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)}*
{(HSPW+1)+(HBPD+1)+(HFPD+1)+HOZVAL+1}*{2*(CLKVAL+1)/HCLK}]6.3內(nèi)核LCD驅(qū)動機(jī)制6.3.1FrameBuffer概述6.3.2FrameBuffer設(shè)備驅(qū)動的結(jié)構(gòu)6.3.1FrameBuffer概述幀緩沖區(qū)是把顯示設(shè)備抽象成為幀緩沖區(qū)設(shè)備區(qū)。幀緩沖區(qū)允許上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進(jìn)行讀寫和I/O控制等操作。通過專門的設(shè)備結(jié)點可對相應(yīng)的設(shè)備進(jìn)行訪問。應(yīng)用程序可以將它看成是顯示內(nèi)存的一個引用,將其映射到進(jìn)程地址空間之后,就可以進(jìn)行讀寫操作,而讀寫操作可以反映到具體的LCD設(shè)備上。6.3.2FrameBuffer設(shè)備驅(qū)動的結(jié)構(gòu)FrameBuffer設(shè)備驅(qū)動基于兩個文件,linux/include/linux/fb.h和linux/drivers/video/
fbmem.c。其中,fb.h定義了Framebuffer驅(qū)動所要用到的幾乎所有的結(jié)構(gòu)體,這些結(jié)構(gòu)主要包括structfb_info、structfb_var_screeninfo和structfb_fix_screeninfo。下面分別講述這幾個結(jié)構(gòu)體。1.structfb_infostructfb_info記錄了幀緩沖的全部信息,包括設(shè)置參數(shù)、狀態(tài)、操作函數(shù)指針等。2.fb_var_screeninfostructfb_var_screeninfo記錄了幀緩沖設(shè)備和指定顯示模式的可修改信息。它包括顯示屏幕的分辨率、每個像素的比特數(shù)和一些時序變量。3.fb_fix_screeninfo而fb_fix_screeninfo定義了硬件的不可變屬性,顯示緩沖區(qū)的映射地址也被定義在這里,它表示緩沖區(qū)不應(yīng)該被應(yīng)用程序所改變。4.fbmem.cfbmem.c是Framebuffer設(shè)備驅(qū)動技術(shù)的關(guān)鍵。它為上層應(yīng)用程序提供系統(tǒng)調(diào)用也為下一層的特定硬件驅(qū)動提供編程接口;那些底層硬件驅(qū)動需要用到這里的接口來向系統(tǒng)內(nèi)核注冊它們自己。6.4Linux2.6.32的LCD驅(qū)動源碼分析6.4.1LCD驅(qū)動開發(fā)的主要工作6.4.2s3c2410fb_init()函數(shù)分析6.4.3s3c2410fb_probe()函數(shù)分析 6.4.4s3c2410fb_remove()函數(shù)分析6.4.1LCD驅(qū)動開發(fā)的主要工作LCD驅(qū)動開發(fā)的工作包括兩個方面,分別是初始化函數(shù)的編寫和填充fb_info結(jié)構(gòu)體中的主要成員函數(shù),下面分別講述。1.編寫初始化函數(shù)初始化函數(shù)首先初始化各個LCD控制器寄存器,通過寫寄存器來設(shè)置顯示的模式和顏色數(shù),然后在內(nèi)存中分配LCD顯示緩沖區(qū)。最后是初始化一個fb_info結(jié)構(gòu)體,填充其中的成員變量,并調(diào)用register_framebuffer
(&fb_info),將fb_info注冊入內(nèi)核。2.編寫成員函數(shù)對于嵌入式系統(tǒng)的簡單實現(xiàn),編寫結(jié)構(gòu)fb_info中函數(shù)指針fb_ops對應(yīng)的成員函數(shù)只需要下列3個函數(shù)就可以了。structfb_ops{...int(*fb_get_fix)(structfb_fix_screeninfo*fix,intcon,structfb_info*info);int(*fb_get_var)(structfb_var_screeninfo*var,intcon,structfb_info*info);int(*fb_set_var)(structfb_var_screeninfo*var,intcon,structfb_info*info);...}6.4.2s3c2410fb_init()函數(shù)分析首先要分析的是s3c2410fb_init()函數(shù),該函數(shù)內(nèi)容相對簡單,在s3c2410fb_init()函數(shù)體內(nèi)只是包裝了對平臺驅(qū)動注冊函數(shù)platform_driver_register()的調(diào)用,它的參數(shù)是&s3c2410fb_driver。這里是向內(nèi)核注冊一個platform設(shè)備驅(qū)動的意思,該platform設(shè)備是LCD設(shè)備。6.4.3s3c2410fb_probe()函數(shù)分析799staticint__inits3c24xxfb_probe(structplatform_device*pdev,800enums3c_drv_typedrv_type)801{802structs3c2410fb_info*info;803structs3c2410fb_display*display;804structfb_info*fbinfo;805structs3c2410fb_mach_info*mach_info;806structresource*res;807intret;808intirq;809inti;810intsize;811u32lcdcon1;8126.4.3s3c2410fb_probe()函數(shù)分析813mach_info=pdev->dev.platform_data;814if(mach_info==NULL){815dev_err(&pdev->dev,816"noplatformdataforlcd,cannotattach\n");817return-EINVAL;818}8196.4.3s3c2410fb_probe()函數(shù)分析820if(mach_info->default_display>=mach_info->num_displays){821dev_err(&pdev->dev,"defaultis%dbutonly%ddisplays\n",822mach_info->default_display,mach_info->num_displays);823return-EINVAL;824}825826display=mach_info->displays+mach_info->default_display;6.4.3s3c2410fb_probe()函數(shù)分析827828irq=platform_get_irq(pdev,0);829if(irq<0){830dev_err(&pdev->dev,"noirqfordevice\n");831return-ENOENT;832}6.4.3s3c2410fb_probe()函數(shù)分析833834fbinfo=framebuffer_alloc(sizeof(structs3c2410fb_info),&pdev->dev);835if(!fbinfo)836return-ENOMEM;6.4.3s3c2410fb_probe()函數(shù)分析837838platform_set_drvdata(pdev,fbinfo);839840info=fbinfo->par;841info->dev=&pdev->dev;842info->drv_type=drv_type;6.4.3s3c2410fb_probe()函數(shù)分析843844res=platform_get_resource(pdev,IORESOURCE_MEM,0);845if(res==NULL){846dev_err(&pdev->dev,"failedtogetmemoryregisters\n");847ret=-ENXIO;848gotodealloc_fb;849}850851size=(res->end-res->start)+1;852info->mem=request_mem_region(res->start,size,pdev->name);853if(info->mem==NULL){854dev_err(&pdev->dev,"failedtogetmemoryregion\n");855ret=-ENOENT;856gotodealloc_fb;857}858859info->io=ioremap(res->start,size);860if(info->io==NULL){861dev_err(&pdev->dev,"ioremap()ofregistersfailed\n");862ret=-ENXIO;863gotorelease_mem;864}865866 info->irq_base=info->io+((drv_type==DRV_S3C2412)?S3C2412_LCDINTBASE:S3C2410_LCDINTBASE);6.4.3s3c2410fb_probe()函數(shù)分析867868dprintk("devinit\n");869870strcpy(fbinfo->fix.id,driver_name);871872/*Stopthevideo*/873lcdcon1=readl(info->io+S3C2410_LCDCON1);874writel(lcdcon1&~S3C2410_LCDCON1_ENVID,info->io+S3C2410_ LCDCON1);875876fbinfo->fix.type=FB_TYPE_PACKED_PIXELS;877fbinfo->fix.type_aux=0;878fbinfo->fix.xpanstep=0;879fbinfo->fix.ypanstep=0;880fbinfo->fix.ywrapstep=0;881fbinfo->fix.accel=FB_ACCEL_NONE;882883fbinfo->var.nonstd=0;884fbinfo->var.activate=FB_ACTIVATE_NOW;885fbinfo->var.accel_flags=0;886fbinfo->var.vmode=FB_VMODE_NONINTERLACED;887888fbinfo->fbops=&s3c2410fb_ops;889fbinfo->flags=FBINFO_FLAG_DEFAULT;890fbinfo->pseudo_palette=&info->pseudo_pal;891892for(i=0;i<256;i++)893info->palette_buffer[i]=PALETTE_BUFF_CLEAR;6.4.3s3c2410fb_probe()函數(shù)分析894895ret=request_irq(irq,s3c2410fb_irq,IRQF_DISABLED,pdev-> name,info);896if(ret){897dev_err(&pdev->dev,"cannotgetirq
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職第二學(xué)年(旅游英語)英語對話階段測試試題及答案
- 2025年大學(xué)歷史學(xué)(史學(xué)史)試題及答案
- 2025年高職電子信息工程技術(shù)(嵌入式技術(shù))試題及答案
- 2025年大學(xué)數(shù)字媒體(VR編輯工具框架工具)試題及答案
- 2025年大學(xué)眼視光醫(yī)學(xué)(視力矯正技術(shù))試題及答案
- 2025年中職火災(zāi)防治(火災(zāi)防治技術(shù))試題及答案
- 2025年中職數(shù)字媒體技術(shù)應(yīng)用(圖片美化實操)試題及答案
- 2025年中職(畜牧獸醫(yī)基礎(chǔ))動物檢疫階段測試試題及答案
- 2025年大學(xué)交通運輸(城軌工程理論)試題及答案
- 2025年大學(xué)二年級(C++編程)程序調(diào)試綜合測試題及答案
- 2024年江西新能源科技職業(yè)學(xué)院公開招聘輔導(dǎo)員筆試題含答案
- 機(jī)械門鎖維修施工方案
- QGDW10384-2023輸電線路鋼管塔加工技術(shù)規(guī)程
- 江蘇省南通市2025年中考物理試卷(含答案)
- 《養(yǎng)老機(jī)構(gòu)智慧運營與管理》全套教學(xué)課件
- 非車險業(yè)務(wù)拓展創(chuàng)新工作總結(jié)及工作計劃
- 電子商務(wù)畢業(yè)論文5000
- 高壓注漿施工方案(3篇)
- 現(xiàn)場缺陷件管理辦法
- 暖通工程施工環(huán)保措施
- 宗族團(tuán)年活動方案
評論
0/150
提交評論