




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、圖形用戶接口1、 實驗?zāi)康模?) 了解嵌入式系統(tǒng)圖形界面的基本編程方法(2) 學習圖形庫的制作2、 實驗原理(1) Frame Buffer 顯示屏的整個顯示區(qū)域,在系統(tǒng)內(nèi)會有一段存儲空間與之對應(yīng)。通過改變該存儲空間的內(nèi)容達到改變顯示信息的目的。該存儲空間被稱為Frame Buffer,或顯存。顯示屏上的每一點都與Frame Buffer里的某一位置對應(yīng)。所以,解決顯示屏的顯示問題,首先要解決的是Frame Buffer的大小以及屏上的每一像素與Frame Buffer的映射關(guān)系。 影響空間大小的因素:由于Frame Buffer空間的計算大小是以屏幕的大小和顯示模式?jīng)Q定的,所以顯示模式(單色
2、或彩色)、顯示屏的性能、顯示的需要均會影響Frame Buffer空間的大小。另外顯示屏還有單屏幕、雙屏幕兩種工作模式:單屏幕模式代表屏幕的顯示范圍是整個屏幕,只需一個Frame Buffer和一個通道;雙屏幕模式則將整個屏幕劃分為兩個部分,這兩個部分各自有Frame Buffer,且他們的地址無需連續(xù),并同時具有兩個各自獨立的通道將Frame Buffer的數(shù)據(jù)傳送到顯示屏。顯示操作及映射連續(xù)性:由于Frame Buffer通常就是從內(nèi)存空間分配所得,并且他是有連續(xù)的字節(jié)空間組成,屏幕的顯示操作通常是從左到右逐點像素掃描,從上到下逐行掃描,直到掃描到右下角,然后再折返到左上角。又由于Fram
3、e Buffer里的數(shù)據(jù)是按地址遞增的順序被提取,所以屏幕上相鄰的兩像素被映射到Frame Buffer里是連續(xù)的,并且屏幕最左上角的像素對應(yīng)Frame Buffer的第一空間單元,屏幕最右下角則對應(yīng)最后一個單元空間。(2) Frame Buffer 與色彩 計算機反映自然界的顏色是通過RGB(Red-Green-Blue)值來表示的。如果要在屏幕某點顯示某種顏色,則必須給出相應(yīng)的RBG值。Frame Buffer是由所有像素的RGB值或RGB值的部分位所組成,本系統(tǒng)使用的16位/像素的模式下,F(xiàn)rame Buffer里的每個單元16位,每個單元代表一個像素的RGB值,如下圖D15D14D13
4、D12D11D10D9D8D7D6D5D4D3D2D1D0RRRRRGGGGGGBBBBB有了以上的分析,就可以用下面的計算公式FrameBufferSize=Width * Height * Bitperpixel/8計算Frame Buffer的大?。ㄒ宰止?jié)為單位)。(三)LCD控制器 在Frame Buffer與顯示屏之間還需要一個中間件,該中間件負責從Frame Buffer里提取數(shù)據(jù),進行處理,并傳輸?shù)斤@示屏上。PXA270處理器內(nèi)部集成LCDC,他提供了一個從PXA270處理器到顯示屏的接口,LCDC的作用是將Frame Buffer里的數(shù)據(jù)傳輸?shù)絃CDC的內(nèi)部,然后經(jīng)過處理,輸出
5、數(shù)據(jù)到LCD的輸入引腳上。本實驗系統(tǒng)使用的是16位TFT LCD,像素分辨率是640X480。(4) Frame Buffer 操作 Frame Buffer是一種驅(qū)動程序接口,這種接口將顯示設(shè)備抽象為幀緩沖區(qū)。幀緩沖區(qū)為圖像硬件設(shè)備提供了一種抽象化處理,它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過定義明確的界面來訪問圖像硬件設(shè)備。于是,將幀緩沖區(qū)映射到進程地址空間之后,就可以直接進行讀寫和I/O控制等操作,而寫操作可以立即顯示在屏幕上。了解這個設(shè)備的參數(shù)可以通過FBIOGET_FSCREENINFO、FBIOGET_VSCREENINFO命令,從中可以獲取顯示器的色味、分辨率等信息(vinfo
6、.bits_per_pixel、vinfo.xres、vinfo.yres)。3、 實驗內(nèi)容(1) 實現(xiàn)基本畫圖功能 在Frame Buffer 基礎(chǔ)上編寫畫點、畫線的API函數(shù),供應(yīng)用程序調(diào)用,實現(xiàn)任意曲線的畫線功能。(二)合理的軟件結(jié)構(gòu) 將調(diào)用設(shè)備驅(qū)動的基本API函數(shù)獨立地構(gòu)成一個函數(shù)庫,為用戶程序屏蔽底層硬件信息,直接提供一些簡單的畫圖調(diào)用。函數(shù)庫可以是獨立編譯后的“.o”文件或由歸檔管理器 ar 生成的庫文件,或是將“.o”文件鏈接而承認那個的共享庫“.so”。四、實驗過程及相關(guān)程序(一)設(shè)備的初始化(LCD_INIT)Frame Buffer設(shè)備是/dev/fb(它通常是/dev/f
7、b0),對于該設(shè)備的初始化包括設(shè)備的打開,通過ioctl函數(shù)獲得設(shè)備的相關(guān)信息,計算Frame Buffer緩沖區(qū)的大小以及使用mmap函數(shù)獲取Frame Buffer緩沖區(qū)的首地址。具體程序如下:fd = open("/dev/fb0", O_RDWR);/打開設(shè)備 ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);/獲取設(shè)備的相關(guān)信息 printf("%dx%d, %dbppn", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel );/打印相關(guān)信息 screensize =
8、 vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; /計算緩沖區(qū)大小fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0); /獲取緩沖區(qū)首地址設(shè)備的初始化基本就結(jié)束了。(二)設(shè)備的關(guān)閉(LCD_END)設(shè)備關(guān)閉前獲得的緩沖區(qū)應(yīng)先被釋放,接著關(guān)閉設(shè)備。具體程序如下:munmap(fbp,screensize); /緩沖區(qū)釋放close(fd);/關(guān)閉設(shè)備(三)清屏操作(LCD_CLEAR)實驗中的清屏操作,可通過memset(fbp,0,scre
9、ensize)來實現(xiàn),此時屏幕為黑色。(4) 畫圖程序 1.畫點程序(draw_point) 畫點程序程序是整個畫圖實驗的基礎(chǔ),其他的畫圖程序都是建立在畫點程序上的。畫點程序主要是解決兩個問題:a、點的坐標;b、點的顏色。 點的位置的獲取,我們只需要知道該點相對于緩沖區(qū)首地址的偏移量即可。例如要在(x,y)處顯示一個點,可通過下面的方法獲取其偏移量: offset = (x+y*vinfo.xres) * vinfo.bits_per_pixel/8;在這之前,我們最好先對x和y的范圍進行一個判斷,即x和y的值不滿足LCD屏坐標范圍時,則對改點不進行操作,方這便我們下面的編程。if(x<
10、0|x>639|y<0|y>479)return;而對于點得顏色,由于我們使用的LCD屏是16位色的,所以首先必須根據(jù)格式要求將RGB壓縮到16位,再填充對應(yīng)字節(jié)。相應(yīng)的程序如下: color =(Red << 11)|(Green<<5)&0x07E0)|(Blue&0x1F); *(unsigned char *)(fbp +location+0) = color &0xFF;*(unsigned char *)(fbp +location+1) =(color>>8)&0xFF。到此為止,一個完整的畫點
11、程序就完成了。 其實,我們完全可以把畫點的顏色也加入其中。在這里,我只列舉了九種顏色,如果想要更多的顏色,可自行加入。int colour_choose(int num)int r,b,g;int col;switch(num)case 0:r=255;b=0;g=0;break; /redcase 1:r=255;b=255;g=0;break; /yellowcase 2:r=0;b=255;g=0;break; /greencase 3:r=160;b=32;g=240;break; /purpiecase 4:r=184;b=143;g=143;break; /rosecase 5:r
12、=0;b=0;g=255;break; /bluecase 6:r=25;b=15;g=80;break; /case 7:r=255;b=255;g=255;break; /writecase 8:r=0;b=0;g=0;break; /blackcol=(r<<11)|(g<<5)&0x07E0)|(b&0x1F);return col; 把返回值送到上面畫點程序中的color,這樣顏色選擇就完成了。 為了使這個程序的實用性和兼容性能夠得到提高,我在后來的實驗中在這里做出了修改,由于我們現(xiàn)在所使用的LCD是16位色的,但是上面已經(jīng)說到了,我們可以通過
13、設(shè)備的初始化得到屏幕的基本信息。所以,如果得到的screensize中 vinfo.bits_per_pixel為24位色的時候,我們畫點程序應(yīng)該做出修改。此時畫點程序為: offset = (x+y*vinfo.xres) * vinfo.bits_per_pixel/8; *(unsigned char *)(fbp +offset+0) = r; *(unsigned char *)(fbp +offset+1) = g;*(unsigned char *)(fbp +offset+2) = b;所以我們在畫點之前先做一個判斷。如果初始化屏幕得到16位色時,就用上面那個程序,若為24位色
14、就用下面這個程序。 2.劃線程序(draw_line)有了畫點程序后,畫線程序就比較簡單了。已知兩個點,畫一條連接這兩點的直線,我們只許求出它們的斜率,得到直線方程,再通過for循環(huán)語句即可畫出這條線。不過有兩個地方必須要注意:a、當直線的斜率非常大的時候,這時候在屏幕上劃出的點在Y軸方向上會斷斷續(xù)續(xù),所以必須要改進,我們可以將斜率絕對值大于1和小于等于1這兩種情況分開考慮,當斜率較大時,以Y軸為基準畫X軸方向的點;當斜率較小時,以X軸為基準畫Y軸方向的點。b、當直線斜率為0(即Y0=Y1)或無窮大時(即X0=X1)應(yīng)特殊考慮,因為此時直線斜率不存在。相應(yīng)的程序如下:void draw_lin
15、e(int x1,int y1,int x2,int y2,int m)int i;float j;if(x1=x2) if(y1>=y2)for(i=y2;i>=y1;i-) draw_point(x1,i,m);else for(i=y1;i<=y2;i+) draw_point(x1,i,m);elseif(y1=y2) if(x1>=x2)for(i=x2;i>=x1;i-) draw_point(y1,i,m);else for(i=x1;i<=x2;i+) draw_point(y1,i,m);else j=(float)(y2-y1)/(flo
16、at)(x2-x1); if(j > 1 | j < -1)j=(float)(x2-x1)/(float)(y2-y1); if(y1<y2) for(i=y1;i<=y2;i+) draw_point(int)(i-y1)*j+x1),i,m);else for(i=y1;i>=y2;i-) draw_point(int)(i-y1)*j+x1),i,m); else if(x1<x2) for(i=x1;i<=x2;i+) draw_point(i,(int)(i-x1)*j+y1),m);else for(i=x1;i>=x2;i-) d
17、raw_point(i,(int)(i-x1)*j+y1),m); 3.畫圓程序(draw_circle)畫圓程序其實也是來自于畫點程序,一個圓由1000個點組成,而這1000個點正好滿足同一個圓方程,這樣由于各個點間隔非常小,所有看上去就是一個完整的圓了。相應(yīng)的程序如下:void draw_circle(int R,int x0,int y0,int m) int x,y,i;for(i=0;i<1000;i+) x=R*sin(2*PI/1000*i)+x0; y=R*cos(2*PI/1000*i)+y0; draw_point(x,y,m); 畫實心圓可以由上面的畫圓程序得到,我
18、們可以用一個for循環(huán)將圓的半徑由0遞增到所需要的實心圓半徑R,這樣一個半徑為R的實心圓就能得到了。不過我們上面已經(jīng)提到了,所畫的圓其實是由1000個點組成的,說白了,它其實并不是一個真正的圓,這樣,當我們將大量的圓和在一起組成一個實心圓時,實心圓內(nèi)部會出現(xiàn)很多中心對稱的黑色點,這其實就是由于一些點斷斷續(xù)續(xù)沒有被著色到而造成的。有一個改進的方法就是,我們先選定實心圓的范圍,再一個一個判斷屏幕上的點是否落在這個范圍之內(nèi),如果是,則對其著色,反之則放棄著色。不過這必須對屏幕上所有的點都進行判斷,工作量大,所以本程序還有待提高。相應(yīng)的程序如下:void draw_shi_circle(int R,i
19、nt x0,int y0,int m) int x,y;for(x=0;x<=vinfo.xres;x+)for(y=0;y<vinfo.yres;y+)if(x-x0)*(x-x0)+(y-y0)*(y-y0)<=R*R)draw_point(x,y,m); 4.畫旋轉(zhuǎn)五角星程序(draw_star)畫五角心其實就是先求出五角星五個角所相對應(yīng)的坐標值,再把這些點連接起來。而讓五角星旋轉(zhuǎn)的話,我們只要讓這五個點沿著一個角度偏移就可以了,期間再延遲一段時間并刷一下屏即可。相應(yīng)的程序如下:void draw_star(int l, int x0, int y0) float x1
20、, y1; float x2, y2; float x3, y3; float x4, y4; float x5, y5; int i; for(i=0;i<360;i=i+30) x1 = x0 + l * sin(PI * 0 + PI * i)/180); y1 = y0 + l * cos(PI * 0 + PI * i)/180); x2 = x0 + l * sin(PI * 72 + PI * i)/180); y2 = y0 + l * cos(PI * 72 + PI * i)/180); x3 = x0 + l * sin(PI * 144 + PI * i)/180
21、); y3 = y0 + l * cos(PI * 144 + PI * i)/180); x4 = x0 + l * sin(PI * 216 + PI * i)/180); y4 = y0 + l * cos(PI * 216 + PI * i)/180); x5 = x0 + l * sin(PI * 288 + PI * i)/180); y5 = y0 + l * cos(PI * 288 + PI * i)/180); draw_line(x3,y3,x5,y5); draw_line(x1,y1,x3,y3); draw_line(x1,y1,x4,y4); draw_line(
22、x2,y2,x4,y4); draw_line(x2,y2,x5,y5); usleep(1000000);lcd_clear(); 5.畫振動的正弦波(draw_zhenxian)這個程序的原理和上面基本相似,所以不再做具體的解釋。相應(yīng)的程序如下:void draw_zhenxian(int u,int m)long int i,j,y; for(j=u;j>=0;j-)for(i=0;i<640;i+)y=j*sin(PI*i/80)+240;draw_point(i,y,m);usleep(10000);lcd_clear(); 6.畫正十二邊形(draw_dodecagon
23、)這個程序是實現(xiàn)畫正十二邊形,由于我準備能在屏幕上模擬一個鐘表,這個十二邊形的每個頂點正好是12個整點值。相應(yīng)程序如下:void draw_dodecagon(int x0,int y0,int R,int m)int x12,y12;int i=0;for (i=0;i<12;i+)xi = x0 + R*cos(i*PI/6);yi = y0 + R*sin(i*PI/6);for (i=0;i<11;i+)draw_line(xi,yi,xi+1,yi+1,m);draw_line(x11,y11,x0,y0,m); 7畫鐘表程序(draw_clock) 其實這個程序本身并不
24、煩,我先在屏幕上畫了一個實心圓,用于做鐘表的表盤。然后再調(diào)用劃線函數(shù),畫三條直線,不過三條直線的長度各不相同,分別做時針、分針和秒針,并且它們都延時一段時間然后移動到下一個位置。同時,它們原來的位置會被和表盤相同顏色的直線蓋住。這樣,我們就會看到一個時鐘顯示在屏幕上。具體程序如下:void draw_clockline(int x0,int y0)int clock_x_miao,clock_y_miao,clock_x_fen,clock_y_fen,clock_x_shi,clock_y_shi,i;int l=180;for(i=0;i<3600;i+)clock_x_fen=x0
25、+l*sin(i*PI/1800)/1.2;clock_y_fen=y0-l*cos(i*PI/1800)/1.2;clock_x_shi=x0+l*sin(i*PI/108000)/1.5;clock_y_shi=y0-l*cos(i*PI/108000)/1.5;clock_x_miao=x0+l*sin(i*PI/30);clock_y_miao=y0-l*cos(i*PI/30);draw_line(x0,y0,clock_x_shi,clock_y_shi);draw_line(x0,y0,clock_x_miao,clock_y_miao);draw_line(x0,y0,cloc
26、k_x_fen,clock_y_fen);usleep(1000000);draw_line_one(x0,y0,clock_x_miao,clock_y_miao);draw_line_one(x0,y0,clock_x_fen,clock_y_fen);draw_line_one(x0,y0,clock_x_shi,clock_y_shi);void draw_clock()draw_shi_circle(190,320,240);draw_dodecagon(320,240,200);由于這個程序是一個死循環(huán),所以最好在后臺操作。但是如果把程序送到后臺時,鍵盤輸入就會不起作用。因此,我并
27、沒有把這段程序放到動態(tài)庫之中。但是,在之前的調(diào)試中,這個程序能夠顯示,并且達到了我想要的效果。 8.主函數(shù)(main)由于我們所需要的畫圖程序以及設(shè)備驅(qū)動程序等都已經(jīng)在子函數(shù)中給出了,所以主函數(shù)的任務(wù)就是調(diào)用子函數(shù)來實現(xiàn)相應(yīng)的功能。在這里,為了能夠?qū)⒆雍瘮?shù)的功能一一顯示出來,我在這里用了一個switch的結(jié)構(gòu),我們在鍵盤上輸入0-5之間的任意數(shù)字,主函數(shù)就做出相應(yīng)的選擇,LCD屏上也會出現(xiàn)相應(yīng)的圖形,當輸入數(shù)字為9時,程序結(jié)束。當輸入完成0-5之間的選擇后,此時,我們就可以輸入相應(yīng)圖形的信息,比如畫圓時,我們就輸入圓的半徑和圓心得位置,劃線則輸入直線的兩個端點。最后,我們再輸入0-8之間的一個
28、數(shù),完成顏色的選擇。這樣,整個程序就完成了。我們可以實現(xiàn)圖形形狀可選,所在位置可選,顏色可選等功能。功能相對比較強大。相應(yīng)的程序如下:int main()int c=0;int x1=0,x2=0,y1=0,y2=0,r=0,m=0;lcd_init();while(c!=9)scanf("%d",&c);switch(c)case 0:lcd_clear();printf("Draw the line :");scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&am
29、p;m);draw_line(x1,y1,x2,y2,m);break;case 1:lcd_clear();printf("Draw the line :");scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&m);draw_line(x1,y1,x2,y2,m);break;case 2:lcd_clear();printf("Draw the circle :");scanf("%d %d %d %d ",&r,&x1,&a
30、mp;y1,&m);draw_circle(r,x1,y1,m);break;case 3:lcd_clear();printf("Draw the solid_circle :");scanf("%d %d %d %d ",&r,&x1,&y1,&m);draw_shi_circle(r,x1,y1,m);break;case 4:lcd_clear();printf("Draw the zhenxianbo :");scanf("%d %d",&x1,&m
31、);draw_zhenxian(x1,m);break;case 5:lcd_clear();printf("Draw the dodecagon :");scanf("%d %d %d %d ",&x1,&y1,&r,&m);draw_dodecagon(x1,y1,r,m);break;default:printf("Wrongn"); (5)顯示一幅圖片圖片有jpg、bmp、tiff等格式,本實驗中采用bmp格式的圖片作為顯示樣本。采用bmp格式圖片的原因如下:這種格式的圖片包含的圖像信息較豐富,
32、幾乎不進行壓縮。圖像信息包含三個方面:文件信息頭、位圖信息頭、RGB顏色陣列。文件信息頭和位圖信息頭分別占用了14、40個字節(jié),RGB顏色陣列從第55個字節(jié)開始。因此只需要從第55個字節(jié)開始讀取圖片的顏色信息,并將其存儲于內(nèi)存空間中,再將存儲的信息顯示在顯示屏上即可。但是有一個需要注意的地方是,圖片也分成16位色和24位色的。對于這兩種圖片,顯示的時候必須分開考慮。我們可以先通過一個函數(shù)來讀取圖片的信息,再進行下一步操作。具體程序如下:int show_bmp( char *bmpfile ) FILE *fp; int rc; int ciBitCount, ciWidth, ciHeigh
33、t; int line_x, line_y; long int location = 0, BytesPerLine = 0; char tmp1024*10; fp = fopen("./hhh.bmp", "rb" ); if (fp = NULL) return( -1 ); rc = fread( &FileHead, sizeof(BITMAPFILEHEADER),1, fp ); if ( rc != 1) printf("read header error!n"); fclose( fp ); return(
34、-2 ); if (memcmp(FileHead.cfType, "BM", 2) != 0) printf("it's not a BMP filen"); fclose( fp ); return( -3 ); rc = fread( (char *)&InfoHead, sizeof(BITMAPINFOHEADER),1, fp ); if ( rc != 1) printf("read infoheader error!n"); fclose( fp ); return( -4 ); ciWidth = (
35、int) chartolong( InfoHead.ciWidth, 4 ); ciHeight = (int) chartolong( InfoHead.ciHeight, 4 ); ciBitCount = (int) chartolong( InfoHead.ciBitCount, 4 );fseek(fp, (int)chartolong(FileHead.cfoffBits, 4), SEEK_SET);BytesPerLine = (ciWidth * ciBitCount + 31) / 32 * 4; printf("width=%d, height=%d, bitC
36、ount=%d, offset=%dn", ciWidth, ciHeight, ciBitCount, (int)chartolong(FileHead.cfoffBits, 4); line_x = 0;line_y = 0;while(!feof(fp)PIXEL pix;unsigned short int tmp;rc = fread( (char *)&pix, 1, sizeof(unsigned short int), fp );if (rc != sizeof(unsigned short int) ) break; location = line_x *
37、bits_per_pixel / 8 + (ciHeight - line_y - 1) * xres * bits_per_pixel / 8;tmp=pix.red<<11 | pix.green<<6 | pix.blue;*(unsigned short int*)(fbp + location) = tmp; location = (line_x+line_y*vinfo.xres) * vinfo.bits_per_pixel/8; tmp =(r << 11)|(g<<5)&0x07E0)|(b&0x1F); *(unsigned char *)(fbp +location+0) = tmp &0xFF; *(unsigned char *)(fbp +location+1) =(tmp>>8)&0xFF;line_x+;if (line_x = ciWidth )line_x = 0;line_y+;if(line_y=ciHeight-1)break; fclose( fp ); return( 0 );long chartolong( char * string, int length ) long number; if (length <
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃經(jīng)營合同
- 工業(yè)廢水處理技術(shù)研發(fā)合作合同
- 井蓋產(chǎn)品購銷合同
- 汽車直租融資租賃合同
- 房地產(chǎn)測量合同年
- 會議展覽活動承辦服務(wù)合同
- 房屋修建承包合同
- 合作研究開發(fā)合同
- 1秋天 教學設(shè)計-2024-2025學年語文一年級上冊統(tǒng)編版
- 長沙電力職業(yè)技術(shù)學院《創(chuàng)意教學法》2023-2024學年第二學期期末試卷
- 第3章 環(huán)境感知技術(shù)
- 【小學生心理健康教育】開學第一課課件ppt
- 全隱框玻璃幕墻施工方案
- 十八項醫(yī)療核心制度詳解培訓課件
- 五年級上冊信息技術(shù)教學計劃華科版
- 機器人傳感器PPT完整全套教學課件
- 初一語文下冊:閱讀理解知識點整理
- CSM工法雙輪銑水泥土攪拌墻專項施工方案
- 定點醫(yī)療機構(gòu)接入驗收申請表
- 小羊詩歌大全1479首(小羊喝水擴句)
- 2022-2023學年遼寧省鞍山市普通高中高一年級下冊學期第一次月考數(shù)學(A卷)試題【含答案】
評論
0/150
提交評論