




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、8051單片機C語言編程模板1.函數頭文件 .22.毫秒級CPU延時函數 .43.定時/計數器初始化函數 .54.定時/計數器1中斷處理函數 .65.定時/計數器0中斷處理函數 .76.PWM初始化函數 .87.PWM0占空比設置函數 .98. UART串口初始化函數 .109. UART串口接收中斷處理函數 .1110.UART串口發(fā)送函數 .1211.UART串口發(fā)送字符串函數 .1312.外部中斷INT初始化函數 .1513.外部中斷INT1中斷處理程序 .1514.外部中斷INT0中斷處理程序 .1615.普通I/O口模擬PWM生成程序 .1616.LCD驅動 .1717. DS18B
2、20溫度傳感器驅動 .1918. LCM2402(1602也適用)驅動程序 .2219.主函數 .2620. 8個獨立式鍵盤驅動程序 .2821. 1 6個陣列式鍵盤驅動程序 .291.函數頭文件/* 程序名:編寫人:編寫時間: 20 年 月 日硬件支持:接口說明:修改日志:NO.1-/* 說明:/*/#include REG51.h REG52.h STC11Fxx.H STC12C2052AD.H#include #include #include #include #include #include #include #include #include #include #include
3、 #include #include #include #include STC12C5A60S2.H/通用 89C51 頭文件(只留下實際使用的單片機所對應的頭文件) /設定插入點/字符處理/定義錯誤碼/浮點數處理/文件輸入輸出/參數化輸入輸出/數據流輸入輸出 /定義各種數據類型最值常量/定義本地化函數/定義數學函數 /定義輸入輸出函數 /定義雜項函數及內存分配函數 /字符串處理/基于數組的輸入輸出/定義關于時間的函數#inelude #inelude #inelude vintrins.hsfr 自定義名 = SFR 地址;sbit 自定義名=系統(tǒng)位名;bit 自定義名;#define 代
4、替名原名#define KEY P1sbit SPEAKER = P3A7;sbit DQ = P2A5;sbit RS = P1A0;sbit RW= P1A1;sbitE = P1A2;#define Lcd_Bus POunsigned char 自定義名;unsigned int 自定義名;data字節(jié)尋址片內 RAM ,片內 RAM 的 128 字節(jié)bdata可位尋址片內 RAM , 16 字節(jié),從 0 x20 至 U 0 x2Fidata所有片內 RAM , 256 字節(jié),從 0 x00 到 OxFFpdata片外 RAM , 256 字節(jié),從 0 x00 到 OxFFxdata片
5、外 RAM , 64K 字節(jié),從 0 x00 到 OxFFFFcode ROM 存儲器,64K 字節(jié),從 0 x00 至 U OxFFFF寬字符處理及輸入/輸出寬字符分類/51 基本運算(包括_nop_空函數)按字節(jié)定義 SFR 中的存儲器名。例:sfr P1 = 0 x90;按位定義 SFR 中的存儲器名。例: sbit Add_Key = P3A1; 定義一個位(位的值只能是 0 或 1)例:bit LED;用代替名代替原名。例:#define LED P1 / #define TA 0 x25/鍵盤所連接的 I/O 接口組定義揚聲器連接定義/ds18B20模式位,為 0 輸入指令,為 1
6、 輸入數據讀寫位,為 0 讀,為 1 寫使能位數據總線定義一個 0255 的整數變量。定義一個 065535 的整數變量。(例:data unsigned char a;)(例:bdata unsigned char a;)(例:idata unsigned char a;)(例:pdata unsigned char a;)(例:xdata unsigned char a;)(例:code unsigned char a;)2.毫秒級CPU延時函數/* 函數名:毫秒級 CPU 延時函數調 用: DELAY_MS (?);參 數: 165535(參數不可為 0 )返回值:無結 果:占用 CPU
7、 方式延時與參數數值相同的毫秒時間備 注:應用于 1T 單片機時 i600 ,應用于 12T 單片機時 i125 (在此預為/*/ void DELAY_MS( unsigned int a )unsigned int i;while ( -a != 0)for(i = 0; i 600; i+);*/M1 M0 方式 說明0 0 0 13 位 T/C ,由 TL 低 5 位和 TH 的 8 位組成 13 位計數器0 1 1 16 位 T/C , TL 和 TH 共 16 位計數器1 0 2 8 位 T/C,TL 用于計數,當 TL 溢出時將 TH 中的值自動寫入1 1 3 兩組 8 位 T/
8、C1T 單片機數值)TL3.定時/計數器初始化函數*函數名:定時/計數器初始化函數調用:T_C_init();參 數:無返回值:無結 果:設置 SFR 中 T/C1 和(或)T/CO 相關參數備 注:本函數控制 T/C1 和 T/CO,不需要使用的部分可用屏蔽 */ voidT_C_init (void)TMOD = 0 x11;EA= 1;TH1 = OxFF;TL1 = OxFF;ET1 = 1;TR1 = 1;/THO = 0 x3C; /TLO = OxBO;/ETO = 1;/TRO = 1;*高 4 位控制 T/C1 GA TE, C/T, M1 , MO , GATE, C/T,
9、 M1 , MO中斷總開關6 位計數寄存器 T1 咼 8 位(寫入初值) /16 位計數寄存器 T1低 8 位/T/C1 中斷開關/T/C1 啟動開關 /16 位計數寄存器 TO 高 8 位/16 位計數寄存器 TO 低 8 位(0 x3CB0 = 50mS 延時) /T/CO 中斷開關/T/C0 啟動開關函數內容4.定時/計數器1中斷處理函數/*函數名:定時/計數器 1 中斷處理函數調用:T/C1 溢出后中斷處理參 數:無返回值:無結 果:重新寫入 16 位計數寄存器初始值,處理用戶程序備 注:必須允許中斷并啟動T/C 本函數方可有效,重新寫入初值需和*/void T_C1 (void) i
10、nterrupt 3 using 3TH1 = 0 x3C;TL1 = OxBO;*T_C_init 函數切換寄存器組到3/16 位計數寄存器/16 位計數寄存器T1 高 8 位(重新寫入初值)T1 低 8 位(0 x3CB0 = 50mS 延時)函數內容5定時/計數器0中斷處理函數/*函數名:定時/計數器 0 中斷處理函數調用:T/CO 溢出后中斷處理參 數:無返回值:無結 果:重新寫入 16 位計數寄存器初始值,處理用戶程序備 注:必須允許中斷并啟動 T/C 本函數方可有效,重新寫入初值需和/*void T_C0 (void) interrupt 1 using 1 切換寄存器組到 1TH
11、O = 0 x3C;TLO = OxBO;*函數內容T_C_init 函數一致/16 位計數寄存器 TO 高 8 位(重新寫入初值)/16 位計數寄存器 TO 低 8 位(0 x3CB0 = 50mS 延時)6.PWM初始化函數/*函數名:PWM 初始化函數調用:PWMnit();參 數:無返回值:無結 果:將 PCA 初始化為 PWM 模式,初始占空比為 0備 注:需要更多路 PWM 輸出直接插入 CCAPnH 和 CCAPnL 即可*/void PWMJnit (void)CMOD=0 x02;CL=0 x00;CH=0 x00;CCAPM0=0 x42;CCAP0L=0 x00;CCAP
12、0H=0 x00;/CCAP M 仁 0 x42;設置 PCA 定時器/PWMO 設置 PCA 工作方式為 PWM 方式(O1OO 0010)設置 PWMO 初始值與 CCAPOH 相同/ PWMO 初始時為 0 /PWM1 設置 PCA 工作方式為 PWM 方式(使用時刪除/)/CCAP1L=OxOO;/CCAP1H=OxOO;/CCAPM2=0 x42;/CCAP2L=0 x00;/CCAP2H=0 x00;/CCAPM3=0 x42;/CCAP3L=0 x00;/CCAP3H=0 x00;CR=1;*7.PWM0占空比設置函數*函數名:PWMO 占空比設置函數設置 PWM1 初始值與 C
13、CAPOH 相同/ PWM1 初始時為 0/PWM2 設置 PCA 工作方式為 PWM 方式設置 PWM2 初始值與 CCAPOH 相同/ PWM2 初始時為 0/PWM3 設置 PCA 工作方式為 PWM 方式設置 PWM3 初始值與 CCAPOH 相同/ PWM3 初始時為 0啟動 PCA 定時器調 用: PWM0_set();參 數: 0 x000 xFF (亦可用 0255 ) 返回值:無結 果:設置 PWM 模式占空比,為 0 時全部高電平,為 1 時全部低電平備 注:如果需要 PWM1 的設置函數,只要把 CCAP0L 和 CCAP0H 中的 0 改為 1 即可/*/void PW
14、M0_set (unsigned char a)CCAP0L= a;/設置值直接寫入 CCAP0LCCAP0H= a;/設置值直接寫入 CCAP0H*/8.UART串口初始化函數/*函數名: UART 串口初始化函數調 用: UART_init();參 數:無返回值:無結 果:啟動 UART 串口接收中斷,允許串口接收,啟動 T/C1 產生波特率(占用)備 注:振蕩晶體為 12MHz , PC 串口端設置4800, 8,無,1,無*/void UART_init (void)EA = 1;ES = 1;/允許總中斷(如不使用中斷,/允許 UART 串口的中斷/屏蔽)/TMOD = 0 x20;
15、SCON = 0 x50;/定時器 T/C1 工作方式 2/串口工作方式 1,允許串口接收( SCON = 0 x40 時禁止串口接收)/TH1 = 0 xF3; /TL1 = 0 xF3;PCON = 0 x80; /TR1 = 1;*9.UART串口接收中斷處理函數/*函數名: UART 串口接收中斷處理函數調 用: SBUF 收到數據后中斷處理 參 數:無返回值:無結 果: UART 串口接收到數據時產生中斷,用戶對數據進行處理(并發(fā)送回去)備 注:過長的處理程序會影響后面數據的接收/*/void UART_R (void) interrupt 4using 1/切換寄存器組到 1uns
16、igned char UART_data;/定義串口接收數據變量 (需要對接受到的數據進行處理時,可將其定義為全局變量)RI = 0;/令接收中斷標志位為 0(軟件清零)UART_data = SBUF;/將接收到的數據送入變量UART_data/定時器初值高 8 位設置/定時器初值低 8 位設置 /波特率倍頻(屏蔽本句波特率為2400)/定時器啟動/SBUF = UART_data;/while(TI = 0);/Tl = 0;*10. UART串口發(fā)送函數*函數名:UART 串口發(fā)送函數調用:UART_T;參 數:需要 UART 串口發(fā)送的數據(8 位門字節(jié))返回值:無結 果:將參數中的數
17、據發(fā)送給UART 串口,確認發(fā)送完成后退出備注:*/ voidUART_T (unsigned char UART_data)SBUF = UART_data;用戶函數內容(用戶可使用UART_data 做數據處理)將接收的數據發(fā)送回去(刪除 即生效)檢查發(fā)送中斷標志位令發(fā)送中斷標志位為 0 (軟件清零)定義串口發(fā)送數據變量 將接收的數據發(fā)送回去/檢查發(fā)送中斷標志位/ 令發(fā)送中斷標志位為 0(軟件清零)11. UART串口發(fā)送字符串函數/* 函數名: UART 串口發(fā)送字符串函數調 用: UART_TC (?);參 數:需要 UART 串口發(fā)送的數據( 8 位/1 字節(jié))返回值:無結 果:向串
18、口發(fā)送一個字符串 , 長度不限。備 注:例: UART_TC(d9887321); 此函數需要 #include 頭文件支持。/*/ void UART_TC (unsigned char *str)*while(TI = 0);TI = 0;while(*str != 0)UART_T(*str);*str+;*str = 0;*/中斷入口說明中斷入口說明interrupt 0 外部中斷 0 (ROM 入口地址:0 x03)interrupt 1 定時/計數器中斷 0 ( ROM 入口地址:OxOB)interrupt 2 外部中斷 1 (ROM 入口地址:0 x13)interrupt 3
19、 定時/計數器中斷 1 ( ROM 入口地址:0 x1 B)interrupt 4 UART 串口中斷(ROM 入口 地址:0 x23)(更多的中斷依單片機型號而定,ROM 中斷入口均相差 8 個字節(jié))using 0 使用寄存器組 0using 1 使用寄存器組 1using 2 使用寄存器組 2using 3 使用寄存器組 312.外部中斷INT初始化函數/*函數名:外部中斷 INT 初始化函數調用:INT_init();參 數:無返回值:無結 果:啟動外部中斷 INT1、INTO 中斷,設置中斷方式備注:*/void INTJnit (void)EA= 1;EX1 = 1;EXO = 1;
20、IT1 = 1;ITO = 1;*/13.外部中斷INT1中斷處理程序*函數名:外部中斷 INT1 中斷處理程序調 用:外部引腳 INT1 中斷處理參 數:無返回值:無結 果:用戶處理外部中斷信號中斷總開關/允許外部中斷/允許外部中斷/1:下沿觸發(fā)/1:下沿觸發(fā)1 中斷0 中斷0:低電平觸發(fā)0:低電平觸發(fā)備注:void INT_1 (void) interrupt 2 using 214.外部中斷INTO中斷處理程序*函數名:外部中斷 INTO 中斷處理程序調 用:外部引腳 INTO 中斷處理參 數:無返回值:無結 果:用戶處理外部中斷信號備注:*/void INT_0 (void) inte
21、rrupt 0 using 2*/15.普通I/O口模擬PWM生成程序*函數名:普通 I/O 口模擬 PWM 生成程序調用:display (?)備注:切換寄存器組到 2 用戶函數內容切換寄存器組到 2 用戶函數內容void display (unsigned int a)DY_PORT = 0 x00;delay (a);DY_PORT = Oxff;delay (DY_PWM-a);*16丄CD驅動/LCD 驅動(DY12864CBL 液晶顯示屏并口驅動程序)void chk_busy()RS=0;RW=1;E=1;Lcd_Bus=Oxff;while(Lcd_Bus&0 x80)=0 x
22、80);E=0;*void write_com(unsigned char cmdcode)顯示程序(50ms 的 PWM 寬度)/LED 小燈亮延時 a 的長度/LED 小燈滅延時總 PWM 長度減 a檢查忙位(底層)寫命令到 LCD (底層)chk_busy();RS=O;RW=O;E=1;Lcd_Bus=cmdcode;E=0;*void write_data(unsigned char Dispdata)chk_busy();RS=1;RW=0;E=1;Lcd_Bus=Dispdata;E=0;*void Icmnit()write_com(0 x30);write_com(0 x0c
23、);write_com(0 x01);*void lcm_w_word(unsigned char *s)while(*s0)write_data(*s);寫數據到 LCD (底層)初始化 LCD 屏(被調用層)選擇 8bit 數據流開顯示(無游標、不反白)清除顯示,并且設定地址指針為00H向 LCM 發(fā)送一個字符串,長度 64 字符之內。應用:lcm_w_word(您好! ”);(被調用層)S+;void lcm_w_test(bit i,unsigned char word)if(i = 0)write_com(word);elsewrite_data(word);*void lcm_cl
24、r(void)lcm_w_test(0,0 x01);*17. DS18B20溫度傳感器驅動*/DS18B20 溫度傳感器驅動(顯示 0 至 60 度)*寫指令或數據(被調用層)寫指令或數據(0,指令)寫指令或數據(1,數據)清屏函數void Delay(int num)while(num-);*void lnit_DS18B20(void)unsigned char x=0;DQ = 1;Delay(8);DQ = 0;Delay(80);DQ = 1;Delay(14);x=DQ;Delay(20);*unsigned char ReadOneChar(void) unsigned cha
25、r i=0; unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; dat=1;DQ = 1; if(DQ) dat|=0 x80;Delay(4);*延時函數初始化 ds1820/DQ 復位稍做延時單片機將 DQ 拉低精確延時大于 480us拉高總線稍做延時后 如果 x=0 則初始化成功 x=1 則初始化失敗讀一個字節(jié)/給脈沖信號/給脈沖信號 return(dat);*void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0 x01;De
26、lay(5);DQ = 1;dat=1;*unsigned int ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=O;lnit_DS18B20();WriteOneChar(OxCC);WriteOneChar(Ox44);lnit_DS18B20();WriteOneChar(OxCC);WriteOneChar(OxBE);a=ReadOneChar();b=ReadOneChar();寫一個字節(jié)讀取溫度/跳過讀序號列號的操作/啟動溫度轉換跳過讀序號列號的操作讀取溫度寄存
27、器讀低 8 位讀高 8 位t=b;t=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;return (t);*18. LCM2402 (1602也適用)驅動程序以下是 LCM2402 (1602 也適用)驅動程序*/引腳定義II(使用者根據實際更改)#defineLCM2402_DB0_DB7P1sbit LCM2402_RS = P3A2;sbit LCM2402_RW = P3A3;sbit LCM2402_E= P3A4;sbit LCM2402_Busy = P1A7;*定義 LCM2402 指令集/ (詳細請見技術手冊)*/#defi neCMD clear0 x01
28、*/放大 10 倍輸出并四舍五入/定義 LCM2402 的數據總線/定義 LCM2402 的 RS 控制線/定義 LCM2402 的 RW 控制線/定義 LCM2402 的 E 控制線/定義 LCM2402 的測忙線(與 LCM2402_DB0_DB7 關聯(lián))/清除屏幕#defi neCMD_back0 x02#defi neCMD_dec10 x04#defi neCMD_add10 x06#defi neCMD_dis_gb1OxOf#defi neCMD_dis_gb2OxOe#defi neCMD_dis_gb30 x0c#defi neCMD_OFF_dis0 x08#defi ne
29、CMD_set820 x38#defi neCMD_set810 x30#defi neCMD_set420 x28#defi neCMD_set410 x20#defi nelin_10 x80#defi nelin 2OxcO/*/讀 LCM 忙程序底層協(xié)議/ (所有底層協(xié)議都無需關注)/ LCM2402 測忙,若 LCM2402 處于忙狀態(tài),本函數將等待至非忙狀態(tài)*/void LCM2402_TestBusy(void)LCM2402_DB0_DB7 = Oxff;LCM2402_RS = 0;LCM2402_RW = 1;LCM2402_E = 1;while(LCM2402_Busy
30、);LCM2402_E = 0;*寫指令程序/向 LCM2402 寫命令 本函數需要 1 個指令集的入口參數II*/ DDRAM 回零位/讀入后 AC (指針)減 1,向左寫 /讀入后AC (指針)力口 1,向右寫 /開顯示_開光標開光標閃爍/開顯示_開光標關光標閃爍/開顯示_關光標關光標閃爍/關顯示_關光標關光標閃爍/ 8 位總線_2 行顯示8 位總線行顯示(上邊行)/4 位總線_2 行顯示4 位總線行顯示(上邊行)4 位總線行顯示(上邊行)/4 位總線_1 行顯示(上邊行)/設備讀狀態(tài)等待 LCM 不忙void LCM2402_WriteCMD(uint8 LCM2402_command)
31、LCM2402_T estBusy();LCM2402_DB0_DB7 = LCM2402_command:LCM2402_RS = 0;LCM2402_RW= 0;LCM2402_E = 1;LCM2402_E = 0;*/寫數據程序/向 LCM2402 寫數據/*/ voidLCM2402_WriteData(uint8 LCM2402_data)LCM2402_T estBusy();LCM2402_DB0_DB7 = LCM2402_data;LCM2402_RS = 1;LCM2402_RW= 0;LCM2402_E = 1;LCM2402_E = 0;*/打印字符串程序/ (本函數
32、調用指針函數)/向 LCM 發(fā)送一個字符串,長度 48 字符之內/第_行位置 0 x000 x 仃第二行位置 0 x40-0 x57/應用舉例:print(0 x80,); /在第一行第一位處從左向右打印*/void print(uint8 a,uint8 *str)LCM2402_WriteCMD(a | 0 x80); 字符串while(*str != 0)LCM2402_WriteData(*str+);*str = 0;*打印單字符程序/第_行位置 0 x000 x 仃第二行位置 0 x40-0 x57/向 LCM 發(fā)送一個字符,以十六進制(0 x00)表示/應用舉例:print(0
33、xc0,0 x30); 在第二行第一位處打印字符“0*/ void print2(uint8 a,uint8t)LCM2402_WriteCMD(a | 0 x80);LCM2402_WriteData(t);*IILCM2402 初始化/ (使用者可自定義,加 *號程序行必須保留但可修改)*/ void LCM2402nit(void)LCM2402_WriteCMD(CMD_set82);LCM2402_WriteCMD(CMD_clear);LCM2402_WriteCMD(CMD_back);LCM2402_WriteCMD(CMD_add1);LCM2402_WriteCMD(CMD
34、_dis_gb3);*/*顯示模式設置:顯示 2 行,每個字符為 5*7 個像素 /顯示清屏/*數據指針指向第 1 行第 1 個字符位置/顯示光標移動設置:文字不動,光標右移/顯示開及光標設置:顯示開,光標開,閃爍開19.主函數/*函數名:主函數調用:無參 數:無返回值:無結 果:程序開始處,無限循環(huán)備注:*/void main (void)*函數名:揚聲器驅動備注:/*unsigned char MUSIC;unsigned char STHO;unsigned char STLO;unsigned int code tab=64021,64103,64260,64400,/低音 3 開始6
35、4524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178;void main(void)TMOD=0 x01;ET0=1;EA=1;KEY = Oxff; while(1)STH0=tabMUSIC/256;STL0=tabMUSIC%256;TR0=1;elseSPEAKER = 1;TR0=0;void tO(void) interrupt 1 using 0TH0=STH0;TL0=STL0;SPEAKER=SPEAKER;*20. 8個獨立式鍵盤驅動程序/*函數名:8 個獨立式鍵盤驅動程序調用:? = Key ();參 數:無返回值:unsigned char 鍵值 08結 果:有鍵按下時返回值為鍵值18,無鍵按下時返回值為0備注:在主函數中不斷調用*/unsigned char Key ()unsigned char a,b;KEY = Oxff;if (KEY != Oxff)Delay (20);if (KEY != Oxff)a = KEY;switch(a) /鍵盤狀態(tài)查表case Oxfe: b = 1; break;case Oxfd: b = 2; break;case Oxfb: b = 3; break;case 0 xf7:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年生產經營單位安全培訓考試試題(典型題)
- 2025工程主體鋼筋外包工合同
- 2025國內勞務合同范本
- 2025正規(guī)網約車買賣合同模板
- 2025金融借款合同模板
- 2025餐飲業(yè)雇傭合同模板
- 2025二手房購房合同協(xié)議書
- 2025年某合同段蘭渝鐵路高風險隧道施工實施細則
- 2025物流運輸合同樣本
- 2025華泰創(chuàng)新動力靈活配置混合型證券投資基金基金合同
- 高校保密警示教育
- 2025年初中語文名著閱讀《林海雪原》知識點總結及練習
- 西部計劃考試考題及答案
- 譯林版英語三年級下冊單詞表
- 學校德育管理體系
- 青年博物館文創(chuàng)產品消費研究:一個社會實踐分析視角
- 政策實施效果評估模型-深度研究
- 2025版學校學生食堂餐具清洗消毒服務合同2篇
- 學?;饡馁Y金籌集與運用策略
- 調度室副主任安全生產職責模版(3篇)
- 虛擬現實導覽設計-洞察分析
評論
0/150
提交評論