版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
掌握定时器中断配置实现数码管动态扫描践行绿色低碳理念绿色低碳设计理念STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用项目四
PWM输出控制电机设计与实现任务4-2定时器实现LED数码管动态显示目录CONTENTS01任务目标明确学习目标与能力要求,掌握定时器中断驱动数码管显示的核心技能02知识储备定时器基本概念、时钟源、计数模式与配置方法的理论基础03任务实施硬件电路设计、程序编写与系统调试的完整实践流程04任务总结核心知识点梳理、技能提升与绿色低碳理念的深入理解05提升训练与评价通过知识问答、实践操作与任务评价,巩固所学知识并检验学习成果CHAPTERONE01任务目标明确学习目标与能力要求为定时器应用开发打下坚实基础TASKOBJECTIVES任务目标目标一掌握定时器原理及配置理解STM32定时器的基本工作原理,掌握时钟源选择、时基单元配置、中断使能等关键技术,能够独立完成定时器的初始化配置。目标二实现数码管动态扫描利用定时器中断实现4位共阴极LED数码管的动态扫描刷新,掌握分时复用技术,解决多位数码管显示的残影问题。目标三设计计数器显示功能设计一个计数器,通过定时器中断累积计时,将计数值实时显示在数码管上,实现完整的定时计数与显示系统。学习成果预期完成本任务后,你将能够独立配置STM32定时器中断,实现数码管动态显示系统,理解中断驱动的程序设计思想,为后续PWM、输入捕获等高级定时器应用打下坚实基础。CHAPTERTWO02知识储备理论基础与核心概念深入理解STM32定时器架构TIMERBASICS定时器基本概念与结构什么是定时器?定时器是一种电子设备或软件模块,具有延时、信号的频率测量、信号的PWM测量、PWM输出等功能。计数器本质本质上讲,定时器就是"数字电路"中的计数器。它可以从预设的初始值开始递增或递减,当计数器达到设定的值时,可以触发一个事件或中断,通知系统进行特定的操作。STM32F103定时器类型4通用定时器TIM2、TIM3、TIM4、TIM52高级定时器TIM1、TIM82基本定时器TIM6、TIM7STM32F103R6芯片具有1个高级定时器TIM1和2个通用定时器TIM2、TIM3TIMERCOMPARISON定时器功能比较定时器分辨率计数器类型预分频系数DMA请求捕获/比较通道互补输出所在总线应用场景TIM116位向上、向下、中心对齐1~65536可以4有APB2(72MHz)电机控制TIM2TIM316位向上、向下、中心对齐1~65536可以4没有APB1(36MHz)通用定时器、定时计数、PWM输出、输入捕获、输出比较高级定时器特点具有互补输出功能,适合电机控制等复杂应用通用定时器特点功能全面,适合大多数定时计数应用场景总线频率差异TIM1在APB2(72MHz),TIM2/3在APB1(36MHz)TIMERI/OPINS定时器I/O口说明定时器复用功能默认引脚重映射引脚功能说明TIM1TIM1_ETRPA12-外部触发输入接口TIM1_CH1PA8-输入捕获1/输出比较正通道1TIM1_CH1NPB13PA7输出比较负通道1TIM1_CH2PA9-输入捕获2/输出比较正通道2TIM1_CH2NPB14PB0输出比较负通道2TIM1_CH3PA10-输入捕获3/输出比较正通道3TIM1_CH3NPB15PB1输出比较负通道3TIM1_CH4PA11-输入捕获4/输出比较正通道4TIM1_BKINPB12PA6断路功能口TIM2TIM2_CH1_ETRPA0PA15外部触发输入/输入捕获1TIM2_CH2PA1PB3输入捕获2TIM2_CH3PA2PB10输入捕获3TIM2_CH4PA3PB11输入捕获4TIM3TIM3_ETR(PD2),TIM3_CH1(PA6/PC6/PB4),TIM3_CH2(PA7/PC7/PB5),TIM3_CH3(PB0/PC8),TIM3_CH4(PB1/PC9)重要提示:TIM2_CH1_ETR表示TIM2_CH1和TIM2_ETR共用一个引脚,不能同时使用。PB3和PB4与下载功能有关,使用时需要配置下载功能失效。CLOCKSOURCES时钟源定时器的核心功能定时器的核心功能是对时钟脉冲计数,以获得特定定时时间和脉冲数,因此时钟源在定时器操作中至关重要。时钟源类型①内部时钟源(CK_INT)来自APB总线,经倍频器处理②外部时钟源外部输入(TIx)和外部触发(ETR)③内部触发输入(ITRx)定时器级联使用定时器时钟源选择和分配电路框图INTERNALCLOCKSOURCE内部时钟源(CK_INT)工作原理定时器采用内部时钟源时,其时钟并非直接来自APB1或APB2,而是源于一个以APB1或APB2为输入的倍频器。倍频规则当APB预分频系数为1时定时器时钟频率=APB总线频率当APB预分频系数为2/4/8/16时倍频器自动激活,定时器时钟频率=APB总线频率×2设计优势这种设计可在其他外设降频运行时,仍保证定时器获得更高的工作频率,提升定时精度和灵活性。实际应用示例APB1总线(36MHz)•预分频系数=2•倍频器激活•定时器时钟=36MHz×2=72MHzAPB2总线(72MHz)•预分频系数=1•倍频器不激活•定时器时钟=72MHzEXTERNALCLOCKSOURCE外部时钟源外部时钟模式1外部输入(TIx)可对外部输入脉冲进行计数,适用于需要测量外部信号频率或对外部事件计数的应用场景。典型应用:编码器信号计数、脉冲计数外部时钟模式2外部触发输入(ETR)既能作为时钟输入用于外部时钟计数,也能作为触发输入。特点:可与复位、触发、门控等从模式组合外部时钟源信号来源③TIMx_ETR引脚来自芯片管脚的外部输入时钟④TIMx_CH1信号输入通道1经滤波和边沿检测后的结果⑤外部脉冲信号来自芯片外部的未知频率时钟信号工作模式说明若使用来自芯片外部管脚的未知频率时钟信号,定时器工作在计数方式,用于对外部事件进行计数。INTERNALTRIGGERINPUT内部触发输入(ITRx)核心功能内部触发输入(ITRx)可让一个定时器作为另一个定时器的预分频器,实现定时器之间的级联。典型应用示例:Timer1作为Timer2的预分频器•Timer1产生周期性触发信号•Timer2接收Timer1的触发作为时钟源•实现更长的定时周期定时器级联示意图Timer1主定时器产生触发信号触发信号(ITR)Timer2从定时器接收触发作为时钟工作模式时钟源来自其它定时器的触发,用于不同定时器的级联。选择该时钟源的定时器工作在定时方式。COUNTERMODES定时器计数模式定时器组成结构STM32定时器由一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)组成向上计数模式计数过程0→1→2→...→ARR溢出→重新从0开始计数器从0计数到自动加载的值(ARR),然后重新从0开始计数,并且产生一个计数器溢出事件。向下计数模式计数过程ARR→...→2→1→0下溢→从ARR重新开始计数器从自动加载的值(ARR)开始向下计数到0,然后从ARR重新开始,并且产生一个计数器向下溢出事件。中心对齐模式计数过程0→ARR-1→1向上溢出+向下溢出计数器从0计数到ARR-1产生溢出事件,然后向下计数到1产生下溢事件,之后从0重新计数。TIMERCONFIGURATION定时器的配置步骤在STM32中,所有定时器均具备定时功能。通过软件对时钟源和时基单元完成配置后,可借助查询状态寄存器或使用中断的方式,判断定时时间是否已到。1使能定时器时钟首先要使能定时器的时钟。通用定时器全部连接在低速外设总线APB1上。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);2配置时基单元通过时基单元初始化结构体配置定时器参数。TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period=4999;TIM_TimeBaseStructure.TIM_Prescaler=7199;3使能定时器中断配置定时器中断类型,常用更新中断。TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);可选:TIM_IT_Trigger,TIM_IT_CC1~44配置NVIC设置定时器中断优先级。NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;5使能定时器启动定时器开始计数。TIM_Cmd(TIM3,ENABLE);6编写中断服务程序在中断服务程序中处理定时事件。voidTIM3_IRQHandler(void){if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){//定时动作TIM_ClearITPendingBit(TIM3,TIM_IT_Update);}}STEP1-2使能时钟与配置时基单元1使能定时器时钟//时钟使能RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);重要提示通用定时器全部连接在低速外设总线APB1上,因此使用RCC_APB1PeriphClockCmd()函数使能时钟。高级定时器注意TIM1和TIM8连接在APB2总线上,需要使用RCC_APB2PeriphClockCmd()函数。2配置时基单元//定义时基单元初始化结构体TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//计数器溢出值(ARR)TIM_TimeBaseStructure.TIM_Period=4999;//预分频值(PSC)TIM_TimeBaseStructure.TIM_Prescaler=7199;//时钟分割因子TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//向上计数模式TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//初始化TIM3TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);定时时间计算:72MHz/(7200×5000)=2Hz(500ms)STEP3-4使能中断与配置NVIC3使能定时器中断//使能TIM3更新中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);中断事件类型TIM_IT_Update:计数器溢出/更新TIM_IT_Trigger:触发事件TIM_IT_CC1~4:捕获/比较中断说明此处采用了定时器溢出中断,当计数器达到ARR值时触发中断。4配置NVIC//设置NVIC中断分组为2NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC初始化结构体NVIC_InitTypeDefNVIC_InitStructure;//TIM3中断通道NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//抢占优先级0级NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//子优先级3级NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//使能IRQ通道NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//初始化NVIC寄存器NVIC_Init(&NVIC_InitStructure);优先级说明:抢占优先级0(最高),子优先级3STEP5-6使能定时器与中断服务程序5使能定时器//使能TIM3定时器TIM_Cmd(TIM3,ENABLE);功能说明调用此函数后,定时器开始计数,当达到设定条件时触发中断。注意事项确保在使能定时器前已完成所有配置,包括时钟、时基单元、中断使能等。6中断服务程序//TIM3中断服务函数voidTIM3_IRQHandler(void){//检查是否为TIM3更新中断if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){//执行定时动作//用户代码...//清除TIM3更新中断标志TIM_ClearITPendingBit(TIM3,TIM_IT_Update);}}关键步骤:检查中断标志→执行动作→清除标志重要:必须清除中断标志,否则会持续进入中断CHAPTERTHREE03任务实施动手实践与工程搭建从零开始实现定时器驱动数码管显示TASKREQUIREMENTS任务实现要求利用STM32F103R6微控制器的定时器TIM1功能,实现50微秒(50us)的定时中断。基于定时中断,设计一个系统来驱动4位共阴极LED数码管动态显示刷新。1配置TIM1定时器定时周期50μs每50微秒触发一次中断将TIM1配置为产生每50微秒触发一次的中断,作为数码管扫描的时间基准。2数码管动态扫描显示器件4位共阴极LED数码管利用TIM1的中断服务程序,实现4位共阴极LED数码管的动态扫描刷新,确保数码管能够稳定显示数字。3计数器显示功能计数周期10ms200次50μs中断设计计数器,每次累积到10ms自动加1,将计数值转换为对应数字显示在数码管上。定时精度50μs高精度定时扫描频率每位12.5ms刷新周期HARDWAREDESIGN硬件电路设计仿真原理图微控制器U1(STM32F103R6)作为系统核心控制器,通过GPIOC端口控制数码管显示。PC0~PC7:连接缓冲器74LS245PC8~PC11:驱动位选段1~4缓冲驱动器74LS245用于增强信号的驱动能力或实现信号的双向传输。驱动数码管笔段引脚A~G及DP提高驱动电流,确保显示亮度数码管4位共阴极LED数码管,通过动态扫描方式显示4位数字。PROGRAMDESIGN程序设计概述程序通过定时器TIM1的更新中断实现数码管的动态扫描显示和计数值的每秒递增显示。通过合理配置GPIO、NVIC和定时器,利用中断机制实现数码管显示和计数功能。全局变量与宏定义LEDSEG[]笔段编码LEDCOM[]位选编码LEDBuffer[4]显示缓冲Counter计数器定时器中断服务函数TIM1_UP_IRQHandler检查中断标志数码管动态扫描计数器累加初始化函数MyGPIO_Init()MyNVIC_Init()MyTIM1_Init()main()主函数程序流程图系统启动GPIO初始化NVIC初始化TIM1初始化while(1)循环中断服务GLOBALVARIABLES全局变量与宏定义数码管编码数组//LED数码管笔段编码数组unsignedcharLEDSEG[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,//0-90x77,0x7C,0x39,0x5E,0x79,0x71//A-F};//位选段码(共阴极)unsignedcharLEDCOM[]={0x0E,0x0D,0x0B,0x07};LEDCOM说明:0x0E(1110)选通第1位,0x0D(1101)选通第2位,以此类推宏定义//向GPIOC端口写入数据#defineLEDSEG_DISP(x)GPIO_Write(GPIOC,x)简化数码管显示操作,将数据写入GPIOC端口全局变量//LED显示计数器intLEDCnt;//LED显示索引intLEDIndex;//显示缓冲区unsignedcharLEDBuffer[4]={16,16,16,16};//50us计时计数器intTime50uSCnt;//计数器intCounter;LEDBuffer:存储4位数码管要显示的数字索引(0-15)Time50uSCnt:记录50μs中断次数,达到200次(10ms)计数器加1变量初始化LEDBuffer初始值16对应LEDSEG[16]=0x71(F)INTERRUPTSERVICE定时器中断服务函数TIM1_UP_IRQHandler//TIM1更新中断服务函数voidTIM1_UP_IRQHandler(void){//检查TIM1更新中断标志if(RESET!=TIM_GetITStatus(TIM1,TIM_IT_Update)){//清除中断标志TIM_ClearITPendingBit(TIM1,TIM_IT_Update);//数码管显示LEDSEG_DISP((LEDCOM[LEDIndex]<<8)|(LEDSEG[LEDBuffer[LEDIndex]]));//更新显示索引if(++LEDIndex>=4)LEDIndex=0;//10ms计时if(++Time50uSCnt>=200){Time50uSCnt=0;Counter++;//更新显示缓冲区LEDBuffer[0]=(Counter/1)%10;LEDBuffer[1]=(Counter/10)%10;LEDBuffer[2]=(Counter/100)%10;LEDBuffer[3]=(Counter/1000)%10;}}}数码管动态扫描根据LEDIndex选择当前位组合位选码和段码写入GPIOC更新LEDIndex(0-3循环)计数器功能Time50uSCnt累加,达到200(10ms)Counter计数器加1将Counter各位分解到LEDBuffer时序说明每位显示12.5ms,每秒刷新80次GPIOINITIALIZATIONGPIO初始化函数MyGPIO_Init()//GPIO初始化函数voidMyGPIO_Init(void){//定义GPIO初始化结构体GPIO_InitTypeDefMyGPIO;//打开GPIOC外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//指定GPIO引脚(PC0~PC11)MyGPIO.GPIO_Pin=GPIO_Pin_All&0xFFF;//指定输出速度MyGPIO.GPIO_Speed=GPIO_Speed_10MHz;//指定输出模式MyGPIO.GPIO_Mode=GPIO_Mode_Out_PP;//初始化GPIOCGPIO_Init(GPIOC,&MyGPIO);}时钟使能使用RCC_APB2PeriphClockCmd()函数打开GPIOC外设时钟。注意:GPIO端口在APB2总线上引脚配置GPIO_Pin:PC0~PC11(0xFFF)GPIO_Speed:10MHzGPIO_Mode:推挽输出功能说明配置PC0~PC11为推挽输出,用于数码管控制NVICINITIALIZATIONNVIC初始化函数MyNVIC_Init()//NVIC初始化函数voidMyNVIC_Init(void){//定义NVIC初始化结构体NVIC_InitTypeDefMyNVIC;//设置优先级分组为2NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断通道MyNVIC.NVIC_IRQChannel=TIM1_UP_IRQn;//设置抢占优先级MyNVIC.NVIC_IRQChannelPreemptionPriority=2;//设置响应优先级MyNVIC.NVIC_IRQChannelSubPriority=2;//使能中断通道MyNVIC.NVIC_IRQChannelCmd=ENABLE;//初始化NVICNVIC_Init(&MyNVIC);}优先级分组使用NVIC_PriorityGroupConfig()设置优先级分组为2。分组2:2位抢占优先级+2位子优先级中断通道设置中断通道为TIM1_UP_IRQn,对应TIM1的更新中断。抢占优先级:2响应优先级:2功能说明配置并使能TIM1更新中断TIMERINITIALIZATION定时器初始化函数MyTIM1_Init()//定时器初始化函数voidMyTIM1_Init(void){//定义TIM初始化结构体TIM_TimeBaseInitTypeDefMyTIM;//打开TIM1外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//设置定时器周期(ARR)MyTIM.TIM_Period=5;//设置预分频系数(PSC)MyTIM.TIM_Prescaler=720-1;//设置向上计数模式MyTIM.TIM_CounterMode=TIM_CounterMode_Up;//初始化TIM1TIM_TimeBaseInit(TIM1,&MyTIM);//使能TIM1TIM_Cmd(TIM1,ENABLE);//使能TIM1更新中断TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);}定时时间计算T=(ARR+1)×(PSC+1)/72MHzT=(5+1)×(719+1)/72MT=6×720/72MT=50μsARR=5,PSC=719,定时周期50微秒时钟源说明TIM1连接在APB2总线上,时钟频率为72MHz。功能说明配置TIM1为50μs定时中断MAINFUNCTION主函数main()//主函数intmain(void){//GPIO初始化MyGPIO_Init();//NVIC初始化MyNVIC_Init();//TIM1初始化MyTIM1_Init();//无限循环等待中断while(1){//主循环为空//所有功能通过中断实现}}程序入口程序入口完成GPIO、NVIC和TIM1的初始化,然后进入无限循环等待中断触发。中断驱动主函数代码简洁,所有功能通过中断机制实现,体现中断驱动的程序设计理念。设计优势CPU可处理其他任务,提高系统效率执行流程初始化→等待中断→中断处理→循环SYSTEMDEBUG系统调试软件工程编译完成后,将生成的hex目标代码文件加载到STM32F103R6芯片上。在仿真工具栏中点击"运行"按钮验证程序功能。调试步骤1编译工程确保0错误0警告2生成HEX文件配置输出选项3加载到芯片在Proteus中加载4运行仿真点击运行按钮常见问题排查数码管不显示•检查GPIO配置是否正确•验证数码管连接•确认时钟是否使能显示闪烁或重影•调整扫描频率•检查消隐处理•验证定时器配置计数器不工作•检查中断是否使能•验证中断服务函数•确认中断标志清除调试目标确保运行正确无误CHAPTERFOUR04任务总结知识梳理与能力提升巩固所学,为后续学习做准备KEYKNOWLEDGE核心知识点定时器中断配置掌握定时器时钟源选择(内部/外部/级联)理解时基单元配置(ARR、PSC、计数模式)熟练中断使能与NVIC优先级配置编写中断服务程序,正确处理中断标志动态扫描技术理解动态扫描刷新频率与显示效果的平衡熟悉分时复用技术原理掌握消隐方法解决残影问题优化扫描频率确保无闪烁显示关键技术点时钟源选择内部时钟(CK_INT)、外部时钟(ETR/TIx)、级联(ITRx)时基单元配置ARR(自动重装载值)、PSC(预分频系数)、计数模式中断优先级抢占优先级、响应优先级、优先级分组编程要点正确配置定时器参数使能中断并设置优先级编写中断服务函数及时清除中断标志SKILLSIMPROVEMENT技能提升数码管动态显示电路设计通过定时器中断实现稳定刷新,掌握动态扫描的核心技术。扫描周期优化设计4ms扫描周期,每位显示1ms,确保无闪烁硬件连接合理分配GPIO资源,使用缓冲器增强驱动能力显示效果优化扫描时序,消除残影,提高显示质量滚动显示效果实现编写程序支持显示内容滚动,如"1234"左移滚动显示。滚动算法设计缓冲区移位算法,实现平滑滚动效果速度控制通过定时器控制滚动速度,实现可调速滚动循环显示实现循环滚动,支持长字符串显示实践建议通过实际项目练习,加深对定时器中断和动态扫描技术的理解,提升嵌入式系统开发能力。GREEN&LOW-CARBON绿色低碳理念在嵌入式系统设计中践行绿色低碳理念,通过软件优化和硬件设计降低系统能耗。动态调节扫描频率在保证无闪烁的前提下,适当降低扫描频率以减少功耗。频率选择标准频率:4ms/位节能频率:8ms/位降低50%扫描频率,功耗减少约30%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年安徽审计职业学院单招职业技能考试题库附答案详解ab卷
- 2026年宁德职业技术学院单招职业技能测试题库附参考答案详解(考试直接用)
- 2026年大理护理职业学院单招职业技能考试题库含答案详解ab卷
- 2026年天津艺术职业学院单招综合素质考试题库附答案详解(轻巧夺冠)
- 2026年宁夏工业职业学院单招职业技能测试题库附参考答案详解(综合题)
- 国家电网副总经理职位面试经验
- 2026年安徽工商职业学院单招职业倾向性测试题库带答案详解(综合题)
- 2026年安徽工商职业学院单招职业倾向性考试题库附答案详解(培优a卷)
- 2026年安徽工商职业学院单招职业适应性测试题库含答案详解ab卷
- 2026年安徽工商职业学院单招职业适应性考试题库含答案详解(预热题)
- 一层楼农村自建房施工方案
- 离心泵安装单元工程质量验收评定表
- 糖代谢(英文版)完整版
- 桡动脉穿刺置管术考核评分标准
- 室内装饰木工安全技术交底
- 建筑工程施工准备-材料、机械设备进场检查(建筑工程施工质量管理)
- LY/T 1381-2001板式家具机械型号编制方法
- GB/T 7403.1-2008牵引用铅酸蓄电池第1部分:技术条件
- GB/T 3532-2022日用瓷器
- 重大版(第八版)小学四年级下册信息技术教案设计(吴)
- 生态因子分类及其基本作用规律课件
评论
0/150
提交评论