利用華邦四位機實現(xiàn)帶農(nóng)歷24節(jié)氣萬年歷的低成本設(shè)計
[摘要]: 本文描述了一種利用華邦四位機來設(shè)計帶有農(nóng)歷24節(jié)氣的萬年歷的設(shè)計方法,同時對于其中軟件的算法和硬件的電路設(shè)計進行了計算和分析。
[關(guān)鍵字]:節(jié)氣, 列表法, 微處理器, 單片機, 算法
在當前的產(chǎn)品設(shè)計中,人們在追求產(chǎn)品高性能的同時,也在追求產(chǎn)品的低成本。這就對開發(fā)工程師提出了更高的要求。
對于萬年歷的產(chǎn)品市場上已經(jīng)有了很多,但是帶有農(nóng)歷24節(jié)氣,同時用LED數(shù)碼管顯示的萬年歷在市場上的銷售價明顯偏高,究其原因是因為如果將農(nóng)歷24節(jié)氣設(shè)計加入其中,就要增加軟件程序,這樣就會使相應(yīng)的程序存貯空間加大,自然硬件成本就會隨之增加。所以,最好可以找到一種既可以實現(xiàn)其功能,又可以節(jié)約成本的單片機來實現(xiàn)。
以下就是豐寶電子科技公司開發(fā)部門研發(fā)出的一種只是利用的華邦的四位機就可以實現(xiàn)的帶有農(nóng)歷24節(jié)氣的萬年歷的產(chǎn)品設(shè)計思路,由于用的是4位機,它的ROM空間和RAM空間比起8位機就少得多,這樣對軟件的設(shè)計提出了更高的要求,要求能夠找到適合4位機上使用的簡易算法。
對于陽歷農(nóng)歷的算法比較簡單,而且規(guī)律很容易找到。這里就不再贅述。我們這里重點討論一下對于農(nóng)歷中二十四個節(jié)氣的算法。還考慮到單片機的性能情況和萬年歷的使用壽命,我們設(shè)計的是有限年(如50年)萬年歷,因此這里我們的算法也是按著50年為年限來設(shè)計。
一、萬年歷農(nóng)歷節(jié)氣算法:
為了便于考察50年的無規(guī)律的農(nóng)歷節(jié)氣分布時間,我們利用C語言在計算機中,實現(xiàn)了50年(2000~2049年)的陽歷和農(nóng)歷節(jié)氣分布時間表。由于數(shù)據(jù)龐大,所以僅僅列出其中部分陽歷年對應(yīng)的前6個節(jié)氣日期,簡表見表1。
這張復(fù)雜冗長的節(jié)氣表中,每年的節(jié)氣具體日期雖然都在一定的范圍內(nèi)變動,但是變動的趨勢毫無規(guī)律可尋,每個月的具體節(jié)氣日期有時候推前一兩天,有時候推后一兩天。
但是,從這張復(fù)雜的表格中的眾多數(shù)據(jù)中,我們發(fā)現(xiàn)這樣一個規(guī)律:雖然,這些節(jié)氣的日期變化趨勢無法獲得,但是,這些日期的變化總是在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é)氣日期 |
例如:每年的第一個節(jié)氣(小寒)出現(xiàn)的1月的5日,6日兩天中的某一天;每年的第二個節(jié)氣(大寒)出現(xiàn)在1月的20日,21日,19日三天中的某一天。
這樣,我們只要固定每個節(jié)氣的基本日期,然后專門針對這兩三天編制一個相對日期的表格就可以了??紤]到最多變化范圍是3天,所以這個相對日期可以取值為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。
并且,仔細觀察表2,我們還可以得到以下關(guān)于節(jié)氣日期相對值的規(guī)律性結(jié)論:
1、 只有以下四個節(jié)氣(2、12、19、22)同時出現(xiàn)三個相對值(1,-1和0)的情況。
2、 其它的20個節(jié)氣中僅僅出現(xiàn)了0和-1這兩個相對值。
3、 在有三個相對值的四個節(jié)氣(2、12、19、22)中,2044年以前,出現(xiàn)的非零相對值都是1;而2044年以及2044年以后,出現(xiàn)的非零相對值都是-1;
表格2、陽歷年中農(nóng)歷節(jié)氣日期固定日期和相對值表
陰歷 節(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é)氣日期相對值 下半月節(jié)氣日期相對值 |
⋯⋯ |
⋯⋯ | |||
2043 |
-1 0 |
0 0 |
0 0 |
上半月節(jié)氣日期相對值 下半月節(jié)氣日期相對值 |
2044 |
0 0 |
0 0 |
-1 -1 |
上半月節(jié)氣日期相對值 下半月節(jié)氣日期相對值 |
2045 |
-1 0 |
-1 -1 |
-1 -1 |
上半月節(jié)氣日期相對值 下半月節(jié)氣日期相對值 |
⋯⋯ |
⋯⋯ | |||
2049 |
-1 -1 |
-1 -1 |
-1 -1 |
上半月節(jié)氣日期 下半月節(jié)氣日期 |
也就是說在50年內(nèi),大寒(2)、夏至(12)、寒露(19)和小雪(22)這四個節(jié)氣日期變化相對較多,一共有3天,它們的日期相對值可能需要使用三個狀態(tài)值來表示。
下面是以上三條農(nóng)歷節(jié)氣日期規(guī)律的相對值分布簡圖。
圖1、農(nóng)歷節(jié)氣日期相對值分布簡圖
根據(jù)表格2和圖1所示意的農(nóng)歷節(jié)氣日期排布規(guī)律和形式,我們就可以構(gòu)造一個表格,并且結(jié)合相應(yīng)的算法來計算某個陽歷日期所對應(yīng)的陰歷節(jié)氣了。
利用上節(jié)分析結(jié)果,我們設(shè)想使用最少的字節(jié)來編制一個表格,使得它包含了50年內(nèi)的所有相對值分布信息。由于一年包含農(nóng)歷的24個節(jié)氣,也就是說共有24個日期相對值狀態(tài)量。
為了能夠盡量減少存儲空間,我們使用一個位來代表一個農(nóng)歷的節(jié)氣日期相對值。這樣1年的24個節(jié)氣就可以用24個位來表示,也就是3個字節(jié)(每個字節(jié)8個位)表示。
由于農(nóng)歷節(jié)氣日期相對值最多有三種狀態(tài):-1、0和1,而一個位僅僅有2種狀態(tài):0和1,為了能夠把3種狀態(tài)融合進兩種狀態(tài)中 ,我們根據(jù)上節(jié)中節(jié)氣日期相對值的規(guī)律性結(jié)論,采取了具有條件的二值狀態(tài)來表示三值狀態(tài),制定了如下的編碼規(guī)則:
表格3、位狀態(tài)編碼規(guī)則
位值 |
節(jié)氣日期相對值 |
備注 |
0 |
0 |
適合于表格的50年所有節(jié)氣 |
1 |
1 |
適合于2044年以前的2、12、19、22四個節(jié)氣 |
-1 |
2044年和其后的2、12、19、22四個節(jié)氣 以及其它20個節(jié)氣 |
利用以上的規(guī)則我們就可以對于50年的24個節(jié)氣進行編碼,得到如下的編碼表:
表格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 |
由此看出,使用這種編碼的方式對農(nóng)歷日期相對值進行編碼方法,一年的24個節(jié)氣的日期只需要3個字節(jié)表示就可以明確表示了。50年的節(jié)氣表,只需要150個字節(jié)的存儲空間。年份越多,這種編碼發(fā)方式能夠節(jié)約的存儲空間越大,優(yōu)勢越明顯。
二、萬年歷的硬件實現(xiàn)
我們使用的單片機是華邦公司的四位機。這種單片機的結(jié)構(gòu)跟8位機的類似,雖然它的功能不如8位單片機。但是,它具有結(jié)構(gòu)簡單、成本低的優(yōu)勢,同時還包括了普通單片機的基本功能。它包含了128個字節(jié)的RAM,2k的ROM,定時器,外部中斷,內(nèi)部中斷,此外,還有省電功能和驅(qū)動LED的功能。下圖就是利用華邦四位機W741E260實現(xiàn)萬年歷功能的原理框圖,
其中,對于陽歷日期,農(nóng)歷日期的顯示,是利用LED數(shù)碼顯示來實現(xiàn),而對于二十四節(jié)氣則是利用24個發(fā)光二極管,在制做外觀模具時,可以將二十四節(jié)氣標志在外觀模具上,如果到了相對應(yīng)的節(jié)氣,相應(yīng)的發(fā)光二極管就會點亮。
利用了此方案實現(xiàn) ,就用一個華邦的4位機,硬件成本就可以大大降低。
三、萬年歷的軟件實現(xiàn)
由于萬年歷的其它的功能程序已經(jīng)占用了較大的存儲空間。所以能夠用于農(nóng)歷節(jié)氣查詢的程序的空間不大,僅僅有0.5k的容量。也就是說表格和查表程序一共只有0.5k的空間,表格占用的空間越大,可寫程序的空間就越小。
如果使用把50年農(nóng)歷24節(jié)氣日期表格1,僅僅表格就需要使用50
c語言相關(guān)文章:c語言教程
評論