Thông báo

Collapse
No announcement yet.

trục chặc đồng hồ số khi làm mạch thật

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

  • Nguyên văn bởi namkpac Xem bài viết
    Thanks mọi người tui đã làm ok rùi! chỉ có 06 led 7segment thôi nên con thiếu nhưng về phần đồng hồ thì chạy ok rôi. 18122011.mp4
    mạch hơi lớn và nhiều phần rời quá nhỉ

    Comment


    • Nguyên văn bởi chung1608 Xem bài viết
      mạch hơi lớn và nhiều phần rời quá nhỉ
      Thanks bạn đã ghé coi, mình làm với mục đích ghép thôi vì modul led 7seg mình muốn làm thứ khác nữa. và mạch chính do mình làm thủ công nên nó hơi lớn. Thanks bạn đã góp ý. tương lai mình sẽ làm cho nó gọn hơn.
      |

      Comment


      • Chào mọi người mình có việc này muốn hỏi thêm tý nữa, cái mạch mình làm ở trên có 1 vấn đề đó là khi mất điện và có điện lại thì đồng hồ không tự chạy lại mà mình phải nhấn nút thì nó mới tiếp tục chạy, e mới học C nên không rành lắm bộ đồng hồ này e được hỗ trợ nên hơi gà, các pác chỉ giúp e nhé.
        #include <at89x52.h>
        #include<INTRINS.H>
        //==========================================
        //Cac chan dieu khien
        #define led_port P0
        #define ic_counter P2
        #define reg_sec 0x0
        #define reg_min 0x1
        #define reg_hour 0x2
        #define reg_day 0x3
        #define reg_date 0x4
        #define reg_month 0x5
        #define reg_year 0x6
        #define reg_control 0x7
        sbit scl = P1^0;
        sbit sda = P1^1;
        sbit ic_time = P2^4;
        sbit ic_date = P2^5;
        sbit sqw = P1^2;
        sbit button_menu = P3^1;
        sbit button_plus = P3^3;
        sbit button_minus = P3^2;
        sbit button_al = P3^0;
        sbit led_arlam = P3^4;
        sbit led_24h = P3^5;
        sbit led_offset = P3^6;
        //==========================================
        //Cac bien toan cuc dung trong chuong trinh
        unsigned char code led_code[20]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0,0xff,0x00,0x8e,0xc8,0xbf};//{0,1,2,3,4,5,6,7,8,9, ,8.,f,n,-,}
        unsigned char led_buffer[13];
        unsigned char scan_led,counter,var_menu;//Phan hien thi Led
        unsigned char sec,min,hour,day,date,month,year;
        unsigned char value_offset,number_day,counter_day;
        bit bit_arlam,bit_offset,type_offset,bit_counter;// ==1 :co chuc nang ==0 : khong co chuc nang
        int wait_time;
        //Quet led 7 doan dung timer 0
        //Tan so quet khoang 25Hz moi led sang khoang 1000/(25*13)=3ms
        void setup_timer0(void)
        {
        EA=0;//cam ngat toan cuc
        TMOD=0x2;//timer0 che do 8 bit tu dong nap lai
        TL0=0x6;//Gia tri bat dau dem = 6 (tre 250us)
        TH0=0x6;//gia tri TH dc nap vao TL (che do 8 bit)
        ET0=1;//cho phep ngat timer0
        EA=1;//cho phep ngat toan cuc
        TR0=1;//Bat dau chay timer0
        }
        //quet 13 LED Sau 12 lan Timer0 ngat thi thay doi cac led sang
        void quet_led(void)interrupt 1 //dia chi vecto ngat timer0
        {
        TR0=0;//dung chay Timer
        if(++counter==6)//sau 12x250us=3ms thi thay doi hien thi led
        {
        if(scan_led<=6)//chan enb cua IC_COUNTER =>0 khong co led nao duoc hien thi
        {
        ic_counter=scan_led;//hien thi cac led o hang 1 (gio, phut,giay,thu)
        //chan enb cua IC_COUNTER =>0 khong co led nao duoc hien thi
        led_port=led_code[(led_buffer[scan_led])];
        ic_time=1;//hien thi gio phut giay
        }else
        {
        ic_counter=scan_led-0x7;// hien thi led hang 2 (ngay thang nam)(tru di so led da hien thi o hang 1)
        led_port=led_code[(led_buffer[scan_led])];
        ic_date=1;//hien thi ngay thang nam
        } // ic_counter=scan_led-0x7+0xf0 led thu 7 la led thu 0 cua hang 2
        scan_led++;
        if(scan_led>=13) //vuot qua 13 led thi tro ve ban dau
        {
        scan_led=0;
        }
        counter=0;
        }
        TR0=1;//Chay TIMER0
        }
        //************************************************** *******************************************
        //------------------*************Cac ham phuc vu chuong trinh*********------------
        //-----------***************Chuyen doi tu DEC sang BCD************-----------------
        unsigned char dec_2_bcd(unsigned char value1)//chuyen doi tu he decima sang BCD
        {
        return ((value1/10)*16+value1%10); //deo' hieu tai sao lai khac (value1/10)<<4+value1%10
        }
        //----------**************Chuyen doi tu BCD sang DEC**********---------------------
        unsigned char bcd_2_dec(unsigned char value2)//chuyen doi tu he BCD sang DECIMA
        {
        return ((value2/16)*10+value2%16);
        }
        //--------***********tao thoi gian tre dung lenh _nop_();**********-------------
        void delay(int time_delay)
        {
        while(time_delay)
        {
        time_delay--;
        }
        }
        void delays(int time_delay)
        {
        unsigned int temp;
        while(time_delay)
        {
        temp=1000;
        while(temp)
        {
        temp--;
        }
        time_delay--;
        }
        }
        //------******Khoi dong I2C******---------
        void i2c_start(void)
        {
        sda=1;
        scl=1;
        delay(15);
        sda=0;
        scl=0;
        }
        //-----******Ket thuc I2C*******---------
        void i2c_stop(void)
        {
        sda= 0;
        scl= 1;
        delay(15);
        sda=1;
        scl=0;
        }
        //-------*******Gui du lieu len duong I2C******------
        void write_i2c(unsigned char data_2_send)
        {
        unsigned char temp;
        for(temp=0;temp<8;temp++)
        {
        sda=(data_2_send&0x80)? 1:0; //dua bit du lieu ra chan SDA
        scl=1; //
        _nop_();
        _nop_(); //
        scl=0;
        data_2_send<<=1; //bit co trong so lon hon dc truyen truoc
        }
        scl=1;; //nhan bit ACK tu SLAVER
        _nop_();
        _nop_();
        scl=0;
        }
        //------------**********Doc di lieu tren duong I2C******---------
        unsigned char read_i2c(void)
        {
        unsigned char temp,i;
        for(i=0;i<8;i++) // nhan vao 8 bit
        {
        scl=1;
        temp<<=1;
        temp=temp|sda;
        scl=0;
        }
        //sda=0;//gui bit NO ACK
        scl=1;//master nhan/gui bit du lieu(sda) khi scl o muc cao
        _nop_();
        _nop_();
        scl=0;//du lieu(sda) thay doi khi scl muc thap*/
        return temp;//tra gia tri cho ham
        }
        //------*****Ghi du lieu len RTC qua duong I2C*****----------
        void write_rtc(char value,addr)
        {
        i2c_start();//start i2c
        write_i2c(0xd0);//0xd0 la ID cua DS1307
        write_i2c(addr);
        write_i2c(value);
        i2c_stop();
        }
        //---------********Doc du lieu tu RTC qua duong I2C*****--------
        unsigned char read_rtc(char addr)
        {
        unsigned char temp;
        i2c_start();
        write_i2c(0xd0);//
        write_i2c(addr); //bat dau doc du lieu tu thanh ghi co dia chi 0x0
        i2c_start();
        write_i2c(0xd1); //0xd0 + 0x01 la ID cua ds107 va che do doc du lieu
        temp=read_i2c();//con tro dang tro toi dia chi 0x0 chua du lieu second
        i2c_stop();//Stop I2C
        return temp;
        }
        //-----------***********Lay du lieu thoi gian tu cac thanh ghi trong RTC*******---------
        void get_time()
        {
        sec=read_rtc(reg_sec);
        min=read_rtc(reg_min);
        hour=read_rtc(reg_hour);
        day=read_rtc(reg_day);
        date=read_rtc(reg_date);
        month=read_rtc(reg_month);
        year=read_rtc(reg_year);
        }
        ///////---------------***********Ghi du lieu va bo dem****-----------
        void write_led_buffer(void)
        {
        unsigned char temp;
        led_buffer[0]=(day&0x7);
        //*******Hien thi gio*************
        if((temp=(hour&0x30)>>4)==0)//khong hien thi so 0 o hang chuc
        {
        led_buffer[1]=0x0a;
        }else
        {
        led_buffer[1]=temp;//Lay 2 bit cao
        }
        led_buffer[2]=(hour&0x0f); //Lay 4 bit thap
        //*******Hien thi phut**********
        led_buffer[3]=(min&0x70)>>4; //lay 3 bit cao
        led_buffer[4]=min&0x0f; //Lay 4 bit thap
        //*******Hien thi giay*********
        led_buffer[5]=(sec&0x70)>>4;
        led_buffer[6]=sec&0x0f;
        //*******Hien thi ngay**********
        if((temp=(date&0x70)>>4)==0)//khong hien thi so 0 o hang chuc
        {
        led_buffer[7]=0x0a;
        }else
        {
        led_buffer[7]=temp;
        }
        led_buffer[8]=date&0x0f;
        //*********Hien thi thang************
        if(((month&0x30)>>4)==0)//khong hien thi so 0 o hang chuc
        {
        led_buffer[9]=0x0a;
        }else
        {
        led_buffer[9]=(month&0x30)>>4;
        }
        led_buffer[10]=month&0x0f;
        //******Hien thi nam***********
        led_buffer[11]=(year&0x70)>>4;
        led_buffer[12]=year&0x0f;}
        //-----------------**********Cai dat che do cho RTC****------------------
        void setup_rtc(void)
        {
        write_rtc(0x10,reg_control);//xung ra 1Hz muc thap khi khong dc kich hoat
        write_rtc(0x0,reg_sec);//Clear bit CLOCK HAT
        write_rtc(0x0,reg_min);
        write_rtc(0x0,reg_hour);
        write_rtc(0x2,reg_day);
        write_rtc(0x18,reg_date);
        write_rtc(0x12,reg_month);
        write_rtc(0x11,reg_year);
        }
        //-----------------**************Do phim**********----------------------
        void scan_button(void)
        {
        if(button_menu==0)//phim menu duoc an
        {
        delays(wait_time);//chong rung phim
        if(button_menu==0)
        {
        if((button_menu==0)&&(button_al==0))
        {
        delay(wait_time);
        if((button_menu==0)&&(button_al==0))
        {
        setup_rtc();
        }
        }
        if(bit_arlam==0)//Neu khong thuc hien chuc nang hen gio
        {
        if(var_menu<=10)
        {
        var_menu++; //thuc hien menu tiep
        }else
        {
        var_menu=0;//quay tro ve menu dau tien
        }
        }else
        {
        bit_arlam=0;//hen gio xong
        }
        }
        }
        if(button_al==0)
        {
        delays(wait_time);
        if(button_al==0)
        {
        button_al=1;
        var_menu=0;
        bit_arlam=1;
        }
        }
        }
        //-----------******Chinh Giay********---------
        void menu1(void)
        { unsigned char temp;
        temp=bcd_2_dec(sec);
        while(var_menu==1)
        {
        if(sqw==1)
        {
        led_buffer[5]=temp/10;
        led_buffer[6]=temp%10;
        }else
        {
        led_buffer[5]=0xa;
        led_buffer[6]=0xa;
        }
        if((button_plus==0)||(button_minus==0))
        {
        delays(wait_time);
        if((button_plus==0)||(button_minus==0))
        {
        delays(wait_time);
        temp=0x00;
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(temp,reg_sec); //Reset GIAY
        }
        //----------*********Chinh PHUT*********------------
        void menu2(void)
        {
        unsigned char temp;
        temp=bcd_2_dec(min);
        while(var_menu==2)
        {
        if(sqw==1)
        {
        led_buffer[3]=temp/10;
        led_buffer[4]=temp%10;
        }else
        {
        led_buffer[3]=0xa;
        led_buffer[4]=0xa;
        }
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        delays(wait_time);
        if(temp<59)
        {
        temp++;
        }else
        {
        temp=0;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        delays(wait_time);
        if(temp>0)
        {
        temp--;
        }else
        {
        temp=59;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(dec_2_bcd(temp),reg_min);
        }
        //----------*********Chinh gio***********------------
        void menu3(void)
        {
        unsigned char temp;
        temp=bcd_2_dec(hour);
        while(var_menu==3)
        {
        if(sqw==1)
        {
        led_buffer[1]=temp/10;
        led_buffer[2]=temp%10;
        }else
        {
        led_buffer[1]=0xa;
        led_buffer[2]=0xa;
        }
        if(button_plus==0)
        {
        if(button_plus==0)
        {
        delays(wait_time);
        if(temp>=23)
        {
        temp=0;
        }else
        {
        temp++;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        delays(wait_time);
        if(temp<=0)
        {
        temp=23;
        }else
        {
        temp--;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(dec_2_bcd(temp),reg_hour);//ghi du lieu BCD vao thanh ghi GiO cua RTC
        }
        //----------------********Chinh Ngay Trong Tuan*******----------------------
        void menu4(void)
        {
        unsigned char temp;
        temp=bcd_2_dec(day);
        while(var_menu==4)
        {
        if(sqw==1)
        {
        led_buffer[0]=temp;

        }else
        {
        led_buffer[0]=0xa;
        }
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        delays(wait_time);
        if(temp>=7)
        {
        temp=1;
        }else
        {
        temp++;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        delays(wait_time);
        if(temp<=1)
        {
        temp=7;
        }else
        {
        temp--;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(dec_2_bcd(temp),reg_day);//ghi du lieu BCD vao thanh ghi GiO cua RTC
        }
        //-----------********Chinh Ngay********----------------
        void menu5()
        {
        unsigned char temp,temp1,temp2;
        temp=bcd_2_dec(date);
        temp1=bcd_2_dec(month);
        temp2=bcd_2_dec(year);
        while(var_menu==5)
        {
        if(sqw==1)
        {
        led_buffer[7]=temp/10;
        led_buffer[8]=temp%10;
        }else
        {
        led_buffer[7]=0xa;
        led_buffer[8]=0xa;
        }
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0) //******An PLUS***----
        {
        delays(wait_time);
        if((temp1==4)||(temp1==6)||(temp1==9)||(temp1==11) )//Cac thang co 30 ngay
        {
        if(temp>=30)
        {
        temp=1;
        }
        }else
        {
        if(temp1==2)//thang 2
        {
        if(temp2%4==0)//nam nhuan
        {
        if(temp>=29)
        {
        temp=1;
        }else
        {
        temp++;
        }
        }else //nam thuong
        {
        if(temp>=28)
        {
        temp=1;
        }else
        {
        temp++;
        }
        }
        }else //cac thang co 31 ngay
        {
        if(temp>=31)
        {
        temp=1;
        }else
        {
        temp++;
        }
        }
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0) //-********AN MINUS****--------
        {
        delays(wait_time);
        if(temp>2)
        {
        temp--;
        }else
        {
        if((temp1==4)||(temp1==6)||(temp1==9)||(temp1==11) )//Cac thang co 30 ngay
        {
        temp=30;
        }else
        {
        if(temp1==2)//thang 2
        {
        if(temp2%4==0)//nam nhuan
        {
        temp=29;
        }else //nam thuong
        {
        temp=28;
        }
        }else //cac thang co 31 ngay
        {
        temp=31;
        }
        }
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(dec_2_bcd(temp),reg_date);//ghi du lieu BCD vao thanh ghi DATE cua RTC
        }
        void menu6(void)//-------*********Chinh Thang-*******---------
        {
        unsigned char temp;
        temp=bcd_2_dec(month);
        while(var_menu==6)
        {
        if(sqw==1)
        {
        led_buffer[9]=temp/10;
        led_buffer[10]=temp%10;
        }else
        {
        led_buffer[9]=0xa;
        led_buffer[10]=0xa;
        }
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        delays(wait_time);
        if(temp>=12)
        {
        temp=1;
        }else
        {
        temp++;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        delays(wait_time);
        if(temp==0)
        {
        temp=12;
        }else
        {
        temp--;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(dec_2_bcd(temp),reg_month);//ghi du lieu BCD vao thanh ghi MONTH cua RTC
        }
        //---------**********Chinh Nam**********--------------
        void menu7(void)//-------*********Chinh Thang-*******---------
        {
        unsigned char temp;
        temp=bcd_2_dec(year);
        while(var_menu==7)
        {
        if(sqw==1)
        {
        led_buffer[11]=temp/10;
        led_buffer[12]=temp%10;
        }else
        {
        led_buffer[11]=0xa;
        led_buffer[12]=0xa;
        }
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        delays(wait_time);
        if(temp>=50)//Chinh thoi gian tu nam 2011 den Nam 2050
        {
        temp=11;
        }else
        {
        temp++;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        delays(wait_time);
        if(temp<=11)
        {
        temp=50;
        }else
        {
        temp--;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        write_rtc(dec_2_bcd(temp),reg_year);//ghi du lieu BCD vao thanh ghi YAER cua RTC
        }
        //--------********Ham thuc hien bu gio***************-------------------
        void offset_time(void)
        {
        unsigned char temp;
        temp=bcd_2_dec(sec);
        if(bit_offset==1)
        {
        if(hour==0x0)
        {
        if((min==0x0))
        {
        if((bit_counter==1)&&(temp<=2))//chac chan xuat hien truong hop nay trong khoang 2 giay
        { //dem so ngay
        counter_day++;
        bit_counter=0;//khong cho dem ngay
        }
        }else
        {
        bit_counter=1;//cho phep dem ngay tro lai sau it nhat la 1 phut
        }
        if(counter_day==number_day)
        {
        if((temp>28)&&(temp<32))
        {
        if(type_offset==1)
        {
        temp-=value_offset; //Bu am
        }else
        {
        temp+=value_offset; //Bu duong
        }
        }
        counter_day=0;//reset bien
        write_rtc(dec_2_bcd(temp),reg_sec);//ghi du lieu
        }
        }
        }
        }
        //--------********Chinh gia tri bu thoi gian cho dong ho******----------
        void menu8(void)//Bu hay khong
        {
        unsigned char i;
        for(i=0;i<=12;i++)
        {
        led_buffer[i]=0x0a;//tat het led
        }
        led_buffer[7]=0; // 0
        led_buffer[8]=0x0c; // F
        led_buffer[9]=0x0c; // F
        led_buffer[10]=0x5; // s
        led_buffer[12]=0x1; // 1
        while(var_menu==8)
        {
        if(bit_offset==1)
        {
        led_buffer[1]=0x0;//0
        led_buffer[2]=0xd;//n
        led_buffer[3]=0xa;//
        }else
        {
        led_buffer[1]=0; //0
        led_buffer[2]=0xc;//f
        led_buffer[3]=0x0c;//f
        }
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        if(bit_offset==1)
        {
        bit_offset=0;
        }else
        {
        bit_offset=1;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        if(bit_offset==0)
        {
        bit_offset=1;
        }else
        {
        bit_offset=0;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        }
        void set_days_offset(void)//Bao nhieu ngay bu 1 lan
        {
        unsigned char i;
        for(i=0;i<=12;i++)
        {
        led_buffer[i]=0x0a;//tat het led
        }
        led_buffer[7]=0; // 0
        led_buffer[8]=0x0c; // F
        led_buffer[9]=0x0c; // F
        led_buffer[10]=0x5; // s
        led_buffer[12]=0x2; // 2
        while(var_menu==9)
        {
        led_buffer[3]=number_day/10;
        led_buffer[4]=number_day%10;
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        if(number_day>=15)
        {
        number_day=1;
        }else
        {
        number_day++;
        }
        }
        delays(wait_time);
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {
        if(number_day<=1)
        {
        number_day=15;
        }else
        {
        number_day--;
        }
        }
        delays(wait_time);
        }
        scan_button();
        }
        }
        void set_val_offset(void)//Bu hay khong
        {
        unsigned char i;
        for(i=0;i<=12;i++)
        {
        led_buffer[i]=0x0a;//tat het led
        }
        led_buffer[7]=0; // 0
        led_buffer[8]=0x0c; // F
        led_buffer[9]=0x0c; // F
        led_buffer[10]=0x5; // s
        led_buffer[12]=0x3; // 1
        while(var_menu==10)
        {
        if(type_offset==1)
        {
        led_buffer[2]=0xe;
        }else
        {
        led_buffer[2]=0xa;
        }
        led_buffer[3]=value_offset/10;
        led_buffer[4]=value_offset%10;
        if(button_plus==0)
        {
        delays(wait_time);
        if(button_plus==0)
        {
        if(type_offset==0)
        {
        if(value_offset>=29)
        {
        type_offset=1;//am 29 giay
        value_offset=29;
        }else
        {
        value_offset++;
        }
        }else
        {
        if(value_offset<=1)
        {
        value_offset=1;
        type_offset=0;
        }else
        {
        value_offset--;
        }
        }
        }
        }
        if(button_minus==0)
        {
        delays(wait_time);
        if(button_minus==0)
        {

        if(type_offset==0)
        {
        if(value_offset<=1)
        {
        type_offset=1;//am 29 giay
        value_offset=1;
        }else
        {
        value_offset--;
        }
        }else
        {
        if(value_offset>=29)
        {
        value_offset=0;
        type_offset=29;
        }else
        {
        value_offset++;
        }
        }
        }
        }
        scan_button();
        }
        }
        //-----------***********Thuc Hien MENU*********---------------
        void process_menu(void)
        {
        if(var_menu!=0)
        {
        switch(var_menu)
        {
        case 1:
        menu1();
        break;
        case 2:
        menu2();
        break;
        case 3:
        menu3();
        break;
        case 4:
        menu4();
        break;
        case 5:
        menu5();
        break;
        case 6:
        menu6();
        break;
        case 7:
        menu7();
        break;
        case 8:
        menu8();
        break;
        case 9:
        set_days_offset();
        break;
        case 10:
        set_val_offset();
        break;
        //Cho RTC cap nhat gio tro lai
        }
        }
        }
        //------*********Khoi dong SYSTEM******-------------
        void check_rtc()
        {
        i2c_start();
        i2c_stop();
        write_rtc(0x10,reg_control);//xung ra 1Hz muc thap khi khong dc kich hoat
        }
        void start_system()
        {
        var_menu=0;
        bit_arlam=0;
        wait_time=50;
        led_arlam=1;//khong hien thi
        led_24h=0;//che do 24h
        check_rtc();
        counter_day=0;
        var_menu=8;
        }
        void check_led()
        {
        led_arlam=!bit_arlam;
        led_offset=!bit_offset;
        }
        //************************************************** *******************************************
        //---------------**************Chuong trinh chinh**********----------------------
        void main(void)
        {
        setup_timer0();
        start_system();
        while(1)
        {
        get_time();
        write_led_buffer();
        check_led();
        offset_time();
        scan_button();
        process_menu();
        }
        }
        //-----------------**************Ket thuc chuong trinh********--------------------
        |

        Comment


        • ở đây mình thêm dòng setup_rtc(); trong hàm main thì có bỏ qua được tình trạnh này không các pác nhỉ. mong được chỉ giáo.
          |

          Comment


          • có pác nào giúp e tí, bây giờ từ đoạn code trên e muốn sửa quá trình off (chỉnh bù giờ, hẹn giờ) từ đầu chương trình ra sau thì e phải làm thế nào? tức là e muốn đồng hồ khi có điện lại thì nó vẫn chạy còn nếu chạy nhanh (chậm) thì lúc đó mới thực hiện chỉnh bù giờ và cài đặt hẹn giờ sau. mạch này e làm thì nó chạy rồi nhưng có thắc mắc như vậy, mong được các pác giúp đỡ. thanks các bác nhiều.
            |

            Comment


            • E tìm cách sửa lại phần scan button và setup RTC nhưng vẫn chưa hiểu chổ này lắm pác nào giúp e với. đại ý là khi cấp nguồn nó hiện trên các led 7 thanh là OFFS1; OFF, nó bắt mình lựa chọn việc bù giờ hoặc cài đặt giờ, hoặc hẹn giờ. e tìm cách để nó không chạy lựa chọn này nữa mà khi nào gọi nó thì nó mới chạy, cứ mỗi lần cấp nguồn là nó chạy đồng hồ luôn, còn nếu đồng hồ chạy sai mình sẽ thực hiện công đoạn bù giờ hay hẹn giờ... Các pác bớt chút time xem lại hộ e cái, thanks các pác nhiều.
              |

              Comment


              • ui ui làm được rồi, quả thật C cũng khó, nhưng tìm ra được đường đi thì ok thật
                |

                Comment


                • Nguyên văn bởi 0973885865 Xem bài viết
                  mình mạn phép tác giả đưa code lên đoạn này thì phải

                  void Out_1Hz()
                  {
                  I2C_start(); /* Start i2c bus */
                  I2C_write(0xD0); /* Connect to DS1307 */
                  I2C_write(0x07); //vi tri con tro RTC
                  I2C_write(0x10);
                  I2C_stop();
                  }
                  đây là link của mạch bạn tham khảo nhé
                  Clock_DS1307_Led7Dx16.rar
                  Em đả xem qua mạch này, nhưng sao nhịp nháy 1hz không đều. Để lấy xung 1hz ta lấy từ thanh ghi control bằng cách ghi vào DS lênh
                  I2C_write(0x10);
                  nhưng trong code này có vấn đề gì nhỉ

                  Comment


                  • Nguyên văn bởi menxplorer Xem bài viết
                    Em đả xem qua mạch này, nhưng sao nhịp nháy 1hz không đều. Để lấy xung 1hz ta lấy từ thanh ghi control bằng cách ghi vào DS lênh
                    I2C_write(0x10);
                    nhưng trong code này có vấn đề gì nhỉ
                    xung 1 Hz của 1307 có duty cycle 50% mà sao lại ko đều hả bạn

                    Comment


                    • Nguyên văn bởi chung1608 Xem bài viết
                      xung 1 Hz của 1307 có duty cycle 50% mà sao lại ko đều hả bạn
                      em củng không hiểu vì sao bác ah. Trên mô phỏng em thấy nháy không đều, tìm mãi mà không thấy sai đâu

                      Comment


                      • Nguyên văn bởi menxplorer Xem bài viết
                        em củng không hiểu vì sao bác ah. Trên mô phỏng em thấy nháy không đều, tìm mãi mà không thấy sai đâu
                        chú thấy là thấy vậy vì mô phỏng phụ thuộc phần cứng máy ví tính đang chạy protues, muốn biết chính xác thì phải mắc oscillos vào đo

                        Comment


                        • Nhờ các pác chỉ giúp cái đồng hồ này tui làm mạch thật mà sao nó không chạy và con 7805 thì nóng ran nhỉ
                          Attached Files
                          Last edited by namkpac; 25-12-2011, 08:58.
                          |

                          Comment


                          • còn đây là file mạch in mình vẽ trên orcad, khối điều khiển thôi, khối led mình mắc rời, mong các pác chỉ giúp Mach 89C51.rar
                            |

                            Comment


                            • Các pác coi giúp e cái này với loay hoay miết mà không phát hiện ra điều gì cả. mạch chính điều khiển mình chỉ muốn thấy con led tại chân 7 con DS1307 chạy thôi còn giờ không thấy nó chạy mà nó còn làm cho con 7805 nóng ran luôn. mong nhận được giúp đỡ pal này. thanks các pác
                              |

                              Comment


                              • có ai biết vì sao mạch này không chạy và khi chạy thì con 7805 lại nóng ran không nhỉ, nhờ giúp xem với. thanks mọi người
                                |

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X