




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书学生姓名: 廖年强 专业班级: 06自动化 指导教师: 谢川 工作单位: 重庆工商大学 计信学院 题 目: 基于ARM的指纹识别门禁系统设计 已知技术参数和设计要求:1、 硬件主要选择基于Xscale内核的PXA255处理器;2、 传感器为美国豪威公司的CMOS图像传感器FPS200;3、 设计系统的硬件和软件部分;4、 硬件包括指纹识别模块、数据处理模块等;5、 软件部分包括系统初始化, 指纹处理识别, 电控锁控制部分等;6、 以小组为单位完成本任务,每个小组最多5人;要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、 完成元器件选型,设计硬
2、件电路,并提供protel电路图;2、 设计中给出最小系统的电路图扩展相应的电路,并根据要求最终形成一个完整的电路图,并完成所有源代码;3、 每个组员完成不少于3000字的课程设计报告且报告内容不同。4、 课题指标从学生实际出发,难易适中,经过努力都能够完成任务,并有所收获。时间安排:20092010学年第一学期1718周指导教师签名: 年 月 日教研室主任签名: 年 月 日重庆工商大学课程设计成绩评定表学院:计信学院 班级:06自动化2班 学生姓名:廖年强 学号:2006003921 项目分值优秀(100>x90良好(90>x80中等(80>x70及格(70>x60不
3、及格(x<60评分参考标准参考标准参考标准参考标准参考标准学习态度15学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作学习态度尚可,能遵守组织纪律,能按期完成任务学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度技术水平与实际能力25设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信设计合理、理论分析与计算正确,实验数据比较准确,有较强
4、的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信设计基本合理,理论分析与计算无大错,实验数据无大错设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题创新10有重大改进或独特见解,有一定实用价值有较大改进或新颖的见解,实用性尚可有一定改进或新的见解有一定见解观念陈旧论文(计算书、图纸撰写质量50结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰结构合
5、理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰指导教师评定成绩:指导教师签名: 年 月 日基于ARM的指纹识别门禁系统设计计信学院 06自动化2班 廖年强 2006003921【摘要】 本设计介绍了基于ARM的指纹识别门禁系统的软硬件设计。其中硬件主要是Intel 公司基于Xscale内核的PXA2
6、55处理器和美国豪威公司的CMOS图像传感器FPS200。软件设计包括系统初始化, 指纹处理识别, 电控锁控制部分等。经过实际测试该系统工作稳定可靠, 达到了设计目的。【关键词】 ARM 门禁系统 指纹识别 TCP/IP 图像一、门禁系统概述门禁系统(Access Contro l System , 又称出入口控制系统,是为保障人们生活、工作及财产安全, 对重要通道的出入口进行管理与控制的系统。随着技术的发展, 门禁系统已经从传统的卡式门禁系统发展到今天的生物特征识别门禁系统。生物特征识别门禁系统是以人体生物特征作为辨识条件的指纹比对、掌纹比对、语音比对等。这些生理特征相同的概率达到数十亿分之
7、一,因此具有无法仿冒与借用、不怕遗失、不用携带、不会遗忘,有着个体特征独特性、唯一性、安全性的特点,适用于高度机密性场所的安全保护。其中指纹识别发展最早, 使用也最广泛。并逐渐与网络集成。二、PXA 255处理器和指纹传感器FPS200简介本系统采用Intel 公司基于Xscale 内核的PXA255处理器。Xscale微架构采用ARMV 5TE ISA 兼容指令集(浮点指令集除外,它以ARM 核为中心,在其周围扩展了指令和数据内存管理(Instruct ion andDataM emo ryM anagement Unit, 指令、数据和微小数据高速缓(Instruction,Data an
8、d Mini-DataCache,写缓冲、全缓冲、挂起缓冲和分支目标缓冲,电源管理单元, 性能监测单元, 调试和JTAG 单元以及协处理器接口、MAC 协处理器、核心存储总线等。FPS系列CMOS图像传感器芯片是美国豪威公司的产品。FPS200是高度集成的彩色摄像芯片, 可带1/4镜头。支持多种格式, 内设的SCCB (Serial Camera Cont ro lBus 串行控制总线接口, 提供简单控制方式。通过该接口, 我们可以对FPS200芯片内部所有寄存器值进行修改, 从而完成对FPS200的控制, 包括色彩饱和度的调整、gamma 校正等等。该芯片最高能达到每秒钟30帧的传输速率,
9、并且用户可以控制图像质量, 可以根据自己的需要选择合适的图像质量。另外FPS200内置了640×480分辨率的镜像阵列,A/D转换器, 并支持外部水平、垂直同步输入格式, 数字视频输出、增益控制、黑平衡和白平衡等在内的控制寄存器功能模块。其内部框图如图1。 图1 FPS200内部结构框图三、系统硬件设计1、结构框图系统的硬件架构原理框图如图2所示,本系统主要实现指纹的识别、处理、特征模板提取、图2 系统硬件结构图结果显示,以及完成个人身份识别/注册功能。主要由ARM9处理、VGA控制及结果显示等模块组成。2、指纹识别模块指纹识别模块核心部分为FPS200传感芯片,该芯片是一种触摸式C
10、MOS传感器件,其传感区域为1.28cm×1.50cm,500dpi分辨率,内置有8位ADC,且有微处理器总线、SPI总线三种接口模式。其通过改变电容阵列的参数值可在一秒钟内扫描多副指纹图像便自动选择最好的一幅。本指纹防盗系统采用了传感器的USB模式传感器的数据线直接与STR912x芯片扩展口相接,对FPS200图像传感器进行初始化控制和图像读取。指纹传感电路如图3所示。图3 指纹传感电路指纹采集电路的原理图如图4所示,其工作原理为:PXA255处理器通过I2C总线设置FPS200的寄存器,系统开GPIO72(VSYNC的中断使能并检测中断,当GPIO72(V SYNC 中断到来以后
11、,打开GPIO73(HREF中断使能,关闭其它的中断使能。当GPIO73(HREF中断到来以后, 打开GPIO74(PCLK中断使能, 关闭其它中断。每当GPIO74(PCLK中断到来, 就将GPI2Obuffer 里的GPIO64GPIO71数据采集出来, 保存到imgbuf数组中去。重复这一步一直到采满382×240 次为止。将imgbuf按照每隔320 个元素就舍弃62个元素进行处理,这样得到的数据就是320×240 大小的灰度指纹图像。图4 指纹采集电路原理图3、数据处理模块数据处理模块主要完成指纹识别的整个处理过程,包括指纹图像软化、方向图提取、图像增强、二值化、
12、图像滤波、图像细化等。该模块采用了TMS320VC5402,使用FLASH和SDRAM分别作ARM处理器的程序存储器。TMS320VC5402是16位定点DSP,采用改进的哈佛结构适应远程通信等实时嵌入式的需要。为了提高速度,本文对一些核心的算法进行了优化。4、全局逻辑控制单元系统中大多数外围器件与DSP 的握手信号都是通过可编程逻辑器件来完成的,CPLD电路设计按其所实现的功能可分为DSP寻址空间和芯片读写信号两个模块,其中DSP寻址空间模块根据DSP输出的控制信号和数据空间选择信号分时寻址SRAM和FLASH两个存储体。四、系统软件设计指纹识别系统的主程序流程图如图5所示。目标板上电后对整
13、个识别系统进行初始化操作,包括DSP系统的初始化和目标板上外设的初始化,对他们进行参数设置。初始化完成后开始检测指纹传感器上是否有手指,如果有则进行指纹图像的识别识别完成后就对着枚指纹图像进行预处理工作,在预处理的前端,对识别进来的这枚指纹进行质量评估,以判断是否需要继续进行指纹图像的预处理工作,若指纹质量比较好则继续进行预处理和数据上传;如果图像的质量很差,则作废这枚指纹数据。指纹图像的识别是在中断程序中开始的,当指纹传感器上没有手指时,系统将进入省电模式,通过指纹传感器FPS200的手指自动检测中断来唤醒系统,并进行一次指纹图像识别、预处理和数据上传。指纹登记个数3000枚。图5 软件流程
14、图系统设计完成后,可脱机值守工作。122×32点阵LCD实时显示时钟、操作状态,并具有15键操作键盘,可独立完成建档及查询功能。系统核查指纹1:N与1:1两种方式兼容,提供RS232/R485、RJ45接口支持局域网连接。五、结论及心得体会本次设计主要介绍了基于ARM的指纹识别门禁系统的软硬件设计。ARM体系结构有丰富的接口, 在门禁、监控等领域正发挥越来越重要的作用, 面向可集成, 可扩展, 可移植的特定嵌入式系统越来越多的出现在工程领域。随着性价比的提高和软件开发的成熟,ARM 在嵌入式领域的应用会越来越广泛。本文从指纹识别的可靠性及速度上考虑, 在门禁系统中以ARM 微处理器做
15、控制器,充分利用了其高速的运算处理能力。通过此次课程设计,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习嵌入式更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。附:程序代码:fps200.h#ifndef _FPS200_H_#define _FPS200_H_#define ROW_NUM 300#define COL_NUM 256#define FPS200_IOCRESET _IO(FPS200_IOC_MAGIC#define FPS_RAH 0x00#define FPS_RAL 0x01#define
16、 FPS_CAL 0x02#define FPS_REH 0x03#define FPS_REL 0x04#define FPS_CEL 0x05#define FPS_DTR 0x06#define FPS_DTR_TIME 0x70#define FPS_DCR 0x07#define FPS_DCR_CURRENT 0x6#define FPS_CTRLA 0x08#define FPS_CTRL_ASM_ARCH_EP7211_HA_GETSUB 0x04#define FPS_CTRLA_GETIMG 0x02#define FPS_CTRLA_GETROW 0x01#define
17、FPS_CTRLA_AINSEL 0x08#define FPS_CTRLB 0x09#define FPS_CTRLB_MODE 0xC0#define FPS_CTRLB_RDY 0x20#define FPS_CTRLB_AFDEN 0x08#define FPS_CTRLB_AUTOINCEN 0x04#define FPS_CTRLB_XTALSEL 0x02#define FPS_CTRLB_ENABLE 0x01#define FPS_CTRLC 0x0A#define FPS_SRA_ASM_ARCH_EP7211_H 0x0B#define FPS_SRA_GETSUB 0x
18、04#define FPS_SRA_GETIMG 0x02#define FPS_SRA_GETROW 0x01#define FPS_PGC 0x0C#define FPS_PGC_VALUE 0x4/0xb#define FPS_ICR 0x0D#define FPS_ICR_IP1_RISE 0x80#define FPS_ICR_IP0_RISE 0x40#define FPS_ICR_IT1_LEVEL 0x20#define FPS_ICR_IT0_LEVEL 0x10#define FPS_ICR_IM1 0x08#define FPS_ICR_IM0 0x04#define F
19、PS_ICR_IE1 0x02#define FPS_ICR_IE0 0x01#define FPS_ISR 0x0E#define FPS_ISR_CLRINT 0x01#define FPS_THR 0x0F#define FPS_THR_THV 0x40#define FPS_THR_THC 0x09#define FPS_CIDH 0x10#define FPS_CIDL 0x11#define FPS_TST 0x12#include #undef PDEBUG#ifdef fps200_DEBUG# ifdef _KERNEL_/* 调试的内核空间*/# define PDEBUG
20、(fmt, args. printk( KERN_DEBUG"fps200: " fmt, # args# else/* 用户空间 */# define PDEBUG(fmt, args. fprintf(stderr, fmt, #args# endif#else# define PDEBUG(fmt, args.
21、; /* 不调试*/#endif#undef PDEBUGG#define PDEBUGG(fmt, args.
22、0; /*不调试*/* 设备结构类型 */typedef struct FPS200_Dev unsigned char flag; void *data; FPS200_Dev; &
23、#160; /* 用于 ioctl */#define FPS200_IOC_MAGIC 'k'/* S代表 "Set
24、" through a ptr* G代表 "Get": reply by setting through a pointer* C代表 "Check"*/#define FPS200_IOCSDTR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 1, 1#define FPS200_IOCSDCR _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 2, 1#define FPS200_IOCSPGC _IOC(_IOC_WRITE, FPS200_IOC_MAGIC, 3, 1
25、#define FPS200_IOCGDTR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 4, 1#define FPS200_IOCGDCR _IOC(_IOC_READ, FPS200_IOC_MAGIC, 5, 1#define FPS200_IOCGPGC _IOC(_IOC_READ, FPS200_IOC_MAGIC, 6, 1#define FPS200_IOCFCAP _IOC(_IOC_READ, FPS200_IOC_MAGIC,7, 4#define FPS200_IOCGDATA _IOC(_IOC_READ, FPS200_IOC_MAGIC,
26、 8, 4#define FPS200_IOCEINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 9, 0#define FPS200_IOCDINT _IOC(_IOC_NONE, FPS200_IOC_MAGIC, 10, 0#define FPS200_IOCCINT _IOC(_IOC_READ, FPS200_IOC_MAGIC, 11, 1#define FPS200_IOCCRDY _IOC(_IOC_READ, FPS200_IOC_MAGIC, 12, 1#define FPS200_IOCCLR _IOC(_IOC_NONE, FPS200_IOC
27、_MAGIC, 13, 0#define FPS200_IOC_MAXNR 13int fps200_open(struct inode *inode, struct file *filp;int fps200_release(struct inode *inode, struct file *filp;int fps200_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg;void fps_get_image(;#end
28、if /* _FPS200_H_ */fps200.c#ifndef _KERNEL_# define _KERNEL_#endif#ifndef MODULE# define MODULE#endif#include #include #include /* printk( */ #include
29、0; /* kmalloc( */ #include /*
30、 everything. */ #include /* error codes */ #include &
31、#160; /* size_t */ #include #include /* udelay( */ #include
32、; /* ioremap(, iounmap( */ #include #include #include #include #include #include "fps200.h" &
33、#160; /* local definitions */#define FPS200_VR 0xfd000000#define FPS_INDEX (*(volatile unsigned char *FPS200_VR#define FPS_DATA (*(volatile unsigned char *(FPS200_VR+1#define FPS200_MAJOR 240#define FPS200_NR_DEVS 0#define FPS200_IRQ IRQ_EINT2
34、60; / irq = 6#define FPS200_DATASIZE 76800int fps200_major = FPS200_MAJOR;int fps200_nr_devs = FPS200_NR_DEVS;
35、0; /* number of bare fps200 devices (no use here */MODULE_PARM(fps200_major,"i"MODULE_PARM(fps200_nr_devs,"i"MODULE_AUTHOR("Nankai Unversity 5-304"MODULE_LICENSE("GPL"struct fi
36、le_operations fps200_fops = open: fps200_open, ioctl: fps200_ioctl, release: fps200_release;struct file_operations *fps200_fop_array= &fps200_fops,
37、160; /* type 0 */ &
38、#160; /* add more later */;#define FPS200_MAX_TYPE 0FPS200_Dev *fps200_d
39、evice;void fps200_interrupt(int irq, void *dev_id, struct pt_regs *regs disable_irq(irq;/fps_get_image(; fps200_device->flag = 1;void fps_get_image(void int i = 0; int j = 0; FPS_INDEX = FPS_CTRLA; FPS_DATA = FPS_CTRLA_GETIMG; for(i=0; i<300; i+
40、FPS_INDEX = FPS_CTRLB; while(!(FPS_CTRLB_RDY&FPS_DATAudelay(1; for(j=0; j<256; j+ FPS_INDEX = FPS_CTRLB; while(!(FPS_CTRLB_RDY&FPS_DATAudelay(1; FPS_INDEX = FPS_CTRLA; *(unsigned char *(fps200_devic
41、e->data+i*256+j=FPS_DATA; int fps200_open(struct inode *inode, struct file *filp MOD_INC_USE_COUNT; return(0;int fps200_release(struct inode *inode, struct file *filp MOD_DEC_USE_COUNT; return(0;int fps200_ioctl(struct inode *inode, struct file *filp,unsigned
42、int cmd, unsigned long arg int err = 0; int ret = 0; unsigned char tmp; if(_IOC_TYPE(cmd != FPS200_IOC_MAGIC return -ENOTTY; if(_IOC_NR(cmd > FPS200_IOC_MAXNR return -ENOTTY; if (_IOC_DIR(cmd & _IOC_READ err = verify_area(VERIFY_WRITE, (void *arg,&
43、#160;_IOC_SIZE(cmd; else if (_IOC_DIR(cmd & _IOC_WRITE err = verify_area(VERIFY_READ, (void *arg, _IOC_SIZE(cmd; if (err return err; switch(cmd case FPS200_IOCSDTR: ret = _get_user(tmp, (unsigned char *arg; if(tmp > 0x7f
44、0;tmp = 0x7f; FPS_INDEX = FPS_DTR; FPS_DATA = tmp; break; case FPS200_IOCSDCR: ret = _get_user(tmp, (unsigned char *arg; if(tmp > 0x1f tmp = 0x1f; FPS_INDEX = FPS_DCR; FPS_DATA = tmp; break;
45、60;case FPS200_IOCSPGC: ret = _get_user(tmp, (unsigned char *arg; if(tmp > 0x0f tmp = 0x0f; FPS_INDEX = FPS_PGC; FPS_DATA = tmp; break; case FPS200_IOCGDTR: FPS_INDEX = FPS_DTR; tmp = FPS_DATA;
46、;ret = _put_user(tmp, (unsigned char *arg; break; case FPS200_IOCGDCR: FPS_INDEX = FPS_DCR; tmp = FPS_DATA; ret = _put_user(tmp, (unsigned char *arg; break; case FPS200_IOCGPGC: FPS_INDEX = FPS_PGC; tmp = FPS_DATA
47、; ret = _put_user(tmp, (unsigned char *arg; break; case FPS200_IOCEINT: enable_irq(FPS200_IRQ; break; case FPS200_IOCDINT: disable_irq(FPS200_IRQ; break; case FPS200_IOCFCAP: fps_get_image(; case FPS200_
48、IOCGDATA: copy_to_user(void *arg, fps200_device->data, FPS200_DATASIZE; ret = 0; fps200_device->flag = 0; break; case FPS200_IOCCLR: memset(fps200_device->data, 0, FPS200_DATASIZE; fps200_device->flag = 0;&
49、#160; break; case FPS200_IOCCINT: if(clps_readw(INTSR1&0x40 = 0 udelay(100; if(clps_readw(INTSR1&0x40 = 0 ret = _put_user(0x01, (unsigned char *arg; else ret = _put_user(0x0, (unsigned char *arg;
50、60; else ret = _put_user(0x0, (unsigned char *arg; break; case FPS200_IOCCRDY: ret = _put_user(fps200_device->flag, (unsigned char *arg; break; default: return -ENOTTY; return ret;static int _init fps200_init_mo
51、dule(void int result; char tmp; if(result = check_region (FPS200_VR,2 printk ("<1> can't get I/O port address n" return (result; if (!request_region (FPS200_VR,2,"fps200" return -EBUSY; SET_MODULE_OWNER(&fps200_fop
52、s; result = register_chrdev(fps200_major, "fps200",&fps200_fops; if(result < 0 printk("<1>fps200: can't get major %dn",fps200_major; return result; if(fps200_major = 0 fps200_major = result; &
53、#160; /* dynamic */* read chip id first, if not equal 0x20xx, print error*/ FPS_INDEX = FPS_CIDH; tmp = FPS_DATA; if(tmp != 0x20 printk("<1>wrong chip ID, insmod fail.n"
54、; return -EIO; /* row auto inc. inner 12MHz vibrator. no low-power state*/ FPS_INDEX = FPS_CTRLB; FPS_DATA = (FPS_CTRLB_AFDEN|FPS_CTRLB_AUTOINCEN|FPS_CTRLB_ENABLE; /*
55、 等待30us */ udelay(35; / 使时延大于 30us
56、60; /* 中断 */ FPS_INDEX = FPS_ICR; FPS_DATA = (FPS_ICR_IE0|FPS_ICR_IT0_LEVEL; FPS_INDEX = FPS_THR; FPS_DATA = ( FPS_THR_THV | FPS_THR_THC ;
57、0; /* DTR, DCR, PGC */ FPS_INDEX = FPS_DTR; FPS_DATA = 0x23; FPS_INDEX = FPS_DCR; FPS_DATA = 0x1; FPS_INDEX = FPS_PGC; FPS_DATA = 0;
58、 /* other initial */ FPS_INDEX = FPS_RAL;
59、160; / raw 地址 FPS_DATA = 0; FPS_INDEX = FPS_RAH; FPS_DATA = 0; FPS_INDEX = FPS_REL; FPS_DATA = 0; FPS_INDEX = FPS_REH; FPS_DATA = 0; FPS_INDEX = FPS_CAL;
60、; / column 地址 FPS_DATA = 0; FPS_INDEX = FPS_CEL; FPS_DATA = 0; FPS_INDEX = FPS_CTR
61、LC; FPS_DATA = 0; FPS_INDEX = FPS_CTRLA; FPS_DATA = 0;/ clear FPS_CTRLA_AINSEL /* 设置 irq */ if(result printk("<
62、1>can't get assigned irq.n" return -EIO; fps200_device = kmalloc(sizeof(FPS200_Dev, GFP_KERNEL; if(!fps200_device FPS_INDEX = FPS_CTRLB; FPS_DATA = 0; return -ENOMEM; memset(fps200_device, 0, sizeof(FPS200_Dev; fps200_device->data = kmalloc(FPS200_DATASIZE, GFP_KERNEL; if(!fps200_device FPS_INDEX = FPS_CTRLB; FPS_DATA = 0; kfree(fps200_device; return -ENOMEM; memset(fps200_device->data, 0, FPS200_DATASIZE;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第四章液体洗涤剂28课件
- 第三节组合体本节主要内容17课件
- 废旧电池危害教学课件
- 口腔科消毒隔离管理课件
- 口腔礼仪知识培训课件
- 小学生种植豆芽课件
- 2025年小学语文课程标准考试测试卷及参考答案
- 建筑农民工权益保障2025年行业规范与新型用工模式创新策略
- 2025年教育质量评估与认证体系教育质量评价体系应用研究报告
- 2025年公共卫生应急资金申请项目执行监控报告
- 充电桩项目实施过程中的质量保证措施
- 《实验室应急预案》专题培训
- 技术、售后服务计划及质量保障措施
- 保山隆阳区小升初数学试卷
- 工程消防资料承包合同范本
- 急性肾功能不全护理查房
- 《水利水电工程可行性研究报告编制规程》
- 2024版住建部二手房买卖合同范本
- 仪表工线路培训
- 2024年初升高数学衔接教材讲义
- 农行反洗钱培训
评论
0/150
提交评论