




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于51單片機(jī)的SPI總線(xiàn)基于51單片機(jī)的SPI總線(xiàn) 單片機(jī)與其它芯片或設(shè)備之間的數(shù)據(jù)傳輸在單片機(jī)的應(yīng)用中具有重要的地位,單片機(jī)本身的數(shù)據(jù)傳輸接口過(guò)去主要為8位并行數(shù)據(jù)接口或異步串行通信接口,但電子技術(shù)的迅速發(fā)展使得許多新的數(shù)據(jù)傳輸接口標(biāo)準(zhǔn)不斷涌現(xiàn),大多數(shù)的51單片機(jī)并沒(méi)有在硬件中集成這些新的數(shù)據(jù)傳輸接口。SPI(Serial Peripheral Interface)總線(xiàn)是由Motorola公司提出的一種同步串行外圍接口,采用三或四根信號(hào)線(xiàn) 。51單片機(jī)一般并沒(méi)有在硬件中集成這種新的接口,所以要用軟件來(lái)進(jìn)行模擬。1 硬件設(shè)計(jì)DS1302是涓流充電時(shí)鐘芯片,內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘日歷和31字節(jié)靜態(tài)
2、RAM,實(shí)時(shí)時(shí)鐘日歷電路提供秒、分、時(shí)、日、星期、月、年的信息,每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整,時(shí)鐘操作可通過(guò)AMPM指示決定采用24或12小時(shí)格式。DS1302與單片機(jī)之間能簡(jiǎn)單地采用SPI同步串行的方式進(jìn)行通信,僅需用到三根信號(hào)線(xiàn):RES(復(fù)位),IO(數(shù)據(jù)線(xiàn)),SCLK(同步串行時(shí)鐘)。通過(guò)1602LCD顯示日期和時(shí)間,其電路如下所示。在桌面上雙擊圖標(biāo),打開(kāi)ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。單擊菜單命令“文件”“新建設(shè)計(jì)”,選擇DEFAULT模板,保存文件名為“SPI.DSN”。在器件選擇按鈕中單擊“P”按鈕,或執(zhí)行菜單命令“庫(kù)”“拾取元
3、件符號(hào)”,添加如下表所示的元件。51單片機(jī)AT89C51 一片晶體CRYSTAL 12MHz 一只瓷片電容CAP 22pF 二只電解電容CAP-ELEC 10uF 一只電阻RES 10K 一只排阻 RESPAC-8 10K 一只1602液晶顯示器 LM016L 一只晶體CRYSTAL 32.768KHz 一只時(shí)鐘芯片DS1302 一片電池BATTERY 3V 一只若用Proteus軟件進(jìn)行仿真,則上圖中的兩只晶體、U1的復(fù)位電路和U1的31腳以及電池都可以不畫(huà),它們大都是默認(rèn)的。在ISIS原理圖編輯窗口中放置元件,再單擊工具箱中元件終端圖標(biāo),在對(duì)象選擇器中單擊POWER或GROUND放置電源或
4、地。放置好元件后,布好線(xiàn)。左鍵雙擊各元件,設(shè)置相應(yīng)元件參數(shù),完成電路圖的設(shè)計(jì)。2 軟件設(shè)計(jì)采用AT89C51以及日歷芯片DS1302和1602LCD組成時(shí)鐘的流程圖如下所示。本例主要目的是如何用軟件模擬SPI總線(xiàn)對(duì)DS1302進(jìn)行讀、寫(xiě),其詳細(xì)詳細(xì)C51程序如下。/實(shí)例:基于DS1302的日歷時(shí)鐘#include<reg51.h> /包含單片機(jī)寄存器的頭文件#include<intrins.h> /包含_nop_()函數(shù)定義的頭文件/*以下是DS1302芯片的操作程序*/unsigned char code digit10="0123456789"
5、/定義字符數(shù)組顯示數(shù)字sbit DATA="P1"1; /位定義1302的數(shù)據(jù)輸出端定義在P1.1引腳sbit RST="P1"2; /位定義1302的復(fù)位端口定義在P1.2引腳sbit SCLK="P1"0; /位定義1302的時(shí)鐘輸出端口定義在P1.0引腳/*函數(shù)功能:延時(shí)若干微秒入口參數(shù):n*/ void delaynus(unsigned char n)unsigned char i; for(i=0;i<n;i+) ;/*函數(shù)功能:向1302寫(xiě)一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):dat*/ void Write1302(unsign
6、ed char dat)unsigned char i; SCLK=0; /拉低SCLK,為脈沖上升沿寫(xiě)入數(shù)據(jù)做好準(zhǔn)備 delaynus(2); /稍微等待,使硬件做好準(zhǔn)備 for(i=0;i<8;i+) /連續(xù)寫(xiě)8個(gè)二進(jìn)制位數(shù)據(jù) DATA=dat&0x01; /取出dat的第0位數(shù)據(jù)寫(xiě)入1302delaynus(2); /稍微等待,使硬件做好準(zhǔn)備SCLK=1; /上升沿寫(xiě)入數(shù)據(jù)delaynus(2); /稍微等待,使硬件做好準(zhǔn)備SCLK=0; /重新拉低SCLK,形成脈沖dat>>=1; /將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫(xiě)入下一個(gè)數(shù)據(jù)位 /*函數(shù)功能:根據(jù)命令字,
7、向1302寫(xiě)一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd,儲(chǔ)存命令字;dat,儲(chǔ)存待寫(xiě)的數(shù)據(jù)*/ void WriteSet1302(unsigned char Cmd,unsigned char dat)RST=0; /禁止數(shù)據(jù)傳遞 SCLK=0; /確保寫(xiě)數(shù)居前SCLK被拉低RST=1; /啟動(dòng)數(shù)據(jù)傳輸delaynus(2); /稍微等待,使硬件做好準(zhǔn)備Write1302(Cmd); /寫(xiě)入命令字Write1302(dat); /寫(xiě)數(shù)據(jù)SCLK=1; /將時(shí)鐘電平置于已知狀態(tài)RST=0; /禁止數(shù)據(jù)傳遞/*函數(shù)功能:從1302讀一個(gè)字節(jié)數(shù)據(jù)出口參數(shù):dat*/ unsigned char Read1302
8、(void)unsigned char i,dat;delaynus(2); /稍微等待,使硬件做好準(zhǔn)備for(i=0;i<8;i+) /連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù)dat>>=1; /將dat的各數(shù)據(jù)位右移1位if(DATA=1) /如果讀出的數(shù)據(jù)是1dat|=0x80; /將1取出,寫(xiě)在dat的最高位SCLK=1; /將SCLK置于高電平,為下降沿讀出delaynus(2); /稍微等待SCLK=0; /拉低SCLK,形成脈沖下降沿delaynus(2); /稍微等待 return dat; /將讀出的數(shù)據(jù)返回/*函數(shù)功能:根據(jù)命令字,從1302讀取一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd
9、 出口參數(shù):dat*/ unsigned char ReadSet1302(unsigned char Cmd)unsigned char dat; RST=0; /拉低RST SCLK=0; /確保寫(xiě)數(shù)居前SCLK被拉低 RST=1; /啟動(dòng)數(shù)據(jù)傳輸 Write1302(Cmd); /寫(xiě)入命令字 dat=Read1302(); /讀出數(shù)據(jù) SCLK=1; /將時(shí)鐘電平置于已知狀態(tài) RST=0; /禁止數(shù)據(jù)傳遞 return dat; /將讀出的數(shù)據(jù)返回/*函數(shù)功能: 1302進(jìn)行初始化設(shè)置*/ void Init_DS1302(void)WriteSet1302(0x8E,0x00); /寫(xiě)
10、入不保護(hù)指令 WriteSet1302(0x80,(0/10)<<4|(0%10); /寫(xiě)入秒的初始值WriteSet1302(0x82,(0/10)<<4|(0%10); /寫(xiě)入分的初始值WriteSet1302(0x84,(12/10)<<4|(12%10); /寫(xiě)入小時(shí)的初始值WriteSet1302(0x86,(24/10)<<4|(24%10); /寫(xiě)入日的初始值WriteSet1302(0x88,(4/10)<<4|(4%10); /寫(xiě)入月的初始值WriteSet1302(0x8c,(10/10)<<4|(10
11、%10); /寫(xiě)入年的初始值/*以下是對(duì)液晶模塊的操作程序*/sbit RS="P2"0; /寄存器選擇位,將RS位定義為P2.0引腳sbit RW="P2"1; /讀寫(xiě)選擇位,將RW位定義為P2.1引腳sbit E="P2"2; /使能信號(hào)位,將E位定義為P2.2引腳sbit BF="P0"7; /忙碌標(biāo)志位,將BF位定義為P0.7引腳/*函數(shù)功能:延時(shí)1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是1毫秒*/void delay1ms()unsigned char
12、 i,j;for(i=0;i<10;i+)for(j=0;j<33;j+) ;/*函數(shù)功能:延時(shí)若干毫秒入口參數(shù):n*/void delaynms(unsigned char n)unsigned char i;for(i=0;i<n;i+) delay1ms();/*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙*/bit BusyTest(void) bit result; RS=0; /根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài) RW=1; E=1; /E=1,才允許讀寫(xiě) _nop_(); /空操作 _nop
13、_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 result=BF; /將忙碌標(biāo)志電平賦給result E=0; /將E恢復(fù)低電平 _nop_(); _nop_(); _nop_(); _nop_(); return result;/*函數(shù)功能:將模式設(shè)置指令或顯示地址寫(xiě)入液晶模塊入口參數(shù):dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待RS=0; /根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫(xiě)入指令RW=0; E=0; /E置低電平,為了讓
14、E從0到1發(fā)生正跳變,所以應(yīng)先置"0"_nop_();_nop_(); /空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間P0=dictate; /將數(shù)據(jù)送入P0口,即寫(xiě)入指令或地址_nop_();_nop_();_nop_();_nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間E=1; /E置高電平_nop_();_nop_();_nop_();_nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間E=0; /當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令 _nop_();_nop_();_nop_();_nop_(); /*函數(shù)功能:指定字符顯示的實(shí)際地址入口參數(shù):x*/voi
15、d WriteAddress(unsigned char x)WriteInstruction(x|0x80); /顯示位置的確定方法為"80H+地址碼x"/*函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫(xiě)入液晶模塊入口參數(shù):y(為字符常量)*/void WriteData(unsigned char y)while(BusyTest()=1); RS=1; /RS為高電平,RW為低電平時(shí),可以寫(xiě)入數(shù)據(jù)RW=0;E=0; /E置低電平,為了讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0" P0=y; /將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫(xiě)入液晶模塊_nop_();_nop
16、_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間E=1; /E置高電平_nop_();_nop_();_nop_();_nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間E=0; /當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令 _nop_();_nop_(); _nop_();_nop_();/*函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化設(shè)置*/void LcdInitiate(void) delaynms(15); /首次寫(xiě)指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間 WriteInstruction(0x38); /顯示模式設(shè)置:16×2顯示,5
17、5;7點(diǎn)陣,8位數(shù)據(jù) delaynms(5); /給硬件一點(diǎn)反應(yīng)時(shí)間 WriteInstruction(0x38); delaynms(5); /給硬件一點(diǎn)反應(yīng)時(shí)間 WriteInstruction(0x38); /連續(xù)三次,確保初始化成功 delaynms(5); /給硬件一點(diǎn)反應(yīng)時(shí)間 WriteInstruction(0x0c); /顯示模式設(shè)置:顯示開(kāi),無(wú)光標(biāo),光標(biāo)不閃爍delaynms(5); /給硬件一點(diǎn)反應(yīng)時(shí)間WriteInstruction(0x06); /顯示模式設(shè)置:光標(biāo)右移,字符不移delaynms(5); /給硬件一點(diǎn)反應(yīng)時(shí)間WriteInstruction(0x01);
18、 /清屏幕指令,將以前的顯示內(nèi)容清除delaynms(5); /給硬件一點(diǎn)反應(yīng)時(shí)間/*以下是1302數(shù)據(jù)的顯示程序*/*函數(shù)功能:顯示秒入口參數(shù):x*/ void DisplaySecond(unsigned char x)unsigned char i,j; /i,j分別儲(chǔ)存秒的十位和個(gè)位i=x/10;/取十位j=x%10;/取個(gè)位 WriteAddress(0x49); /寫(xiě)顯示地址,將在第2行第7列開(kāi)始顯示W(wǎng)riteData(digiti); /將十位數(shù)字的字符常量寫(xiě)入LCDWriteData(digitj); /將個(gè)位數(shù)字的字符常量寫(xiě)入LCDdelaynms(50); /延時(shí)1ms給硬
19、件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)功能:顯示分鐘入口參數(shù):x*/ void DisplayMinute(unsigned char x) unsigned char i,j; /i,j分別儲(chǔ)存分鐘的十位和個(gè)位i=x/10;/取十位j=x%10;/取個(gè)位 WriteAddress(0x46); /寫(xiě)顯示地址,將在第2行第7列開(kāi)始顯示W(wǎng)riteData(digiti); /將十位數(shù)字的字符常量寫(xiě)入LCDWriteData(digitj); /將個(gè)位數(shù)字的字符常量寫(xiě)入LCDdelaynms(50); /延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)功能:顯示小時(shí)入口參數(shù):x*/ void DisplayHour(un
20、signed char x) unsigned char i,j; /i,j分別儲(chǔ)存小時(shí)的十位和個(gè)位i=x/10;/取十位j=x%10;/取個(gè)位 WriteAddress(0x43); /寫(xiě)顯示地址,將在第2行第7列開(kāi)始顯示W(wǎng)riteData(digiti); /將十位數(shù)字的字符常量寫(xiě)入LCDWriteData(digitj); /將個(gè)位數(shù)字的字符常量寫(xiě)入LCDdelaynms(50); /延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)功能:顯示日入口參數(shù):x*/ void DisplayDay(unsigned char x) unsigned char i,j; /i,j分別儲(chǔ)存日的十位和個(gè)位i=
21、x/10;/取十位j=x%10;/取個(gè)位 WriteAddress(0x0d); /寫(xiě)顯示地址,將在第1行第14列開(kāi)始顯示W(wǎng)riteData(digiti); /將十位數(shù)字的字符常量寫(xiě)入LCDWriteData(digitj); /將個(gè)位數(shù)字的字符常量寫(xiě)入LCDdelaynms(50); /給硬件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)功能:顯示月入口參數(shù):x*/ void DisplayMonth(unsigned char x) unsigned char i,j; /i,j分別儲(chǔ)存月的十位和個(gè)位i=x/10;/取十位j=x%10;/取個(gè)位 WriteAddress(0x0a); /寫(xiě)顯示地址,將在第1行第
22、11列開(kāi)始顯示W(wǎng)riteData(digiti); /將十位數(shù)字的字符常量寫(xiě)入LCDWriteData(digitj); /將個(gè)位數(shù)字的字符常量寫(xiě)入LCDdelaynms(50); /給硬件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)功能:顯示年入口參數(shù):x*/ void DisplayYear(unsigned char x) unsigned char i,j; /i,j分別儲(chǔ)存年的十位和個(gè)位i=x/10;/取十位j=x%10;/取個(gè)位 WriteAddress(0x07); /寫(xiě)顯示地址,將在第1行第8列開(kāi)始顯示W(wǎng)riteData(digiti); /將十位數(shù)字的字符常量寫(xiě)入LCDWriteData(digi
23、tj); /將個(gè)位數(shù)字的字符常量寫(xiě)入LCDdelaynms(50); /給硬件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)功能:主函數(shù)*/ void main(void)unsigned char second,minute,hour,day,month,year; /分別儲(chǔ)存秒、分、小時(shí),日,月,年 unsigned char ReadValue; /儲(chǔ)存從1302讀取的數(shù)據(jù) LcdInitiate(); /將液晶初始化 WriteAddress(0); /寫(xiě)Date的顯示地址,將在第1行第1列開(kāi)始顯示 WriteData('D'); /將字符常量寫(xiě)入LCD WriteData('a
24、9;); /將字符常量寫(xiě)入LCD WriteData('t'); /將字符常量寫(xiě)入LCD WriteData('e'); /將字符常量寫(xiě)入LCD WriteData(':'); /將字符常量寫(xiě)入LCDWriteData('2'); /將字符常量寫(xiě)入LCDWriteData('0'); /將字符常量寫(xiě)入LCD WriteAddress(0x09); /寫(xiě)年月分隔符的顯示地址 WriteData('-'); /將字符常量寫(xiě)入LCD WriteAddress(0x0c); /寫(xiě)月日分隔符的顯示地址 Wri
25、teData('-'); /將字符常量寫(xiě)入LCD WriteAddress(0x45); /寫(xiě)小時(shí)與分鐘分隔符的顯示地址 WriteData(':'); /將字符常量寫(xiě)入LCD WriteAddress(0x48); /寫(xiě)分鐘與秒分隔符的顯示地址 WriteData(':'); /將字符常量寫(xiě)入LCD Init_DS1302(); /將1302初始化 while(1) ReadValue = ReadSet1302(0x81); /從秒寄存器讀數(shù)據(jù) second=(ReadValue&0x70)>>4)*10 + (ReadV
26、alue&0x0F);/將讀出數(shù)據(jù)轉(zhuǎn)化 DisplaySecond(second); /顯示秒 ReadValue = ReadSet1302(0x83); /從分寄存器讀數(shù)據(jù) minute=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /將讀出數(shù)據(jù)轉(zhuǎn)化 DisplayMinute(minute); /顯示分 ReadValue = ReadSet1302(0x85); /從時(shí)寄存器讀數(shù)據(jù) hour=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /
27、將讀出數(shù)據(jù)轉(zhuǎn)化 DisplayHour(hour); /顯示小時(shí) ReadValue = ReadSet1302(0x87); /從日寄存器讀數(shù)據(jù) day=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /將讀出數(shù)據(jù)轉(zhuǎn)化 DisplayDay(day); /顯示日 ReadValue = ReadSet1302(0x89); /從月寄存器讀數(shù)據(jù) month=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); /將讀出數(shù)據(jù)轉(zhuǎn)化 DisplayMonth(month)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)倉(cāng)庫(kù)與在線(xiàn)分析試題及答案
- 2025屆江蘇省宿遷市沭陽(yáng)廣宇學(xué)校八下數(shù)學(xué)期末監(jiān)測(cè)試題含解析
- 網(wǎng)絡(luò)協(xié)議分析基礎(chǔ)試題及答案
- 計(jì)算機(jī)操作技能試題及答案
- 網(wǎng)絡(luò)管理系統(tǒng)平臺(tái)wahl試題及答案
- 法學(xué)概論考試的時(shí)間管理策略與試題及答案
- 幼兒園日常生活中的教研活動(dòng)計(jì)劃
- 法學(xué)概論與國(guó)際法的關(guān)系試題及答案
- 項(xiàng)目進(jìn)度跟蹤的有效方法計(jì)劃
- 2024年濰坊市寒亭區(qū)市場(chǎng)監(jiān)督管理局招聘真題
- 夜場(chǎng)水煙合作協(xié)議書(shū)
- 河南省青桐鳴大聯(lián)考普通高中2024-2025學(xué)年高三考前適應(yīng)性考試地理試題及答案
- 管道勞務(wù)分包協(xié)議書(shū)
- 2025年中考理化生實(shí)驗(yàn)操作考試考務(wù)培訓(xùn)大綱
- 拆遷服務(wù)方案
- 2025-2030中國(guó)鋰電子電池行業(yè)市場(chǎng)深度調(diào)研及前景趨勢(shì)與投資研究報(bào)告
- 天津市部分區(qū)小學(xué)2025年小升初數(shù)學(xué)自主招生備考卷含解析
- 2021年高考地理試卷(全國(guó)甲卷)(空白卷)
- 成人經(jīng)鼻胃管喂養(yǎng)臨床實(shí)踐指南
- 《市場(chǎng)調(diào)查與預(yù)測(cè)》說(shuō)課
- 李家沱大橋健康監(jiān)測(cè)實(shí)施方案
評(píng)論
0/150
提交評(píng)論