Thông báo

Collapse
No announcement yet.

Thuật toán tính Âm lịch từ Dương lịch dùng phương pháp tra bảng

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #46
    Nguyên văn bởi tienhuypro Xem bài viết
    Đọc TUT này thanhks các bác rất nhiều! Tui có ý này nói ra không biết có đúng không ? Có phải tháng nào mà chỉ 1 tháng âm lịch thì cứ phán đại ngày DL đầu tháng Al > tổng số ngày trong tháng là OK.
    Bạn hiểu đúng rồi.
    PCT COMPUTER
    (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

    Comment


    • #47
      Nguyên văn bởi hoangdai Xem bài viết
      hihi_Nếu đã mắc công lập bảng thì tự thêm ngày cho nó luôn_hihi_thêm biến nữa thì phí quá..
      Bạn viết code trên C thì lập bảng làm gì cho phí công phí sức.

      Chỉ cần bê cái công thức này vào là ok:

      a/-Trong 19 năm dương lịch có 228 tháng dương lịch, tương ứng với 235 tháng âm lịch, thừa 7 tháng so với năm dương lịch, gọi là 7 tháng nhuận. Bảy tháng trước đó được quy ước vào các năm thứ 3, 6, 9 hoặc 8, 11, 14, 17, 19 của chu kỳ 19 năm.


      b/-Với năm âm lịch, muốn tính năm nhuận chỉ việc lấy năm dương lịch tương ứng với năm âm lịch chia cho 19, nếu số dư là một trong các số: 0, 3, 6, 9 hoặc 11, 14, 17 thì năm âm lịch đó có tháng nhuận.

      c/-Dùng công thức tính Can-Chi để tính ra ngày tháng.
      Last edited by pctcom; 12-01-2012, 11:32.
      PCT COMPUTER
      (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

      Comment


      • #48
        Van de cua cac bac mjnh da phat hjen tu lau .caj nay chj phat hjen ky neu tu lap bang kiem tra cong thuc theo tung thang cua nam.

        Comment


        • #49
          Nhưng mà dù sao thuật toán cuả bác này vẫn hay mà.điều đó là ko thể phủ nhận bác ấy vẫn theo giỏi chủ đề của bác ấy thừơng xuyên nhỉ.

          Comment


          • #50
            có ai có đoạn chương trình chuyển ngày dương sang ngày âm không hướng dẫn tui với, tui có kiếm được 1 đoạn trên mạng nhưng nó chỉ áp dụng cho năm 2011 con những năm khác mình không biết viết thế nào, có pác nào biết chỉ giúp với
            void start_system()
            {
            var_menu=0;
            //var_arlam=0;
            }
            //-- chuyen ngay duong sang ngay am------
            void da(int m,d)
            {
            ngayduong=(m-1)*31+d;//so ngay duong so voi 1.1
            if ((m==3)|(m==4)) ngayduong=ngayduong-3;//do thang 2 co 28 ngay
            else
            if ((m==5)|(m==6)) ngayduong=ngayduong-4;// thang 4 co 30 ngay
            else
            if ((m==7)|(m==8)|(m==9)) ngayduong=ngayduong-5;//thang 6 co 30 ngay
            else
            if ((m==10)|(m==11)) ngayduong=ngayduong-6;//thang 9 co 30 ngay
            else
            if (m==12) ngayduong=ngayduong-7;// thang 11 co 30 ngay
            ngayam=ngayduong+26;//mung 1.1 la ngay 27.11
            thangam=11;
            if (ngayam>=30)
            {
            ngayam=ngayam-29;
            thangam=12;
            }
            while (ngayam>=30)
            {
            if ((thangam==2)|(thangam==5)|(thangam==8)|(thangam== 7)|(thangam==10))
            {
            if (ngayam==29) break;
            ngayam=ngayam-29;
            thangam++;
            if (thangam==13) thangam=1;
            }
            else
            if (ngayam==30) break;
            else
            {
            ngayam=ngayam-30;
            thangam++;
            if (thangam==13) thangam=1;
            }
            }
            |

            Comment


            • #51
              code c day ba con 5KB cho 20 nam vừa đủ life time cho 1 IC nhớ nhé:
              thấy ae làm lunar calendar nhưng toàn dùng asm nên cũng thấy ngứa ngáy,
              các bác dùng code này kết hợp thêm với RTC của chip nhé,chú lpc2103 có sup đó,code này được viết trên chú này,chạy rất êm.

              Code:
              				   
              /*
              	database of lunar calendar 
              */
              const unsigned char ALdauthangDL[100][12] = {
              	{17,18,16,27,18,19,20,21,23,24,25,26},//2010
              	{27,29,27,28,29,30, 1, 2, 4, 5, 6, 7},//2011
              	{ 8,10, 9,11,11,12,13,14,16,16,18,18},//2012
              	{20,21,20,21,22,23,24,25,26,27,28,29},//2013
              	{ 1, 2, 1, 2, 3, 4, 5, 6, 8, 8, 9,10},//2014
              	{11,13,11,13,13,15,16,17,19,19,20,20},//2015
              	{22,23,23,24,25,26,27,29, 1, 1, 2, 3},//2016
              	{ 4, 5, 4, 5, 6, 7, 8,10,11,12,13,14},//2017
              	{15,16,14,16,16,18,18,20,22,22,24,25},//2018
              	{26,27,25,27,27,28,29, 1, 3, 3, 5, 6},//2019
              	{ 7, 8, 8, 9, 9,10,11,12,14,15,16,17},//2020
              
              	{19,20,18,20,20,21,22,23,25,25,27,27},//2021
              	{29, 1,29, 1, 1, 3, 3, 4, 6, 6, 8, 8},//2022
              	{10,11,20,11,12,14,14,15,17,17,18,19},//2023
              	{20,22,21,23,23,25,26,27,29,29, 1, 1},//2024
              	{ 2, 4, 2, 4, 4, 6, 7, 8,10,10,12,12},//2025
              	{13,14,13,14,15,16,17,19,20,21,23,23},//2026
              	{24,25,24,25,25,27,27,29, 1, 2, 4, 4},//2027	
              	{ 5, 7, 6, 7, 7, 9, 9,11,13,13,15,16},//2028
              	{17,18,17,18,18,20,20,22,23,24,25,26},//2029
              	{28,29,28,29,29, 1, 1, 3, 4, 5, 6, 7}//2030
              };
              
              const unsigned char thangALdauthangDL[100][12] = {
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2010
              	{11,12, 1, 2, 3, 4, 6, 7, 8, 9,10,11},//2011
              	{12, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9,10},//2012
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2013
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9,10},//2014
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2015
              	{11,12, 1, 2, 3, 4, 5, 6, 8, 9,10,11},//2016
              	{12, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9,10},//2017
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2018
              	{11,12, 1, 2, 3, 4, 5, 7, 8, 9,10,11},//2019
              	{12, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9,10},//2020
              
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2021
              	{11, 1, 1, 3, 4, 5, 6, 7, 8, 9,10,11},//2022
              	{12, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9,10},//2023
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8,10,11},//2024
              	{12, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9,10},//2025
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2026
              	{11,12, 1, 2, 3, 4, 5, 6, 8, 9,10,11},//2027
              	{12, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9,10},//2028
              	{11,12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10},//2029
              	{11,12, 1, 2, 3, 5, 6, 7, 8, 9,10,11}//2030
              };
              
              const unsigned char DLdauthangAL[100][12] = {
              	{15,14,16, 5,14,12,12,10, 8, 8, 6, 6},//2010
              	{ 4, 3, 5, 3, 3, 2,31,29,27,27,25,25},//2011
              	{23,22,22,21,21,19,19,17,16,15,14,13},//2012
              	{12,10,12,10,10, 8, 8, 7, 5, 5, 3, 3},//2013
              	{31,31,31,29,29,27,27,25,24,24,22,22},//2014
              	{20,19,20,19,18,16,16,14,13,13,12,11},//2015
              	{10, 8, 9, 7, 7, 5, 4, 3, 1,31,29,29},//2016
              	{28,26,28,26,26,24,23,22,20,20,18,18},//2017
              	{17,16,17,16,15,14,13,11,10, 9, 7, 7},//2018
              	{ 6, 5, 6, 5, 5, 3, 3,30,29,28,26,26},//2019
              	{25,23,24,23,23,21,21,19,17,17,15,14},//2020
              
              	{13,12,13,12,12,10,10, 8, 7, 6, 5, 4},//2021
              	{ 3,29, 3,31,30,29,29,27,26,25,24,23},//2022
              	{22,20,22,20,19,18,18,16,15,15,13,13},//2023
              	{11,10,10, 9, 8, 6, 6, 4, 3, 3,31,31},//2024
              	{29,28,29,28,27,25,25,23,22,21,20,20},//2025
              	{19,17,19,17,17,15,14,13,11,10, 9, 9},//2026
              	{ 8, 6, 8, 7, 6, 5, 4, 1,30,29,28,28},//2027
              	{26,25,26,25,24,23,22,20,19,18,16,16},//2028
              	{15,23,15,14,13,12,11,10, 8, 8, 6, 5},//2029
              	{ 4, 2, 4,31, 2,30,30,29,27,27,25,25}//2030
              };
              
              const unsigned char thangALdauthangAL[100][12] = {
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2010
              	{12, 1, 2, 3, 4, 5, 7, 8, 9,10,11,12},//2011
              	{ 1, 2, 3, 4, 4, 5, 6, 7, 8, 9,10,11},//2012
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2013
              	{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 9,10,11},//2014
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2015
              	{12, 1, 2, 3, 4, 5, 6, 7, 8,10,11,12},//2016
              	{ 1, 2, 3, 4, 5, 6, 6, 7, 8, 9,10,11},//2017
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2018
              	{12, 1, 2, 3, 4, 5, 6, 8, 9,10,11,12},//2019
              	{ 1, 2, 3, 4, 4, 5, 6, 7, 8, 9,10,11},//2020
              
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2021
              	{12, 1, 2, 3, 5, 6, 7, 8, 9,10,11,12},//2022
              	{ 1, 2, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2023
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,12},//2024
              	{ 1, 2, 3, 4, 5, 6, 6, 7, 8, 9,10,11},//2025
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2026
              	{12, 1, 2, 3, 4, 5, 6, 7, 9,10,11,12},//2027
              	{ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9,10,11},//2028
              	{12, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11},//2029
              	{12, 1, 2, 3, 4, 5, 7, 8, 9,10,11,12}//2030
              };
              RTCTime RTCLunar;
              static
              void lunar_calculate(RTCTime time){
              	int da,db,day,mon,year;
              	int lmon;
              
              	day = time.RTC_Mday;
              	mon = time.RTC_Mon;
              	year = time.RTC_Year;
              	da = ALdauthangDL[year-2010][mon-1];
              	db = DLdauthangAL[year-2010][mon-1];	
              
              	if((db-day)<=0){
              		RTCLunar.RTC_Mday = (int)(day-db+1);
              		RTCLunar.RTC_Mon = (int)thangALdauthangAL[year-2010][mon-1];				
              	}else {
              		RTCLunar.RTC_Mday = (int)(day+da-1);
              		RTCLunar.RTC_Mon = (int)thangALdauthangDL[year-2010][mon-1];		
              	}
              	lmon = RTCLunar.RTC_Mon;
              	if((mon-lmon)<0)
              		RTCLunar.RTC_Year = (int)(year-1);
              	else 
              		RTCLunar.RTC_Year = (int)year;
              }
              void DisplayLUNAR(void){  
                lunar_calculate(LocalTime);
                printf("\nAL: %lu/%lu/%lu",RTCLunar.RTC_Mday,RTCLunar.RTC_Mon,RTCLunar.RTC_Year);
              }
              int main(void){
              updateRTC();
              DisplayLUNAR();
              }
              các vấn đề về sdcard, usb, tcp/ip, upgrate firmware,...
              trên các dòng chip: stm32, lpc of nxp
              please cell phone: 01649895559

              Comment


              • #52
                rất có ý nghĩa
                Last edited by huycom; 06-10-2012, 03:50.

                Comment


                • #53
                  Mình khai báo trong keilC thì chỉ 1 năm đã tràn bộ nhớ 89S52. Phải làm sao chủ thớt?

                  Báo lỗi thế này:

                  ..\..\MO PHONG\DONG HO-DS1307\FIMWARE\MAIN.C(1076): error C249: 'DATA': SEGMENT TOO LARGE

                  Comment


                  • #54
                    Nếu hiển thị ngày tháng Dl, nhiệt độ, giờ, phút, giây trên lcd thì email cho mình. Email:
                    vantrinh9290@gmail.com
                    Click image for larger version

Name:	RTC-LCD.JPG
Views:	1
Size:	55.8 KB
ID:	1375649
                    Email:
                    Phone: 0969 226 539

                    Comment


                    • #55
                      ban ơi, máy cái số khai báo như thế này ở đâu ra vậy mấy bác DL2013[48]={20,11,12,12,
                      21,12,10,1,
                      20,1,12,2,
                      21,2,10,3,
                      22,3,10,4,
                      23,4,8,5,
                      24,5,8,6,
                      25,6,7,7,
                      26,7,5,8,
                      27,8,5,9,
                      28,9,3,10,
                      29,10,3,11};
                      xin chỉ giáo với,, thank

                      Comment


                      • #56
                        Nguyên văn bởi thanhdlk33 Xem bài viết
                        ban ơi, máy cái số khai báo như thế này ở đâu ra vậy mấy bác DL2013[48]={20,11,12,12,
                        21,12,10,1,
                        20,1,12,2,
                        21,2,10,3,
                        22,3,10,4,
                        23,4,8,5,
                        24,5,8,6,
                        25,6,7,7,
                        26,7,5,8,
                        27,8,5,9,
                        28,9,3,10,
                        29,10,3,11};
                        xin chỉ giáo với,, thank
                        Bạn đọc lại từ đầu đi thôi, có chú dẫn hết cả rồi. Chủ thớt ko tua lại đc nhiều tới thế.


                        Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                        Tel: 031 518648 Phone: 0904 283 505

                        Comment


                        • #57
                          Cho em hỏi đoạn
                          Không có nhớ (C=0) và có nhớ (C=1) là sao vậy? Nhớ ở đây là gì? E Chưa hiểu

                          Comment


                          • #58
                            anh biết về cách tính ngày của code này không ạ? chỉ em với ạ!!
                            #include <16F877A.h>
                            #include <def_877a.h>//THU VIEN PIC16f877A
                            #device *=16 adc=10
                            #FUSES HS //KHAI BAO CHON THACH ANH SU DUNG
                            #use delay(clock=20000000)//XUNG CLOCK
                            #use i2c(master,fast,sda = pin_c4,scl = pin_c3)//GIAO TIEP I2C VOI DS1307
                            #include <bangtra.h>
                            #define ACK 1//CHAN CLOCK
                            #define NO_ACK 0
                            //KHAI BAO NGO VAO RA
                            #define k1 Re0//NUT NHAN
                            #define k2 Re1
                            #define k3 Re2

                            #define l1 Rd0//KICH LED 7 DOAN
                            #define l2 Ra1
                            #define l3 Ra2
                            #define l4 Ra3
                            #define l5 Ra4
                            #define l6 Ra5
                            #define l7 Rd2
                            #define l8 Rd3
                            #define l9 Rd4
                            #define l10 Rd5
                            #define l11 Rd6
                            #define l12 Rd7

                            int8 low,high,c_g,dv_g,c_p,dv_p,c_h,dv_h,thu,c_d,dv_d,c _t,dv_t,c_n,dv_n,h,p,g,d,t,n,ngayam,thangam;
                            const unsigned char so[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//MA LED 7 DOAN
                            unsigned char RTC_ARR[7]; // Buffer for second,minute,.....,year
                            int32 read,temp;

                            void convert_bcd_lcd(int8 g,int8 p, int8 h, int8 th, int8 d, int8 t, int8 n);//CHUYEN MA BCD SANG MA NHI PHAN
                            void convert_so_lcd(int8 x);
                            void ReadRTC(unsigned char * buff);//CHUONG TRINH CON DOC DU LIEU TU DS1307
                            void WriteRTC(unsigned char * buff);//CHUONG TRINH CON VIET DU LIEU TU DS1307
                            void chinh_gio();//CHUONG TRINH CON CHINH GIO
                            //-----------------------------------------------------------------
                            void chuyenduongam(int ngay1,int thang1, int nam1) // chuong trinh chuyen ngay duong sang ngay am
                            {
                            int n_am_dau, t_am_dau, n_duong;
                            switch(nam1)
                            {
                            case 10:
                            {
                            n_am_dau = nam10[(thang1-1)*3]; t_am_dau = nam10[(thang1-1)*3+1]; n_duong = nam10[(thang1-1)*3+2];
                            break;
                            }
                            case 11:
                            {
                            n_am_dau = nam11[(thang1-1)*3]; t_am_dau = nam11[(thang1-1)*3+1]; n_duong = nam11[(thang1-1)*3+2];
                            break;
                            }
                            case 12:
                            {
                            n_am_dau = nam12[(thang1-1)*3]; t_am_dau = nam12[(thang1-1)*3+1]; n_duong = nam12[(thang1-1)*3+2];
                            break;
                            }
                            case 13:
                            {
                            n_am_dau = nam13[(thang1-1)*3]; t_am_dau = nam13[(thang1-1)*3+1]; n_duong = nam13[(thang1-1)*3+2];
                            break;
                            }
                            case 14:
                            {
                            n_am_dau = nam14[(thang1-1)*3]; t_am_dau = nam14[(thang1-1)*3+1]; n_duong = nam14[(thang1-1)*3+2];
                            break;
                            }
                            case 15:
                            {
                            n_am_dau = nam15[(thang1-1)*3]; t_am_dau = nam15[(thang1-1)*3+1]; n_duong = nam15[(thang1-1)*3+2];
                            break;
                            }
                            case 16:
                            {
                            n_am_dau = nam16[(thang1-1)*3]; t_am_dau = nam16[(thang1-1)*3+1]; n_duong = nam16[(thang1-1)*3+2];
                            break;
                            }
                            case 17:
                            {
                            n_am_dau = nam17[(thang1-1)*3]; t_am_dau = nam17[(thang1-1)*3+1]; n_duong = nam17[(thang1-1)*3+2];
                            break;
                            }
                            case 18:
                            {
                            n_am_dau = nam18[(thang1-1)*3]; t_am_dau = nam18[(thang1-1)*3+1]; n_duong = nam18[(thang1-1)*3+2];
                            break;
                            }
                            case 19:
                            {
                            n_am_dau = nam19[(thang1-1)*3]; t_am_dau = nam19[(thang1-1)*3+1]; n_duong = nam19[(thang1-1)*3+2];
                            break;
                            }
                            case 20:
                            {
                            n_am_dau = nam20[(thang1-1)*3]; t_am_dau = nam20[(thang1-1)*3+1]; n_duong = nam20[(thang1-1)*3+2];
                            break;
                            }
                            }
                            if( ngay1 < n_duong ) { ngayam = ngay1 + n_am_dau - 1; if(t_am_dau>12) thangam = t_am_dau-100; else thangam = t_am_dau; }
                            else { ngayam = (ngay1+1) - n_duong; if(t_am_dau>12) thangam = t_am_dau-100; else { if(t_am_dau==12) thangam = 1; else thangam = t_am_dau + 1; } }
                            }
                            void htgio()//CHUONG TRINH CON HIEN THI GIO
                            {
                            int j =0;
                            while(j<100)
                            {
                            portb=so[c_h]; l1 = 0; delay_us(100); l1 = 1;//HAM KICH CHO LED 7
                            portb=so[dv_h]; l2 = 0; delay_us(100); l2 =1;
                            portb=so[c_p]; l3 = 0; delay_us(100); l3 = 1;
                            portb=so[dv_p]; l4 = 0; delay_us(100); l4 =1;
                            portb=so[c_g]; l5 = 0; delay_us(100); l5 = 1;
                            portb=so[dv_g]; l6 = 0; delay_us(100); l6 =1;

                            portb=so[d/10]; l7 = 0; delay_us(100); l7 = 1;
                            portb=so[d%10]; l8 = 0; delay_us(100); l8 = 1;
                            portb=so[t/10]; l9 = 0; delay_us(100); l9 = 1;
                            portb=so[t%10]; l10 = 0; delay_us(100); l10 = 1;
                            portb=so[n/10]; l11 = 0; delay_us(100); l11 = 1;
                            portb=so[n%10]; l12 = 0; delay_us(100); l12 = 1;
                            j++;
                            }
                            }
                            void htngay()//CHUONG TRINH CON HIEN THI thu ngay am va nhiet do
                            {
                            int j =0;
                            while(j<100)
                            {
                            l1 = 1; if(thu==1) portb = 0xc6; else portb=so[thu]; l1 = 0; delay_us(100); l1 = 1;//HAM KICH CHO LED 7
                            //porta = 0xff; portb=so[dv_h]; l2 = 0; delay_us(100);
                            portb=so[ngayam/10]; l3 = 0; delay_us(100); l3 =1;
                            portb=so[ngayam%10]; l4 = 0; delay_us(100); l4 =1;
                            portb=so[thangam/10]; l5 = 0; delay_us(100); l5 = 1;
                            portb=so[thangam%10]; l6 = 0; delay_us(100); l6 =1;

                            //portd = 0xff; portb=so[d/10]; l7 = 0; delay_us(100);
                            //portd = 0xff; portb=so[d%10]; l8 = 0; delay_us(100);
                            portb=so[temp/10]; l9 = 0; delay_us(100); l9 =1;
                            portb=so[temp%10]; l10 = 0; delay_us(100); l10=1;
                            portb=0x9c; l11 = 0; delay_us(100); l11=1;
                            portb=0xc6; l12 = 0; delay_us(100); l12=1;
                            j++;
                            }
                            }
                            void hienthi(int m)
                            { int j =0;

                            while(j<15)
                            {
                            if(m==1) portb=255; else portb=so[h/10]; l1 = 0; delay_us(100); l1 = 1;
                            if(m==1) portb=255; else portb=so[h%10]; l2 = 0; delay_us(100); l2 =1;
                            if(m==2) portb=255; else portb=so[p/10]; l3 = 0; delay_us(100); l3 =1;
                            if(m==2) portb=255; else portb=so[p%10]; l4 = 0; delay_us(100); l4 =1;
                            if(m==3) portb=255; else portb=so[g/10]; l5 = 0; delay_us(100); l5 =1;
                            if(m==3) portb=255; else portb=so[g%10]; l6 = 0; delay_us(100); l6 =1;

                            if(m==4) portb=255; else portb=so[d/10]; l7 = 0; delay_us(100); l7=1;
                            if(m==4) portb=255; else portb=so[d%10]; l8 = 0; delay_us(100); l8=1;
                            if(m==5) portb=255; else portb=so[t/10]; l9 = 0; delay_us(100); l9=1;
                            if(m==5) portb=255; else portb=so[t%10]; l10 = 0; delay_us(100); l10=1;
                            if(m==6) portb=255; else portb=so[n/10]; l11= 0; delay_us(100); l11=1;
                            if(m==6) portb=255; else portb=so[n%10]; l12 = 0; delay_us(100); l12=1;
                            j++;
                            }
                            }
                            void hienthi1(int m)
                            { int j =0;
                            while(j<15)
                            {
                            if(m==7) portb=255; else if(thu==1) portb = 0xc6; else portb=so[thu]; l1 = 0; delay_us(100); l1 = 1;
                            j++;
                            }
                            }
                            //============================
                            void main()//CHUONG TRINH CHINH
                            {
                            int8 i;
                            // khai bao port
                            trisa = 0x01;
                            trisb = 0x00;
                            trisc = 0x00;
                            trisd = 0x00;
                            // Khoi tao che do cho bo ADC
                            setup_adc_ports(AN0);
                            setup_adc(ADC_CLOCK_INTERNAL);
                            delay_us(10);
                            int tht = 0, isg;
                            //=========================================

                            delay_us(100);

                            c_g=0,dv_g=1,c_p=2,dv_p=3,c_h=4,dv_h=5,thu=6,c_d=7 ,dv_d=8,c_t=9,dv_t=0,c_n=1,dv_n=2;
                            ReadRTC(&RTC_ARR[0]);
                            //=======================================
                            ReadRTC(&RTC_ARR[0]);
                            convert_bcd_lcd(RTC_ARR[0],RTC_ARR[1],RTC_ARR[2],RTC_ARR[3],RTC_ARR[4],RTC_ARR[5],RTC_ARR[6]);
                            h = c_h*10+dv_h; p = c_p*10+dv_p; g = c_g*10+dv_g; d = c_d*10+dv_d;t = c_t*10+dv_t;n = c_n*10+dv_n;//KHAI BAO THEO THU TU DON VI CUA 1307
                            while(true)
                            {
                            ReadRTC(&RTC_ARR[0]);
                            convert_bcd_lcd(RTC_ARR[0],RTC_ARR[1],RTC_ARR[2],RTC_ARR[3],RTC_ARR[4],RTC_ARR[5],RTC_ARR[6]);
                            if(isg!=dv_g) { isg=dv_g; if(tht<20) tht++; else tht = 0; //hien thi gio toi 15giay ( 20 - 15 )= 5 cho hien thi ngay am + nhiet do
                            chuyenduongam(c_d*10+dv_d,c_t*10+dv_t,c_n*10+dv_n) ; read=read_adc();
                            temp = read/2.048; if(temp>99) temp = 99; }
                            if(tht<16) htgio(); else htngay(); if(k1==0) { while(k1==0)htgio(); chinh_gio(); }//hien thi gio toi 16giay roi chuyen qua hien thi ngay am + nhiet do 5 giay
                            }
                            }
                            //end main-----------------------------------------------------------
                            void convert_bcd_lcd(int8 g,int8 p, int8 h, int8 th, int8 d, int8 t, int8 n)
                            {
                            c_g=(g&240)>>4; //chia lay phan du, so hang don vi
                            dv_g=g&15; //tach hang tram va hang chuc
                            c_p=(p%240)>>4; //chia lay phan du, so hang don vi
                            dv_p=p&15; //tach hang tram va hang chuc
                            c_h=(h&240)>>4; //chia lay phan du, so hang don vi
                            dv_h=h&15; //tach hang tram va hang chuc
                            thu = th;
                            c_d=(d&240)>>4; //chia lay phan du, so hang don vi
                            dv_d=d&15; //tach hang tram va hang chuc
                            c_t=(t&240)>>4; //chia lay phan du, so hang don vi
                            dv_t=t&15; //tach hang tram va hang chuc
                            c_n=(n&240)>>4; //chia lay phan du, so hang don vi
                            dv_n=n&15; //tach hang tram va hang chuc
                            }

                            void chinh_gio()//CHUONG TRINH CON CHINH GIO
                            {
                            int mode=1,i=0;
                            ReadRTC(&RTC_ARR[0]);
                            convert_bcd_lcd(RTC_ARR[0],RTC_ARR[1],RTC_ARR[2],RTC_ARR[3],RTC_ARR[4],RTC_ARR[5],RTC_ARR[6]);
                            h = c_h*10+dv_h; p = c_p*10+dv_p; g = c_g*10+dv_g; d = c_d*10+dv_d;t = c_t*10+dv_t;n = c_n*10+dv_n;//KHAI BAO THEO THU TU DON VI CUA 1307
                            while(true)
                            {
                            if(i<20) hienthi(0);else hienthi(mode);;
                            i++; if(i>40) i = 0;//GAN GIA TRI
                            if(k2==0)
                            { while(k2==0) {}//TANG 1 DON VI
                            switch(mode)
                            {
                            case 1:
                            { if(h<23) h++; else h = 0;
                            break;}
                            case 2:
                            { if(p<59) p++; else p = 0;
                            break;}
                            case 3:
                            { if(g<59) g++; else g = 0;
                            break;}
                            case 4:
                            { if(d<31) d++; else d = 0;
                            break;}
                            case 5:
                            { if(t<12) t++; else t = 0;
                            break;}
                            case 6:
                            { if(n<99) n++; else n = 0;
                            break;}
                            case 7:
                            { if(thu<7) thu++; else thu = 1;
                            break;}
                            }
                            }
                            if(k3==0)
                            { while(k3==0) {}//GIAM 1 DON VI
                            switch(mode)
                            {
                            case 1:
                            { if(h>0) h--; else h = 23;
                            break;}
                            case 2:
                            { if(p>0) p--; else p = 59;
                            break;}
                            case 3:
                            { if(g>0) g--; else g = 59;
                            break;}
                            case 4:
                            { if(d>1) d--; else d = 31;
                            break;}
                            case 5:
                            { if(t>1) t--; else t = 12;
                            break;}
                            case 6:
                            { if(n>0) n--; else n = 99;
                            break;}
                            case 7:
                            { if(thu>1) thu--; else thu = 7;
                            break;}
                            }
                            }
                            if(k1==0) { while(k1==0){} mode++; if(mode>6) break;}

                            }
                            while(true)
                            {
                            if(i<20) hienthi1(0);else hienthi1(mode);;
                            i++; if(i>40) i = 0;//GAN GIA TRI
                            if(k2==0)
                            { while(k2==0) {}//TANG 1 DON VI
                            if(thu<7) thu++; else thu = 1;
                            }
                            if(k3==0)
                            { while(k3==0) {}//GIAM 1 DON VI
                            if(thu>1) thu--; else thu = 7;
                            }
                            if(k1==0) { while(k1==0){} mode++; if(mode>7) break;}
                            }
                            //-----------------------------------
                            // luu lai thoi gian chinh
                            //-----------------------------------
                            //ReadRTC(&RTC_ARR[0]);
                            c_g = g/10; dv_g = g%10; c_p = p/10; dv_p = p%10; c_h = h/10; dv_h = h%10;
                            c_d = d/10; dv_d = d%10; c_t = t/10; dv_t = t%10; c_n = n/10; dv_n = n%10;
                            RTC_ARR[0] = (c_g<<4) | dv_g;
                            RTC_ARR[1] = (c_p<<4) | dv_p;
                            RTC_ARR[2] = (c_h<<4) | dv_h;
                            RTC_ARR[3] = thu; // Day = 2
                            RTC_ARR[4] = (c_d<<4) | dv_d; // Date = 18
                            RTC_ARR[5] = (c_t<<4) | dv_t;; // month = 1
                            RTC_ARR[6] = (c_n<<4) | dv_n; // year = 10
                            WriteRTC(&RTC_ARR[0]); // Set RTC
                            //-----------------------------------
                            }

                            //-------------------------------
                            // Read RTC
                            //-------------------------------
                            void ReadRTC(unsigned char * buff)//DOC GIA TRI VAO DS1307
                            {


                            i2c_Start();
                            i2c_Write(0xD0);
                            i2c_Write(0x00);

                            i2c_Start();
                            i2c_Write(0xD1);
                            *(buff+0)=i2c_Read(ACK); // Second
                            *(buff+1)=i2c_Read(ACK); // Minute
                            *(buff+2)=i2c_Read(ACK); // hour
                            *(buff+3)=i2c_Read(ACK); // Day
                            *(buff+4)=i2c_Read(ACK); // date
                            *(buff+5)=i2c_Read(ACK); // month
                            *(buff+6)=i2c_Read(NO_ACK); // year
                            i2c_Stop();
                            }

                            //-------------------------------
                            // Write RTC
                            //-------------------------------
                            void WriteRTC(unsigned char *buff)//VIET GIA TRI VAO DS1307
                            {

                            i2c_Start();
                            i2c_Write(0xD0);
                            i2c_Write(0x00);
                            i2c_Write(*(buff+0));
                            i2c_Write(*(buff+1));
                            i2c_Write(*(buff+2));
                            i2c_Write(*(buff+3));
                            i2c_Write(*(buff+4));
                            i2c_Write(*(buff+5));
                            i2c_Write(*(buff+6));
                            i2c_Stop();
                            }
                            còn đây là bảng để tra ạ:

                            ///////////////////////
                            const unsigned char nam10[]=
                            {
                            17,11,15, //THANG 1
                            18,12,14,
                            16,1,16, //THANG3
                            17,2,14,
                            18,3,14, //THANG5
                            19,4,12,
                            20,5,12, //THANG7
                            21,6,10,
                            23,7,8, //THANG9
                            24,8,8,
                            25,9,6, //THANG11
                            26,10,6,
                            };
                            const unsigned char nam11[]=
                            {
                            27,11,4, //THANG 1
                            29,12,3,
                            27,1,5, //THANG3
                            28,2,3,
                            29,3,3, //THANG5
                            30,4,2,
                            1,6,31, //THANG7
                            2,7,29,
                            4,8,27, //THANG9
                            5,9,27,
                            6,10,25, //THANG11
                            7,11,25,
                            };
                            const unsigned char nam12[]=
                            {
                            8,12,23, //THANG 1
                            10,1,22,
                            9,2,22, //THANG3
                            11,3,21,
                            11,104,21, //THANG5 co hai thang 4 am lich
                            12,4,19,
                            13,5,19, //THANG7
                            14,6,17,
                            16,7,16, //THANG9
                            16,8,15,
                            18,9,14, //THANG11
                            18,10,13,
                            };
                            const unsigned char nam13[]=
                            {
                            20,11,12, //THANG 1
                            21,12,10,
                            20,1,12, //THANG3
                            21,2,10,
                            22,3,10, //THANG5
                            23,4,8,
                            24,5,8, //THANG7
                            25,6,7,
                            26,7,5, //THANG9
                            27,8,5,
                            28,9,3, //THANG11
                            29,10,3,
                            };
                            const unsigned char nam14[]=
                            {
                            1,12,31, //THANG 1
                            2,1,29,
                            1,2,31, //THANG3
                            2,3,29,
                            3,4,29, //THANG5
                            4,5,27,
                            5,6,27, //THANG7
                            6,7,25,
                            8,8,24, //THANG9
                            8,9,24,
                            9,9,22, //THANG11
                            10,10,22,
                            };
                            const unsigned char nam15[]=
                            {
                            11,11,20, //THANG 1
                            13,12,19,
                            11,1,20, //THANG3
                            13,2,19,
                            13,3,18, //THANG5
                            15,4,16,
                            16,5,16, //THANG7
                            17,6,14,
                            19,7,13, //THANG9
                            19,8,13,
                            20,9,12, //THANG11
                            20,10,11,
                            };
                            const unsigned char nam16[]=
                            {
                            22,11,10, //THANG 1
                            23,12,8,
                            23,1,9, //THANG3
                            24,2,7,
                            25,3,7, //THANG5
                            26,4,5,
                            27,5,4, //THANG7
                            29,6,3,
                            1,8,31, //THANG9
                            1,9,31,
                            2,10,29, //THANG11
                            3,11,29,
                            };
                            const unsigned char nam17[]=
                            {
                            4,12,28, //THANG 1
                            5,1,26,
                            4,2,28, //THANG3
                            5,3,26,
                            6,4,26, //THANG5
                            7,5,24,
                            8,106,23, //THANG7 co hai thang 6 am lich
                            10,6,22,
                            11,7,20, //THANG9
                            12,8,20,
                            13,9,18, //THANG11
                            14,10,18,
                            };
                            const unsigned char nam18[]=
                            {
                            15,11,17, //THANG 1
                            16,12,16,
                            14,1,17, //THANG3
                            16,2,16,
                            16,3,15, //THANG5
                            18,4,14,
                            18,5,13, //THANG7
                            20,6,11,
                            22,7,10, //THANG9
                            22,8,9,
                            24,9,7, //THANG11
                            25,10,7,
                            };
                            const unsigned char nam19[]=
                            {
                            26,11,6, //THANG 1
                            27,12,5,
                            25,1,6, //THANG3
                            27,2,5,
                            27,3,5, //THANG5
                            28,4,3,
                            29,5,3, //THANG7
                            1,7,30,
                            3,8,29, //THANG9
                            3,9,28,
                            5,10,26, //THANG11
                            6,11,26,
                            };
                            const unsigned char nam20[]=
                            {
                            7,12,25, //THANG 1
                            8,1,23,
                            8,2,24, //THANG3
                            9,3,23,
                            9,4,23, //THANG5
                            10,4,21,
                            11,5,21, //THANG7
                            12,6,19,
                            14,7,17, //THANG9
                            15,8,17,
                            16,9,15, //THANG11
                            17,10,14,
                            };

                            Comment


                            • #59
                              cảm ơn bác, đánh dấu từ từ ngâm cứu
                              Last edited by tctsoft; 05-11-2013, 10:39.
                              Em là người mới tới :*
                              Có hỏi câu nào ngu ngơ anh em thông cảm nha ^^!

                              Comment


                              • #60
                                ban oi, ban co the post cu the bai viet luon duoc k?

                                Comment

                                Về tác giả

                                Collapse

                                pctcom Tìm hiểu thêm về pctcom

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X