Thông báo

Collapse
No announcement yet.

Giúp em xem code này sai ở đâu với

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

  • Giúp em xem code này sai ở đâu với

    các cao thủ xem giúp em chương trình này sai ở đâu với. em cám ơn!


    #include <AT89x52.h>
    //#include <Delay.h>
    #include "intrins.h"

    // Chuong trinh chuan tinh den ngay 11/05/2012
    #define dataso P1_2//P1_0
    #define clockso P1_0//P1_1
    #define latchso P1_1//P1_2

    #define phim1 P2_3//tang gia tri cham tien do
    #define phim2 P2_5// giam gia tri LED
    #define phim3 P2_7//tang chi so
    #define phim4 P2_6//tang gia tri LED
    #define phim5 P2_4// giam gia tri cham tien do
    #define phim6 P2_2// loi line reset gia tri ve 0

    #define SDA P0_4//P0_0
    #define SCL P0_3//P0_1

    #define On 1
    #define Off 0

    // DS1307
    #define psec 0x00
    #define pmin 0x01
    #define phour 0x02
    #define pday 0x03
    #define pdate 0x04
    #define pmonth 0x05
    #define pyear 0x06
    #define pcontrol 0x07

    #define stbangso 10
    #define soled 10

    unsigned char idata buffht[soled];

    unsigned char code SegCode[] = //4094
    {0x18,0xBD,0x68,0xA8,0x8D,0x8A,0x0A,0xBC,0x08,0x88 ,0xff,0xef};//, // 0,...,9,tat
    // {0x44, 0xcf, 0x52, 0x4a, 0xc9, 0x68, 0x60, 0xce, 0x40, 0x48, 0xff, 0xfb};//, // 0,...,9,tat
    //0x04, 0x8f, 0x12, 0x0a, 0x89, 0x28, 0x20, 0x8e, 0x00, 0x08, 0xff}; // 0.,...,9.,tat // dau gach duoi: 0xbf
    unsigned char code SegCode_cham[] =
    {0x10,0xB5,0x60,0xA0,0x85,0x82,0x02,0xB4,0x00,0x80 };
    unsigned char code SegCode_test[] = //4094
    {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};

    unsigned char tam1=0,tam2=0,tam3=0,tam4=0,tam5=0,tam6=0;
    unsigned char i,adr_so,chiso,dem;
    unsigned char gio,phut,giay,ngay,thang,nam,ngay1,ngay2,bienngay1 ,bienngay2,bienngay3;
    unsigned int num,bienngay;
    unsigned int linerank;
    bit nhapnhay = 0;
    //============= RTC DS1307 ==================
    void start(void)
    {
    SCL=0;
    SDA=1;
    _nop_();_nop_();_nop_();
    SCL=1;
    _nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();
    SCL=1;
    SDA=0;
    _nop_();_nop_();_nop_();
    SCL=0;
    }
    void stop(void)
    {
    SCL=0;
    SDA=0;
    _nop_();_nop_();_nop_();
    SCL=1;
    _nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();
    SCL=1;
    SDA=1;
    _nop_();_nop_();_nop_();
    SCL=0;
    }
    bit write_data(unsigned char chr)
    {
    unsigned char temp,ack;
    for(temp=0;temp<8;temp++)
    {
    SDA = (chr & 0x80);
    SCL=1;
    SCL=0;
    chr=chr<<1;
    }
    SDA=1;
    SCL=1;
    ack=SDA;
    SCL=0;
    return(ack);
    }
    unsigned char convertBCD(unsigned char _data)
    {
    unsigned char temp;
    temp=(_data/10<<4)|(_data%10&0x0F);
    return temp;
    }
    unsigned char read_data(void)
    {
    unsigned char temp1,temp2=0;
    for(temp1=0;temp1<8;temp1++)
    {
    SCL=1;
    temp2=temp2<<1;
    temp2=temp2|((unsigned char)(SDA));
    SCL=0;
    }
    return(temp2);
    }
    void write_RTC(unsigned char address, unsigned char _data)
    {
    bit status;
    start();
    write_data(0xD0);
    write_data(address);
    write_data(_data);
    stop();
    start();
    status=write_data(0xD0);
    while(status) //status = 1 (NACK)
    {
    start();
    status=write_data(0xd0);
    }
    }
    unsigned char read_RTC(unsigned char address)
    {
    unsigned char k;
    start();
    write_data(0xD0);
    write_data(address);
    start();
    write_data(0xD1);
    k=read_data();
    stop();
    return ((k>>4)*10+(k&0x0F));
    }
    unsigned char read_RTC_chuan(unsigned char address)
    {
    unsigned char k;
    start();
    write_data(0xD0);
    write_data(address);
    start();
    write_data(0xD1);
    k=read_data();
    stop();
    return k;
    }
    void init_RTC(void)
    {
    // cai dat ngay theo chuan thuc te
    write_RTC(0x07,0x10);
    write_RTC(0x00,0x00); //0s
    write_RTC(0x01,0x39); // phut :23
    write_RTC(0x02,0x20); // h : 20
    write_RTC(0x04,0x19); // ngay : 12
    write_RTC(0x05,0x01); // thang :01
    write_RTC(0x06,0x11); // nam : 2011/
    //write_RTC(stbangso,10);
    //write_RTC(stbangso+1,0);
    //write_RTC(stbangso+2,0);
    }
    //////End DS1307//////////
    ////////////////////////////////////////////
    void quetled (void)
    {
    unsigned char led1, led2, t;

    // doc lich!
    /*giay =read_RTC(0x00);
    phut =read_RTC(0x01);
    gio =read_RTC(0x02);
    ngay =read_RTC(0x04);
    thang=read_RTC(0x05);
    nam =read_RTC(0x06);
    /*
    buffht[0] = ngay/10;
    buffht[1] = ngay%10;
    buffht[2] = thang/10;
    buffht[3] = thang%10;
    buffht[4] = nam/10;
    buffht[5] = nam%10;
    buffht[6] = phut/10;
    buffht[7] = phut%10;
    buffht[8] = giay/10;
    buffht[9] = giay%10;*/

    for(t=0; t<soled; t++)
    {
    if(chiso==t)
    {
    if(nhapnhay) led1 = SegCode[buffht[chiso]];
    else led1 = 0xff; //tat
    }
    else led1 = SegCode[buffht[t]]; // giu nguyen gia tri
    led2 = 0x80;
    loop_time: // dich tung bit dua ra led


    dataso = led1 & led2;
    _nop_();_nop_();_nop_();

    clockso =1;
    led2 = led2 >> 1;
    _nop_();_nop_();_nop_();
    clockso =0;
    if(led2) goto loop_time;
    }
    latchso =1;
    _nop_();_nop_();_nop_();_nop_();
    latchso =0;

    }
    void quetled_moi (void)
    {
    unsigned char led1, led2, t,t_moi;

    // doc lich!
    giay =read_RTC(0x00);
    phut =read_RTC(0x01);
    gio =read_RTC(0x02);
    ngay =read_RTC(0x04);
    thang=read_RTC(0x05);
    nam =read_RTC(0x06);

    buffht[0] = ngay/10;
    buffht[1] = ngay%10;
    buffht[2] = thang/10;
    buffht[3] = thang%10;
    buffht[4] = nam/10;
    buffht[5] = nam%10;
    buffht[6] = phut/10;
    buffht[7] = phut%10;
    buffht[8] = giay/10;
    buffht[9] = giay%10;

    for(t_moi=0; t_moi<soled; t_moi++)
    {
    if (t_moi==0){t=8;}
    if (t_moi==1){t=4;}
    if (t_moi==2){t=0;}
    if (t_moi==3){t=5;}
    if (t_moi==4){t=3;}
    if (t_moi==5){t=7;}
    if (t_moi==6){t=9;}
    if (t_moi==7){t=2;}
    if (t_moi==8){t=1;}
    if (t_moi==9){t=6;}
    if(chiso==t)
    {
    if(nhapnhay) led1 = SegCode[buffht[chiso]];
    else led1 = 0xff; //tat
    }
    else led1 = SegCode[buffht[t]]; // giu nguyen gia tri
    led2 = 0x80;
    if (t==1){led1=SegCode_cham[buffht[t]];}
    loop_time: // dich tung bit dua ra led


    dataso = led1 & led2;
    _nop_();_nop_();_nop_();

    clockso =1;
    led2 = led2 >> 1;
    _nop_();_nop_();_nop_();
    clockso =0;
    if(led2) goto loop_time;
    }
    latchso =1;
    _nop_();_nop_();_nop_();_nop_();
    latchso =0;

    }
    void delay_ms(int i)
    {
    int j;
    for(j=1;j<=i;j++){}

    }
    void main (void)
    {
    P0=0xff; // P0 la dau vao
    P1=0x00; // P1,P2,P3 la dau ra
    P2=0xff; //P2 la dau vao bam so
    P3=0x00;

    init_RTC();while(1){} // cai dat ngay chuan theo ngay thuc te
    // cai 1 lan cho moi con DS1307

    // Chay test
    /*linerank=read_RTC(0x00);
    while (1)
    {

    linerank=read_RTC(0x00);
    buffht[2]=linerank%10;
    buffht[1]=linerank/10;

    quetled_moi();

    } */

    //nap DS
    /*write_RTC(stbangso,10);
    write_RTC(stbangso+1,0);
    write_RTC(stbangso+2,0);
    write_RTC(stbangso+3,0);
    write_RTC(stbangso+4,0);
    write_RTC(stbangso+5,0);
    write_RTC(stbangso+6,0);
    write_RTC(stbangso+7,0);
    write_RTC(stbangso+8,0);
    write_RTC(stbangso+9,0);
    init_RTC();while(1){}*/

    // load du lieu tu ROM ra
    adr_so=stbangso;
    for(i=0;i<soled;i++)
    {
    buffht[i]=read_RTC_chuan(adr_so);
    adr_so++;
    }
    chiso = soled;
    dem = 0; //dem thoi gian nhap nhay
    while(1)
    {
    dem++;
    if(dem==100) nhapnhay = ~nhapnhay;
    if(dem>200) {nhapnhay = ~nhapnhay; dem=0;}

    phut =read_RTC(0x04);////////doc trang thai chuyen doi tang
    /////0x04 ngay; 0x00 giay;0x01 phut;0x02 gio

    ngay1=read_RTC_chuan(stbangso+12);
    ngay2=read_RTC_chuan(stbangso+13);

    if (phut != ((ngay1*10)+ngay2))
    {
    write_RTC(stbangso+12,phut/10);
    write_RTC(stbangso+13,phut%10);

    bienngay1=read_RTC_chuan(stbangso+5);
    bienngay2=read_RTC_chuan(stbangso+6);
    bienngay3=read_RTC_chuan(stbangso+7);
    bienngay = bienngay1*100 + bienngay2*10 + bienngay3;
    bienngay++;
    write_RTC(stbangso+5,(bienngay/100));
    write_RTC(stbangso+6,(bienngay%100)/10);
    write_RTC(stbangso+7,(bienngay%10));

    buffht[5] = bienngay/100;
    buffht[6] = (bienngay%100)/10;
    buffht[7] = bienngay%10;
    }
    //quetled();
    quetled_moi();
    // co phim an
    if ((phim1==0) | (phim2==0) | (phim3==0) | (phim4==0) | (phim5==0) | (phim6==0))
    {
    delay_ms(100);
    if (phim3 == 0) //tang chiso
    {
    if (chiso == soled) chiso = 3;
    else chiso++;
    }
    else if (phim4 == 0)//tang gia tri cuar LED
    {
    if (chiso != soled)
    {
    if (buffht[chiso] >= 9) buffht[chiso] = 0;
    else buffht[chiso] = buffht[chiso] + 1;
    }
    adr_so = stbangso + chiso;
    write_RTC(adr_so,buffht[chiso]);
    }
    else if (phim2 == 0)//giam gia tri cua LED
    {
    if (chiso != soled)
    {
    if (buffht[chiso] == 0) buffht[chiso] = 9;
    else buffht[chiso] = buffht[chiso] - 1;
    }
    adr_so = stbangso + chiso;
    write_RTC(adr_so,buffht[chiso]);
    }
    else if (phim6 == 0)//co loi line reset so ngay ve 0
    {
    buffht[5] = 0;
    write_RTC(stbangso+5,0);
    buffht[6] = 0;
    write_RTC(stbangso+6,0);
    buffht[7] = 0;
    write_RTC(stbangso+7,0);

    num = buffht[8]*10 + buffht[9];
    if (num == 99) num = 0;
    else num++;

    buffht[8] = (num%100)/10;
    write_RTC(stbangso+8,buffht[8]);
    buffht[9] = num%10;
    write_RTC(stbangso+9,buffht[9]);
    }
    else if (phim1 == 0)//tang gia tri cham tien do
    {
    if (buffht[0] == 10)
    {
    num = buffht[1]*10 + buffht[2];
    if (num == 99) num = 0;
    else num++;
    }
    else if (buffht[0] == 11)
    {
    num = buffht[1]*10 + buffht[2];
    if (num == 1)
    {
    num = 0;
    buffht[0] = 10;
    }
    else num--;
    }
    write_RTC(stbangso,buffht[0]);
    buffht[1] = num/10;
    write_RTC(stbangso+1,buffht[1]);
    buffht[2] = num%10;
    write_RTC(stbangso+2,buffht[2]);
    }
    else if (phim5 == 0)// giam gia tri cham tien do
    {
    if (buffht[0] == 10)
    {
    num = buffht[1]*10 + buffht[2];
    if (num == 0)
    {
    num = 1;
    buffht[0] = 11;
    }
    else num--;
    }
    else if (buffht[0] == 11)
    {
    num = buffht[1]*10 + buffht[2];
    if (num == 99)
    {
    num = 0;
    buffht[0] = 10;
    }
    else num++;
    }
    write_RTC(stbangso,buffht[0]);
    buffht[1] = num/10;
    write_RTC(stbangso+1,buffht[1]);
    buffht[2] = num%10;
    write_RTC(stbangso+2,buffht[2]);
    }
    //quetled_moi();
    while((phim1==0) | (phim2==0) | (phim3==0) | (phim4==0) | (phim5==0) | (phim6==0)); // doi thoat phim
    delay_ms(500);
    while((phim1==0) | (phim2==0) | (phim3==0) | (phim4==0) | (phim5==0) | (phim6==0)); // doi thoat phim
    delay_ms(500);
    }
    }// while (1)
    } // of main

  • #2
    Bùm!..................

    Comment


    • #3
      Nguyên văn bởi ngochanpt89 Xem bài viết
      Bùm!..................
      Không có lỗi, chỉ có cảnh báo:
      Build target 'Target 1'
      compiling help.c...
      linking...
      *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
      SEGMENT: ?PR?_CONVERTBCD?HELP
      *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
      SEGMENT: ?PR?_READ_RTC_CHUAN?HELP
      *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
      SEGMENT: ?PR?QUETLED?HELP
      *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
      SEGMENT: ?PR?QUETLED_MOI?HELP
      *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
      SEGMENT: ?PR?_DELAY_MS?HELP
      Program Size: data=46.2 xdata=0 code=910
      creating hex file from "help"...
      "help" - 0 Error(s), 5 Warning(s).
      WS:
      Blog:

      Comment


      • #4
        đúng là không có lỗi chỉ có cảnh báo thôi ! mà bạn đưa nguyên cái source nhìn muốn đi ngủ quá
        Email :
        Phone : 0902 5777 39
        Branch: LẬP TRÌNH CÁC DÒNG CHIP NXP, ST, ATMEL

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        • bqviet
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi bqviet
          Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
          06-12-2025, 17:17
        • nguyendinhvan
          Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
          bởi nguyendinhvan
          Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
          05-12-2025, 19:59
        • afrendly
          Trả lời cho Đấu tắt điện cho máy tính bảng
          bởi afrendly
          Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
          04-12-2025, 01:27
        • nick22
          Trả lời cho Máy điện châm ?
          bởi nick22
          Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
          01-12-2025, 13:23
        Đang tải...
        X