




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
21课程设计报告( 2012 - 2013年度第一学期) 名 称: 单片机与嵌入式系统 题 目:基于avr单片机的音乐盒播放器 学 号: 学生姓名: 指导教师: 成 绩: 日期:2012年12月28日ii摘 要利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。利用单片机控制音乐播放也多不胜举.音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛。它有功能多价格优外围电路简单的特点,备受音乐爱好者及音乐芯片制造商的青睐。本题设计的系统以atmega16单片机为核心,本文应用单片机和音乐发声的相关知识设计了一个简单的音乐播放器。所谓音乐播放器,由单片机进行信息处理,再经过信号放大,由耳机或扬声器(喇叭)放出乐曲声。我们知道,振动产生声音,振动频率不同,所发出的声音也就不同,有规律的振动发出的声音叫“乐音”,音乐由音频和节拍构成,音频即发声的频率,节拍即延时的长短,因此利用单片机的定时器/计数器产生一定频率的方波,本文比较详细地介绍了音乐播放器的原理、设计思路、硬件的选择及相关作用、软件的实现方法及详细的程序清单、还包括进行了软、硬件调试和测试,耳熟能详的歌曲的依次、轮回播放。关键词:单片机,中断,频率,键盘,音乐播放器目 录1系统方案11.1控制器系统模块11.2扬声器模块21.3数码管模块21.4按键模块32系统原理分析42.1 单片机发声原理43硬件设计43.1单片机硬件资源的设计43.2功能模块硬件设计54软件设计54.1数码管的设计54.2 键盘的设计64.3 音乐播放75设计体会8附录1:电路原理图9附录2:源程序101系统方案本系统主要利用单片机的定时器/计数器产生一定频率的方波,利用延时来实现方波的延时,从而实现“17”的频率的高、中、低音的发音,而后把每首歌曲编码编程并结合单片机硬件再通过外接的扬声器来实现歌曲的播放。再利用4*4键盘与单片机相连接,通过对4*4键盘的捕捉,实现换曲、播放、暂停等功能。另外,我们又外加一个电机模块,驱动一个小女孩在为音乐盒上舞动,实现了音乐盒的美观性。 4*4键盘数码管显示avr单片机音乐播放电路图1 系统总体设计图本系统主要由按键模块、扬声器模块、数码管模块、控制器模块组成,下面分别论证这几个模块。1.1 控制器系统模块方案一:采用51系列8位单片机,这种处理器处理速度相对缓慢,功能简单,外围电路电路比较复杂。方案二:采用196系列16位单片机,这种处理器处理速度较快,但由于内部外设模块不够丰富,需要接一定的外围电路,实现较为复杂。方案三:atmega16作为cpu来控制,性价比较高,我们平时运用得多也较为熟悉。而且atmega16能够产生我们所需要的控制信号,能连接键盘。硬件结构适合c语言编程,功能齐全,不容易解密。抗干扰能力强。本实践活动用其即可很好的实现。综合以上本题要求和以上三种方案的分析,最终选择方案三。图2 atmega16最小系统1.2 扬声器模块采用音频功率放大器lm386来进行对音频的放大。lm386是一种音频集成功放,具有自身功耗低、更新内链增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。通过扬声器即可实现对音乐盒音乐的播放。图3 扬声器模块1.3 数码管模块数码管由8个发光二极管构成。其按按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(com)的数码管,共阳数码管在应用时应将公共极com接到+5v,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(com)的数码管,共阴数码管在应用时应将公共极com接到地线gnd上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。考虑系统的实际要求及易操作性,我们采用的是共阴极八段数码管,来实现对歌曲的播放曲目第几首的显示。图4 8段数码管原理1.4 按键模块通过单片机相应程序控制,实现对4乘4键盘信息的采集。图5 4乘4按键模块2系统原理分析2.1 单片机发声原理我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。音符的节拍我们可以用定时器来控制,送入不同的初值,就可以产生不同的定时时间。但是,由于定时器的最大定时时间有限,因此不可能直接用改变的时间初值来实现不同节拍。我们可以设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。节拍码节拍数11/4拍22/4拍33/4拍41拍51又 1/4拍61又1/2拍82拍a2又 1/2拍c3拍f3又3/4拍表13硬件设计3.1单片机硬件资源的设计a口pa0pa7:用于八段数码管的显示。考虑到电路不会用到太多口,资源配置还比较充裕。故我们采用的是静态显示驱动,故需要用到其八个口。b口pb0-pb7:用以对四乘四键盘扫描信号的采集以及控制。d口pd5:接相应扬声器电路,控制音乐播放。3.2功能模块硬件设计数码管模块:静态显示驱动与单片机相应b口相联系。键盘模块:采用纸质4乘4键盘输出线与单片机直接相对接的方式。扬声器模块:用扩展版来实现扬声器的功能,并与单片机pd5口,接地接高等处相连接。4软件设计4.1数码管的设计 字形hgfedcba共阴极共阳极0001111113fhc0h10000011006hf9h2010110115bha4h3010011114fhb0h40110011066h99h5011011016dh92h6011100107dh82h70000011107hf8h8011111117fh80h9011011116fh90ha0111011177h868b011111007ch83hc0110100139hc6hd010111105eha1he0111100179h86hf0111000171h8eh表2为了获得0-9十个不同的字型符号,数码管各段所加电平不同,所以io口输出的编码也不同。因此必须建立一个字型与字段7段码的编码表,(见上表2)。有了字段码对照表。可以实现对8段码的译码。若要显示字型1,pa口输出值为0x06;若要显示字型a,pa口显示输出值0x77。如此,程序中定义了如下数组:flash unsigned char shu10=0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f通过对数组元素,利用一个变量,在其中因不同状况而进行改变这样的设定,实现实时显示歌曲播放曲目读取这样的功能。4.2 键盘的设计按键扫描问题:将全部行线设置为低电平,然后读入输入列线有无低电平出现。如果有低电平出现,则说明有按键按下,如果读到的都是高电平,则表示无按键按下。在确认有按键按下后,需要进入确定具体哪一个键闭合的过程,依次将行线设置为低电平,并检测列线的输入,进而确认具体按键位置。按键的防抖问题:按键的抖动时间:520ms,正常时间:300500ms则需要保证两次读键值的时间大于抖动时间,小于最小正常时间的1/2,取读键值时间为100ms。保证了在一次按键过程中至少可以检测到2次按键闭合,任意两次按键检测不会落在1个抖动区内。主要程序如下:switch (key_state)case 0:key_line = 0b00010000;for (i=1; i=4; i+)/ 扫描键盘portb = key_line;/ 输出行线电平portb = key_line;/ 必须送2次! key_value = key_mask & pinb; / 读列电平if (key_value = key_mask)key_line = 1; / 没有按键,继续扫描elsekey_state+;/ 有按键,停止扫描break;/ 转消抖确认状态break; case 1:if (key_value = (key_mask & pinb)/ 再次读列电平,switch (key_line | key_value)/ 与状态0的相同,确认按键/ 键盘编码,返回编码值 case 0b00011110:key_return = k4_1;break;case 0b00011101:key_return = k4_2;case 2: portb=0b00001111; portb=0b00001111; if(key_mask & pinb) =key_mask ) key_state=0; break; return key_return; 4.3 音乐播放软件采用t/c1比较匹配模式。系统时钟1mhz,8分频。一个时钟周期为1微秒,寄存器ocr1a中为音符的半周期值,所以2次匹配中断的匹配比较输出在0c1a上,输出一个完整的方波。通过变量记录中断的次数,用于控制音符脉冲的各抒,实际上就是音符输出的时间,代表了节拍的长度。 在t/c1中的oc1a会自动判别整个音乐是否全部播放完成,如果音乐没有全部播完,将取出下一个音符的节拍和音调面继续播放。利用设置t/c1技术脉冲源的方法来启动和停止t/c1的工作。一旦按键a键播放键被按下就会开始触发外部中断,进行工作。b键被按下即可暂停工作。再通过扬声器放大电路把它播放出去。d口相应初值设置如下: portd=0xff;ddrd=0x20; / pd5音乐播放输出ocr0 = 0xf9;/ ocr0 = 0xf9(249),(249+1)/125=2mstccr0 = 0x0a;/ 内部时钟,8分频(1m/8=125khz),ctc模式 tccr1a=0x40; tccr1b=0x08;timsk = 0x12;/ 允许t/c1比较匹配a中断,允许t/c0比较匹配中断 ;5设计体会通过这次实践设计活动深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。当看到自己设计的小音乐盒发声播放,上面的小女孩旋转的时候,那种喜悦的感觉不言而喻。在本次课程设计过程中,自己懂得单片机知识运用比较重要,要想把这门课程学好需要不但课本上的知道,关键还是亲手实践锻炼自己的动手能力,只有在实践中才能够学到更多东西,从不知道到知道这个东西啊,知识来于课本理论与实践相结合的产物啊,我们只有把理论更好的运动到实践中学到了真正的知识经过这几周,我知道书本和实际操作还是很有差距的,而且自己的动手能力还是很差,而且电子这一行还要求的细心仔细和耐心,在这三周中暴露出来很多自己的不足,以后要多加练习,多锻炼自己的这些方面的能力。希望能够成为更加全面立体的电子类人才。21附录1:电路原理图附录2:源程序#include #include flash unsigned char shu10=0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;flash unsigned int t16 = 0,1908,1700,1516,1433,1276,1136,1012,956,865,759,716,638,568,506,470;flash unsigned int d16 = 0,52,59,66,70,78,88,99,105,116,132,140,157,176,198,209;flash unsigned char music1150= 5,2,8,2,5,2,4,2,3,2,2,2,1,4, 1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8, 5,2,8,2,5,2,4,2,3,2,5,2,2,4, 4,2,3,2,2,2,6,2,5,4,2,2,3,2,1,8, 5,4,3,2,6,4,8,4,7,4,6,2,7,2,5,4,3,4, 9,2,9,2,9,2,8,2,7,4,6,2,8,2,5,8, 5,4,3,2,6,4,8,4,7,2,6,2,7,2,8,2,9,6, 5,2,6,2,7,2,8,3,8,4,5,4,8,8;flash unsigned char music2100= 5,2,5,2,6,4,5,4,8,4,7,8, 5,2,5,2,6,4,5,4,9,4,8,8, 5,2,5,2,12,4,10,4,8,4,7,4,6,8, 11,2,11,2,10,4,8,4,9,4,8,8 ;flash unsigned char music3100= 1,4,1,4,5,4,5,4,6,4,6,4,5,8, 4,4,4,4,3,4,3,4,2,4,2,4,1,8, 5,4,5,4,4,4,4,4,3,4,3,4,2,8, 5,4,5,4,4,4,4,4,3,4,3,4,2,8, 1,4,1,4,5,4,5,4,6,4,6,4,5,8, 4,4,4,4,3,4,3,4,2,4,2,4,1,8; flash unsigned char music4100=5,2,3,2,5,2,3,2,5,2,3,2,1,4, 2,2,4,2,3,2,2,2,5,8, 5,2,3,2,5,2,3,2,5,2,3,2,1,4, 2,2,4,2,3,2,2,2,1,8, 2,2,2,2,4,2,4,2,3,2,1,2,5,4, 2,2,4,2,3,2,1,2,5,8, 5,2,3,2,5,2,3,2,5,2,3,2,1,4, 2,2,4,2,3,2,2,2,1,8;flash unsigned char music5150=3,2,3,2,4,2,5,2,5,2,4,2,3,2,2,2,1,2,1,2,2,2,3,2,3,2,2,1,2,8, 3,2,3,2,4,2,5,2,5,2,4,2,3,2,2,2,1,2,1,2,2,2,3,2,2,2,1,1,1,8, 2,2,2,2,3,2,1,2,2,2,30,1,4,1,3,2,1,2,2,2,3,1,4,1,3,2,2,2,1,2,2,2,2,4, 3,2,3,2,4,2,5,2,5,2,4,2,3,2,2,2,1,2,1,2,2,2,3,2,2,2,1,1,1,8;flash unsigned char music6100=3,2,3,2,3,4,3,2,3,2,3,4, 3,2,5,2,1,2,2,2, 3,8,4,2,4,2,4,2,4,2,4,2,3,2, 3,2,3,2, 3,2,2,2,2,2,1,2,2,4,5,4, 3,2,3,2,3,4,3,2,3,2,3,4, 3,2,5,2,1,2,2,2,3,8, 4,2,4,2,4,2,4,2, 4,2,3,2,3,2,3,2, 5,2,5,2,3,2,2,2,1,8;flash unsigned char music7150=1,2,2,2, 3,2,4,2, 5,2,5,2, 5,1,4,1,3,1, 4,2,4,2, 4,1,3,1,2,1, 1,2,3,2, 5,4, 1,2,2,2, 3,2,4,2, 5,2,5,2, 5,1,4,1,3,1, 4,2,4,2, 4,1,3,1,2,1, 1,2,3,2, 1,4, 6,2,6,2, 6,1,5,1,4,1, 5,2,5,2, 5,1,4,1,3,1, 4,2,4,2, 4,1,3,1,2,1, 1,2,3,2, 5,4, 6,2,6,2, 6,1,5,1,4,1, 5,2,5,2, 5,1,4,1,3,1, 4,2,4,2, 4,1,3,1,2,1,1,2,3,2, 1,4;flash unsigned char music8150=1,4, 1,2,2,2, 3,4, 3,2,4,2, 5,4, 6,2,5,2, 3,8, 5,4, 4,2,3,2,2,8, 4,4, 3,2,2,2, 1,8, 1,4, 1,2,2,2, 3,4, 3,2,4,2, 5,4, 6,2,5,2, 3,8, 5 ,4,4,2,3,2,2,4, 3,2,2,2, 1,16, 5,4, 4,2,3,2, 2,4, 1,2,1,2, 4,4, 3,2,2,2, 1,8,5,4, 4,2,3,2, 2,4, 1,2,1,2, 4,4, 3,2,2,2, 1,8, 1,4, 1,2,2,2, 3,4, 3,2,4,2, 5,4, 6,2,5,2, 3,8, 5 ,4,4,2,3,2,2,4, 3,2,2,2, 1,8 ;flash unsigned char music9200=8,2,8,2,8,2,10,2,13,2,10,2,12,4, 12,2,13,2,12,2,10,2,11,2,10,2,19,4, 9,2,9,2,9,2,11,2,14,2,14,2,13,2,12,2,12,2,12,2,12,2,11,2,7,4,8,4,9,8, 8,2,8,2,8,2,10,2,13,2,10,2,12,4, 12,2,13,2,12,2,10,2,11,2,10,2,19,4, 9,2,9,2,9,2,11,2,14,2,14,2,13,2,12,2,12,2,12,2,12,2,11,2,7,4,9,4,8,8, 13,4,13,2,12,2,11,1,12,1,13,1,12,2,9,2,10,2,11,2,9,2,12,4, 13,4,12,4,11,8,9,4,14,2,13,2,12,2,13,2,12,2,11,4,12,2,13,2,10,4,9,4,8,8;flash unsigned char max9=128,50,84,96,124,98,140,146,172;int num=0,kai=1,pp;unsigned char note_n=0;unsigned int int_n=1;bit play_on,key_stime_ok;int key_stime_counter;interrupt tim0_comp void timer0_comp_isr(void) if (+key_stime_counter =5)key_stime_counter = 0; key_stime_ok = 1;interrupt tim1_compa void timer1_compa_isr(void) if (!play_on) if (-int_n = 0) tccr1b = 0x08; if (note_n maxpp-1) switch (pp) case 1: ocr1a = tmusic1note_n; int_n = dmusic1note_n; note_n+; int_n = int_n * music1note_n*4; note_n+; tccr1b = 0x09; break; case 2: ocr1a = tmusic2note_n; int_n = dmusic2note_n; note_n+; int_n = int_n * music2note_n*4; note_n+; tccr1b = 0x09; break; case 3: ocr1a = tmusic3note_n; int_n = dmusic3note_n; note_n+; int_n = int_n * music3note_n*4; note_n+; tccr1b = 0x09; break; case 4: ocr1a = tmusic4note_n; int_n = dmusic4note_n; note_n+; int_n = int_n * music4note_n*4; note_n+; tccr1b = 0x09; break; case 5: ocr1a = tmusic5note_n; int_n = dmusic5note_n; note_n+; int_n = int_n * music5note_n*5; note_n+; tccr1b = 0x09; break; case 6: ocr1a = tmusic6note_n; int_n = dmusic6note_n; note_n+; int_n = int_n * music6note_n*5; note_n+; tccr1b = 0x09; break; case 7: ocr1a = tmusic7note_n; int_n = dmusic7note_n; note_n+; int_n = int_n * music7note_n*5; note_n+; tccr1b = 0x09; break; case 8: ocr1a = tmusic8note_n; int_n = dmusic8note_n; note_n+; int_n = int_n * music8note_n*5; note_n+; tccr1b = 0x09; break; case 9: ocr1a = tmusic9note_n; int_n = dmusic9note_n; note_n+; int_n = int_n * music9note_n*5; note_n+; tccr1b = 0x09; break; else play_on = 0; int_n=1; note_n=0; #define no_key 17#define k1_11#define k1_22#define k1_33#define k1_44 #define k2_15#define k2_26#define k2_37#define k2_48 #define k3_19#define k3_210#define k3_311#define k3_412#define k4_117#define k4_217#define k4_317#define k4_417#define key_mask0b00001111unsigned char read_key() static unsigned char key_state = 0, key_value, key_line; unsigned char key_return = no_key,i;switch (key_state)case 0:key_line = 0b00010000;for (i=1; i=4; i+)/ 扫描键盘portb = key_line;/ 输出行线电平portb = key_line;/ 必须送2次! key_value = key_mask & pinb; / 读列电平if (key_value = key_mask)key_line = 1; / 没有按键,继续扫描elsekey_state+;/ 有按键,停止扫描break;/ 转消抖确认状态break; case 1:if (key_value = (key_mask & pinb)/ 再次读列电平,switch (key_line | key_value)/ 与状态0的相同,确认按键/ 键盘编码,返回编码值 case 0b00011110:key_return = k4_1;break;case 0b00011101:key_return = k4_2;break; case 0b00011011:key_return = k4_3;break; case 0b00010111:key_return = k4_4;break; case 0b00101110:key_return = k3_1;break;case 0b00101101:key_return = k3_2;break; case 0b00101011:key_return = k3_3;break; case 0b00100111:key_return = k3_4;break;case 0b01001110:key_return = k2_1;break; case 0b01001101:key_return = k2_2;break; case 0b01001011:key_return = k2_3;break;case 0b01000111:key_return = k2_4;break; case 0b10001110:key_return = k1_1;break; case 0b10001101:key_return = k1_2;break; case 0b10001011:key_return = k1_3;break;case 0b10000111:key_return = k1_4;break; key_state+; elsekey_state-;/ 两次列电平不同返回状态0break;case 2: portb=0b00001111; portb=0b00001111; if(key_mask & pinb) =key_mask ) key_state=0; break; return key_return; / declare your global variables herevoid main(void) porta=0x3f; ddra=0xff; portb=0xff; ddrb=0xf0; portc=0xff; ddrc=0xff; portd=0xff;ddrd=0x20; / pd5音乐播放输出ocr0 = 0xf9;/ ocr0 = 0xf9(249),(249+1)/125=2mstccr0 = 0x0a;/ 内部时钟,8分频(1m/8=125khz),ctc模式 tccr1a=0x40; tccr1b=0x08;timsk = 0x12;/ 允许t/c1比较匹配a中断,允许t/c0比较匹配中断 acsr=0x80; sfior=0x00; #asm(sei) play_on=1; kai=1; pp=0; while (1) num=read_key(); switch(num) case 17: break; case 10: porta=0x3f; play_on=1; kai=1; int_n=1; note_n=0; pp=0; break; case 11: play_on=0; timsk = 0x12; tccr1b = 0x09; break; case 12: if(play_on=0) if(kai=0) kai=1; ocr1a = 0; timsk = 0x12; tccr1b = 0x09; else ocr1a = 0; kai=0; timsk = 0x02; tccr1b = 0x08; break; default: pp=num; int_n=1; note_n=0; play_on=1; porta=shupp; break; if (key_stime_ok) key_stime_ok = 0; if(play_on=0) tccr1b = 0x09; else tccr1b = 0x08; ;g an employment tribunal claimemployment tribunals sort out disagreements between employers and employees.you may need to make a claim to an employment tribunal if: you dont agree with the disciplinary action your employer has taken against you your employer dismisses you and you think that you have been dismissed unfairly.for more information about dismissal and unfair dismissal, seedismissal.you can make a claim to an employment tribunal, even if you haventappealedagainst the disciplinary action your employer has taken against you. however, if you win your case, the tribunal may reduce any compensation awarded to you as a result of your failure to appeal.remember that in most cases you must make an application to an employment tribunal within three months of the date when the event you are complaining about happened. if your application is received after this time limit, the tribunal will not usually accept it.if you are worried about how the time limits apply to you, take advice from one of the organisations listed underfurther help.employment tribunals are less formal than some other courts, but it is still a legal process and you will need to give evidence under an oath or affirmation.most people find making a claim to an employment tribunal challenging. if you are thinking about making a claim to an employment tribunal, you should get help straight away from one of the organisations listed underfurther help.if you are being represented by a solicitor at the tribunal, they may ask you to sign an agreement where you pay their fee out of your compensation if you win the case. this is known as adamages-based agreement. in england and wales, your solicitor cant charge you more than 35% of your compensation if you win the case.if you are thinking about signing up for a damages-based agreement, you should make sure youre clear about the terms of the agreement. it might be best to get advice from an experienced adviser, for example, at a citizens advice bureau. to fin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 税务局规范化建设
- 新教师培训方案设计思路
- 非特异性肋软骨炎的健康宣教
- 2024届四川省自贡市富顺三中学、代寺区中考五模数学试题含解析
- 胸导管损伤的健康宣教
- 2025《设备采购合同》示范文本
- 2025水利工程劳务分包合同
- 2025标准房屋买卖合同
- 2025年个人房屋抵押借款合同
- 2025腾讯云服务产品合同
- 天津市南开区2024-2025学年高三下学期质量监测(一)地理试卷(原卷版+解析版)
- 【原创】学校书记中央八项规定精神学习心得
- 2025年商丘职业技术学院单招职业技能考试题库含答案
- 2025年榆林城市投资经营集团有限公司招聘笔试参考题库含答案解析
- 液氯钢瓶应急堵漏工具操作指导规程
- 自然辩证法知到课后答案智慧树章节测试答案2025年春浙江大学
- 2025新人教版七年级历史下教案-第20课 明清时期社会经济的发展
- 股份制合作协议及企业章程草案
- 硬件工程师招聘笔试题及解答
- 脱硫塔内部结构优化设计-洞察分析
- 加油站安全生产风险分级管控和隐患排查治理双体系方案全套资料汇编
评论
0/150
提交评论