音乐流水灯产品设计报告.docx

上传人:椰子壳 文档编号:3323617 上传时间:2019-08-12 格式:DOCX 页数:39 大小:371.65KB
返回 下载 相关 举报
音乐流水灯产品设计报告.docx_第1页
第1页 / 共39页
音乐流水灯产品设计报告.docx_第2页
第2页 / 共39页
音乐流水灯产品设计报告.docx_第3页
第3页 / 共39页
音乐流水灯产品设计报告.docx_第4页
第4页 / 共39页
音乐流水灯产品设计报告.docx_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《音乐流水灯产品设计报告.docx》由会员分享,可在线阅读,更多相关《音乐流水灯产品设计报告.docx(39页珍藏版)》请在三一文库上搜索。

1、音乐流水灯产品设计报告项目名称: 音乐流水灯 院 校: 石家庄铁路职业学院 系 别: 机电工程系 班 级: 71281 小组成员: 日 期: 2014.6.10 摘 要本作品是一种基于AT89S52单片机音乐播放并控制彩灯的设计。它实现单片机演奏音乐,并且使LED彩灯随音符频率的不同而闪烁发光。本作品以AT89S52单片机作为主控核心,通过利用三极管来放大电流,单片机控制蜂鸣器播放音乐。利用编程实现在有4块LED 8X8点阵屏上实现闪烁,根据用户需求可以编写若干种亮灯模式.例如左右闪烁,隔几个亮灭,蜂鸣器可以根据用户需求改写编程播放各种音乐。该设计方案设计及其简单,典型的89S52单片机,灯光

2、花样多,播放各种类型的音乐,具有体积小、价格低、低能耗等优点。在美丽的都市夜晚,彩灯的循环亮灭,播放动人的音乐,衬托出美丽的氛围,音乐流水灯具有更广阔的发展天地。关键字:AT89S52单片机; 8X8 LED点阵屏 ; 音乐目录目录摘 要- 1 -第一章 绪论- 3 -1.1引言- 3 -1.2设计方案- 3 -第二章 系统总体方案介绍- 4 -2.1 系统组成框图- 4 -2.2 音乐流水灯的功能结构图- 4 -第三章 硬件设计- 5 -3.1 总体设计框图- 5 -3.2 LED显示电路设计与原理- 5 -3.3 硬件电路图及功能- 5 -第四章 软件设计- 6 -4.1音调、节拍以及编码

3、的确定方法- 6 -4.1.1 音调的确定- 6 -4.1.2 节拍的确定- 8 -4.1.3 编码- 8 -4.2 软件程序设计- 9 -4.2.1 程序流程图及相应代码块- 9 -第五章 测试结果- 16 -5.1总体运行图- 16 -附录 程序源代码及注释- 17 -第一章 绪论1.1引言 现当今单片机的应用无处不在.利用单片机控制音乐播放也多不胜举.音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛.它有功能多价格优外围电路简单的特点,备受音乐爱好者及音乐芯片制造商的青昧.用89S52单片机及少数外围电路控制MUSIC播放,就可以产生美妙的音乐,又有流水灯设计即显得美观大方又经

4、济实惠。随着社会经济的飞速发展,人们在追求物质文明的同时,更加注重精神文明的追求。音乐给人带来的意义就是追求完美,用完美带给所有人无上的快乐和享受。现代人的生活离不开音乐,音乐已成为人类日常文化生活中不可或缺的部分。研究表明,音乐可以开发儿童的智力,甚至植物在优美的音乐环境中也会生长得更好。虽说现在有各式各样的音乐播放器,而且随着科学技术的发展功能已经很全面了的,体积更加小巧,携带更加方便,设计更加人性化,但任何的设计都是在不断地研究中得到改进的,因此有必要对音乐的播放控制进行研究和学习,而且对于以后电子设计有极大的裨益。1.2设计方案本设计基于AT89S52系列单片机的音乐流水灯,利用按键切

5、换演奏出不同的乐曲。蜂鸣器发出某个音调,与之相对应的LED亮起。使用两个按键,一个用来切换歌曲,另一个切换8X8 LED点阵屏的变化花样。1)电路有两种工作模式:演奏音乐模式和花样灯模式。演奏音乐模式:演奏完整的一首的歌曲,8X8 LED点阵屏随着音乐变化。花样灯模式:8X8 LED点阵屏变化出各种花样。2)按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲。3)按下按键2进入花样灯模式,再按切换LED花样,共五种花样。第二章 系统总体方案介绍 2.1 系统组成框图音乐流水灯的系统结构以AT89S52单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。单片机负责接收按键的输

6、入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。系统组成框图如图2.1所示。图2.1 系统组成框图2.2 音乐流水灯的功能结构图音乐流水灯的功能结构如图2.2所示。Key1负责切换播放歌曲,播放歌曲共2首,分别是千年之恋和寂寞沙洲冷。Key2负责切换LED显示花样,显示花样共五种。图2.2 音乐流水灯功能结构图第三章 硬件设计3.1 总体设计框图3.2 LED显示电路设计与原理LED显示电路是由4个8X8 LED点阵屏组成,LED接到单片机的P1口,并通过74LS154芯片译码从而控制32条LED线路且用ULN2003芯片取反,使其形成通路达到发光的效果。3.3 硬件电路图及

7、功能总体硬件电路实现功能如下,如图3.4所示电路中用P3.2、P3.3控制按键。P1.0P1.7控制LED。P3.7控制蜂鸣器。电路为11.0952MHZ晶振频率工作。图3.4 硬件电路图第四章 软件设计在本程序中设置了两个标志count1和count2,分别初始化为1和0。按键1使得count1在1和2之间切换,按键2使得count2在14之间切换。程序检测count1的值,count1等于1时播放第一首歌曲,等于2时播放第二首。另一方面根据count2的值来切换LED的花样。count1和count2的值是互斥的,设置count1等于1、2时,count2同时设置为0;设置count2等于

8、14时,count1也同时设置为0。4.1音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。4.1.1 音调的确定不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。把C、D、E、F、G、A、B这一组音的距离分成

9、12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,CD、DE、FG、GA、AB两音之间隔着一个黑键,他们之间的距离就是全音;EF、BC两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上号或者b号的叫变化音。叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中

10、音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。2)利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。3)例如频率为

11、523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系公式如下:N=Fi2FrN:计算值;Fi:内部计时一次为1us,故其频率为1MHz;4) 其计数值的求法如下:T=65536-N=65536-Fi2Fr例如:设K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。中音DO(523Hz)。高音的DO(1046Hz)的计算值T=65536-N=65536-Fi2Fr=65536-10000002Fr=65536-500000/Fr低音DO的T

12、=65536-500000/262=63627低音DO的T=65536-500000/523=64580低音DO的T=65536-500000/1047=650595) C调各音符频率与计数值T的对照表如表4.1所示。表4.1 C调各音符频率与计数值T的对照表低音频率T参数中音频率T参数高音频率T参数Do2621908229Do523956115Do10465757Do2771805217Do554903108Do11095454Re2941701204Re587852102Re11755151Re3111608193Re62280497Re12454848Mi3301515182Mi6597

13、5991Mi13184545Fa3491433172Fa69871686Fa13974343Fa3701351162Fa74067681Fa14804141So3921276153So78463877So15683838So4151205145So83160272So16613636La4401136136La88056868La17603434La4641078129La93253664La18653232Si4941012121Si98850661Si197630304.1.2 节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。

14、“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。

15、因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。表4.2节拍与节拍码对照节拍码节拍数节拍码节拍数11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍42/1拍51又1/4拍55/8拍61又1/2拍63/4拍82拍81拍A2又1/2拍A1又1/4拍C3拍C1又1/2拍F3又3/4拍每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是

16、它的倍数,如图5.3为1/4和1/8节拍的时间设定。表4.3 1/4和1/8节拍的时间设定曲调值DELAY曲调值DELAY调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒4.1.3 编码do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍

17、,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。表4.4 简谱对应的简谱码、T值、节拍数简谱发音简谱码T值节拍码节拍数5低音SO16426011/4拍6低音LA26440022/4拍7低音TI36452433/4拍1中音DO46458041拍2中音RE56468451又1/4拍3

18、中音MI66477761又1/2拍4中音FA76482082拍5中音SO864898A2又1/2拍6中音LA964968C3拍7中音TIA65030F3又3/4拍1高音DOB650582高音REC651103高音MID651574高音FAE651785高音SOF652174.2 软件程序设计4.2.1 程序流程图及相应代码块主程序流程图图4.1 主程序流程图主程序代码:main()uchar x,w,timeLed,ad=0; /,count1=0;/流水灯无花样count2=1;/唱第一首歌/P34=0;/选取矩阵键盘的一列EA=1;/开总中断EX0=1;/开外部中断0IT0=1;/外部中断

19、0下降沿触发方式EX1=1;/开外部中断1IT1=1;/外部中断1下降沿触发方式TMOD=0x01;/定时器0工作在方式1TH0=0;TL0=0;ET0=1;while(1)if(count1!=0)switch(count1)case 1:for(w=0;w23;w+)for(timeLed=0;timeLed100;timeLed+)for(x=0;x=ad;x+)/duan=1;P1=huayang1wx;/duan=0;if(count1!=1)break;if(w14)ad-;if(w=22)ad=0;ad=0;break;case 2:for(w=0;w23;w+)for(x=0;

20、x=ad;x+)/duan=1;P1=huayang1wx;/duan=0;delay1(300);if(count1!=2)break;if(w14)ad-;if(w=22)ad=0;ad=0;break;case 3:for(w=22;w=0;w-)for(timeLed=0;timeLed100;timeLed+)for(x=0;x=ad;x+)/duan=1;P1=huayang1wx;/duan=0;if(count1!=3)break;if(w15)ad+;if(w=0)ad=0;ad=0;break;case 4:for(x=0;x0;x-) for(y=19000/18;y0;

21、y-)if(temp/16=0x00)P1=P1+0X10;P1=(P1/0X10)*0X10+0X01;if(temp/16=0x01)P1=P1+0X10;P1=(P1/0X10)*0X10+0X0F;if(temp/16=0x02)P1=P1+0X10;P1=(P1/0X10)*0X10+0X0E;if(temp/16=0x03)P1=P1+0X10;P1=(P1/0x10)*0X10+0X0D;if(temp/16=0x04)P1=P1+0X10;P1=(P1/0X10)*0X10+0X0C;if(temp/16=0x05)P1=P1+0X10;P1=(P1/0X10)*0X10+0X

22、0B;if(temp/16=0x06)P1=P1+0X10;P1=(P1/0x10)*0X10+0X0A;if(temp/16=0x07)P1=P1+0X10;P1=(P1/0x10)*0X10+0X09;if(temp/16=0x08)P1=P1+0X10;P1=(P1/0x10)*0X10+0X08;if(temp/16=0x09)P1=P1+0X10;P1=(P1/0X10)*0X10+0X7;if(temp/16=0x0A)P1=P1+0X10;P1=(P1/0X10)*0x10+0x06;void delay(uint z)/延时165MS,即十六分音符uint x,y;for(x=

23、z;x0;x-) for(y=19000;y0;y-);void delay1(uint z)/延时1MSuint x,y;for(x=z;x0;x-) for(y=112;y0;y-);第五章 测试结果5.1总体运行图图5.1 系统总体运行图 附录 程序源代码及注释#include #define uchar unsigned char#define uint unsigned int/sbit duan=P26;sbit key1=P32;/按key1可切换花样sbit key2=P33;/按key2可切换歌曲sbit fm=P21;/蜂鸣器连续的IO口sbit P34=P34;/矩阵键盘

24、的一列uchar code huayang1238=0x00, 0x10,0x01, 0x20,0x11,0x02, 0x30,0x21,0x12,0x03, 0x40,0x31,0x22,0x13,0x04, 0x50,0x41,0x32,0x23,0x14,0x05, 0x60,0x51,0x42,0x33,0x24,0x15,0x06, 0x70,0x61,0x52,0x43,0x34,0x25,0x16,0x07, 0x88,0x71,0x62,0x53,0x44,0x35,0x26,0x17, 0x98,0x89,0x72,0x63,0x54,0x45,0x36,0x27, 0xA8

25、,0x99,0x8A,0x73,0x64,0x55,0x46,0x37, 0xB8,0xA9,0x9a,0x8b,0x74,0x65,0x56,0x47, 0xc8,0xb9,0xaa,0x9b,0x8c,0x75,0x66,0x57, 0xd8,0xc9,0xba,0xab,0x9c,0x8d,0x76,0x67, 0xe8,0xd9,0xca,0xbb,0xac,0x9d,0x8e,0x77, 0xf8,0xe9,0xda,0xcb,0xbc,0xad,0x9e,0x8f, 0xf9,0xea,0xdb,0xcc,0xbd,0xae,0x9f, 0xfa,0xeb,0xdc,0xcd,0x

26、be,0xaf, 0xfb,0xec,0xdd,0xce,0xbf, 0xfc,0xed,0xde,0xcf, 0xfd,0xee,0xdf, 0xfe,0xef, 0xff;/花样1/*uchar code huayang1=0x110,0x01;*/uchar code huayang2238=0x00, 0x10,0x01, 0x20,0x11,0x02, 0x30,0x21,0x12,0x03, 0x40,0x31,0x22,0x13,0x04, 0x50,0x41,0x32,0x23,0x14,0x05, 0x60,0x51,0x42,0x33,0x24,0x15,0x06, 0x7

27、0,0x61,0x52,0x43,0x34,0x25,0x16,0x07, 0x88,0x71,0x62,0x53,0x44,0x35,0x26,0x17, 0x98,0x89,0x72,0x63,0x54,0x45,0x36,0x27, 0xA8,0x99,0x8A,0x73,0x64,0x55,0x46,0x37, 0xB8,0xA9,0x9a,0x8b,0x74,0x65,0x56,0x47, 0xc8,0xb9,0xaa,0x9b,0x8c,0x75,0x66,0x57, 0xd8,0xc9,0xba,0xab,0x9c,0x8d,0x76,0x67, 0xe8,0xd9,0xca,0

28、xbb,0xac,0x9d,0x8e,0x77, 0xf8,0xe9,0xda,0xcb,0xbc,0xad,0x9e,0x8f, 0xf9,0xea,0xdb,0xcc,0xbd,0xae,0x9f, 0xfa,0xeb,0xdc,0xcd,0xbe,0xaf, 0xfb,0xec,0xdd,0xce,0xbf, 0xfc,0xed,0xde,0xcf, 0xfd,0xee,0xdf, 0xfe,0xef, 0xff;uchar code huayang3=0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc

29、,0xfe,0xff;char code huayang4= 0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0;uchar count1;/花样标志uchar count2;/歌曲标志uchar timeh,timel,i;/-简谱-/编程规则:字节高位是简谱,低位是持续时间,/代表多少个十六分音符/1-7代表中央C调,8-E代表高八度,0代表停顿/最后的0是结束标志uchar code qnzl= /千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x9

30、4,0xA8,0x08,/前奏0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/竹林的灯火 到过的沙漠 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,/七色的国度 不断飘逸风中 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/有一种神秘 灰色的旋涡 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,/将我卷入了迷雾中 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,

31、/看不清的双手 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,/一朵花传来谁经过的温柔 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,/穿越千年的伤痛 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/只为求一个结果 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,/你留下的轮廓 指引我 0x42,0x63,0x83,0x83,0x91,0x91,/黑夜中不寂寞 0x61,0x71,0x82,0x71,0x62,0

32、x0A2,0x71,0x76,/穿越千年的哀愁 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/是你在尽头等我 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,/最美丽的感动 会值得 0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff/结束标志/用一生守候;uchar code jmszl= /寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,/自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,/白

33、色油桐风中纷飞0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,/落花似人有情 这个季节0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,/河畔的风放肆拼命地吹0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,/不断拨弄离人的眼泪0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,/那样浓烈的爱再也无法给0x22,0x12,0x11,0x12,0x11,0x12,0x1

34、2,0x14,0x26,0x32,0x26,/伤感一夜一夜0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,/当记忆的线缠绕过往支离破碎0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,/是慌乱占据了心扉 0x31,0x81,0x81,0x81,0x61,0x91,0x82,/有花儿伴着蝴蝶0x51,0x51,0x51,0x51,0x31,0x61,0x53,/孤雁可以双飞0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,/夜深人静独徘徊0x32

35、,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,/当幸福恋人寄来红色分享喜悦0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,/闭上双眼难过头也不敢回0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,/仍然捡尽寒枝不肯安歇微带着后悔0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,/寂寞沙洲我该思念谁0xff;/-

36、简谱音调对应的定时器初值-/适合11.0592M的晶振uchar code cuzhi= 0xff,0xff,/占位 0xFC,0x8E,/中央C调1-7 0xFC,0xED, 0xFD,0x43, 0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D, 0xFE,0x47,/高八度1-7 0xFE,0x76, 0xFE,0xA1, 0xFE,0xC7, 0xFE,0xD9, 0xFE,0xF9, 0xFF,0x16 ;uchar yinyue=0x01,0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x07,0x06;/将音调转化为对应的LED样式void delay1(uint z);/延时1MSvoid dela

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 装饰装潢


经营许可证编号:宁ICP备18001539号-1