




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计说明书 基于 arm 和 qt 的多路信号检测系统设计 摘 要 i 摘 要 随着嵌入式越来越受到重视,嵌入式系统近年来的发展有目共睹,嵌入式 系统的应用越来越广泛。无论是传统的工业监测、机械控制,还是新兴的移动 通讯、数字娱乐,嵌入式系统正逐渐走进人们的生活生产的方方面面。在工业 检测方面,传统的监控系统主要以单片机为硬件载体进行设计,功能相对单一, 可视化及拓展性有限。随着 linux 系统的不断升级换代,现在出现了以 arm 芯片为载体,以 linux 系统为软件平台设计出的新一代监控系统。除了能实现 原有单片机的功能外,其可视化更强,具备网络通信功能,是一台具备功能拓 展更丰富的微型计算机。 本文将以北京博创兴业科技有限公司提供的 up-netarm2410-s 实验仪器 为硬件载体,对监测系统的设计进行研究和应用。系统平台使用的是 linux2.4.18 的内核,gui 首次以 qt 为底层图形模块,用 c+和 qt 图形用户界 面类库开发图形数据一体化监控平台。 本文先从硬件平台设计入手,根据要求对硬件设备进行了解,设计了功能 模块,在软件部分移植了 linux 操作系统平台,构建了开发环境,就数模转换、 触摸屏驱动程序进行编程,最后详述在了 qt 下,如何使用 c+语言设计监控系 统图形界面。最后展现了系统运行效果,并提出了改进意见。 运行效果表明,设计的监控系统是有效和实时的。 关键词:嵌入式系统 linux 驱动 qt abstract ii abstract with the increasing importance of embedded technology, the development of embedded systems for all to see in recent years, embedded system applications increasingly broad. whether in traditional industrial monitoring, mechanical control, or the emerging mobile communications, digital entertainment, embedded systems are gradually moved into all aspects of production and lives of the people. in the industrial testing, the traditional embedded control systems primarily for the single- chip microcomputer hardware vector design function relatively single, visualization, and limited scalability. with the linux system constantly upgrading and updating, and now appeared to arm chip carrier and linux systems software platform designed for a new generation of monitoring system. in addition to achieving the original microcontroller functions, visualizations stronger, equipped with the network communication function is a function of developing a more abundant micro-computer. this paper, based on up-netarm2410-s experiment instrument provided by the beijing universal pioneering technology co., ltd., designs a monitoring system to conduct research and application. system platform is linux2.4.18 kernel, gui for the first time in the bottom qt graphics module, using c+ and qt graphical user interface library monitor the development of graphical data integration platform. this article first start with the hardware platform design, required to understand the hardware devices designed modules, ported in the software part of the linux operating system platform, build the development environment, how to build a development environment, and were on the a/d conversion, touch screen driver programming, the final details in qt, how to use c+ language designed monitoring system graphical interface. as an application of research papers, the paper mainly on the software design, while the diagnosis and monitoring technology provides a similar software design and development of the reference model. the study proved to be effective and real-time. key words: embedded system,linux,driver,qt 目 录 iii 目 录 摘 要i abstract.ii 目 录.iii 第一章 前言.1 1.1 课题研究背景和意义 1 1.2 嵌入式技术发展现状与未来 1 1.3 课题研究内容 .2 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计3 2.1 系统组成 .3 2.2 s3c2410 介绍 .3 2.3 设计方案 .7 2.4 adc 硬件设计 .8 2.4.1 adc 转换器.8 2.4.2 a/d 转换器在扩展板的连接9 第三章 嵌入式 linux 移植及驱动开发11 3.1 linux 主要特征 .11 3.2 驱动程序开发 .12 3.2.1 嵌入式 linux 驱动程序开发方法 12 3.2.2 adc 在 arm 中的驱动开发 12 3.2.3 触摸屏在 arm 中的驱动开发 .21 第四章 信号监测应用软件设计26 4.1 qt 主要特性 26 4.2 qt 类库及其机制简介 .27 4.2.1 qt 类库 27 4.2.2 qt 对象间通讯机制 28 4.3 信号监测 ui 设计29 4.4 信号监测 ui 和驱动连接30 第五章 总结与展望37 5.1 全文总结 37 5.2 展望 37 参考文献.38 致 谢.39 附录40 第一章 前言 - 1 - 第一章 前言 1.1课题研究背景和意义 在现在日益信息化的社会中,计算机和网络已经全面渗透到日常生活的 每一个角落。对于我们每个人,需要的已经不再仅仅是那种放在桌上处理文 档,进行工作管理和生产控制的计算机 “机器“;各种各样的新型嵌入式系 统设备在应用数量上已经远远超过通用计算机。而在工业和服务领域中,使 用嵌入式技术的数字机床,智能工具,工业机器人,服务机器人也将逐渐改 变传统的工业和服务方式。 目前嵌入式系统技术已经成为了最热门的技术 之一,吸引了大批的优秀人才投入其中。嵌入式系统可以称为后pc 时代 和后网络时代的新秀。由于嵌入式系统采用的是微处理器,实现相对单一的 功能,采用独立的操作系统,所以往往不需要大量的外围器件。因而在体积 上,功耗上有其自身的优势。 嵌入式在应用中拥有广阔的前景! 1.2嵌入式技术发展现状与未来 嵌入式系统是将计算机技术、半导体技术和电子技术与各个行业的具体 应用相结合后的产物,是一门综合技术学科。由于空间和各种资源相对不足, 嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争 在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选 择更具有竞争力。 作为软硬件高度结合的产物。为了提高执行速度和系统 可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而 不是存贮于磁盘等载体中。片上系统,板上系统的实现,使得以pda 等为 代表的这类产品拥有更加熟悉的操作界面和操作方式,比着传统的商务通等 功能更加完善,实用。 因为嵌入式系统往往和具体应用有机地结合在一起,它的升级换代也是 和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命 周期。 从软件方面讲,软件功能趋向专一化。掌上设备的各种通讯,管理软件 需求量极大 ,开发环境齐备,可以完全在pc 机上进行,通过软件模拟调 试,等到模拟通过再下载入机器,而且因为可以使用大量的pc 机的 api 函数,sdk,所以开发过程是在已有的成熟技术基础上进行,相对简单。 硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各 第一章 前言 - 2 - 种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较 成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学 习研发的资金和技术力量。从软件方面讲,也有相当部分的成熟软件系统。 国外商品化的嵌入式实时操作系统,已进入我国市场的有 windriver、microsoft、qnx 和 nuclear 等产品。我国自主开发的嵌入式 系统软件产品如科银 (coretek)公司的嵌入式软件开发平台deltasystem, 它不仅包括 deltacore 嵌入式实时操作系统 ,而且还包括 lamdatools 交叉 开发工具套件、测试工具、应用组件等;此外,中科院也推出了hopen 嵌入式操作系统(虽然还不够完善) 。同时由于是研究热点,所以我们可以 在网上找到各种各样的免费资源,从各大厂商的开发文档,到各种驱动,程 序源代码,甚至很多厂商还提供微处理器的样片。这对于我们从事这方面的 研发,无疑是个资源宝库。对于软件设计来说,不管是上手还是进一步开发, 都相对来说比较容易。这就使得很多生手能够比较快的进入研究状态,利于 发挥大家的积极创造性 。6 嵌入式系统是这个后 pc 时代的擎天之柱。我们有理由相信,未来的电 子技术就是嵌入式系统技术的天下。 1.3课题研究内容 嵌入式系统逐渐成为 it 业界技术研究和产品开发的热点。 其重要性 随着手持设备的普及而越来越突出 。本文通过对嵌入式 linux 和 qt 的分析 与研究,在 qt 和 adc 自定义驱动的基础上 ,开发了基于 s3c2410 和 adc 实现对多路模拟量信号的实时监测系统,利用qt 和液晶实现图形化显示 数据。一体化的图形界面非常方便用户观测,充分地体现了嵌入式系统的优 势。此外 qt 作为一个 gui 解决方案,可用于对 gui 大小要求苛刻的系统 中。 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 3 - 第二章 基于arm和qt的多路信号监测系统 硬件设计 2.1系统组成 信号监测 系统设计包括信号采集模块、数据处理功能电路模块、以及液 晶显示模块,如图 2-1 所示。这些模块使得该设备拥有强大的功能,集信 号采集、数据处理、参数显示为一体,用户可方便的对多路信号进行实时 监测。 图 2-1 系统概要框图 2.2 s3c2410介绍 s3c2410 处理器是 samsung 公司基于 arm 公司的 arm920t 处理器内 核,采用 0.18um 制造工艺的 32 位微控制器。该处理器拥有:独立的 16kb 指令 cache 和 16kb 数据 cache,mmu,支持 tft 的 lcd 控制器, nand 闪存控制器, 3 路 uart,4 路 dma,4 路带 pwm 的 timer ,i/o 口, rtc,8 路 10 位 adc,touch screen 接口,iic-bus 接口,iis-bus 接口, 2 个 usb 主机,1 个 usb 设备,sd 主机和 mmc 接口,2 路 spi。s3c2410 处理器最高可运行在 203mhz。1,7,11 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 4 - 图 2-2 s3c2410 资源结构图 cpu:s3c2410x 芯片是基于 arm920t 内核,主频 200m,提供如下功能: 1.8v 内核电压 /电源管理有 normal、slow、idle、stop 和 power- 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 5 - off 模式 3.3v 内存电压、 3.3v 的处理器 io 电压,处理器拥有 16kb i- cache, 16kb d-cache, 和 mmu 外部 sdram 控制器 集成 lcd 控制器可以支持 4k color stn and 64k color tft,1 个 通道的专用 dma 用于显存刷新 有外部请求引脚的 4 通道 dma,3 通道的 uart,支持 irda1.0 16- bytefifo, 1 个通道的 spi 1 个多主 iic 总线控制器,一个 iis 总线控制器 sdhost 支持 1.1 的多媒体协议 两个 usb1.1 控制器,可以配置成为 host 或 device 4 通道 pwm 和一通道的内部定时器 /8 通道 10bitadc 和触摸屏控制 器 看门狗定时器 /117 个外部通用 io、24 个外部中断源 其中本文主要显示应用 adc 和 lcd 资源! up-netarm2410-s 实验仪器硬件配置如下表: 表 2-1up-netarm2410-s 实验仪器硬件配置 配置名称型号说明 cpuarm920t 结构芯片三星 s3c2410x 工作平率 203mhz flashsamsung k9f120864m nand sdramhy57v561620at-h32m*2=64m ethernet 网卡ax88796两片,10/100m 自适应 lcdlq080v3dg018 寸 16bittft 触摸屏sx-080-w4r-fbfm7843 驱动 ledzlg7290四个共阴极 led 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 6 - usb 接口4 个 host/1 个 device由 at43301 构成 usb hub uart/irda2 个 rs232,1 个 rs485,1 个 irda 从处理器的 uart2 引出 ad由 s3c2410 芯片出3 个电位器控制输入 audioiis 总线,uda1341 芯片44.1khz 音频 拓展卡插槽168pin export总线直接拓展 gps_gors 拓展板simcom 的 sim100-e 模块支持双道语音通信 ide/cf 卡插座笔记本硬盘, cf 卡 pcmcia 和 sd 卡插座pcmcia 型号为 dwl-650 ps2pc 键盘和鼠标由 atmega8 单片机控制 ic 卡座at24cxx 系列由 atmega8 单片机控制 dc/step 电机dc 由 pwm 控制,step 由 74hc573 控制 can bus由 mcp2510 和 tja1050 构成 double damax504两个 10 位 dac 端口 调试接口jtag14 针、20 针 up-netarm2410-s 试验箱图如下: 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 7 - 图 2-3 up-netarm2410-s 试验箱 图 2-4 up-netarm2410-s 2.3设计方案 图 2-5 系统结构图 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 8 - 如图 2-5 所示,电流电压信号经过电阻分压简单滤波后送入s3c2410 adc 模块,s3c2410 接受电阻触摸屏输入 和鼠标输入 ,并送显示。 2.4 adc硬件设计 2.4.1 adc 转换器 a/d 转换器是模拟信号源和 cpu 之间联系的接口,它的任务是将连续 变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、 控制和显示。在工业控制和数据采集及许多其他领域中,a/d 转换是不可 缺少的。 a/d 转换器有以下类型:逐位比较型、积分型、计数型、并行比 较型、电压频率型,主要应根据使用场合的具体要求,按照转换速度、精 度、价格、功能以及接口条件等因素来决定选择何种类型。 1常用的有以 下两种: 双积分型的 a/d 转换器 双积分式也称二重积分式,其实质是测量和比较两个积分的时间,一个 是对模拟输入电压积分的时间t0,此时间往往是固定的;另一个是以充电 后的电压为初值,对参考电源vref 反向积分,积分电容被放电至零所需的 时间 t1。模拟输入电压 vi 与参考电压 vref 之比,等于上述两个时间之 比。由于 vref 、t0 固定,而放电时间 t1 可以测出,因而可计算出模拟 输入电压的大小 (vref 与 vi 符号相反 )。由于 t0、vref 为已知的固定常 数,因此反向积分时间 t1 与输入模拟电压 vi 在 t0 时间内的平均值成 正比。输入电压 vi 愈高,va 愈大,t1 就愈长。在 t1 开始时刻,控制 逻辑同时打开计数器的控制门开始计数,直到积分器恢复到零电平时,计数 停止。则计数器所计出的数字即正比于输入电压vi 在 t0 时间内的平均 值,于是完成了一次 a/d 转换。由于双积分型 a/d 转换是测量输入电压 vi 在 t0 时间内的平均值,所以对常态干扰 (串摸干扰 )有很强的抑制作用, 尤其对正负波形对称的干扰信号,抑制效果更好。双积分型的a/d 转换 器电路简单,抗干扰能力强,精度高,这是突出的优点。但转换速度比较慢, 常用的 a/d 转换芯片的转换时间为毫秒级。例如12 位的积分型 a/d 芯 片 adcetl2bc,其转换时间为 lms。因此适用于模拟信号变化缓慢,采样 速率要求较低,而对精度要求较高,或现场干扰较严重的场合。例如在数字 第二章 基于 arm 和 qt 的多路信号监测系统硬件设计 - 9 - 电压表中常被采用。 逐次逼近型的 a/d 转换器 逐次逼近型 (也称逐位比较式 )的 a/d 转换器, 主要由逐次逼近寄存 器 sar、d/a 转换器、比较器以及时序和控制逻辑等部分组成。它的实质是 逐次把设定的 sar 寄存器中的数字量经 d/a 转换后得到电压 vc 与待转 换模拟电压 v。进行比较。比较时,先从sar 的最高位开始,逐次确定各 位的数码应是 “1”还是“0” ,其工作过程如下:转换前,先将sar 寄存 器各位清零。转换开始时,控制逻辑电路先设定sar 寄存器的最高位为 “1” ,其余位为 “0” ,此试探值经 d/a 转换成电压 vc,然后将 vc 与模 拟输入电压 vx 比较。如果 vxvc,说明 sar 最高位的 “1”应予保留; 如果 vx #include “myqt.h“ int main(int argc, char *argv) qapplication app(argc, argv); mydlg *mydlg = new mydlg; return mydlg-exec(); 定义槽函数的头文件 myqt.h 源代码如下: #ifndef _dslklg_h_ #define _dslklg_h_ #include #include /一定要包含 qtimer 头 文件 #include /包含 ui 头文件 #include “s3c2410-adc.h“ /包含 adc 驱动头文件 #include #include #include #include #include #include #include #define adc_dev “/dev/adc/0raw“ /路径定义 /static int adc_fd; class mydlg : public qdialog /新建类继承 qdialog 类 q_object public: mydlg(); /构造函数,对 mydlg 初始化 public slots: void showinfo(); /建立自定义 slots 函数 附录 - 41 - void getad(); /建立自定义 slots 函数 private: int adc_fd; /设备句柄 bool flag; /adc 采集使能标志位 qtimer *readadc; /qtime 控件实例化 ui:form ui; /对前面建立的 form 实例化 int init_addevice(); /adc 初始化私有函数 int getadresult(int channel); /adc 读写私有函数 ; #endif myqt.cpp 源代码如下: #include “myqt.h“ mydlg:mydlg() adc_fd = -1; ui.setupui(this); /初始化 ui 界面 ui 构造函数 qobject:connect(ui.pushbutton1, signal(clicked(), this, slot(showinfo(); qobject:connect(ui.pushbutton2, signal(clicked(), this, slot(close(); readadc = new qtimer(this); /使用 q 版定时器 time 控件 分配内存 connect(readadc,signal(timeout(),this,slot(getad();/连接 timeout-getad readadc-stop(); /先不开启,等按钮被按下才开始 void mydlg:showinfo() flag = (flag?false:true); /改变标志 ,非常棒的三目运算,将 flag 翻转 if(flag)/这里表示开始 adc ui.pushbutton1-settext(qstring(“stop“);/如果标志位 为 true,pushbutton 显示 stop 附录 - 42 - readadc-start(100); /激活定时器 else /这里关闭 adc,已经在 getad 中关了,无需多此一举 ui.pushbutton1-settext(qstring(“start“);/如果标志位 为 false,pushbutton 显示 start void mydlg:getad()/click 响应函数 int valadc0 = 0; /adc 缓冲局部变量初始化 int valadc1 = 0; /adc 缓冲局部变量初始化 int valadc2 = 0; /adc 缓冲局部变量初始化 if(flag) readadc-stop();/ 关 qtime / adc_fd = init_addevice();/获取设备句柄 if (init_addevice() display(double)valadc0*3.3/1024.0);/lcd 送显 gressbar1-setvalue(valadc0);/progressbar 送显 ui.lcdnumber1_2- display(double)valadc1*3.3/1024.0);/lcd 送显 gressbar1_2-setvalue(valadc1);/progressbar 送显 ui.lcdnumber1_3- display(double)valadc2*3.3/1024.0);/lcd 送显 gressbar1_3-setvalue(valadc2);/progressbar 送显 readadc-start(100);/adc 重装初值 附录 - 43 - else readadc-stop(); /停止 qtimer int mydlg:init_addevice( ) if(adc_fd=open(adc_dev, o_rdwr) #include #include #include #include #include #include #include “s3c2410-adc.h“ #define adc_dev “/dev/adc“ static int adc_fd = -1; static int init_addevice(void)/ad 设备的初始化 附录 - 44 - if(adc_fd=open(adc_dev, o_rdwr) /linux 的配置文件 #include /模块化源文件必须带的头文件 #include /包含 printk 函数 #include /包含 module_init(init_function)和 module_exit(exit_function) #include /包含驱动程序需要的大量 api 函数,包括睡眠函数以及各种变量声明 #include #include #include #include /信号量 #include #include #define config_devfs_fs 1 /可选项,要是不选 insmod 之前必 须先 mknod /dev/s3c2410 c 220 1 #define use_irq_waitqueue 0 /可选项, ad 转换要一段时间,启动 之后可以让进程休眠,让 cpu 去做其他事情 #define device_name “s3c2410-adc“ #define adcraw_minor 1 /此设备号 #define adc_write(ch, prescale)(ch)16) /主设备号 typedef struct struct semaphore lock; /互斥锁。 作用:一个应用程序 a 要用 此驱动,先拿到锁,把驱动锁上, / 另一个应用程序想用此驱动,先看是否被锁,锁了就等 待或返回信息。 #ifdef use_irq_waitqueue wait_queue_head_t wait; /等待队列的定义。驱动做某件事情需要 些时间,但又不想 while(finish)下去, /因为驱动的 while 不能被进程调度,可能导致系统当掉 #endif int channel; /通道号 int prescale; /比例因子 adc_dev; static adc_dev adcdev; #define start_adc_ain(ch, prescale) do adccon = prescale_en | prscvl(prescale) | adc_input(ch) ; adccon |= adc_start; while(0) /此函数就是向 adccon 里先写初始 化位,再让其开始转换 #ifdef use_irq_waitqueue static void adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg) wake_up( /ad 转换完成产生的中断信号 调用此函数,唤醒等待队列 #endif static ssize_t s3c2410_adc_write(struct file *file, const char *buffer, size_t count, loff_t * ppos) int data; /用来保存应用程序传来的数据 if(count!=sizeof(data) printk(“the size of input data must be %dn“, sizeof(data); /应用程序传来的数据和 data 长度不同,报错 return 0; copy_from_user( /从应用程 序传来数据 放到 data adcdev.channel=adc_write_getch(data); 附录 - 47 - adcdev.prescale=adc_write_getpre(data); printk(“set adc channel=%d, prescale=0x%xn“, adcdev.channel, adcdev.prescale); return count; static ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos) int ret = 0; if (down_interruptible( start_adc_ain(adcdev.channel, adcdev.prescale); /开始转换 #ifdef use_irq_waitqueue interruptible_sleep_on( /休眠进程,让 cpu 做其他的事情 #endif printk(“in read channel=%dn“,adcdev.channel); printk(“adcdat0=%xn“,adcdat0); while(!(adccon ret = adcdat0; ret /10 位 ad 转换, 所以取低十位 copy_to_user(buffer, (char *) /把得到的值 传回应用程序 up( /释放信号量 return sizeof(ret); static int s3c2410_adc_open(struct inode *inode, struct file *filp) init_mutex( /初始化一个互 斥锁 #ifdef use_irq_waitqueue init_waitqueue_head( /初始化一个休 眠队列 #endif adcdev.channel=4; adcdev.prescale=0xff; mod_inc_use_count; /原子操作 , 计数现在有多少应用程序在使用此去驱动 printk(“adc opened!n“); return 0; 附录 - 48 - static int s3c2410_adc_release(struct inode *inode, struct file *filp) mod_dec_use_count; /某个应用程序不用此驱 动了,驱动程序相应记录一下 printk( “adc closedn“); return 0; static
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水体污染修复与水质提升技术方案
- 燃煤发电设备运行优化方案
- 防水工程环境影响评估方案
- 深远海养殖生态环境保护与修复方案
- 城市地下综合管网建设项目技术方案
- 甲乙丙三方能源产业股权转让及新能源开发协议
- 北京印刷学院印刷产业人才培训与引进合作协议
- 宅基地空地租赁与乡村振兴战略合作合同书
- 沙漠治理项目用地租赁与生态修复合作协议
- 离婚纠纷中夫妻共同财产分割及债务处理合同
- 2025年上海市中考数学试卷真题及解析答案
- 车辆抵押贷款逾期贷款清收合同
- 餐饮服务(双语)课件任务3中餐服务的形式与特点
- 铁总关于建设项目技术交底管理办法(2024版)
- 房款首付赠与协议书
- 肌骨超声在康复科的应用
- 垃圾分类房租赁合同协议
- 《肺炎克雷伯菌感染》课件
- 《美容护肤及保养》课件
- 小学生科普课视错觉课件
- 化疗药物的应用及护理
评论
0/150
提交评论