新聞中心

EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 利用華邦四位機(jī)實(shí)現(xiàn)帶農(nóng)歷24節(jié)氣萬年歷的低成本設(shè)計(jì)

利用華邦四位機(jī)實(shí)現(xiàn)帶農(nóng)歷24節(jié)氣萬年歷的低成本設(shè)計(jì)

——
作者:劉春華 時(shí)間:2005-11-08 來源: 收藏

[摘要]: 本文描述了一種利用華邦四位機(jī)來設(shè)計(jì)帶有農(nóng)歷24節(jié)氣的萬年歷的設(shè)計(jì)方法,同時(shí)對(duì)于其中軟件的算法和硬件的電路設(shè)計(jì)進(jìn)行了計(jì)算和分析。

[關(guān)鍵字]:節(jié)氣, 列表法, 微處理器, 單片機(jī), 算法

  在當(dāng)前的產(chǎn)品設(shè)計(jì)中,人們?cè)谧非螽a(chǎn)品高性能的同時(shí),也在追求產(chǎn)品的低成本。這就對(duì)開發(fā)工程師提出了更高的要求。

  對(duì)于萬年歷的產(chǎn)品市場上已經(jīng)有了很多,但是帶有農(nóng)歷24節(jié)氣,同時(shí)用LED數(shù)碼管顯示的萬年歷在市場上的銷售價(jià)明顯偏高,究其原因是因?yàn)槿绻麑⑥r(nóng)歷24節(jié)氣設(shè)計(jì)加入其中,就要增加軟件程序,這樣就會(huì)使相應(yīng)的程序存貯空間加大,自然硬件成本就會(huì)隨之增加。所以,最好可以找到一種既可以實(shí)現(xiàn)其功能,又可以節(jié)約成本的單片機(jī)來實(shí)現(xiàn)。

  以下就是豐寶電子科技公司開發(fā)部門研發(fā)出的一種只是利用的華邦的四位機(jī)就可以實(shí)現(xiàn)的帶有農(nóng)歷24節(jié)氣的萬年歷的產(chǎn)品設(shè)計(jì)思路,由于用的是4位機(jī),它的ROM空間和RAM空間比起8位機(jī)就少得多,這樣對(duì)軟件的設(shè)計(jì)提出了更高的要求,要求能夠找到適合4位機(jī)上使用的簡易算法。

  對(duì)于陽歷農(nóng)歷的算法比較簡單,而且規(guī)律很容易找到。這里就不再贅述。我們這里重點(diǎn)討論一下對(duì)于農(nóng)歷中二十四個(gè)節(jié)氣的算法。還考慮到單片機(jī)的性能情況和萬年歷的使用壽命,我們?cè)O(shè)計(jì)的是有限年(如50年)萬年歷,因此這里我們的算法也是按著50年為年限來設(shè)計(jì)。

一、萬年歷農(nóng)歷節(jié)氣算法:

  為了便于考察50年的無規(guī)律的農(nóng)歷節(jié)氣分布時(shí)間,我們利用C語言在計(jì)算機(jī)中,實(shí)現(xiàn)了50年(2000~2049年)的陽歷和農(nóng)歷節(jié)氣分布時(shí)間表。由于數(shù)據(jù)龐大,所以僅僅列出其中部分陽歷年對(duì)應(yīng)的前6個(gè)節(jié)氣日期,簡表見表1。

  這張復(fù)雜冗長的節(jié)氣表中,每年的節(jié)氣具體日期雖然都在一定的范圍內(nèi)變動(dòng),但是變動(dòng)的趨勢(shì)毫無規(guī)律可尋,每個(gè)月的具體節(jié)氣日期有時(shí)候推前一兩天,有時(shí)候推后一兩天。

  但是,從這張復(fù)雜的表格中的眾多數(shù)據(jù)中,我們發(fā)現(xiàn)這樣一個(gè)規(guī)律:雖然,這些節(jié)氣的日期變化趨勢(shì)無法獲得,但是,這些日期的變化總是在3天之內(nèi)變化的。

表格1、陽歷年中農(nóng)歷節(jié)氣日期表

年月

1

2

3

4~12

2000

6

21

4

19

5

20

上半月節(jié)氣日期

下半月節(jié)氣日期

⋯⋯

⋯⋯

2043

5

20

4

19

6

21

上半月節(jié)氣日期

下半月節(jié)氣日期

2044

6

20

4

19

5

20

上半月節(jié)氣日期

下半月節(jié)氣日期

2045

5

20

3

18

5

20

上半月節(jié)氣日期

下半月節(jié)氣日期

⋯⋯

⋯⋯

2049

5

19

3

18

5

20

上半月節(jié)氣日期

下半月節(jié)氣日期


  例如:每年的第一個(gè)節(jié)氣(小寒)出現(xiàn)的1月的5日,6日兩天中的某一天;每年的第二個(gè)節(jié)氣(大寒)出現(xiàn)在1月的20日,21日,19日三天中的某一天。

  這樣,我們只要固定每個(gè)節(jié)氣的基本日期,然后專門針對(duì)這兩三天編制一個(gè)相對(duì)日期的表格就可以了??紤]到最多變化范圍是3天,所以這個(gè)相對(duì)日期可以取值為1、0和-1。

  我們選定的基本日期如下:

  一月到三月的節(jié)氣基本日期: 6/20 、4/19、 6/21;

  四月到六月的節(jié)氣基本日期: 5/20 、6/21、 6/21;

  六月到九月的節(jié)氣基本日期: 7/23 、8/23、 8/23;

  十月到十二月的節(jié)氣基本日期:8/24 、8/22、 7/22;

  根據(jù)以上的思想,我們得到了下面的表格2。

  并且,仔細(xì)觀察表2,我們還可以得到以下關(guān)于節(jié)氣日期相對(duì)值的規(guī)律性結(jié)論:

  1、 只有以下四個(gè)節(jié)氣(2、12、19、22)同時(shí)出現(xiàn)三個(gè)相對(duì)值(1,-1和0)的情況。

  2、 其它的20個(gè)節(jié)氣中僅僅出現(xiàn)了0和-1這兩個(gè)相對(duì)值。

  3、 在有三個(gè)相對(duì)值的四個(gè)節(jié)氣(2、12、19、22)中,2044年以前,出現(xiàn)的非零相對(duì)值都是1;而2044年以及2044年以后,出現(xiàn)的非零相對(duì)值都是-1;

表格2、陽歷年中農(nóng)歷節(jié)氣日期固定日期和相對(duì)值表

陰歷

節(jié)氣

1

2

3

4

5

6

7~23

8-24

陽歷

年月

1

2

3

4~12

基本

日期

6

20

4

19

6

21

上半月節(jié)氣日期固定值

下半月節(jié)氣日期固定值

2000

0

1

0

0

-1

-1

上半月節(jié)氣日期相對(duì)值

下半月節(jié)氣日期相對(duì)值

⋯⋯

⋯⋯

2043

-1

0

0

0

0

0

上半月節(jié)氣日期相對(duì)值

下半月節(jié)氣日期相對(duì)值

2044

0

0

0

0

-1

-1

上半月節(jié)氣日期相對(duì)值

下半月節(jié)氣日期相對(duì)值

2045

-1

0

-1

-1

-1

-1

上半月節(jié)氣日期相對(duì)值

下半月節(jié)氣日期相對(duì)值

⋯⋯

⋯⋯

2049

-1

-1

-1

-1

-1

-1

上半月節(jié)氣日期

下半月節(jié)氣日期

  也就是說在50年內(nèi),大寒(2)、夏至(12)、寒露(19)和小雪(22)這四個(gè)節(jié)氣日期變化相對(duì)較多,一共有3天,它們的日期相對(duì)值可能需要使用三個(gè)狀態(tài)值來表示。


  下面是以上三條農(nóng)歷節(jié)氣日期規(guī)律的相對(duì)值分布簡圖。

 

圖1、農(nóng)歷節(jié)氣日期相對(duì)值分布簡圖


  根據(jù)表格2和圖1所示意的農(nóng)歷節(jié)氣日期排布規(guī)律和形式,我們就可以構(gòu)造一個(gè)表格,并且結(jié)合相應(yīng)的算法來計(jì)算某個(gè)陽歷日期所對(duì)應(yīng)的陰歷節(jié)氣了。

  利用上節(jié)分析結(jié)果,我們?cè)O(shè)想使用最少的字節(jié)來編制一個(gè)表格,使得它包含了50年內(nèi)的所有相對(duì)值分布信息。由于一年包含農(nóng)歷的24個(gè)節(jié)氣,也就是說共有24個(gè)日期相對(duì)值狀態(tài)量。

  為了能夠盡量減少存儲(chǔ)空間,我們使用一個(gè)位來代表一個(gè)農(nóng)歷的節(jié)氣日期相對(duì)值。這樣1年的24個(gè)節(jié)氣就可以用24個(gè)位來表示,也就是3個(gè)字節(jié)(每個(gè)字節(jié)8個(gè)位)表示。

  由于農(nóng)歷節(jié)氣日期相對(duì)值最多有三種狀態(tài):-1、0和1,而一個(gè)位僅僅有2種狀態(tài):0和1,為了能夠把3種狀態(tài)融合進(jìn)兩種狀態(tài)中 ,我們根據(jù)上節(jié)中節(jié)氣日期相對(duì)值的規(guī)律性結(jié)論,采取了具有條件的二值狀態(tài)來表示三值狀態(tài),制定了如下的編碼規(guī)則:


表格3、位狀態(tài)編碼規(guī)則

位值

節(jié)氣日期相對(duì)值

備注

0

0

適合于表格的50年所有節(jié)氣

1

1

適合于2044年以前的2、12、19、22四個(gè)節(jié)氣

-1

2044年和其后的2、12、19、22四個(gè)節(jié)氣

以及其它20個(gè)節(jié)氣

  利用以上的規(guī)則我們就可以對(duì)于50年的24個(gè)節(jié)氣進(jìn)行編碼,得到如下的編碼表:

表格4、最終的編碼表

年份

LBA表值

2000

4E A6 99

2001

 

9C A2 98

2002

 

80 00 18

2003

00 10 24

⋯⋯

⋯⋯

2042

9E A2 98

2043

80 82 18

2044

0F EF FB

2045

BF E6 D9

2046

9E A6 98

2047

80 82 18

2048

0F FF FF

2049

FC EF D9

  由此看出,使用這種編碼的方式對(duì)農(nóng)歷日期相對(duì)值進(jìn)行編碼方法,一年的24個(gè)節(jié)氣的日期只需要3個(gè)字節(jié)表示就可以明確表示了。50年的節(jié)氣表,只需要150個(gè)字節(jié)的存儲(chǔ)空間。年份越多,這種編碼發(fā)方式能夠節(jié)約的存儲(chǔ)空間越大,優(yōu)勢(shì)越明顯。

二、萬年歷的硬件實(shí)現(xiàn)

  我們使用的單片機(jī)是華邦公司的四位機(jī)。這種單片機(jī)的結(jié)構(gòu)跟8位機(jī)的類似,雖然它的功能不如8位單片機(jī)。但是,它具有結(jié)構(gòu)簡單、成本低的優(yōu)勢(shì),同時(shí)還包括了普通單片機(jī)的基本功能。它包含了128個(gè)字節(jié)的RAM,2k的ROM,定時(shí)器,外部中斷,內(nèi)部中斷,此外,還有省電功能和驅(qū)動(dòng)LED的功能。下圖就是利用華邦四位機(jī)W741E260實(shí)現(xiàn)萬年歷功能的原理框圖,

  其中,對(duì)于陽歷日期,農(nóng)歷日期的顯示,是利用LED數(shù)碼顯示來實(shí)現(xiàn),而對(duì)于二十四節(jié)氣則是利用24個(gè)發(fā)光二極管,在制做外觀模具時(shí),可以將二十四節(jié)氣標(biāo)志在外觀模具上,如果到了相對(duì)應(yīng)的節(jié)氣,相應(yīng)的發(fā)光二極管就會(huì)點(diǎn)亮。

  利用了此方案實(shí)現(xiàn) ,就用一個(gè)華邦的4位機(jī),硬件成本就可以大大降低。

三、萬年歷的軟件實(shí)現(xiàn)

  由于萬年歷的其它的功能程序已經(jīng)占用了較大的存儲(chǔ)空間。所以能夠用于農(nóng)歷節(jié)氣查詢的程序的空間不大,僅僅有0.5k的容量。也就是說表格和查表程序一共只有0.5k的空間,表格占用的空間越大,可寫程序的空間就越小。

  如果使用把50年農(nóng)歷24節(jié)氣日期表格1,僅僅表格就需要使用50

c語言相關(guān)文章:c語言教程




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉