Thông báo

Collapse
No announcement yet.

Giúp em làm mạch dồng hồ số sử dụng ds1307&89c51 hiển thị lên led 7 đoạn với!!!

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

  • Giúp em làm mạch dồng hồ số sử dụng ds1307&89c51 hiển thị lên led 7 đoạn với!!!

    Em đang làm đồ án mạch đồng hồ số ds1307&89c51 hiên thị lên 6 led bảy đoạn
    theo phương pháp quét led!
    phần cứng em đã làm xong còn phần mềm code asm em không biết viết vì hoc chỉ biết quét led đơn anh chị trên diễn đàng giúp em với!
    http://www.megaupload.com/?d=T8U45ORZ
    http://www.megaupload.com/?d=X8YLA2ZU
    chu nhật em bảo vệ nhờ anh chị giúp em với!

  • #2
    mình chỉ viết với AVR, nếu bạn cần, mình share cho.ok
    Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
    Gmail: -Mobile: 0989.194.472

    Comment


    • #3
      bạn đã đọc thành công ds1307 chưa.đọc được rồi thì ok thôi.
      bạn cứ làm từng bước là ok thôi mà

      Comment


      • #4
        em đang tìm hiểu về cách ds ghi và nhân dữ liệu mà không biết gì hết hà
        phần cứng thì dễ mà lập trình không dễ̉ tí nào cả! ...
        nhờ ah chị giúp em với code ám nha!
        em cảm ơn!

        Comment


        • #5
          Cần giúp đở
          anh chị ai đã lamthành công đồng hồ số dòng chíp: At89,giúp em với,em đang gặp khó khăn. rất cần sự giúp đở của các anh chị.
          Chân thành cảm ơn

          Comment


          • #6
            Nguyên văn bởi thiennv0109 Xem bài viết
            mình chỉ viết với AVR, nếu bạn cần, mình share cho.ok
            Bạn ơi mình cũng đang làm đồ án làm mạch đồng hồ số báo giờ học với AVR và hiển thị trên led 7 đoạn. Bạn share cho mình được ko? Tại mới làm đồ án lần đầu nên còn gà lắm.
            Cám ơn bạn nhiều!
            email của mình: lieukoangzhung@gmail.com

            Comment


            • #7
              nếu bn ko mun làm vs avr thì bn có thể làm như mạch này dùng ATtiny http://viktorz.sytes.net/cxema.at.ua...ny2313_DS1307/

              01689961326

              Comment


              • #8




                code:
                giao tiep I2C (cái này mình tham khảo trên diễn đàn thôi)
                #define SCL P1_0
                #define SDA P1_1
                //=====================
                /* giao tiep i2c */

                //-------------------------
                void delay(){
                int i;
                for (i=0;i<10;i++);
                }

                void SCL_high(){
                SCL=1;
                delay();
                }

                void SCL_low(){
                SCL=0;
                delay();
                }
                //------------------------

                //=======================================

                //------------------------
                void i2c_start(){
                SDA=1;
                SCL=1;
                SDA=0;
                delay();
                SCL=0;
                SDA=1;
                }

                void i2c_stop(){
                SDA=0;
                SCL=1;
                delay();
                SDA=1;
                }
                //-------------------------


                //==========*** Ham ghi gia tri vao i2c ***================
                bit i2c_write(unsigned char dat){
                unsigned char i;
                bit outbit;
                for (i=1;i<=8;i++){
                outbit=dat&0x80;
                SDA=outbit;
                dat=dat<<1;
                SCL_high();
                SCL_low();
                }
                SDA=1; //set SDA to receive Acknowedge
                SCL_high();
                outbit=SDA; //kiem tra ACK xem slaver nhan dung chua
                SCL_low();
                return(outbit); //if outbit=1,Ack=1 :error // if outbit=0;Ack=0 :ok
                }
                //================================================== ====
                giao tiếp với DS1307
                //================================================== ==

                /* giao tiep voi IC DS1307 */

                //==== Ham ghi du lieu data1 toi thanh ghi dia chi address cua DS1307 ==========
                void rtc_write(unsigned char address, unsigned char data1){
                i2c_start();
                i2c_write(0xd0); // dia chi cua DS1307 che do ghi
                i2c_write(address); //dia chi cua thanh ghi
                /* i2c_write(((data1/10)<<4)|(data1%10)); //chuyen thanh so thap phan */
                i2c_stop();
                }

                //======= Ham doc du lieu cua DS1307 tai thanh ghi co dia chi address =========
                unsigned char rtc_read(unsigned char address){
                unsigned char data1;
                i2c_start();
                i2c_write(0xd0); //dia chi cua DS1307 che do ghi
                i2c_write(address); //dia chi thanh ghi can doc
                i2c_start(); //restart
                i2c_write(0xd1); //dia chi DS1307 che do doc
                data1=i2c_read(0);
                i2c_stop();
                /*data1=(data1&0x0f)+(data1>>4)*10; //chuyen thanh so thap phan */
                return(data1);
                }

                //================================
                main:
                #include <at89x51.h>

                #define SCL P1_0
                #define SDA P1_1
                /* dinh nghia cac bien hien thi */
                #define LED P0 // xuat ma led
                #define DP P0_7
                /*quet led*/
                #define on 1
                #define off 0
                #define led1 P1_2 //dung de quet led
                #define led2 P1_3
                #define led3 P1_4
                #define led4 P1_5
                #define led5 P1_6
                #define led6 P1_7
                /* nut an */
                #define mode P2_0
                #define tang P2_1
                #define giam P2_2
                #define change P2_3

                /*khai bao cac bien gio phut giay*/
                unsigned char index;
                unsigned char gio,phut,giay,ngay,thang,nam;
                unsigned char gio1,gio2,phut1,phut2,giay1,giay2;
                unsigned char ngay1,ngay2,thang1,thang2,nam1,nam2;
                bit bit_mode1,bit_mode2,bit_mode3,bit_mode4,bit_tang1, bit_tang2,bit_tang3,bit_tang4;
                bit bit_giam1,bit_giam2,bit_giam3,bit_giam4,bit_change 1,bit_change2,bit_change3,bit_change4;
                unsigned int dem=0;
                #define clear_bit {bit_mode1=0; bit_mode2=0; bit_mode3=0; bit_mode4=0;}
                #define clear_bit1 {bit_tang1=0; bit_tang2=0; bit_tang3=0; bit_tang4=0; }
                #define clear_bit2 {bit_giam1=0; bit_giam2=0; bit_giam3=0; bit_giam4=0; }
                #define clear_bit3 {bit_change1=0; bit_change2=0; bit_change3=0; bit_change4=0;}

                led_code[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
                led_code1[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10 };


                //===================/* giao tiep i2c */================================================== =
                void delay(){
                int i;
                for (i=0;i<10;i++);
                }

                void SCL_high(){
                SCL=1;
                delay();
                }

                void SCL_low(){
                SCL=0;
                delay();
                }
                //------------------------

                //=======================================

                //------------------------
                void i2c_start(){
                SDA=1;
                SCL=1;
                SDA=0;
                delay();
                SCL=0;
                SDA=1;
                }

                void i2c_stop(){
                SDA=0;
                SCL=1;
                delay();
                SDA=1;
                }
                //--------------------------------------------------------------------------------


                //==========*** Ham ghi gia tri vao i2c ***================
                bit i2c_write(unsigned char dat){
                unsigned char i;
                bit outbit;
                for (i=1;i<=8;i++){
                outbit=dat&0x80;
                SDA=outbit;
                dat=dat<<1;
                SCL_high();
                SCL_low();
                }
                SDA=1; //set SDA to receive Acknowedge
                SCL_high();
                outbit=SDA; //kiem tra ACK xem slaver nhan dung chua
                SCL_low();
                return(outbit); //if outbit=1,Ack=1 :error // if outbit=0;Ack=0 :ok
                }
                //--------------------------------------------------------------------------------

                //=========*** Ham doc gia tri tu i2c ***=================
                unsigned char i2c_read(bit ack){
                unsigned char i,dat;
                bit inbit;

                dat=0;
                for(i=1;i<=8;i++){
                SCL_high();
                inbit=SDA;
                dat=dat<<1;
                dat=dat|inbit;
                SCL_low();
                }
                if (ack){ //set SDA=0 (ACK)
                SDA=0;
                }
                else { //set Not ACK
                SDA=1;
                }
                SCL_high();
                SCL=0;
                SDA=1; //set SDA=1 for next read
                delay();
                return(dat);
                }
                //============/* ket thuc cac ham giao tiep cho i2c */===============================




                //==========================************************ ****=============================
                //=============/* giao tiep voi IC DS1307 */=========================================
                //==== Ham ghi du lieu data1 toi thanh ghi dia chi address cua DS1307 ==========
                void rtc_write(unsigned char address, unsigned char data1){
                i2c_start();
                i2c_write(0xd0); // dia chi cua DS1307 che do ghi
                i2c_write(address); //dia chi cua thanh ghi
                i2c_write(((data1/10)<<4)|(data1%10)); //chuyen thanh so thap phan */
                i2c_stop();
                }

                //======= Ham doc du lieu cua DS1307 tai thanh ghi co dia chi address =========
                unsigned char rtc_read(unsigned char address){
                unsigned char data1;
                i2c_start();
                i2c_write(0xd0); //dia chi cua DS1307 che do ghi
                i2c_write(address); //dia chi thanh ghi can doc
                i2c_start(); //restart
                i2c_write(0xd1); //dia chi DS1307 che do doc
                data1=i2c_read(0);
                i2c_stop();
                data1=(data1&0x0f)+(data1>>4)*10; //chuyen thanh so thap phan */
                return(data1);
                }
                //========================***********************=== ============================


                //================================================== ===================
                void delay1ms(){
                int x,y;
                for (x=0;x<10;x++){
                for (y=0;y<13;y++);{}
                }
                }
                //------------------------------------
                void chuyendoiBCD_time(){
                giay1=giay%10;
                giay2=giay/10;

                phut1=phut%10;
                phut2=phut/10;

                gio1=gio%10;
                gio2=gio/10;
                }
                //-----------------------------------
                void chuyendoiBCD_date(){
                ngay1=ngay%10;
                ngay2=ngay/10;

                thang1=thang%10;
                thang2=thang/10;

                nam1=nam%10;
                nam2=nam/10;
                }

                /*-----------tam thoi chua dung den----------------------
                void display_time(){
                //bat led1 hien thi hang don vi giay
                LED=led_code[giay1]; //xuat ma 7doan ra led
                led1=on;
                delay1ms(); //tre 1ms
                led1=off; //tat led

                LED=led_code[giay2];
                led2=on;
                delay1ms();
                led2=off;

                LED=led_code[phut1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code[phut2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code[gio1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code[gio2];
                led6=on;
                delay1ms();
                led6=off;
                }
                //-----------------------------------
                void display_date(){
                LED=led_code[nam1];
                led1=on;
                delay1ms();
                led1=off;

                LED=led_code[nam2];
                led2=on;
                delay1ms();
                led2=off;

                LED=led_code[thang1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code[thang2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code[ngay1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code[ngay2];
                led6=on;
                delay1ms();
                led6=off;
                }
                //-------------------------------------------------*/
                void update_time(){
                //doc thoi gian tu RTC
                giay=rtc_read(0x00); //doc giay (o dang so thap phan)
                phut=rtc_read(0x01); // doc phut
                gio = rtc_read(0x02); // doc gio
                }

                void update_date(){
                //doc ngay - thang - nam tu RTC
                ngay = rtc_read(0x04); // doc ngay` (o dang so thap phan)
                thang= rtc_read(0x05); // doc thang
                nam = rtc_read(0x06); //doc nam
                }

                void hienthi_time(){
                update_time();
                chuyendoiBCD_time();
                }

                void hienthi_date(){
                update_date();
                chuyendoiBCD_date();
                }
                void set_time(); //ham cai dat thoi gian
                void set_ngaythangnam(); //ham cai dat ngay thang nam
                void set_alarm();
                void set_gio();
                void set_phut();
                void set_ngay();
                void set_thang();
                void set_nam();

                void update_timeDS1307(); //ham update thoi gian sau khi cai dat vao DS1307
                void update_dateDS1307(); //ham update ngay thang nam sau khi cai dat vao DS1307

                //=====================
                void T0_ISR() interrupt 1
                {
                TR0=0;
                TF0=0;
                TH0=-1000/256;
                TL0=-1000%256;
                led1=led2=led3=led4=led5=led6=0;
                if(bit_change1==1){
                index++;
                if(index==1)
                {
                LED=led_code[ngay2];
                led1=1;
                }
                else if(index==2)
                {
                LED=led_code[ngay1];
                led2=1;
                }
                else if(index==3)
                {
                LED=led_code[thang2];
                led3=1;
                }
                else if(index==4)
                {
                LED=led_code[thang1];
                led4=1;
                }
                else if(index==5)
                {
                LED=led_code[nam2];
                led5=1;
                }
                else if(index==6)
                {
                LED=led_code[nam1];
                led6=1;
                index=0;
                }
                }

                else if(bit_change1==0){
                index++;
                if(index==1)
                {
                LED=led_code[gio2];
                led1=1;
                }
                else if(index==2)
                {
                LED=led_code[gio1];
                led2=1;
                }
                else if(index==3)
                {
                LED=led_code[phut2];
                led3=1;
                }
                else if(index==4)
                {
                LED=led_code[phut1];
                led4=1;
                }
                else if(index==5)
                {
                LED=led_code[giay2];
                led5=1;
                }
                else if(index==6)
                {
                LED=led_code[giay1];
                led6=1;
                index=0;
                }
                }

                TR0=1;
                }
                //==========================
                void set_timer(){
                TMOD=0x01;
                TH0=-1000/256;
                TL0=-1000%256;
                TF0=0;
                ET0=1;
                EA=1;
                TR0=1;
                }
                //************************************************** **************************
                //----------------------------------------------------------------------------
                //========================/* chuong trinh chinh */============================
                void main(void){
                unsigned char buff_giay;
                set_timer();
                index=0; P1=0xff; P2=0xff; P0=0xff;
                clear_bit; clear_bit1; clear_bit2; clear_bit3;
                buff_giay=rtc_read(0x00);
                rtc_write(0x00, 0x00); //neu dat cau lenh nay thi khi reset lai VDK thi giay se bi xoa ve 0
                rtc_write(0x07, 0x10); //chan(7) SQW/OUT enable pulse out 1Hz
                rtc_write(0x00, buff_giay);
                while(1){
                hienthi_time();
                if (change==0) { //neu nhan "change" thi chuyen sang hien thi ngay thang nam
                while(change==0){TR0=0;} //cho nha phim
                bit_change1=1;
                TR0=1;
                }

                if (mode==0) { //neu nhan "mode" lan1 thi chuyen sang cai dat thoi gian
                while(mode==0) {TR0=0;} //cho nha phim
                bit_mode1=1; //bit nho dung trong vong lap cai dat thoi gian
                set_time();
                TR0=1;
                }
                while(bit_change1==1){
                hienthi_date();
                if (change==0) { //neu nhan "change" tiep thi chuyen ve che doi hien thi thoi gian
                while(change==0){TR0=0;} //cho nha phim
                bit_change1=0;
                TR0=1;
                }

                if (mode==0) { //neu nhan "mode" thi chuyen sang che do cai dat ngay thang nam
                while(mode==0) {TR0=0;} //cho nha phim
                bit_mode3=1; //bit nho dung trong vong lap cai dat ngay thang nam
                set_ngaythangnam();
                TR0=1;
                }
                }

                }
                }
                //************************************************** *
                //---------------------------------------------------
                //************************************************** *
                void update_timeDS1307(){
                int dulieu=0;
                //update phut
                dulieu=phut1+phut2*10; //chuyen sang so BCD
                rtc_write(0x01, dulieu); //ghi du lieu vao thanh ghi phut
                //update gio
                dulieu=gio1+gio2*10; //chuyen sang so BCD
                rtc_write(0x02, dulieu); //ghi du lieu vao thanh ghi gio
                }
                //---------------------------------------------------
                void update_dateDS1307(){
                int dulieu1=0;
                //update ngay
                dulieu1=ngay1+ngay2*10; //chuyen sang BCD
                rtc_write(0x04, dulieu1); //ghi du lieu vao thanh ghi ngay
                //update thang
                dulieu1=thang1+thang2*10;
                rtc_write(0x05, dulieu1);
                //update nam
                dulieu1=nam1+nam2*10;
                rtc_write(0x06, dulieu1);
                }
                //---------------------------------------------------
                void set_time(){

                unsigned int dem1=0;

                while(bit_mode1==1) { //vong lap o lai chuong trinh cai dat time cho toi khi nhan mode tiep
                if (change==0) {
                while(change==0) {} //cho nha phim
                dem1++; }


                if (dem1%2==0) { set_phut(); }
                if (dem1%2!=0) { set_gio(); }
                update_timeDS1307(); //update lai thoi gian sau khi cai dat vao DS1307

                if (mode==0) { //neu nhan nut "mode" lan 2 thi chuyen sang cai dat hen gio
                while (mode==0){} //cho nha phim
                bit_mode1=0;
                bit_mode2=1; //bit nho dung trong vong lap cai dat alarm
                set_alarm(); //goi ham cai dat hen gio
                }


                }

                }

                //----------------------------------------------------
                void set_ngaythangnam(){
                unsigned char dem3=1;
                while(bit_mode3==1){
                if (change==0){ //neu nhan "change" thi chuyen che do ngay -> thang
                while(change==0){} //cho nha phim
                dem3++;
                }

                if (mode==0){
                while (mode==0){} //cho nha phim
                bit_mode3=0;
                }

                switch(dem3){
                case 1: set_ngay(); break;
                case 2: set_thang(); break;
                case 3: set_nam(); break;
                case 4: dem3=1; break;
                }
                update_dateDS1307();
                }

                }
                //----------------------------------------------------
                void set_gio(){
                if (tang==0){ //neu nhan nut "tang" thi tang gia tri "gio1" len 1 don vi
                while (tang==0){} //cho nha phim
                gio1++;
                if ((gio2==2)&(gio1==4)) { gio1=0; gio2=0; }
                if (gio1==10) { gio2++; gio1=0;}
                }
                if (giam==0){ //neu nhan nut "giam" thi giam gia tri "gio1" xuong 1 don vi
                while(giam==0){} //cho nha phim
                gio1--;
                if ((gio1==255)&(gio2==0)) {gio1=3; gio2=2; }
                if (gio1==255){gio2--; gio1=9;}
                }
                LED=led_code[phut1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code[phut2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code1[gio1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code1[gio2];
                led6=on;
                delay1ms();
                led6=off;

                }
                //-----------------------------------------
                void set_phut(){
                if (tang==0){ //neu nhan nut "tang" thi tang gia tri "gio1" len 1 don vi
                while (tang==0){} //cho nha phim
                phut1++;
                if ((phut2==5)&(phut1==10)) { phut1=0; phut2=0; }
                if (phut1==10) { phut2++; phut1=0; }
                }
                if (giam==0){ //neu nhan nut "giam" thi giam gia tri "gio1" xuong 1 don vi
                while(giam==0){} //cho nha phim
                phut1--;
                if ((phut1==255)& (phut2==0)) { phut1=9; phut2=5; }
                if (phut1==255) { phut2--; phut1=9; }

                }

                LED=led_code1[phut1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code1[phut2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code[gio1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code[gio2];
                led6=on;
                delay1ms();
                led6=off;
                }
                //------------------------------------------------------
                void set_ngay(){
                if (tang==0){
                while(tang==0){} //cho nha phim
                ngay1++;
                if ((ngay1==2)&(ngay2==3)) { ngay1=1; ngay2=0; }
                if (ngay1==10) { ngay2++; ngay1=0; }
                }
                if (giam==0){
                while(giam==0){} //cho nha phim
                ngay1--;
                if ((ngay2==0)&(ngay1==0)) { ngay1=1; ngay2=3; }
                if (ngay1==255) { ngay2--; ngay1=9; }
                }

                LED=led_code1[ngay2];
                led6=on;
                delay1ms();
                led6=off;

                LED=led_code1[ngay1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code[thang2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code[thang1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code[nam2];
                led2=on;
                delay1ms();
                led2=off;

                LED=led_code[nam1];
                led1=on;
                delay1ms();
                led1=off;
                }
                //---------------------------------------------
                void set_thang(){
                if(tang==0){
                while(tang==0){} //cho nha phim
                thang1++;
                if ((thang2==1)&(thang1==3)) { thang1=1; thang2=0; }
                if (thang1==10) { thang2++; thang1=0; }
                }
                if (giam==0){
                while (giam==0) {} // cho nha phim
                thang1--;
                if ((thang2==0)&(thang1==0)) { thang1=2; thang2=1; }
                if (thang1==255) { thang2--; thang1=9; }
                }
                LED=led_code[ngay2];
                led6=on;
                delay1ms();
                led6=off;

                LED=led_code[ngay1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code1[thang2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code1[thang1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code[nam2];
                led2=on;
                delay1ms();
                led2=off;

                LED=led_code[nam1];
                led1=on;
                delay1ms();
                led1=off;
                }
                //-------------------------------------------------
                void set_nam(){
                if (tang==0){
                while(tang==0){} // cho nha phim
                nam1++;
                if ((nam2==9)&(nam1==10)) { nam1=0; nam2=0; }
                if (nam1==10) { nam2++; nam1=0; }
                }
                if (giam==0){
                while(giam==0){} //cho nha phim
                nam1--;
                if ((nam2==0)&(nam1==255)) { nam1=9; nam2=9; }
                if (nam1==255) { nam2--; nam1=9; }
                }
                LED=led_code[ngay2];
                led6=on;
                delay1ms();
                led6=off;

                LED=led_code[ngay1];
                led5=on;
                delay1ms();
                led5=off;

                LED=led_code[thang2];
                led4=on;
                delay1ms();
                led4=off;

                LED=led_code[thang1];
                led3=on;
                delay1ms();
                led3=off;

                LED=led_code1[nam2];
                led2=on;
                delay1ms();
                led2=off;

                LED=led_code1[nam1];
                led1=on;
                delay1ms();
                led1=off;
                }

                Comment


                • #9
                  Nguyên văn bởi ngoc_phuc Xem bài viết
                  Cần giúp đở
                  anh chị ai đã lamthành công đồng hồ số dòng chíp: At89,giúp em với,em đang gặp khó khăn. rất cần sự giúp đở của các anh chị.
                  Chân thành cảm ơn
                  tham khao
                  http://www.dientuvietnam.net/forums/...%BB%93-89C2051

                  Comment


                  • #10
                    A share code cua a cho moi nguoi xem với

                    Comment


                    • #11
                      buốn bán đã có mục trao đổi hàng nhé, cái này là mục chia sẻ kinh nghiệm
                      Website chính thức đổi địa chỉ website thành
                      Mời các bạn ghé thăm !!!

                      Comment


                      • #12
                        yahoo la gi may duoc chu?

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X