Thông báo

Collapse
No announcement yet.

[help] Sửa lỗi code giúp với nào

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

  • [help] Sửa lỗi code giúp với nào

    Click image for larger version

Name:	Untitled18.png
Views:	1
Size:	64.5 KB
ID:	1413093Click image for larger version

Name:	Untitled18.png
Views:	1
Size:	64.5 KB
ID:	1413093




    3. Code


    #include <REGX52.H>
    #include <MATH.H>
    #define Menu P3_0 //phim menu de chon che do chinhthoigian
    #define Next P3_1 //phim next de tang thoigian
    #define Back P3_2 //phim back de giamthoigian
    #define Timer_Date P3_3 //
    #define LedCPU_on P0_0=0;
    #define LedCPU_off P0_0=1;
    #define SCL P3_5
    #define SDA P3_6
    //dinhnghiacho led 7 thanh
    #define Data P2
    #define Led1Sang P1=0x01;
    #define Led2Sang P1=0x02;
    #define Led3Sang P1=0x04;
    #define Led4Sang P1=0x08;
    #define Led5Sang P1=0x10;
    #define Led6Sang P1=0x20;
    #define Led7Sang P1=0x40;
    #define Led8Sang P1=0x80;
    #define OffLed P2=0xFF;
    #define cham P2_7=0;

    #define LedCPU P0_0
    #define Relay_on P3_7=1;
    #define Relay_off P3_7=0;
    //dinhnghiadia chi cacthanhghitrong DS1307
    #define SEC 0x00
    #define MIN 0x01
    #define HOUR 0x02
    #define DAY 0x03
    #define DATE 0x04
    #define MONTH 0x05
    #define YEAR 0x06
    #define A_MIN 0x08
    #define A_HOUR 0x09


    #define yes 1
    #define no 0
    #define on 1
    #define off 0


    //cac ham dung cho DS1307
    void I2C_Start(); //khoi dong cho DS1307
    void I2C_stop();
    unsigned char I2C_write(unsigned char dat); //ham ghi 1 byte du kieuvao DS1307
    unsigned char I2C_read(); //ham doc 1 byte du kieuvao DS1307
    unsigned char DS1307_Read(unsigned char addr); //ham doc du lieu tu 1 thanhghi bat ky
    void DS1307_write(unsigned char addr,unsigned char dat); //ham ghi du lieu tu 1 thanhghi bat ky
    void Write_DS1307(); //ham caidatthoigianvao DS1307
    void Read_DS1307(); //ham doc thoigianvao DS1307
    voidConvert_Number(); //ham chuyendoitach so de hienthitren led 7 thanh
    voidDisplay_Gio_Phut_Giay(); //ham hienthigiophutgiaytren led 7 thanh
    voidDisplay_Gio_Phut_Giay_Con_Lai();
    voidDisplay_Gio_phut_giay_Hen_Gio();
    voidScanKey(); //ham quetphimnhan



    //khaibaobien //0 1 2 3 4 5 6 7 8 9
    unsigned char Display_Number[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};//khai baomangchuacacgia tri gom 10 phantu
    unsigned char SoGioHangChuc,SoGioHangDonVi,SoPhutHangChuc,SoPhut HangDonVi,SoGiayHangChuc,SoGiayHangDonVi;
    charSoGioConLai,SoPhutConlai,SoGiayConLai;
    char SoGioConLaiHangChuc,SoGioConLaiHangDonVi,SoPhutCon LaiHangChuc,SoPhutConLaiHangDonVi,SoGiayConLaiHang Chuc,SoGiayConLaiHangDonVi;
    char SoGioHenHangChuc,SoGioHenHangDonVi,SoPhutHenHangCh uc,SoPhutHenHangDonVi,SoGiayHenHangChuc,SoGiayHenH angDonVi;
    charHenGio=24,HenPhut=0,HenGiay=0;
    charMotPhanMuioiGiayHangChuc,MotPhanMuoiGiayHangDo nVi;
    unsignedint Millisec,Millisec2,Millisec3; //biendemms
    charMotPhanMuoiGiay;
    charsec,hour,min,day,date,month,year; //cacbiendemgiophutgiay....
    char sec2;
    unsigned char kt_sec; //bienkiemtraxem RTC co hoat dong khong
    unsigned char kt_sec2;
    unsigned char kt_menu; //bienvaocacche do chinhthoigian
    charbTimer; //kiemtratrangthaihienthi
    //cac ham khaibao
    voiddelay_ms(unsigned intms) //ham delay
    {
    unsignedinti,j;
    for(i=0;i<ms;i++)
    for(j=0;j<121;j++);
    }
    voiddelay_us(unsigned int us)
    {
    unsignedint i;
    for(i=0;i<us;i++);
    }

    void ISR_1000ms(void) interrupt 1 // ham ngat timer 0 :1ms
    {
    TF0 = 0;//xoa co tran
    TH0 =0xE2; // nap du lieu vaothanhghi timer
    TL0 =0x0A;
    TR0=1;
    Millisec2++;
    Millisec3++;
    if(Millisec3>10000)
    Millisec3=0;
    Millisec++;
    if(Millisec==0xFFFD)
    Millisec=0;
    }

    //chuongtrinhchinh

    void main(void)
    {
    //khoitaochobodem timer
    TCON = 0x01; // che do 16 bit tu nap lai
    TR0=1; //chophep timer hoat dong
    TH0=0xfc;
    TL0=0x18; //nap gia tri demchothanhghi timer 0
    TR0=1; // chophép timer 0 hoat dong
    TF0=0; //xoa co ngat
    EA=1; //chophepngat
    ET0=1; //chophepngat timer 0
    LedCPU_off;
    Relay_off;
    Read_DS1307(); //doc thoigiantu DS1307
    kt_sec=sec; //luugiayvao 1 bienkt_sec
    delay_ms(2000);
    Read_DS1307();//tre 1 khoangthoigiansau do doc tiep
    kt_sec2=sec;
    if(kt_sec==kt_sec2) //nguoclaineu DS1307 chuachaythiphai set thoigian
    {
    sec=8;min=7;hour=7;day=9;month=10;year=12;date=7;
    Write_DS1307();// ghi du lieu vao DS1307
    }

    while (1)
    {
    ScanKey();
    if(Millisec2>=100)
    {
    if(sec2!=sec)
    MotPhanMuoiGiay=0;
    Millisec2=0;
    MotPhanMuoiGiay++;
    if(MotPhanMuoiGiay>9)
    MotPhanMuoiGiay=0;

    }
    if(Millisec>200)
    {
    Millisec=0;
    if(kt_menu==0&&Millisec3>1000)
    {
    Read_DS1307();
    Millisec3=0;
    }
    //hen gio o 24h,23phut,59giay
    SoGioConLai=HenGio-hour-1;
    SoPhutConlai=59-min;
    SoGiayConLai=59-sec;
    Convert_Number(); //cu 100 msthichuyendoi 1 lan
    if(HenGio==hour)
    {
    LedCPU_on;
    Relay_on;
    }
    }
    if(bTimer==1&&kt_menu==0)
    {
    Display_Gio_Phut_Giay_Con_Lai();
    }

    else if(bTimer==0&&kt_menu==0) //trongche do giophutgiay
    {

    Display_Gio_Phut_Giay(); //hienthigioiphutgiaytren led 7thanh
    }
    else if(bTimer==2&&kt_menu==0) //trongche do hienthingaythangnam
    {
    Display_Gio_phut_giay_Hen_Gio(); //hienthithoigian can hen giolen led 7 thanh
    }
    sec2=sec;
    }
    }
    voidScanKey() //ham quetphimnhan
    {
    if(Menu==0)//neuphim menu duocnhan
    {
    delay_ms(20);
    kt_menu++; //bienluutrangthai menu hien tai
    Write_DS1307();//cu moilannhanphimthiphaighi du lieu vao DS1307

    if(kt_menu==4)
    {
    kt_menu=0; //trovetrangthaihienthithoigianbinhthuong

    }
    while(Menu==0);//chokhinaonhaphim menu
    }
    if(Timer_Date==0) //neuphim timer /date duocnhanthi se chuyenche do hienthi
    {
    delay_ms(20); //tre 20ms
    bTimer++; //tang biendem
    if(bTimer==3)
    bTimer=0;
    while(Timer_Date==0); //chocho den khiphim timer /date duocnhara
    }
    if(kt_menu!=0&&bTimer==0) //neu dang o trongche do hienthigiophutgiaybinhthuong
    {
    switch(kt_menu)
    {

    case 1: //chinhgio
    {

    if(Back==0)
    {
    delay_ms(20);
    hour--;
    if(hour<0)
    hour=23;
    while(Back==0);
    }
    else if(Next==0)
    {
    delay_ms(20);
    hour++;
    if(hour==24)
    hour=0;
    while(Next==0);
    }
    Led1Sang;
    Data=Display_Number[SoGioHangChuc];
    delay_ms(1);
    Led2Sang;
    Data=Display_Number[SoGioHangDonVi];
    delay_ms(1);
    OffLed;
    }
    break; //chinhphut
    case 2:
    {

    if(Back==0)
    {
    delay_ms(20);
    min--;
    if(min==0)
    min=59;
    while(Back==0);
    }
    else if(Next==0)
    {
    delay_ms(20);
    min++;
    if(min==60)
    min=0;
    while(Next==0);
    }
    Led3Sang;
    Data=Display_Number[SoPhutHangChuc];
    delay_ms(1);
    Led4Sang;
    Data=Display_Number[SoPhutHangDonVi];
    delay_ms(1);
    OffLed;
    }
    break;
    case 3: //chinhgiay
    {

    if(Back==0)
    {
    delay_ms(20);
    sec--;
    if(sec==0)
    sec=59;
    while(Back==0);
    }
    else if(Next==0)
    {
    delay_ms(20);
    sec++;
    if(sec==60)
    sec=0;
    while(Next==0);
    }
    Led5Sang;
    Data=Display_Number[SoGiayHangChuc]; //hienthi led giay hang chuc
    delay_ms(1);
    Led6Sang;
    Data=Display_Number[SoGiayHangDonVi]; //hienthi led giay hang don vi
    delay_ms(1);
    OffLed;
    }
    break;

    }
    }
    else if(kt_menu!=0&&bTimer==2)
    {
    switch(kt_menu)
    {

    case 1: //chinhgio
    {

    if(Back==0)
    {
    delay_ms(20);
    HenGio--;
    if(HenGio<0)
    HenGio=23;
    while(Back==0);
    }
    else if(Next==0)
    {
    delay_ms(20);
    HenGio++;
    if(HenGio==24)
    HenGio=0;
    while(Next==0);
    }
    Led1Sang;
    Data=Display_Number[SoGioHenHangChuc];
    delay_ms(1);
    Led2Sang;
    Data=Display_Number[SoGioHenHangDonVi];
    delay_ms(1);
    OffLed;
    }
    break; //chinhphut
    case 2:
    {

    if(Back==0)
    {
    delay_ms(20);
    HenPhut--;
    if(HenPhut<=0)
    HenPhut=59;
    while(Back==0);
    }
    else if(Next==0)
    {
    delay_ms(20);
    HenPhut++;
    if(HenPhut==60)
    HenPhut=0;
    while(Next==0);
    }
    Led3Sang;
    Data=Display_Number[SoPhutHenHangChuc];
    delay_ms(1);
    Led4Sang;
    Data=Display_Number[SoPhutHenHangDonVi];
    delay_ms(1);
    OffLed;
    }
    break;
    case 3: //chinhgiay
    {

    if(Back==0)
    {
    delay_ms(20);
    HenGiay--;
    if(HenGiay<=0)
    HenGiay=59;
    while(Back==0);
    }
    else if(Next==0)
    {
    delay_ms(20);
    HenGiay++;
    if(HenGiay==60)
    HenGiay=0;
    while(Next==0);
    }
    Led5Sang;
    Data=Display_Number[SoGiayHenHangChuc];
    delay_ms(1);
    Led6Sang;
    Data=Display_Number[SoGiayHenHangDonVi];
    delay_ms(1);
    OffLed;
    }
    break;

    }
    }


    }
    //************************************************** ****************************
    // CAC CHUONG TRINH CON CHO I2C
    //************************************************** ****************************
    void I2C_start() //ham khoi dong I2C
    {
    SCL = 1;
    SCL = 0;
    SDA = 1;
    SCL = 1;
    SDA = 0;
    SCL = 0;

    }
    void I2C_stop()
    {
    SCL = 1; //keochan SCL len 1
    SCL = 0;
    SDA = 0;

    SCL = 1;

    SDA = 1;
    }
    unsigned char I2C_write(unsigned char dat)//ham ghi 1 byte du lieu vao DS1307
    {
    unsigned char i;
    for (i=0;i<8;i++)
    {
    SDA = (dat& 0x80); ///? 1:0;
    SCL=1;SCL=0;
    dat<<=1;
    }
    SCL = 1;
    SCL = 0;
    returndat;
    }
    unsigned char I2C_read(void)
    {
    bitrd_bit;
    unsigned char i, dat;
    dat = 0x00;
    for(i=0;i<8;i++) /* For loop read data 1 byte */
    {

    SCL = 1;
    rd_bit = SDA; /* Keep for check acknowledge */
    dat = dat<<1;
    dat = dat | rd_bit; /* Keep bit data in dat */
    SCL = 0; /* Clear SCL */
    }
    returndat;
    }
    // CAC CHUONG TRINH CON CHO DS1307
    //************************************************** ****************************
    unsigned char DS1307_read(unsigned char addr)
    {
    unsignedinttemp,ret;
    I2C_start(); /* Start i2c bus */
    I2C_write(0xD0); /* Connect to DS1307 */
    I2C_write(addr); /* Request RAM address on DS1307 */
    I2C_start(); /* Start i2c bus */
    I2C_write(0XD1); /* Connect to DS1307 for Read */
    ret = I2C_read(); /* Receive data */
    I2C_stop();
    //************************************************** ********
    temp = ret; /*BCD to HEX*/
    ret = (((ret/16)*10)+ (temp & 0x0f)); /*for Led 7seg*/
    //************************************************** ********
    return ret;
    }

    void DS1307_Write(unsigned char addr,unsigned char dat)
    {
    unsignedint temp;
    //**********************************************
    temp = dat ; /*HEX to BCD*/
    dat = (((dat/10)*16)|(temp %10)); /*for Led 7seg*/
    //**********************************************
    I2C_start(); /* Start i2c bus */
    I2C_write(0XD0); /* Connect to DS1307 */
    I2C_write(addr); /* Request RAM address on DS1307 */
    I2C_write(dat); /* Connect to DS1307 for Read */
    I2C_stop();
    }
    void Read_DS1307()
    {
    sec = DS1307_read(SEC); //doc giaytu DS1307
    min = DS1307_read(MIN); //doc phuttu DS1307
    hour = DS1307_read(HOUR); //doc giotu DS1307
    // day = DS1307_read(DAY); //doc ngaytu DS1307
    // date = DS1307_read(DATE); //doc thutu DS1307
    // month = DS1307_read(MONTH); //doc thangtu DS1307
    // year = DS1307_read(YEAR); //doc namtu DS1307
    }

    void Write_DS1307()
    {
    DS1307_Write(SEC,sec); //ghi du lieu vaothanhghigiay
    DS1307_Write(MIN,min); //ghi du lieu vaothanhghiphut
    DS1307_Write(HOUR,hour); //ghi du lieu vaothanhghigio
    // DS1307_Write(DAY,day); //ghi du lieu vaothanhghingay
    // DS1307_Write(DATE,date); //ghi du lieu vaothanhghithu
    // DS1307_Write(MONTH,month); //ghi du lieu vaothanhghithang
    // DS1307_Write(YEAR,year); //ghi du lieu vaothanhghinam
    }

    //ham quet led hienthigiophutgiay
    voidDisplay_Gio_phut_giay()
    {
    Led1Sang; // led thunhat sang
    Data=Display_Number[SoGioHangChuc]; //xuat du lieu ra led thunhat
    delay_ms(1); //tre 1ms
    Led2Sang;
    Data=Display_Number[SoGioHangDonVi];
    cham;
    delay_ms(1);
    Led3Sang;
    Data=Display_Number[SoPhutHangChuc];
    delay_ms(1);
    Led4Sang;
    Data=Display_Number[SoPhutHangDonVi];
    cham;
    delay_ms(1);
    Led5Sang;
    Data=Display_Number[SoGiayHangChuc];
    delay_ms(1);
    Led6Sang;
    Data=Display_Number[SoGiayHangDonVi];
    cham;
    delay_ms(1);
    Led7Sang;
    Data=Display_Number[0];
    delay_ms(1);
    Led8Sang;
    Data=Display_Number[MotPhanMuoiGiay];
    delay_ms(1);
    OffLed;
    }
    voidDisplay_Gio_Phut_Giay_Con_Lai()
    {
    Led1Sang; // led thunhat sang
    Data=Display_Number[SoGioConLaiHangChuc]; //xuat du lieu ra led thunhat
    delay_ms(1); //tre 1ms
    Led2Sang;
    Data=Display_Number[SoGioConLaiHangDonVi];
    cham;
    delay_ms(1);
    Led3Sang;
    Data=Display_Number[SoPhutConLaiHangChuc];
    delay_ms(1);
    Led4Sang;
    Data=Display_Number[SoPhutConLaiHangDonVi];
    cham;
    delay_ms(1);
    Led5Sang;
    Data=Display_Number[SoGiayConLaiHangChuc];
    delay_ms(1);
    Led6Sang;
    Data=Display_Number[SoGiayConLaiHangDonVi];
    delay_ms(1);
    OffLed;
    }
    voidDisplay_Gio_phut_giay_Hen_Gio()
    {
    Led1Sang; // led thunhat sang
    Data=Display_Number[SoGioHenHangChuc]; //xuat du lieu ra led thunhat
    delay_ms(1); //tre 1ms
    Led2Sang;
    Data=Display_Number[SoGioHenHangDonVi];
    cham;
    delay_ms(1);
    Led3Sang;
    Data=Display_Number[SoPhutHenHangChuc];
    delay_ms(1);
    Led4Sang;
    Data=Display_Number[SoPhutHenHangDonVi];
    cham;
    delay_ms(1);
    Led5Sang;
    Data=Display_Number[SoGiayHenHangChuc];
    delay_ms(1);
    Led6Sang;
    Data=Display_Number[SoGiayHenHangDonVi];
    delay_ms(1);
    OffLed;
    }


    voidConvert_Number()
    {
    if(bTimer==2)
    {
    SoGioHenHangChuc=HenGio/10;
    SoGioHenHangDonVi=HenGio%10;
    SoPhutHenHangChuc=HenPhut/10;
    SoPhutHenHangDonVi=HenPhut%10;
    SoGiayHenHangChuc=HenGiay/10;
    SoGiayHenHangDonVi=HenGiay%10;
    }
    else if(bTimer==1)
    {
    SoGioConLaiHangChuc=abs(SoGioConLai/10);
    SoGioConLaiHangDonVi=abs(SoGioConLai%10);
    SoPhutConLaiHangChuc=abs(SoPhutConlai/10);
    SoPhutConLaiHangDonVi=abs(SoPhutConlai%10);
    SoGiayConLaiHangChuc=abs(SoGiayConLai/10);
    SoGiayConLaiHangDonVi=abs(SoGiayConLai%10);
    }
    else
    {
    SoGiayHangChuc=sec/10;
    SoGiayHangDonVi=sec%10;
    SoPhutHangChuc=min/10;
    SoPhutHangDonVi=min%10;
    SoGioHangChuc=hour/10;
    SoGioHangDonVi=hour%10;
    }

    }

  • #2
    Bạn đưa ra như thế này sao mọi người giúp được, ít ra bạn phải nói rõ bạn bị lỗi gì , bạn sài trình biên dịch nào. hay bạn úp toàn bộ code và file mô phỏng lên thì dễ hơn....

    Comment


    • #3
      mình dùng keil C
      phía trên là toàn bộ code rồi đó

      Comment


      • #4
        Nguyên văn bởi zzmuntiamozz Xem bài viết
        mình dùng keil C
        phía trên là toàn bộ code rồi đó
        up tất cả các file liên quan lên b ơi, b paste thế kia m copy lại bị lỗi hết.
        WS:
        Blog:

        Comment

        Về tác giả

        Collapse

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

        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