《手把手教你學(xué)51單片機(jī)-C語言版》之十五----實(shí)時(shí)時(shí)鐘DS1302
1.1BCD碼的概念
在日常生產(chǎn)生活中用的最多的數(shù)字是十進(jìn)制數(shù)字,而單片機(jī)系統(tǒng)的所有數(shù)據(jù)本質(zhì)上都是二進(jìn)制的,所以聰明的前輩們就給我們創(chuàng)造了BCD碼。
BCD碼(Binary-CodedDecimal)亦稱二進(jìn)碼十進(jìn)制數(shù)或二-十進(jìn)制代碼。用4位二進(jìn)制數(shù)來表示1位十進(jìn)制數(shù)中的0~9這10個(gè)數(shù)字。是一種二進(jìn)制的數(shù)字編碼形式,用二進(jìn)制編碼的十進(jìn)制代碼。BCD碼這種編碼形式利用了四個(gè)位元來儲(chǔ)存一個(gè)十進(jìn)制的數(shù)碼,使二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換得以快捷的進(jìn)行。我們前邊講過十六進(jìn)制和二進(jìn)制本質(zhì)上是一回事,十六進(jìn)制僅僅是二進(jìn)制的一種縮寫形式而已。而十進(jìn)制的一位數(shù)字,從0到9,最大的數(shù)字就是9,再加1就要進(jìn)位,所以用4位二進(jìn)制表示十進(jìn)制,就是從0b0000到0b1001,不存在0b1010、0b1011、0b1100、0b1101、0b1110、0b1111這6個(gè)數(shù)字。BCD碼如果到了0b1001,再加1的話,數(shù)字就變成0b00010000這樣了,相當(dāng)于用了8位的二進(jìn)制數(shù)字表示了2位的十進(jìn)制數(shù)字。
BCD碼的應(yīng)用還是非常廣泛的,比如我們這節(jié)課要學(xué)的實(shí)時(shí)時(shí)鐘,日期時(shí)間在時(shí)鐘芯片中的存儲(chǔ)格式就是BCD碼,當(dāng)我們需要把它記錄的時(shí)間轉(zhuǎn)換成可以直觀顯示的ASCII碼時(shí)(比如在液晶上顯示),就可以省去一步由二進(jìn)制的整型數(shù)到ASCII的轉(zhuǎn)換過程,而直接取出表示十進(jìn)制1位數(shù)字的4個(gè)二進(jìn)制位然后再加上0x30就可組成一個(gè)ASCII碼字節(jié)了,這樣就會(huì)方便的多,在后面的實(shí)際例程中將看到這個(gè)簡單的轉(zhuǎn)換。
1.2SPI時(shí)序初步認(rèn)識(shí)
UART、I2C和SPI是單片機(jī)系統(tǒng)中最常用的三種通信協(xié)議。前邊我們已經(jīng)學(xué)了UART和I2C通信協(xié)議,這節(jié)課我們來學(xué)習(xí)剩下的SPI通信協(xié)議。
SPI是英語SerialPeripheralInterface的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI是一種高速的、全雙工、同步通信總線,標(biāo)準(zhǔn)的SPI也僅僅使用4個(gè)引腳,常用于單片機(jī)和EEPROM、FLASH、實(shí)時(shí)時(shí)鐘、數(shù)字信號(hào)處理器等器件的通信。SPI通信原理比I2C要簡單,它主要是主從方式通信,這種模式通常只有一個(gè)主機(jī)和一個(gè)或者多個(gè)從機(jī),標(biāo)準(zhǔn)的SPI是4根線,分別是SSEL(片選,也寫作SCS)、SCLK(時(shí)鐘,也寫作SCK)、MOSI(主機(jī)輸出從機(jī)輸入MasterOutput/SlaveInput)和MISO(主機(jī)輸入從機(jī)輸出MasterInput/SlaveOutput)。
SSEL:從設(shè)備片選使能信號(hào)。如果從設(shè)備是低電平使能的話,當(dāng)拉低這個(gè)引腳后,從設(shè)備就會(huì)被選中,主機(jī)和這個(gè)被選中的從機(jī)進(jìn)行通信。
SCLK:時(shí)鐘信號(hào),由主機(jī)產(chǎn)生,和I2C通信的SCL有點(diǎn)類似。
MOSI:主機(jī)給從機(jī)發(fā)送指令或者數(shù)據(jù)的通道。
MISO:主機(jī)讀取從機(jī)的狀態(tài)或者數(shù)據(jù)的通道。
在某些情況下,我們也可以用3根線的SPI或者2根線的SPI進(jìn)行通信。比如主機(jī)只給從機(jī)發(fā)送命令,從機(jī)不需要回復(fù)數(shù)據(jù)的時(shí)候,那么MISO就可以不要;而在主機(jī)只讀取從機(jī)的數(shù)據(jù),不需要給從機(jī)發(fā)送指令的時(shí)候,那MOSI就可以不要;當(dāng)一個(gè)主機(jī)一個(gè)從機(jī)的時(shí)候,從機(jī)的片選有時(shí)可以固定為有效電平而一直處于使能狀態(tài),那么SSEL就可以不要;此時(shí)如果再加上主機(jī)只給從機(jī)發(fā)送數(shù)據(jù),那么SSEL和MISO都可以不要;如果主機(jī)只讀取從機(jī)送來的數(shù)據(jù),SSEL和MOSI都可以不要。
3線和2線的SPI大家要知道怎么回事,實(shí)際使用也是有應(yīng)用的,但是當(dāng)我們提及SPI的時(shí)候,一般都是指標(biāo)準(zhǔn)SPI,都是指4根線的這種形式。
SPI通信的主機(jī)也是我們的單片機(jī),在讀寫數(shù)據(jù)時(shí)序的過程中,有四種模式,要了解這四種模式,首先我們得學(xué)習(xí)以下兩個(gè)名詞。
CPOL:ClockPolarity,就是時(shí)鐘的極性。時(shí)鐘的極性是什么概念呢?通信的整個(gè)過程分為空閑時(shí)刻和通信時(shí)刻,如果SCLK在數(shù)據(jù)發(fā)送之前和之后的空閑狀態(tài)是高電平,那么就是CPOL=1,如果空閑狀態(tài)SCLK是低電平,那么就是CPOL=0。
CPHA:ClockPhase,就是時(shí)鐘的相位。
主機(jī)和從機(jī)要交換數(shù)據(jù),就牽涉到一個(gè)問題,即主機(jī)在什么時(shí)刻輸出數(shù)據(jù)到MOSI上而從機(jī)在什么時(shí)刻采樣這個(gè)數(shù)據(jù),或者從機(jī)在什么時(shí)刻輸出數(shù)據(jù)到MISO上而主機(jī)什么時(shí)刻采樣這個(gè)數(shù)據(jù)。同步通信的一個(gè)特點(diǎn)就是所有數(shù)據(jù)的變化和采樣都是伴隨著時(shí)鐘沿進(jìn)行的,也就是說數(shù)據(jù)總是在時(shí)鐘的邊沿附近變化或被采樣。而一個(gè)時(shí)鐘周期必定包含了一個(gè)上升沿和一個(gè)下降沿,這是周期的定義所決定的,只是這兩個(gè)沿的先后并無規(guī)定。又因?yàn)閿?shù)據(jù)從產(chǎn)生的時(shí)刻到它的穩(wěn)定是需要一定時(shí)間的,那么,如果主機(jī)在上升沿輸出數(shù)據(jù)到MOSI上,從機(jī)就只能在下降沿去采樣這個(gè)數(shù)據(jù)了。反之如果一方在下降沿輸出數(shù)據(jù),那么另一方就必須在上升沿采樣這個(gè)數(shù)據(jù)。
CPHA=1,就表示數(shù)據(jù)的輸出是在一個(gè)時(shí)鐘周期的第一個(gè)沿上,至于這個(gè)沿是上升沿還是下降沿,這要視CPOL的值而定,CPOL=1那就是下降沿,反之就是上升沿。那么數(shù)據(jù)的采樣自然就是在第二個(gè)沿上了。
CPHA=0,就表示數(shù)據(jù)的采樣是在一個(gè)時(shí)鐘周期的第一個(gè)沿上,同樣它是什么沿由CPOL決定。那么數(shù)據(jù)的輸出自然就在第二個(gè)沿上了。仔細(xì)想一下,這里會(huì)有一個(gè)問題:就是當(dāng)一幀數(shù)據(jù)開始傳輸?shù)谝粋€(gè)bit時(shí),在第一個(gè)時(shí)鐘沿上就采樣該數(shù)據(jù)了,那么它是在什么時(shí)候輸出來的呢?有兩種情況:一是SSEL使能的邊沿,二是上一幀數(shù)據(jù)的最后一個(gè)時(shí)鐘沿,有時(shí)兩種情況還會(huì)同時(shí)生效。
我們以CPOL=1/CPHA=1為例,把時(shí)序圖畫出來給大家看一下,如圖15-1所示。
15-1SPI通信時(shí)序圖(一)
大家看圖15-1所示,當(dāng)數(shù)據(jù)未發(fā)送時(shí)以及發(fā)送完畢后,SCK都是高電平,因此CPOL=1??梢钥闯?,在SCK第一個(gè)沿的時(shí)候,MOSI和MISO會(huì)發(fā)生變化,同時(shí)SCK第二個(gè)沿的時(shí)候,數(shù)據(jù)是穩(wěn)定的,此刻采樣數(shù)據(jù)是合適的,也就是上升沿即一個(gè)時(shí)鐘周期的后沿鎖存讀取數(shù)據(jù),即CPHA=1。注意最后最隱蔽的SSEL片選,這個(gè)引腳通常用來決定是哪個(gè)從機(jī)和主機(jī)進(jìn)行通信。剩余的三種模式,我們把圖畫出來,簡化起見把MOSI和MISO合在一起了,大家仔細(xì)對(duì)照看看研究一下,把所有的理論過程都弄清楚,有利于你對(duì)SPI通信的深刻理解,如圖15-2所示。
15-2SPI通信時(shí)序圖(二)
在時(shí)序上,SPI是不是比I2C要簡單的多?沒有了起始、停止和應(yīng)答,UART和SPI在通信的時(shí)候,只負(fù)責(zé)通信,不管是否通信成功,而I2C卻要通過應(yīng)答信息來獲取通信成功失敗的信息,所以相對(duì)來說,UART和SPI的時(shí)序都要比I2C簡單一些。
1.3實(shí)時(shí)時(shí)鐘芯片DS1302
DS1302是個(gè)實(shí)時(shí)時(shí)鐘芯片,我們可以用單片機(jī)寫入時(shí)間或者讀取當(dāng)前的時(shí)間數(shù)據(jù),下面帶著大家通過閱讀這個(gè)芯片的數(shù)據(jù)手冊(cè)來學(xué)習(xí)和掌握這個(gè)器件。
由于IT技術(shù)國際化比較強(qiáng),因此數(shù)據(jù)手冊(cè)絕大多數(shù)都是英文的,導(dǎo)致很多英語基礎(chǔ)不好的同學(xué)看到英文手冊(cè)頭就大了。這里我要告訴大家的是,只要精神不退縮,方法總比困難多,很多英語水平不高的,看數(shù)據(jù)手冊(cè)照樣完全沒問題,因?yàn)槲覀冇玫降膶I(yè)詞匯也就那么幾個(gè),多看幾次就認(rèn)識(shí)了。我們現(xiàn)在不是考試,因此大家可以充分利用一些英文翻譯軟件,翻譯過來的中文意思有時(shí)候可能不是那么準(zhǔn)確,那你就把翻譯的內(nèi)容和英文手冊(cè)里的一些圖表比較參考學(xué)習(xí)。此外數(shù)據(jù)手冊(cè)除了介紹性的說明外,一般還會(huì)配相關(guān)的圖形或者表格,結(jié)合起來看也有利于理解手冊(cè)所表達(dá)的意思。這節(jié)課我會(huì)把DS1302的英文資料盡可能的用比較便于理解的方式給大家表達(dá)出來,同學(xué)們可以把我的表達(dá)和英文手冊(cè)多做一下對(duì)比,盡可能快的開始學(xué)會(huì)了解英文手冊(cè)。
1.3.1DS1302的特點(diǎn)
DS1302是DALLAS(達(dá)拉斯)公司推出的一款涓流充電時(shí)鐘芯片,2001年DALLAS被MAXIM(美信)收購,因此我們看到的DS1302的數(shù)據(jù)手冊(cè)既有DALLAS的標(biāo)志,又有MAXIM的標(biāo)志,大家了解即可。
DS1302實(shí)時(shí)時(shí)鐘芯片廣泛應(yīng)用于電話、傳真、便攜式儀器等產(chǎn)品領(lǐng)域,它的主要性能指標(biāo)如下:
1、DS1302是一個(gè)實(shí)時(shí)時(shí)鐘芯片,可以提供秒、分、小時(shí)、日期、月、年等信息,并且還有軟件自動(dòng)調(diào)整的能力,可以通過配置AM/PM來決定采用24小時(shí)格式還是12小時(shí)格式。
2、擁有31字節(jié)數(shù)據(jù)存儲(chǔ)RAM。
3、串行I/O通信方式,相對(duì)并行來說比較節(jié)省IO口的使用。
4、DS1302的工作電壓比較寬,在2.0~5.5V的范圍內(nèi)都可以正常工作。
5、DS1302這種時(shí)鐘芯片功耗一般都很低,它在工作電壓2.0V的時(shí)候,工作電流小于300nA。
6、DS1302共有8個(gè)引腳,有兩種封裝形式,一種是DIP-8封裝,芯片寬度(不含引腳)是300mil,一種是SOP-8封裝,有兩種寬度,一種是150mil,一種是208mil。我們看一下DS1302的引腳封裝圖,如圖15-3所示。
圖15-3DS1302封裝圖
所謂的DIP(DualIn-linePackage)封裝,就是雙列直插式封裝技術(shù),就如同我們開發(fā)板上的STC89C52單片機(jī),就是個(gè)典型的DIP封裝,當(dāng)然這個(gè)STC89C52還有其它的封裝樣式,為了方便學(xué)習(xí)使用,我們采用的是DIP封裝。而74HC245、74HC138、24C02、DS1302我們用的都是SOP(SmallOut-LinePackage)封裝,是一種芯片兩側(cè)引出L形引腳的封裝技術(shù),大家可以看看開發(fā)板上的芯片,了解一下這些常識(shí)性知識(shí)。
7、當(dāng)供電電壓是5V的時(shí)候,兼容標(biāo)準(zhǔn)的TTL電平標(biāo)準(zhǔn),這里的意思是,可以完美的和單片機(jī)進(jìn)行通信。
8、由于DS1302是DS1202的升級(jí)版本,所以所有的功能都兼容DS1202。此外DS1302有兩個(gè)電源輸入,一個(gè)是主電源,另外一個(gè)是備用電源,比如可以用電池或者大電容,這樣做是為了在系統(tǒng)掉電的情況下,我們的時(shí)鐘還會(huì)繼續(xù)走。如果使用的是充電電池,還可以在正常工作時(shí),設(shè)置充電功能,給我們的備用電池進(jìn)行充電。
DS1302的特點(diǎn)第二條“擁有31字節(jié)數(shù)據(jù)存儲(chǔ)RAM”,這是DS1302額外存在的資源。這31字節(jié)的RAM相當(dāng)于一個(gè)存儲(chǔ)器一樣,我們編寫單片機(jī)程序的時(shí)候,可以把我們想存儲(chǔ)的數(shù)據(jù)存儲(chǔ)在DS1302里邊,需要的時(shí)候讀出來,這塊功能和EEPROM有點(diǎn)類似,相當(dāng)于一個(gè)掉電丟失數(shù)據(jù)的“EEPROM”,如果我們的時(shí)鐘電路加上備用電池,那么這31個(gè)字節(jié)的RAM就可以替代EEPROM的功能了。這31字節(jié)的RAM功能使用很少,所以在這里我們就不講了,大家了解即可。
1.3.2DS1302的硬件信息
我們平時(shí)所用的不管是單片機(jī),還是其它一些電子器件,根據(jù)使用條件的約束,可以分為商業(yè)級(jí)和工業(yè)級(jí),主要是工作溫度范圍的不同,DS1302的購買信息如下圖15-4所示。
圖15-4DS1302訂購信息
我們?cè)谟嗁廌S1302的時(shí)候,就可以根據(jù)圖15-4所標(biāo)識(shí)的來跟銷售廠家溝通,商業(yè)級(jí)的工作溫度范圍略窄,是0~70攝氏度,而工業(yè)級(jí)可以工作在零下40~85攝氏度。TOPMARK就是指在芯片上印的字。
DS1302一共有8個(gè)引腳,下邊要根據(jù)引腳分布圖和典型電路圖來介紹一下每個(gè)引腳的功能,如圖15-5和圖15-6所示。
圖15-5DS1302引腳圖 圖15-6DS1302典型電路
1腳VCC2是主電源正極的引腳,2腳X1和3腳X2是晶振輸入和輸出引腳,4腳GND是負(fù)極,5腳CE是使能引腳,接單片機(jī)的IO口,6腳I/O是數(shù)據(jù)傳輸引腳,接單片機(jī)的IO口,7腳SCLK是通信時(shí)鐘引腳,接單片機(jī)的IO口,8腳VCC1是備用電源引腳??紤]到KST-51開發(fā)板是一套以學(xué)習(xí)為目的的板子,加上備用電池對(duì)航空運(yùn)輸和攜帶不方便,所以8腳沒有接備用電池,而是接了一個(gè)10uF的電容,這個(gè)電容就相當(dāng)于一個(gè)電量很小的電池,經(jīng)過試驗(yàn)測(cè)量得出其可以在系統(tǒng)掉電后仍維持DS1302運(yùn)行1分鐘左右,如果大家想運(yùn)行時(shí)間再長,可以加大電容的容量或者換成備用電池,如果掉電后不需要它再維持運(yùn)行,也可以干脆懸空,如圖15-7和圖15-8所示。
圖15-7DS1302電容作備用電源 圖15-8DS1302無備用電源
涓流充電功能,基本也用不到,因?yàn)閷?shí)際應(yīng)用中很少會(huì)選擇可充電電池作為備用電源,成本太高,本課程也不講了,大家作為選學(xué)即可。我們使用的時(shí)候直接用5V電源接一個(gè)二極管,在主電源上電的情況下給電容充電,在主電源掉電的情況下,二極管可以防止電容向主電路放電,而僅用來維持DS1302的供電,這種電路的最大用處是在電池供電系統(tǒng)中更換主電池的時(shí)候保持實(shí)時(shí)時(shí)鐘的運(yùn)行不中斷,1分鐘的時(shí)間對(duì)于更換電池足夠了。此外,通過我們的使用經(jīng)驗(yàn),在DS1302的主電源引腳串聯(lián)一個(gè)1K電阻可以有效的防止電源對(duì)DS1302的沖擊,R6就是這個(gè)電阻,而R9、R26、R32都是上拉電阻。
我們把8個(gè)引腳功能分別介紹,如表15-1所示。
表15-1DS1302引腳功能圖
引腳編號(hào) | 引腳名稱 | 引腳功能 |
1 | Vcc2 | 主電源引腳,當(dāng)Vcc2比Vcc1高0.2V以上時(shí),DS1302由Vcc2供電,當(dāng)Vcc2低于Vcc1時(shí),由Vcc1供電。 |
2 | X1 | 這兩個(gè)引腳需要接一個(gè)32.768K的晶振,給DS1302提供一個(gè)基準(zhǔn)。特別注意,要求這個(gè)晶振的引腳負(fù)載電容必須是6pF,而不是要加6pF的電容。如果使用有源晶振的話,接到X1上即可,X2懸空。 |
3 | X2 | |
4 | GND | 接地。 |
5 | CE | DS1302的使能輸入引腳。當(dāng)讀寫DS1302的時(shí)候,這個(gè)引腳必須是高電平,DS1302這個(gè)引腳內(nèi)部有一個(gè)40k的下拉電阻。 |
6 | I/O | 這個(gè)引腳是一個(gè)雙向通信引腳,讀寫數(shù)據(jù)都是通過這個(gè)引腳完成。DS1302這個(gè)引腳的內(nèi)部含有一個(gè)40k的下拉電阻。 |
7 | SCLK | 輸入引腳。SCLK是用來作為通信的時(shí)鐘信號(hào)。DS1302這個(gè)引腳的內(nèi)部含有一個(gè)40k的下拉電阻。 |
8 | Vcc1 | 備用電源引腳。 |
DS1302電路的一個(gè)重點(diǎn)就是晶振電路,它所使用的晶振是一個(gè)32.768k的晶振,晶振外部也不需要額外添加其它的電容或者電阻了。時(shí)鐘的精度,首先取決于晶振的精度以及晶振的引腳負(fù)載電容。如果晶振不準(zhǔn)或者負(fù)載電容過大或過小,都會(huì)導(dǎo)致時(shí)鐘誤差過大。在這一切都搞定后,最終一個(gè)考慮因素是晶振的溫漂。隨著溫度的變化,晶振的精度也會(huì)發(fā)生變化,因此,在實(shí)際的系統(tǒng)中,其中一種方法就是經(jīng)常校對(duì)。比如我們所用的電腦的時(shí)鐘,通常我們會(huì)設(shè)置一個(gè)選項(xiàng)“將計(jì)算機(jī)設(shè)置與internet時(shí)間同步”。選中這個(gè)選項(xiàng)后,一般過一段時(shí)間,我們的計(jì)算機(jī)就會(huì)和internet時(shí)間校準(zhǔn)同步一次。
1.3.3DS1302寄存器介紹
DS1302的一條指令一個(gè)字節(jié)共8位,其中第7位(即最高位)固定為1,這一位如果是0的話,那寫進(jìn)去也是無效的。第6位是選擇RAM還是CLOCK的,我前邊說過,我們這里主要講CLOCK時(shí)鐘的使用,它的RAM功能我們不用,所以如果選擇CLOCK功能,第6位是0,如果要用RAM,那第6位就是1。從第5到第1位,決定了寄存器的5位地址,而第0位是讀寫位,如果要寫,這一位就是0,如果要讀,這一位就是1。指令字節(jié)直觀位分配如圖15-9所示。
圖15-9DS1302命令字節(jié)
DS1302時(shí)鐘的寄存器,其中8個(gè)和時(shí)鐘有關(guān)的,5位地址分別是0b00000~0b00111,還有一個(gè)寄存器的地址是01000,這是涓流充電所用的寄存器,我們這里不講。在DS1302的數(shù)據(jù)手冊(cè)里的地址,直接把第7位、第6位和第0位值給出來了,所以指令就成了0x80、0x81那些了,最低位是1,那么表示讀,最低位是0表示寫,如圖15-10所示。
圖15-10DS1302的時(shí)鐘寄存器
寄存器0:最高位CH是一個(gè)時(shí)鐘停止標(biāo)志位。如果時(shí)鐘電路有備用電源,上電后,我們要先檢測(cè)一下這一位,如果這一位是0,那說明時(shí)鐘芯片在系統(tǒng)掉電后,由于備用電源的供給,時(shí)鐘是持續(xù)正常運(yùn)行的;如果這一位是1,那么說明時(shí)鐘芯片在系統(tǒng)掉電后,時(shí)鐘部分不工作了。如果Vcc1懸空或者是電池沒電了,當(dāng)我們下次重新上電時(shí),讀取這一位,那這一位就是1,我們可以通過這一位判斷時(shí)鐘在單片機(jī)系統(tǒng)掉電后是否還正常運(yùn)行。剩下的7位高3位是秒的十位,低4位是秒的個(gè)位,這里再提請(qǐng)注意一次,DS1302內(nèi)部是BCD碼,而秒的十位最大是5,所以3個(gè)二進(jìn)制位就夠了。
寄存器1:最高位未使用,剩下的7位中高3位是分鐘的十位,低4位是分鐘的個(gè)位。
寄存器2:bit7是1的話代表是12小時(shí)制,0代表是24小時(shí)制;bit6固定是0,bit5在12小時(shí)制下0代表的是上午,1代表的是下午,在24小時(shí)制下和bit4一起代表了小時(shí)的十位,低4位代表的是小時(shí)的個(gè)位。
寄存器3:高2位固定是0,bit5和bit4是日期的十位,低4位是日期的個(gè)位。
寄存器4:高3位固定是0,bit4是月的十位,低4位是月的個(gè)位。
寄存器5:高5位固定是0,低3位代表了星期。
寄存器6:高4位代表了年的十位,低4位代表了年的個(gè)位。請(qǐng)?zhí)貏e注意,這里的00~99指的是2000年~2099年。
寄存器7:最高位一個(gè)寫保護(hù)位,如果這一位是1,那么是禁止給任何其它寄存器或者那31個(gè)字節(jié)的RAM寫數(shù)據(jù)的。因此在寫數(shù)據(jù)之前,這一位必須先寫成0。
評(píng)論