|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求助:萬年歷程序 |
| 作者:troye 欄目:單片機 |
我想用c語言編寫一個萬年歷的程序。導(dǎo)師說有這方面的算法等資料,可是我不知道該去哪兒找。請有這方面經(jīng)驗的前輩不吝賜教。感激不盡。 |
| 2樓: | >>參與討論 |
| 作者: troye 于 2005/11/23 22:33:00 發(fā)布:
ps: 剛才忘記了。我的E-mail:liuzhidongcn@163.com |
|
| 3樓: | >>參與討論 |
| 作者: 艾森豪威爾 于 2005/11/24 10:57:00 發(fā)布:
你到網(wǎng)上一搜,一堆一堆的 www.programsalon.com上可以下載到,不過你要先往上傳代碼 |
|
| 4樓: | >>參與討論 |
| 作者: 莊莊 于 2005/11/24 11:28:00 發(fā)布:
你上網(wǎng)搜“匠人的百寶箱” 他那里有好多程序 |
|
| 5樓: | >>參與討論 |
| 作者: wengheiwei 于 2005/11/24 12:45:00 發(fā)布:
用專用芯片啊,挺簡單的啊, |
|
| 6樓: | >>參與討論 |
| 作者: imaway 于 2005/11/24 13:10:00 發(fā)布:
要的是哪種? 萬年歷有多種,在什么上實現(xiàn)? 我的網(wǎng)站 我的網(wǎng)站 我的論壇 給我來信:我的郵箱imaway@126.com * - 本貼最后修改時間:2005-11-24 13:23:41 修改者:imaway |
|
| 7樓: | >>參與討論 |
| 作者: imaway 于 2006/1/7 5:31:00 發(fā)布:
做的怎樣啦? 萬年歷做的怎樣啦? |
|
| 8樓: | >>參與討論 |
| 作者: LPC900 于 2006/1/7 9:29:00 發(fā)布:
推薦PHILIPS的實時時鐘/日歷芯片PCF8563,硬件自動實現(xiàn)萬年歷 PCF8563是PHILIPS半導(dǎo)體推出的實時時鐘/日歷芯片,僅8個管腳,I2C總線接口,超低功耗(0.25μA),低價格。硬件能自動實現(xiàn)萬年歷功能,你要做的僅僅是設(shè)置時間和日期的初值,而時間和日期的進位硬件可以自動完成。自動判斷閏年,無“千年蟲”問題。另外還有報時功能、定時器功能、中斷功能、可編程方波輸出功能。 http://www.zlgmcu.com/philips/iic/pcf8563.asp |
|
| 9樓: | >>參與討論 |
| 作者: lag3631 于 2006/1/8 14:06:00 發(fā)布:
回復(fù) 這類東西網(wǎng)上好多的 |
|
| 10樓: | >>參與討論 |
| 作者: javie 于 2006/1/8 14:07:00 發(fā)布:
軟件實現(xiàn)很簡單的啊 你只需要把閏年來處理好就行 普通的C語言書上就有對于閏年的算法示例 如此。。。OK |
|
| 11樓: | >>參與討論 |
| 作者: LPC900 于 2006/1/9 10:32:00 發(fā)布:
萬年歷程序?qū)懗鰜聿缓芾щy,但是寫得規(guī)范、高效、可靠并不容易 推薦PHILIPS的實時時鐘/日歷芯片PCF8563,硬件自動實現(xiàn)萬年歷功能。 http://www.zlgmcu.com/philips/iic/pcf8563.asp |
|
| 12樓: | >>參與討論 |
| 作者: 陳遠征 于 2006/1/9 13:16:00 發(fā)布:
忘了這是從誰哪里下的了:) 二.本程序涉及到的算法 1.閏年的判斷: 閏年的條件:①能被4整除,但不能被100整除的年份是閏年,如2004年是閏年;②能被100整除,又能被400整除的年份是閏年,如2000年是閏年。不符合這兩個條件的年份都不是閏年。 實現(xiàn):如果邏輯表達式( year%4==0 && year%100!=0 || year%400==0 )的值為真,則為閏年,否則不是閏年。 2.某年某月某日是這一年的第幾天:加啦(前N個月的天數(shù)+該月日期),不難吧。如2004年3月12日是這一年的第(31+29)+12=72天,記住了閏年2月是29天哦。 3.某年某月某日是星期幾年算法: 求((year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+days)%7的余數(shù),余數(shù)為0(星期日),為1(星期一),為2(星期二),……為6(星期六)。如2004年3月12日為 ((2004-1)+(2004-1)/4-(2004-1)/100+(2004-1)/400+72)%7=5,為星期五。 適用于51系列單片機的一種萬年歷優(yōu)化算法源程序 一、 陽歷算法 具體算法見函數(shù)Void get_solar_day_date(void),這樣陽歷日歷的星期排法就確定了。 表1: 月份 1 2 3 4 5 6 7 8 9 10 11 12 閏年 31 29 31 30 31 30 31 31 30 31 30 31 非閏年 31 28 31 30 31 30 31 31 30 31 30 31 變量定義: Public: Unsigned int temp_total_day; Unsigned CHAR gc_solar_calendar_year; Unsigned CHAR gc_solar_calendar_month; Unsigned CHAR gc_solar_calendar_date; Unsigned CHAR gc_lunar_calendar_year; Unsigned CHAR gc_lunar_calendar_month; Unsigned CHAR gc_lunar_calendar_date; Unsigned CHAR start_day_of_week; 說明:函數(shù)get_solar_day_date(void)的輸入變量:gc_solar_calendar_year 和gc_solar_calendar_month 輸出變量:start_day_of_week和temp_total_day Void get_solar_day_date(void) { unsigned CHAR TEMP01; /*------calculate what day is the day of the current month and year. Mon~Sun?---*/ /*條件初始化二次,減少運算數(shù)據(jù)量. temp_total_day 是int型變量*/ start_day_of_week = 2; temp_total_day = 0; calculate_temp = 1; if(gc_solar_calendar_year > 99) { start_day_of_week = 6;calculate_temp = 100; } for(TEMP01 = calculate_temp; TEMP01<gc_solar_calendar_year; TEMP01++) { if(TEMP01%4 == 0) { start_day_of_week +=2; temp_total_day += 366; } else { start_day_of_week +=1; temp_total_day += 365; } } for(TEMP01 = 1;TEMP01<gc_solar_calendar_month;TEMP01++) { SWITCH(TEMP01) { case 1,3,5,7,8,10,12: start_day_of_week +=3; temp_total_day +=31; break; case 2: if(((gc_solar_calendar_year%4) == 0)&&(gc_solar_calendar_year != 200)) { start_day_of_week +=1; temp_total_day +=29; } else { start_day_of_week +=0; temp_total_day +=28; } break; case 4,6,9,11: start_day_of_week +=2; temp_total_day +=30; break; } } start_day_of_week %=7; /*-end of calculate what day is the day(Mon~Sun?) and total day --*/ } 二、 陰歷算法 200年需要200 × 2 = 400個字節(jié),構(gòu)成陰歷壓縮數(shù)據(jù)表lunar_calendar_month_table[]如下: const CHAR lunar_calendar_month_table[]={ //從陰歷年1900年到2100年 /*the total day of each month pointer */ /* from 1901~2100*/ /* (0110)110000001001 (0110)leap month,110000001001 lunar month total day: 1:29 0:30*/ 0x00,0x04,0xad,0x08,0x5a,0x01,0xd5,0x54,0xb4,0x09,0x64,0x05,0x59,0x45, 0x95,0x0a,0xa6,0x04,0x55,0x24,0xad,0x08,0x5a,0x62,0xda,0x04,0xb4,0x05, 0xb4,0x55,0x52,0x0d,0x94,0x0a,0x4a,0x2a,0x56,0x02,0x6d,0x71,0x6d,0x01, 0xda,0x02,0xd2,0x52,0xa9,0x05,0x49,0x0d,0x2a,0x45,0x2b,0x09,0x56,0x01, 0xb5,0x20,0x6d,0x01,0x59,0x69,0xd4,0x0a,0xa8,0x05,0xa9,0x56,0xa5,0x04, 0x2b,0x09,0x9e,0x38,0xb6,0x08,0xec,0x74,0x6c,0x05,0xd4,0x0a,0xe4,0x6a, 0x52,0x05,0x95,0x0a,0x5a,0x42,0x5b,0x04,0xb6,0x04,0xb4,0x22,0x6a,0x05, 0x52,0x75,0xc9,0x0a,0x52,0x05,0x35,0x55,0x4d,0x0a,0x5a,0x02,0x5d,0x31, 0xb5,0x02,0x6a,0x8a,0x68,0x05,0xa9,0x0a,0x8a,0x6a,0x2a,0x05,0x2d,0x09, 0xaa,0x48,0x5a,0x01,0xb5,0x09,0xb0,0x39,0x64,0x05,0x25,0x75,0x95,0x0a, 0x96,0x04,0x4d,0x54,0xad,0x04,0xda,0x04,0xd4,0x44,0xb4,0x05,0x54,0x85, 0x52,0x0d,0x92,0x0a,0x56,0x6a,0x56,0x02,0x6d,0x02,0x6a,0x41,0xda,0x02, 0xb2,0xa1,0xa9,0x05,0x49,0x0d,0x0a,0x6d,0x2a,0x09,0x56,0x01,0xad,0x50, 0x6d,0x01,0xd9,0x02,0xd1,0x3a,0xa8,0x05,0x29,0x85,0xa5,0x0c,0x2a,0x09, 0x96,0x54,0xb6,0x08,0x6c,0x09,0x64,0x45,0xd4,0x0a,0xa4,0x05,0x51,0x25, 0x95,0x0a,0x2a,0x72,0x5b,0x04,0xb6,0x04,0xac,0x52,0x6a,0x05,0xd2,0x0a, 0xa2,0x4a,0x4a,0x05,0x55,0x94,0x2d,0x0a,0x5a,0x02,0x75,0x61,0xb5,0x02, 0x6a,0x03,0x61,0x45,0xa9,0x0a,0x4a,0x05,0x25,0x25,0x2d,0x09,0x9a,0x68, 0xda,0x08,0xb4,0x09,0xa8,0x59,0x54,0x03,0xa5,0x0a,0x91,0x3a,0x96,0x04, 0xad,0xb0,0xad,0x04,0xda,0x04,0xf4,0x62,0xb4,0x05,0x54,0x0b,0x44,0x5d, 0x52,0x0a,0x95,0x |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |