




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux下串口程序開(kāi)發(fā)串行口是計(jì)算機(jī)一種常用的接口,具有連接線少,通訊簡(jiǎn)單,得到廣泛的使用。常用的串口是RS-232-C接口(又稱EIA RS-232-C)它是在1970年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是"數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)"該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25個(gè)腳的DB25連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定。傳輸距離在碼元畸變小于4%的情況下,傳輸電纜長(zhǎng)度應(yīng)為50英尺。在linux文件中,所有的設(shè)備文件
2、一般都位于/dev下,其中串口一、串口二分別對(duì)應(yīng)的設(shè)備名依次為“/dev/ttyS0”、“/dev/ttyS1”,可以查看在/dev下的文件以確認(rèn)。在linux下面對(duì)于串口的讀寫就可以通過(guò)簡(jiǎn)單的read、write函數(shù)來(lái)完成,所不同的是只是需要對(duì)串口的其他參數(shù)另坐配置。1. 串口編程需要用到的頭文件#include <stdio.h> / 標(biāo)準(zhǔn)輸入輸出定義#include <stdlib.h>#include <fcntl.h> / 文件控制定義,主要完成串口通信中對(duì)文件的讀寫操作#include <
3、;unistd.h> / linux標(biāo)準(zhǔn)函數(shù)定義#include <sys/ioctl.h>#include <termios.h> / POSIX終端控制定義 #include <sys/time.h> #include &l
4、t;sys/types.h> 2. 串口終端函數(shù)2.1 打開(kāi)串口設(shè)備 int fd; char *device = "/dev/tts/0"
5、 / 設(shè)備路徑,初始使用UART0 for(t=1;t<argc;t+)
6、 / 獲取程序入口時(shí)輸入的參數(shù) if(!strcmp(argvt,"-d") && (argc > (t+1)
7、; device = argvt+1;
8、 if(!strcmp(device,"/dev/tts/1") / 不允許使用UART1,因?yàn)樗押蚉C相連。
9、60; printf("can not use /dev/tts/1n"); return -1; fd = open(device, O_RDWR);&
10、#160; / 打開(kāi)設(shè)備 if (fd < 0)
11、 / 設(shè)備打開(kāi)失敗
12、; printf("open device errorn"); return -1; 2.2 設(shè)置串口最基本的串口設(shè)置包括波特率設(shè)置,校驗(yàn)位和停止位設(shè)置。實(shí)際上串口的設(shè)置只要是設(shè)置Struct termios()結(jié)構(gòu)體中各成員的值。struct ter
13、mio unsigned short c_iflag; /* 輸入模式標(biāo)志 */ unsigned short c_oflag; /* 輸出模式標(biāo)志 */
14、; unsigned short c_cflag; /* 控制模式標(biāo)志*/ unsigned short c_lflag; /* local mode flags */ &
15、#160; unsigned char c_line; /* line discipline */ unsigned char c
16、_ccNCC; /* control characters */;2.2.1 波特率設(shè)置struct termios Opt;tcgetattr(fd, &Opt); / 得到當(dāng)前串口的參數(shù)cfsetispeed(&Opt,B19200); /*設(shè)置為19200Bps*/
17、cfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt); / 激活新配置設(shè)置波特率的例子函數(shù):/*brief 設(shè)置串口通信速率*param fd 類型 int 打開(kāi)串口的文件句柄*param speed 類型 int 串口速度*return void
18、*/int speed_arr = B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, ;int name_arr = 38400, 19200, 9600, 4800, 2400,
19、160;1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;void set_speed(int fd, int speed) in
20、t i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0;
21、i < sizeof(speed_arr) / sizeof(int); i+) if (speed = name_arri) &
22、#160; tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arri);
23、0; cfsetospeed(&Opt, speed_arri); status = tcsetattr(fd1, TCSANOW, &Opt);
24、; if (status != 0) &
25、#160; perror("tcsetattr fd1"); return;
26、160; tcflush(fd,TCIOFLUSH);
27、0; 2.2.2 校驗(yàn)位和停止位設(shè)置/*brief 設(shè)置串口數(shù)據(jù)位,停止位和效驗(yàn)位*param fd 類型 int 打開(kāi)的串口文件句柄*param databi
28、ts 類型 int 數(shù)據(jù)位 取值 為 7 或者8*param stopbits 類型 int 停止位 取值為 1 或者2*param parity 類型 int 效驗(yàn)類型 取值為N,E,O,S*/int set_Parity(int fd,int databits,int st
29、opbits,int parity) struct termios options; if ( tcgetattr( fd,&options) != 0) / 得到當(dāng)前串口的參數(shù)
30、60; perror("SetupSerial 1"); return(FALSE); /設(shè)置字符大小options.c_cflag &= CSIZE;
31、60;switch (databits) /*設(shè)置數(shù)據(jù)位數(shù)*/ case 7: options.c_cflag |= CS7;
32、; break; case 8: options.c_cflag |= CS8;
33、; break; default: fprintf(stderr,"Unsupported data sizen"); return (FALSE);
34、160; /設(shè)置奇偶校驗(yàn)位switch (parity) case 'n': / 無(wú)奇偶校驗(yàn)位case 'N': options.c_cflag &= PARENB; /* Clear parity enable */
35、60; break; case 'o': case 'O': options.c_cflag |= (PARODD | PARENB); /* 設(shè)置為奇效驗(yàn)*/ options.c_iflag |
36、= INPCK; / INPCK:奇偶校驗(yàn)使能 break; case 'e': case 'E': options.c_cflag |= PARENB; /* Enable parity */ &
37、#160; options.c_cflag &= PARODD; /* 轉(zhuǎn)換為偶效驗(yàn)*/ options.c_iflag |= INPCK; /* Disnable parity checking */
38、160; break;case 'S': / Space 校驗(yàn)case 's': /*as no parity*/ options.c_cflag &= PARENB; options.c_cflag &= CSTOPB;
39、60; options.c_iflag |= INPCK;break; default: fprintf(stderr,"Unsupported parityn"); return (FALSE); / 設(shè)置停止位 swi
40、tch (stopbits) case 1: options.c_cflag &= CSTOPB; / 1個(gè)停止位 break; case 2: &
41、#160; options.c_cflag |= CSTOPB; / 2個(gè)停止位 break; default: fprintf(stderr,"Unsupported stop bitsn");
42、; return (FALSE); / 處理未接收的字符tcflush(fd,TCIFLUSH); / 設(shè)置等待時(shí)間和最小接收字符options.c_ccVTIME = 150; /* 設(shè)置超時(shí)15 seconds*/ options.c_ccVMIN = 0; /* Update the options and do it NOW */ / 激活新配置if (tcsetattr(fd,TCSANOW,&options) != 0)
43、60; perror("SetupSerial 3"); return (FALSE); return (TRUE); 2.2.3 模式設(shè)置需要注意的是,如果不是開(kāi)發(fā)終端之類的,只是串口傳輸數(shù)據(jù),而不需要串口來(lái)處理,那么使用原始模式(Raw Mode)方式來(lái)通信。 newtio.c_lflag &= (ICANON | ECHO | ECHOE | ISIG); / 原
44、始數(shù)據(jù)輸入 newtio.c_oflag &= (OPOST); / 原始數(shù)據(jù)輸出2.2.4 串口配置實(shí)例void init_ttyS(int fd) struct termios newtio; bzero(&newtio, sizeof(newtio);/ 得到當(dāng)前串口的參數(shù)
45、160; tcgetattr(fd, &newtio); / 將輸入波特率設(shè)為19200/ 將輸出波特率設(shè)為
46、19200 cfsetispeed(&newtio, B19200); cfsetospeed(&
47、;newtio, B19200); / 使能接收并使能本地狀態(tài) newtio.c_cflag |= (CLOCAL | CREAD);
48、160; / 無(wú)校驗(yàn) 8位數(shù)據(jù)位1位停止位 newtio.c_cflag &= PARENB; &
49、#160; newtio.c_cflag &= CSTOPB; newtio.c_cflag &= CSIZE; / 8個(gè)數(shù)據(jù)位 newtio.c_cflag |= CS8; / 原始數(shù)據(jù)輸入 newt
50、io.c_lflag &= (ICANON | ECHO | ECHOE | ISIG); newtio.c_oflag &= (OPOST); / 設(shè)置等待時(shí)間和最小接收字符數(shù) newtio.c_ccVTIME = 0;
51、 newtio.c_ccVMIN = 0; / 處理未接收的字符 tcflush(fd, TCIFLUSH);
52、0; / 激活新配置 tcsetattr(fd,TCSANOW,&newtio);
53、 2.1 讀串口讀取串口數(shù)據(jù)使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(Raw Mode)傳輸數(shù)據(jù),那么read函數(shù)返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。char buff1024;int Len;int readByte = read(fd,buff,Len);可以使用操作文件的函數(shù)來(lái)實(shí)
54、現(xiàn)異步讀取,如fcntl,或者select等來(lái)操作。void SERIAL_RX(void) / read(fd, RXBUF , RX_len);#if 1 int ret,n,pos,retval; fd_set rfds; struct time
55、val tv ; pos = 0;/指向接收緩沖 for(n = 0; n < RX_len; n+) RXBUFn = 0xFF;
56、 FD_ZERO(&rfds);/ 清空串口接收端口集 FD_SET(fd,&rfds);/ 設(shè)置串口接收端口集 tv.tv_sec = 2;
57、0;tv.tv_usec = 0; while(FD_ISSET(fd,& rfds) / 檢測(cè)串口是否有讀寫動(dòng)作 / 每次循環(huán)都要清空,否則不會(huì)檢測(cè)到有變化 FD_ZER
58、O(&rfds);/ 清空串口接收端口集 FD_SET(fd,&rfds);/ 設(shè)置串口接收端口集 retval = select(fd+1,&rfds,NULL,NULL,&
59、amp;tv); if(retval = -1) &
60、#160; perror("select()"); break;
61、160; else if(retval)
62、; /判斷是否還有數(shù)據(jù) /sleep(2);
63、0; ret = read(fd, RXBUF, RX_len);
64、0; pos += ret; /printf("ret = %d n",ret);
65、; if(RXBUFpos-2 = 'r') & (RXBUFpos-1 = 'n') / 確實(shí)接收到了數(shù)據(jù),并打印出來(lái)
66、 FD_ZERO(&rfds);
67、; FD_SET(fd,&rfds); retval = select(fd+1,&rfds,NULL,NULL,&tv);
68、 if(!retval)/no datas
69、0; break;
70、0;
71、0; else
72、 break; Linux下直接用read讀串口可能會(huì)造成堵塞,或數(shù)據(jù)讀出錯(cuò)誤。然而用select先查詢com口,再用read去讀就可以避免,并且當(dāng)com口延時(shí)時(shí),程序可以退出,這樣就不至于由于c
73、om口堵塞,程序就死了。Select的函數(shù)格式(我所說(shuō)的是Unix系統(tǒng)下的伯克利socket編程,和windows下的有區(qū)別,一會(huì)兒說(shuō)明):int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);先說(shuō)明兩個(gè)結(jié)構(gòu)體:l struct fd_set可以理解為一個(gè)集合,這個(gè)集合中存放的是文件描述符(file descriptor),
74、即文件句柄,這可以是我們所說(shuō)的普通意義的文件,當(dāng)然Unix下任何設(shè)備、管道、FIFO等都是文件形式,全部包括在內(nèi),所以毫無(wú)疑問(wèn)一個(gè)socket就是一個(gè)文件,socket句柄就是一個(gè)文件描述符。fd_set集合可以通過(guò)一些宏由人為來(lái)操作,比如:? FD_ZERO(fd_set *set):清除一個(gè)文件描述符集;? FD_SET(int fd, fd_set *set):將一個(gè)文件描
75、述符加入文件描述符集中;? FD_CLR(int fd, fd_set *set):將一個(gè)文件描述符從文件描述符集中清除;? FD_ISSET(int fd, fd_set *set): 檢查集合中指定的文件描述符是否可以讀寫。一會(huì)兒舉例說(shuō)明。l struct tim
76、eval是一個(gè)大家常用的結(jié)構(gòu),用來(lái)代表時(shí)間值,有兩個(gè)成員,一個(gè)是秒數(shù),另一個(gè)是毫秒數(shù)。struct timeval long tv_sec; long tv_unsec;具體解釋select的參數(shù):l
77、0; int maxfdp是一個(gè)整數(shù)值,是指集合中所有文件描述符的范圍,即所有文件描述符的最大值加1,不能錯(cuò)!在Windows中這個(gè)參數(shù)的值無(wú)所謂,可以設(shè)置不正確。l fd_set *readfds是指向fd_set結(jié)構(gòu)的指針,這個(gè)集合中應(yīng)該包括文件描述符,我們是要監(jiān)視這些文件描述符的讀變化的,即我們關(guān)心是否可以從這些文件中讀取數(shù)據(jù)了,如果這個(gè)集合中有一個(gè)文件可讀,select就會(huì)返回一個(gè)大于0的值,表示有文件可讀,如果沒(méi)有可讀的文件,則根據(jù)timeout參數(shù)再判斷是否超時(shí),若超出
78、timeout的時(shí)間,select返回0,若發(fā)生錯(cuò)誤返回負(fù)值??梢詡魅隢ULL值,表示不關(guān)心任何文件的讀變化。l fd_set *writefds是指向fd_set結(jié)構(gòu)的指針,這個(gè)集合中應(yīng)該包括文件描述符,我們是要監(jiān)視這些文件描述符的寫變化的,即我們關(guān)心是否可以向這些文件中寫入數(shù)據(jù)了,如果這個(gè)集合中有一個(gè)文件可寫,select就會(huì)返回一個(gè)大于0的值,表示有文件可寫,如果沒(méi)有可寫的文件,則根據(jù)timeout參數(shù)再判斷是否超時(shí),若超出timeout的時(shí)間,select返回0,若發(fā)生錯(cuò)誤返回負(fù)值。
79、可以傳入NULL值,表示不關(guān)心任何文件的寫變化。l fd_set *errorfds同上面兩個(gè)參數(shù)的意圖,用來(lái)監(jiān)視文件錯(cuò)誤異常。l struct timeval* timeout是select的超時(shí)時(shí)間,這個(gè)參數(shù)至關(guān)重要,它可以使select處于三種狀態(tài),第一,若將NULL以形參傳入,即不傳入時(shí)間結(jié)構(gòu),就是將select置于阻塞狀態(tài),一定等到監(jiān)視文件描述符集合中某個(gè)文件描述符發(fā)生變化為止;第二,若將
80、時(shí)間值設(shè)為0秒0毫秒,就變成一個(gè)純粹的非阻塞函數(shù),不管文件描述符是否有變化,都立刻返回繼續(xù)執(zhí)行,文件無(wú)變化返回0,有變化返回一個(gè)正值;第三,timeout的值大于0,這就是等待的超時(shí)時(shí)間,即select在timeout時(shí)間內(nèi)阻塞,超時(shí)時(shí)間之內(nèi)有事件到來(lái)就返回了,否則在超時(shí)后不管怎樣一定返回,返回值同上述。l 返回值:負(fù)值:select錯(cuò)誤 正值:某些文件可讀寫或出錯(cuò) 0:等待超時(shí),沒(méi)有可讀寫或錯(cuò)誤的文件在有了select后可以寫出像樣的網(wǎng)絡(luò)程序來(lái)!舉個(gè)簡(jiǎn)單的例子,就是從網(wǎng)絡(luò)上接受數(shù)
81、據(jù)寫入一個(gè)文件中。一般來(lái)說(shuō),在使用select函數(shù)之前,首先使用FD_ZERO和FD_SET來(lái)初始化文件描述符集,在使用了select函數(shù)時(shí),可循環(huán)使用FD_ISSET測(cè)試描述符集,在執(zhí)行完對(duì)相關(guān)的文件描述符后,使用FD_CLR來(lái)清除描述符集。2.2 寫串口讀寫串口設(shè)置好串口之后,讀寫串口就很容易了,把串口當(dāng)作文件讀寫就是。發(fā)送數(shù)據(jù):char buffer1024;int Length;int nByte;nByte = write(fd, buffe
82、r ,Length);2.3 關(guān)閉串口close(fd);3. 具體應(yīng)用實(shí)例#include <stdio.h>#include <string.h>#include <stdlib.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include<time.h>#include <termios.h>
83、; #include <sys/select.h> #include <sys/types.h> /#include "COMM.h" #define ACK_SUCCESS
84、60; 0x00 / 操作成功#define ACK_FAIL 0x01 / 操作失敗#define ACK_FULL
85、60; 0x04 / Full#define ACK_NOUSER 0x05 / 無(wú)此用戶#define ACK_USER_EXIST 0x07
86、160; / 用戶已存在#define ACK_TIMEOUT 0x08 / 采集超時(shí)#define ACK_COUNT 0x3 /發(fā)生錯(cuò)誤時(shí)候,重試次數(shù)
87、60;extern unsigned char TXBUF9900;extern unsigned char RXBUF9900;extern unsigned char rev_ok;extern unsigned int TX_len;extern unsigned int RX_len;extern unsigned char one_onecontrast(unsigned char user_number_h,unsigned char user_number_l);extern unsigned char one_morecontrast
88、(void);extern unsigned char Get_UserNumber_Right(void);extern unsigned char set_addmode(unsigned char yn_repeat);extern unsigned char add_Fingerprint(unsigned char time_number,unsigned char user_number_h,
89、 unsigned char user_number_l,unsigned char user_right);extern
90、 unsigned char del_alluser(void);extern unsigned char del_oneuser(unsigned char user_number_h,unsigned char user_number_l);extern unsigned char read_usernumber(void); int fd; unsigned char USER_NUMBER_H; / 用戶號(hào)高8位unsigned char USER_NUMBER_L;
91、0; / 用戶號(hào)低8位unsigned char USER_RIGHT; / 用戶權(quán)限 unsigned char FEATURE_BUFFER512; / 要下傳的指紋特征值數(shù)據(jù)unsigned char FEATURE_LEN;
92、; / 要下傳的指紋特征值的長(zhǎng)度 unsigned char CharToHex(unsigned char ch);unsigned char select_one_onecontrast(void);void select_Get_Usernumber_right(void); /* name: SERIAL_TX* func:
93、 發(fā)生數(shù)據(jù)到指紋模塊串口* para: none* ret: none* modify:* comment: */int SERIAL_TX(void)
94、 int ret; ret = write(fd, TXBUF, TX_len); / 試圖從串口發(fā)送數(shù) 據(jù)
95、; if(ret = -1) / 確實(shí)接收到了數(shù)據(jù),并打印出來(lái)
96、160; / *(rcv_buf+ret)='0' printf(" Write device error!n");
97、; return -1; / ret = 0; return 0; /* name: SERIA
98、L_RX* func: 從指紋模塊串口接收數(shù)據(jù)* para: none* ret: none* modify:* comment:
99、0; */void SERIAL_RX(void) / read(fd, RXBUF , RX_len);#if 1 int ret,n,pos,retval; fd_set rfds; struct timeval tv ; &
100、#160; pos = 0;/指向接收緩沖 tv.tv_sec = 2; tv.tv_usec = 0; for(n = 0; n < RX_len; n+)
101、 RXBUFn = 0xFF; /while(FD_ISSET(fd,&uart_r)|FD_ISSET(fd,&uart_w); / 檢測(cè)串口是否有讀寫動(dòng)作&
102、#160; while(1) / 檢測(cè)串口是否有讀寫動(dòng)作 FD_ZERO(&rfds);/ 清空串口接收端口集
103、 FD_SET(fd,&rfds);/ 設(shè)置串口接收端口集 retval = select(fd+1,&rfds,NULL,NULL,&tv);
104、60; if(retval = -1) perror("select()"); &
105、#160; break; &
106、#160; else if(retval) /判斷是否還有數(shù)據(jù) &
107、#160; /sleep(2);
108、60; ret = read(fd, RXBUF, RX_len); pos += ret;
109、0; /printf("ret = %d n",ret); if(RXBUFpos-2 = 'r') &
110、 (RXBUFpos-1 = 'n') / 確實(shí)接收到了數(shù)據(jù),并打印出來(lái)
111、 FD_ZERO(&rfds);
112、; FD_SET(fd,&rfds);
113、160; retval = select(fd+1,&rfds,NULL,NULL,&tv); if(!retval)/no datas
114、0;
115、0; break;
116、0; else
117、 break;
118、void init_ttyS(int fd) struct termios newtio; bzero(&newtio, sizeof(newtio); tcgetattr(fd, &newtio);
119、60; / 得到當(dāng)前串口的參數(shù) cfsetispeed(&newtio, B19200);
120、160; / 將輸入波特率設(shè)為19200 cfsetospeed(&newtio, B19200);
121、60; / 將輸出波特率設(shè)為19200 newtio.c_cflag |= (CLOCAL | CREAD); / 使能接收并使能本地狀態(tài)
122、160; newtio.c_cflag &= PARENB; / 無(wú)校驗(yàn) 8位數(shù)據(jù)位1位停止位 newtio.c_cflag &
123、;= CSTOPB; newtio.c_cflag &= CSIZE; newtio.c_cflag |= CS8; newtio.c_lflag &= (ICANON | ECHO | ECHOE | ISIG); / 原始數(shù)據(jù)輸入
124、newtio.c_oflag &= (OPOST); newtio.c_ccVTIME = 0; / 設(shè)置等待時(shí)間和最小接收字符數(shù)&
125、#160; newtio.c_ccVMIN = 0; tcflush(fd, TCIFLUSH);
126、160; / 處理未接收的字符 tcsetattr(fd,TCSANOW,&newtio); / 激活新配置&
127、#160;unsigned char set_addmode(unsigned char yn_repeat) unsigned char check, i; TXBUF0 = 0xF5; TXBUF1 = 0x2D; TXBUF2 = 0x00;
128、 TXBUF3 = yn_repeat; TXBUF4 = 0x00; TXBUF5 = 0x00; check = TXBUF1; for (i = 2; i < 6; i+)
129、60; check = TXBUFi; TXBUF6 = check; TXBUF7 = 0xF5; &
130、#160; rev_ok = 1; TX_len = 8; RX_len = 8; SERIAL_TX(); sleep(delaytime); SERIAL_RX(); rev_ok = RXBUF4;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度精裝高層購(gòu)房定金合同
- 2025年度私人宅基地買賣轉(zhuǎn)讓協(xié)議書及配套設(shè)施建設(shè)補(bǔ)充協(xié)議
- 2025年度租房押金監(jiān)管及退還標(biāo)準(zhǔn)合同
- 二零二五年度文化產(chǎn)業(yè)投資入股協(xié)議
- 2025年黑龍江貨運(yùn)從業(yè)資格證的試題
- 培訓(xùn)班教師發(fā)言稿
- 主題班會(huì)少年強(qiáng)則國(guó)強(qiáng)紀(jì)念五四青年節(jié)【課件】
- 2024汽車銷售合同
- 婚禮父親發(fā)言稿
- 供應(yīng)商會(huì)議發(fā)言稿
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑構(gòu)造》模擬練習(xí)試題庫(kù)(含答案)
- 撤銷失信名單申請(qǐng)書
- 2024年泰州職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫(kù)含答案解析
- 2024年05月青海青海省農(nóng)商銀行(農(nóng)信社)系統(tǒng)招考專業(yè)人才筆試歷年參考題庫(kù)附帶答案詳解
- 貴州黔源電力股份有限公司招聘筆試沖刺題2025
- 2025年江蘇省環(huán)保集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 新修訂中華人民共和國(guó)畜牧法全文解讀學(xué)習(xí)
- 主題活動(dòng)一《我調(diào)查》(教學(xué)實(shí)錄)-2023-2024學(xué)年二年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)內(nèi)蒙古版
- 檳榔園轉(zhuǎn)讓合同范例
- 物業(yè)管理服務(wù)內(nèi)容標(biāo)準(zhǔn)及質(zhì)量保證措施
- 【課件】平移(課件)人教版(2024)數(shù)學(xué)七年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論