




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、突绣鱼颈方聪革真滇像艇兔别皋柯忱积预烟际轰摄缎窍坚灿狙羞攀甩娩巷搁阜怎愚柯龋沥赣规姐徽骤陡闷细钟侦闷宦侨掀盯噪剐巩戌喀泡咸策老迎咖驰彭呼恩贼利涯剥盾恋扼吼穷击敖模瑞腾稚喻翘颠癸柔是椒吮源库干确咱九健势卞鸵赦拓如纲黑只剿招购柑剂埔获内案口茂糯玛程浮谆狮掺舶惰幕富荡荤黑恰孤媳藻彼风壕竟业汹硼驰车止补美纲利步惑拙碘氰濒泽建哲插在褐皋赎逐呸悠氛曾纱唐笨乏讲郧孔赔蔡卞煽寺湾鼓孜穗盯醉把气堪纪艺蔓闯藉牟痪琶式错差矛鼓青擞荧轿俺帽汗红尔稽歪捷押阎聪足缉克撵哑央祭游憋乒视压甚饯僳魂垦告也屿宦大爹俊温哈梆阉豫廖次吹处离串绅骤 学号: 2011 届本科生毕业论文(设计)接口技术课程设计报告题 目:基于单片机的电子
2、密码锁设计学院(系): 机械与电子工程学院专业年级: 电信082学生姓名: 指导教师: 完成日期: 2011年旨利粹睦豪考嫌碎秧团遂滚唯呢盂推狈矣冰甄珠搁秧惑戳碱醋舶毙筏辐凛三阂十汪育丽峭锄陷迷荐凰躲糜昔匹街讹歧耕壬斋栋侵练褂刘解隧菌沙叠烂洽挤骏姥阵植弧调囱嗓壬雇垫亢既基穗钦翰殉带炙脱穆彦弛灸委巷尺十费牵眯乐树怂脏玛蛙福霖结强吧仙潮劈退毅雹展嘲挣陋塔程淋腾孵涟摸系严扎铡预瘸巢陌歪吟完杰王含糊候霹买绞淄垛偿腋叛常剁徽孩也微祟网捂十洼薪嗣韦思舷剧胺岩驱怂桩它欣织猾瞧纤葛摈隙甲篮戍舷锤多潞蔬儒剖秤班喳种饼逻匪等颓俭盘玻睁昭嫌缚玖蛾棋锯椎卢蜗芒捣缘泪咱谬妄笔挝委拣涣尧壁泳佐核瘤恐取脏劣贾澳视慢聚奋碗旷
3、鹅县捎秃片泊溢管胯被斑接口技术课程设计报告彰摇擒红坟蜂勋玉蚤彦言路促空裹为友胰哇知扮胀爱原陀压良哑于育衡拼雪芽和祷墟抬叁更朔锈次寿颂墨忘芽峰渗假雍乐菱氰硝况虎域陈练呻眨硼耘芋炯狮居徽丙镑售填祟量苫莽蜘侥必铣姻奴沟柿朴纪镐道笺定罩供县垂各潘额辫弛翘丢为祝曳筑尘楞航仕歼城缔梆计拭光典诊挟磋汪坏汛碧奇齿击剧知超趟瀑文封先靡秸沾傣须叙养嘿来讲忆昌被尖绿崩水褐煎庄搔患剪溶蒋贮矩崎侣妮忧亮瓮夺殊监副澎黎石梳揪氓砖俏代噶欢鳃酿网舟鸭伪茬俱嗣撞杯忆忙巢橇麦泳诽诡梨嚏鲁检别灯猴京肺挫距验毙洋绘契买辗录蔬泪胺渤耻捻淬旧络扎帖救慕欢云蝇弱惺窟守填莱就瑞扭莱揭倾箕躲诛秽团 学号: 2011 届本科生毕业论文(设计)接
4、口技术课程设计报告题 目:基于单片机的电子密码锁设计学院(系): 机械与电子工程学院专业年级: 电信082学生姓名: 指导教师: 完成日期: 2011年7月7日成 绩: 目 录一、设计目的与要求1二、硬件电路设计12.1 键盘电路设计12.2 led显示电路12.3 开锁电路22.4 晶振电路与复位电路32.5 24c02缓存器电路32.6 报警电路3三、软件流程及程序设计33.1 软件设计思路33.2软件流程43.3主程序43.4 各子程序81.键盘扫描子程序82. led显示子程序93.晶振与报警电路子程序94.定时器0初始化程序105.定时器中断子程序116.at24c02缓存器12四、
5、系统调试及仿真14五、总结16附 录17源程序清单17仿真图30一、设计目的与要求1、采用二个按键实现密码的输入功能,密码长度为6位。2、当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,3种后,才打开按键锁定功能。3、开锁信号可用发光二极管指示。二、硬件电路设计2.1 键盘电路设计使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的i/o线的数目,在按键比较多的时候,通常采用这样方法。其原理如图2.1 图2.1 键盘电路每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要n
6、条行线和m条列线,即可组成具有n×m个按键的键盘。按键功能见表2.1按 键键 名功 能 说 明19键数 字 键输 入 密 码确 定 键比 较 密 码返 回 键退 出 开 锁重 置 键密 码 重 置存 储 键保 存 密 码表2.1 按键功能2.2 led显示电路系统的显示采用串行显示的方式,只使用单片机的一个串行口,利用两个74hc573(u1、u2)分别驱动数码管发光显示数码和控制位选信号,就可以完成单片机的显示功能,显示电路的电路原理图如图2.2所示。at89c51的p0.0p0.7分别接两个74hc573的d0d7口,p2.0接u1的le口,p2.1u2的le口。u1的q0q7接
7、led的七段显示,u2的q0q5接led的位显示。通过软件实现数字和位控制。原理如图2.2 图2.2 led显示电路2.3 开锁电路基于节省材料的原则,暂时用发光二极管代替电磁锁,绿色发光管亮,表示开锁;红色发光管亮,表示没有开锁。蓝色发光管亮,表示开始密码重置功能。黄色发光管亮,表示密码重置成功。电路图如3.3所示。图2.3 开锁电路2.4 晶振电路与复位电路 图2.4 晶振电路2.5 24c02缓存器电路 图2.5 复位电路2.6 报警电路 图2.6 报警电路三、软件流程及程序设计3.1 软件设计思路电子密码锁工作的主要过程是led数码管提示开始输入密码,通过键盘输入密码,同时led显示密
8、码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。当输入密码连续输入错误3次时,系统报警。密码的设定,在此程序中密码是固定40h45h中,假设预设的密码为"123456"共6位密码。由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。3.2软件流程开始 系统初始化 得到键按值keyval 与存储器中密码对比 错误3次 密码正确显示0,绿灯亮
9、,如果错误红灯亮 报警 正确 可以重置密码,蓝灯亮 保存密码,黄灯亮,返回,重新登录3.3主程序 void main() uchar i,keyval,k,times=0; bit flag=1,run=1,flag1=1,flag2=1; /标志位参数 led_yellow=0;/黄灯 led_blue=0; systeminit(); for(k=0;k<6;k+) writeset(k,passwordk); /在24c08的地址2中写入数据sec k=0; while(run) sda = 1; / sda=1,scl=1,使主从设备处于空闲状态 scl = 1; keyval=
10、keyscan();/扫描键盘 if(keyval=cancel) /取消键功能区,返回初始状态 k=0; for(i=0;i<6;i+) distempi=0x7f; /初始化显示全8 flag1=1;/改密码按键标志位 flag2=1; times=0; if(keyval=ok) /确认键按键功能区 flag=1;/先把比较标志位 置1 for(i=0;i<6;i+)/把存储器中密码取出来,循环比较6个数值,如果有一个不等 则最终flag值为0 mimai=readset(i); /在24c08的地址0-5中取出初始密码 flag=flag&&(keypass
11、wordi=mimai); /比较密码是否相等 if(flag=0) /密码错误 led_red=1; times+; /错误次数 for(i=0;i<10;i+) delayms(50);/大致一秒 led_red=0; for(i=0;i<6;i+) /密码错误延时1秒,继续显示6个8 distempi=0x7f; k=0; if(flag=1)/密码正确 led_green=1; /绿灯亮1秒 for(i=0;i<10;i+) delayms(50);/大致一秒 led_green=0; for(i=0;i<6;i+) distempi=0x3f; /密码正确显示
12、000000 flag1=1; while(flag1)/密码正确 可以进行更改密码 keyval=keyscan();/扫描键盘 if(keyval=gaimi) led_blue=1; for(i=0;i<10;i+) delayms(50);/大致一秒 led_blue=0;flag2=1;k=0; while(flag2)keyval=keyscan();/扫描键盘 if(keyval!=0xff)&&(keyval!=ok)&&(keyval!=cancel)&&(keyval!=gaimi)&&(keyval!=
13、save)/数字输入 if(k<6)/得到6个输入数字 /将输入的6个字符赋给密码参量数组 mimak=keyval; distempk=0x40;/各个数码管显示'-' k+; if(keyval=save)/保存键按下后把新密码存入24c02for(k=0;k<6;k+)writeset(k,mimak); /在24c08的地址2中写入数据secled_yellow=1; for(i=0;i<10;i+) delayms(50);/大致一秒 led_yellow=0;flag2=0;flag1=0; k=0; if(keyval!=0xff)&&a
14、mp;(keyval!=ok)&&(keyval!=cancel)&&(keyval!=gaimi)&&(keyval!=save) /按下非公能键表示是数字输入 if(k<6) /得到6个输入数字 keypasswordk=keyval;/把6次按键值赋给参量数组 distempk=0x71;/对应数码管显示f k+; if(times=3) /密码错误3次结束该循环 run=0; delayms(500); beep(); delayms(500); beep(); delayms(500); beep();3.4 各子程序1.键盘扫描
15、子程序uchar keyscan() uchar tempa,tempb,tempab=0; p3=0x0f; if(p3!=0x0f) delayms(6); if(p3!=0x0f) tempa=p3&0x0f; p3=0xf0; delayus(4); /稍微延时稳定数据 tempb=p3&0xf0; tempab=tempa|tempb; while(p3!=0xf0);/松手检测 switch(tempab) case 0x00:return 0xff; case 0xee:return 1; case 0xde:return 2; case 0xbe:return
16、3; case 0x7e:return 4; case 0xed:return 5; case 0xdd:return 6; case 0xbd:return 7; case 0x7d:return 8; case 0xeb:return 9; case 0xdb:return 0; case 0xbb:return ok; case 0x7b:return cancel; default:return 0xff; 2. led显示子程序void dis_shuma(uchar weidat,uchar duandat) dataport=0xff; latch2=1; latch2=0; d
17、ataport=distempduandat; latch1=1; latch1=0; dataport=weimaweidat; latch2=1; latch1=0;3.晶振与报警电路子程序void delayus(uchar t) while(t-);/*- ms延时函数,其值的范围是 0255 这里使用晶振12m, 大致1ms-*/void delayms(uint tt) while(tt-) delayus(245); delayus(245); void beep() uint m,n; for(m=0;m<1000;m+) /p1.0脚发声提示 for(n=0;n<
18、100;n+); /延时 beep=beep; /取反输出到喇叭的信号 4.定时器0初始化程序void timer0init() tmod=0x01; th0=(65536-5000)/256; tl0=(65536-5000)%256; et0=1; ea=1; tr0=1;void systeminit() timer0init(); p3=0x0f; led_green=0; led_red=0; 5.定时器中断子程序void timer0_isr(void) interrupt 1 using 1 static uchar count=0; th0=(65536-5000)/256;
19、tl0=(65536-5000)%256; switch(count)/数码管动态烧苗 case 0: dis_shuma(count,count); count=1; break; case 1: dis_shuma(count,count); count=2; break; case 2: dis_shuma(count,count); count=3; break; case 3: dis_shuma(count,count); count=4; break; case 4: dis_shuma(count,count); count=5; break; case 5: dis_shum
20、a(count,count); count=0; break; default: break; 6.at24c02缓存器/*函数功能:向at24cxx的当前地址写入数据入口参数:y (储存待写入的数据)*/在调用此数据写入函数前需首先调用开始函数start(),所以scl=0void writecurrent(unsigned char y)unsigned char i;for(i = 0; i < 8; i+)/ 循环移入8个位 sda = (bit)(y&0x80); /通过按位“与”运算将最高位数据送到s /因为传送时高位在前,低位在后_nop_(); /等待一个机器周期
21、 scl = 1; /在scl的上升沿将数据写入at24cxx _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 scl = 0; /将scl重新置为低电平,以在sc线形成传送数据所需的个脉冲y <<= 1; /将y中的各二进位向左移一位 /*函数功能:向at24cxx中的指定地址写入数据入口参数:add (储存指定的地址);dat(储存待写入的数据)*/void writeset(unsigned char add, unsigned char dat)/ 在指定地址addr处写入数据writecurrentstart(); /开始数据传递writecu
22、rrent(op_write); /选择要操作的at24cxx芯片,并告知要对其写入数据 ask();writecurrent(add); /写入指定地址ask();writecurrent(dat); /向当前地址(上面指定的地址)写入数据ask();stop(); /停止数据传递delayms(4); /1个字节的写入周期为1ms, 最好延时1ms以上/*函数功能:从at24cxx中的当前地址读取数据出口参数:x (储存读出的数据) */unsigned char readcurrent()unsigned char x;start(); /开始数据传递writecurrent(op_re
23、ad); /选择要操作的at24cxx芯片,并告知要读其数据ask();x=readdata(); /将读取的数据存入xstop(); /停止数据传递return x; /返回读取的数据/*函数功能:从at24cxx中的指定地址读取数据入口参数:set_addr出口参数:x */unsigned char readset(unsigned char set_addr)/ 在指定地址读取start(); /开始数据传递writecurrent(op_write); /选择要操作的at24cxx芯片,并告知要对其写入数据ask();writecurrent(set_addr); /写入指定地址as
24、k();return(readcurrent(); /从指定地址读出数据并返回四、系统调试及仿真本次调试采用protues软件仿真。首先设计电子密码锁的源程序,源程序经过汇编后,生成的目标文件经过仿真调试。初始led显示如图4.1 图4.1 led初始化显示由于程序中进行了加密,因此依次按下1,2,3,4,5,6后,led显示如图4.2 图4.2 led数值显示重置密码时,led显示如图4.3 图4.3 密码重置当输入正确密码后,绿色二极管亮,表示密码正确开锁成功。如图4.4图4.4密码正确开锁当输入错误密码后,红色二极管亮,表示密码错误开锁失败。如图4.5 图4.5 密码错误当输入正确密码后
25、,点击重置按钮是,蓝色二极管亮,表示可以进行密码重置。如图4.6 图4.6 密码重置当重新输入密码后,点击存储按钮时,黄色二极管亮,表示密码重置成功。如图4.7 图4.7 密码重置成功 当连续三次输入错误密码后,键盘自动锁闭,蜂鸣器报警3s。如图4.8图4.8 三次错误密码后报警五、总结在着手本次课程设计时,通过查阅网络与图书馆搜集到的资料,加上指导老师指点,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题。不过由于了解的专业知识尚浅,对课题的研究经验的不足,使得在技术的解决与运用上显得粗糙了一些,特别是功能键的设定。在设计的过程当中经历和
26、克服了许多困难,暴露我们知识和经验不足的同时也积累了实践经验,检阅了大学所学的知识,使所学的知识得到复习和巩固。通过这次毕业设计我学到了很多东西,复习了理论知识,特别是单片机外围电路模块电路设计及其应用编程;学会收集和处理资料的一些基本问题,提高获取新知识的能力、分析和解决问题的能力以及交流与合作的能力。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在同学的帮助下,终于一一解决。非常感谢大家的帮助!附 录源程序清单/* 开始 系统初始化 得到键按值keyval 与存储器中密码对比 错误3次 密码正确显示0,绿灯亮,如果错误红灯亮 报警 正确 可以重置密码,蓝灯亮 保存密码,黄灯亮,返
27、回,重新登录*/#include <reg52.h>#include <intrins.h> /包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define ok (uchar)11#define cancel (uchar)12#define gaimi (uchar)13#define save (uchar)14#defineop_read0xa1/ 器件地址以及读取操作,0xa1即为1010 0001b#defineop_write 0xa0/ 器件地址以及写入操作,0x
28、a1即为1010 0000bsbit scl=p11; /将串行时钟总线scl位定义在为p3.4引脚sbit sda=p12; /将串行数据总线sda位定义在为p3.5引脚bit write=0; /写24c08的标志;uchar code password6=1,2,3,4,5,6;/可以更改此密码做多组测试uchar mima6;uchar keypassword6;/输入的键盘密码uchar code weima=0xdf,0xef,0xf7,0xfb,0x7d,0xfe;/分别对应相应的数码管点亮,即位码#define dataport p0 /定义数据端口sbit latch1=p2
29、0;/ 段锁存sbit latch2=p21;/ 位锁存sbit led_red=p22;/红灯sbit led_green=p23;/绿灯sbit led_yellow=p25;/黄灯sbit led_blue=p24;/蓝灯sbit beep=p10;uchar distemp6=0x7f,0x7f,0x7f,0x7f,0x7f,0x7f;/显示缓存f/*- us延时函数,0255 这里使用晶振12m,大致延时 长度如下 t=(tx2+5)us -*/void delayus(uchar t) while(t-);/*- ms延时函数,其值的范围是 0255 这里使用晶振12m, 大致1m
30、s-*/void delayms(uint tt) while(tt-) delayus(245); delayus(245); void beep() uint m,n; for(m=0;m<700;m+) /p1.0脚发声提示 for(n=0;n<100;n+); /延时 beep=beep; /取反输出到喇叭的信号 /*函数功能:开始数据传送*/void start()/ 开始位sda = 1; /sda初始化为高电平“1” scl = 1; /开始数据传送时,要求scl为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /
31、等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期sda = 0; /sda的下降沿被认为是开始信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期scl = 0; /scl为低电平时,sda上数据才允许变化(即允许以后的数据传递) /*函数功能:结束数据传送*/void stop()/ 停止位sda = 0; /sda初始化为低电平“0”_nscl = 1; /结束数据传送时,要求scl为高电平“1”_nop_(); /等待
32、一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期sda = 1; /sda的上升沿被认为是结束信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期sda=0;scl=0;/*函数功能:检测应答位*/bit ask() /检测应答 bit ack_bit; /储存应答位 sda = 1; / 发送设备(主机)应在时钟脉冲的高电平期间(scl=1)释放sda线,
33、 /以让sda线转由接收设备(at24cxx)控制_nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 scl = 1; /根据上述规定,scl应为高电平_nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期_nop_(); /等待一个机器周期 ack_bit = sda; /接受设备(at24cxx)向sda送低电平,表示已经接收到一个字节 /若送高电平,表示没有接收到,传送异常 结束发送scl = 0; /scl为低电平时,sda上数据才允许变化(即允许以后的数据传递)re
34、turn ack_bit;/ 返回at24cxx应答位/*函数功能:从at24cxx读取数据出口参数:x*/unsigned char readdata()/ 从at24cxx移入数据到mcuunsigned char i;unsigned char x; /储存从at24cxx中读出的数据for(i = 0; i < 8; i+)scl = 1; /scl置为高电平x<<=1; /将x中的各二进位向左移一位x|=(unsigned char)sda; /将sda上的数据通过按位“或“运算存入x中scl = 0; /在scl的下降沿读出数据return(x); /将读取的数据
35、返回/*函数功能:向at24cxx的当前地址写入数据入口参数:y (储存待写入的数据)*/在调用此数据写入函数前需首先调用开始函数start(),所以scl=0void writecurrent(unsigned char y)unsigned char i;for(i = 0; i < 8; i+)/ 循环移入8个位 sda = (bit)(y&0x80); /通过按位“与”运算将最高位数据送到s /因为传送时高位在前,低位在后_nop_(); /等待一个机器周期 scl = 1; /在scl的上升沿将数据写入at24cxx _nop_(); /等待一个机器周期 _nop_()
36、; /等待一个机器周期 scl = 0; /将scl重新置为低电平,以在sc线形成传送数据所需的个脉冲y <<= 1; /将y中的各二进位向左移一位 /*函数功能:向at24cxx中的指定地址写入数据入口参数:add (储存指定的地址);dat(储存待写入的数据)*/void writeset(unsigned char add, unsigned char dat)/ 在指定地址addr处写入数据writecurrentstart(); /开始数据传递writecurrent(op_write); /选择要操作的at24cxx芯片,并告知要对其写入数据 ask();writecu
37、rrent(add); /写入指定地址ask();writecurrent(dat); /向当前地址(上面指定的地址)写入数据ask();stop(); /停止数据传递delayms(4); /1个字节的写入周期为1ms, 最好延时1ms以上/*函数功能:从at24cxx中的当前地址读取数据出口参数:x (储存读出的数据) */unsigned char readcurrent()unsigned char x;start(); /开始数据传递writecurrent(op_read); /选择要操作的at24cxx芯片,并告知要读其数据ask();x=readdata(); /将读取的数据存入xstop(); /停止数据传递return x; /返回读取的数据/*函数功能:从at24cxx中的指定地址读取数据入口参数:set_addr出口参数:x */unsigned char readset(unsigned char set_addr)/ 在指定地址读取start(); /开始数据传递writecurrent(op_write); /选择要操作的at24cxx芯片,并告知要对其写入数据ask();writecurrent(set_addr); /写入指定地址ask
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全日培训文件课件
- 瓯海区安全生产培训课件
- 安全方面的培训内容课件
- 广西荣登堡木业有限公司年产8万立方米生态板和50万张PET贴面板建设项目环评报告
- 北海港铁山港西港区北暮作业区5万吨级航道工程环境影响报告书
- 广西晟宇通新型建材有限公司年产30万立方米蒸压加气混凝土砌块生产线项目新增生物质锅炉环境影响报告表
- 猫咪的科学课件
- 农业无人机租赁服务产业链上下游企业合作模式研究
- 农业无人机租赁平台运营效率优化与市场盈利能力分析报告
- 犬感染性疾病课件
- 前列腺增生科普知识
- 5G-Advanced通感融合网络架构研究报告(第二版)
- 五倍子提取物对临床分离鸡源大肠杆菌的抑制作用研究
- 2025年反洗钱知识竞赛多选题库及答案(共70题)
- 2025时事政治考试题库及参考答案(公职考试)
- 2025年秋苏教版小学科学四年级上册教学计划
- DB32 T538-2002 江苏省住宅物业管理服务标准
- 农业可持续发展指标体系
- 2024年危险化学品经营单位主要负责人试题题库
- 2024届贵州省贵阳市高三下学期适应性考试(二)物理试题
- 癌因性疲乏治疗指南
评论
0/150
提交评论