Thông báo

Collapse
No announcement yet.

giúp em phần mềm keil c này với

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

  • giúp em phần mềm keil c này với

    có ai giúp em sửa lại phần hiển thị led 7 doan với, e đang làm đồng hồ số, mà e nạp code vào ic nó ko chạy mà sáng hết led lên có a nào sửa lại giúp e đoạn code này ko, e cám ơn nhiều. đoạn e tô màu nha.
    code:

    #include <REGX51.H>
    #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

    char sec,hour,min,day,date,month,year,year_20,a_min,a_h our;
    sbit SDA = P1^0;
    sbit SCL = P1^1;
    sbit Mode = P1^2;
    sbit Up = P1^3;
    sbit Down = P1^4;
    sbit Ok = P1^5;
    sbit Alarm = P1^6;
    sbit Loa = P1^7;

    sbit L01 = P2^0;
    sbit L02 = P2^1;
    sbit L03 = P2^2;
    sbit L04 = P2^3;
    sbit L05 = P2^4;
    sbit L06 = P2^5;
    sbit L07 = P2^6;
    sbit L08 = P2^7;

    sbit L09 = P3^0;
    sbit L10 = P3^1;
    sbit L11 = P3^2;
    sbit L12 = P3^3;
    sbit L13 = P3^4;
    sbit L14 = P3^5;
    sbit L15 = P3^6;
    sbit PM = P3^7;

    //************************************************** ****************************
    // KHAI BAO BIEN, MANG...
    unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //Decimal to Led7seg
    unsigned char Data,Display,time,index,mode,bat_nhay,read_time,al arm,kt,on_off;

    // KHAI BAO HAM, CHUONG TRINH CON
    void set_main(void); // Chuong trinh khoi tao main
    void setup_timer(void); // Chuong trinh cai dat timer 1 va 0
    void delay(unsigned int time); // Delay
    void Fix_time(void); // Kiem tra va hieu chinh gia tri cua gio,phut,giay
    void Keypad(void); // Kiem tra xu ly phim nhan.
    void T1_ISR(void); //ngat timer 1 phuc vu nhay led
    void T0_ISR(void); // Dung ngat timer 0 de quet led
    //************************************************** ****************************
    void bip(void)
    {
    unsigned char n;
    for(n=0;n<100;n++)
    {
    Loa=1; delay(50);
    Loa=0; delay(50);
    }
    }
    //************************************************** ****************************
    // CAC CHUONG TRINH CON CHO I2C
    //************************************************** ****************************
    void I2C_start(void)
    {
    SCL = 1; SCL = 0;
    SDA = 1; SCL = 1;
    delay(2);
    SDA = 0; delay(2);
    SCL = 0; delay(2);
    }
    void I2C_stop(void)
    {
    SCL = 1; SCL = 0;
    SDA = 0; delay(2);
    SCL = 1; delay(2);
    SDA = 1;
    }
    bit I2C_write(unsigned char dat)
    {
    unsigned char i;
    for (i=0;i<8;i++)
    {
    SDA = (dat & 0x80) ? 1:0;
    SCL=1;SCL=0;
    dat<<=1;
    }
    SCL = 1; delay(2);
    SCL = 0;
    return dat;
    }
    unsigned char I2C_read(void)
    {
    bit rd_bit;
    unsigned char i, dat;
    dat = 0x00;
    for(i=0;i<8;i++) /* For loop read data 1 byte */
    {
    delay(2);
    SCL = 1; delay(2); /* Set SCL */
    rd_bit = SDA; /* Keep for check acknowledge */
    dat = dat<<1;
    dat = dat | rd_bit; /* Keep bit data in dat */
    SCL = 0; /* Clear SCL */
    }
    return dat;
    }
    //************************************************** ****************************
    // CAC CHUONG TRINH CON CHO DS1307
    //************************************************** ****************************
    unsigned char DS1307_read(unsigned char addr)
    {
    unsigned int temp,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)
    {
    unsigned int 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 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();
    }

    void Read_DS1307()
    {
    sec = DS1307_read(SEC);
    min = DS1307_read(MIN);
    hour = DS1307_read(HOUR);
    day = DS1307_read(DAY);
    date = DS1307_read(DATE);
    month = DS1307_read(MONTH);
    year = DS1307_read(YEAR);
    }

    void Write_DS1307()
    {
    DS1307_Write(SEC,sec);
    DS1307_Write(MIN,min);
    DS1307_Write(HOUR,hour);
    DS1307_Write(DAY,day);
    DS1307_Write(DATE,date);
    DS1307_Write(MONTH,month);
    DS1307_Write(YEAR,year);
    }

    void Write_Alarm()
    {
    DS1307_Write(A_MIN,a_min);
    DS1307_Write(A_HOUR,a_hour);
    }
    //************************************************** ****************************
    void delay(unsigned int time)
    {
    while(time--);
    }
    void set_main(void) // Chuong trinh khoi tao main
    {
    P1=0xFF;
    P0=P2=P3=0x00;
    }
    void setup_timer(void) // Setup timer 0 va timer 1
    {
    TMOD=0x11; // timer0 & timer1 set che do 1
    ET1=1; ET0=1; EA=1;
    TF0=0; TF1=0;
    TR0=1; TR1=1;
    }
    void Set_Clock(void) // Kiem tra va hieu chinh gia tri cua gio,phut,giay
    {
    unsigned char y;
    y=(year%4)*100;
    //Tang
    if(min>59) { min=0; }
    if(hour>23){ hour=0; }
    if(day>8) day=2;
    if((month==2)&&(date>29)&&(y==0)) { date=1; }
    else if((month==2)&&(date>28)&&(y!=0)) { date=1; }
    else if(((month==4)||(month==6)||(month==9)||(month==11 ))&&(date>30)&&(y!=0)){ date=1; }
    else if(date>31) { date=1; }
    if(month>12) { month=1; }
    if(year>99) { year_20++; year=0; if(year_20>99){year_20=0;} }
    //Giam
    if(min<0) { min=59; }
    if(hour<0) { hour=23; }
    if(day<2) day=8;
    if((month==2)&&(date<1)&&(y==0)) { date=29; }
    else if((month==2)&&(date<1)&&(y!=0)) { date=28; }
    else if(((month==4)||(month==6)||(month==9)||(month==11 ))&&(date<1)&&(y!=0)){ date=30; }
    else if(date<1) { date=31; }
    if(month<1) { month=12; }
    if(year<0) { year_20--; year=99; if(year_20<0){year_20=99;} }
    }
    void Keypad(void) // Kiem tra phim nhan.
    {
    if(!Ok)
    {
    bip();
    if(on_off==1)
    {
    Display=mode=alarm=0;
    Write_Alarm();
    }
    else
    {
    Display=alarm=mode=0;
    Write_DS1307();
    }
    }
    //************************************************** *******************
    if(Display==0)
    {
    if(!Mode)
    {
    bip(); mode++; sec=0;
    if(mode==7)
    {
    mode=1;
    }
    }
    if(mode==1)
    {
    if(!Up)
    {
    min=min+1; delay(50000);
    }
    if(!Down)
    {
    min=min-1; delay(50000);
    }
    }
    if(mode==2)
    {
    if(!Up)
    {
    hour=hour+1; delay(50000);
    }
    if(!Down)
    {
    hour=hour-1; delay(50000);
    }
    }
    if(mode==3)
    {
    if(!Up)
    {
    day=day+1; delay(50000);
    }
    if(!Down)
    {
    day=day-1; delay(50000);
    }
    }
    if(mode==4)
    {
    if(!Up)
    {
    date=date+1; delay(50000);
    }
    if(!Down)
    {
    date=date-1; delay(50000);
    }
    }
    if(mode==5)
    {
    if(!Up)
    {
    month=month+1; delay(50000);
    }
    if(!Down)
    {
    month=month-1; delay(50000);
    }
    }
    if(mode==6)
    {
    if(!Up)
    {
    year=year+1; delay(50000);
    }
    if(!Down)
    {
    year=year-1; delay(50000);
    }
    }
    }
    if(!Alarm)
    {
    bip(); Display=1;
    }
    if(Display==1)
    {
    if(!Mode)
    {
    bip(); alarm++;
    if(alarm==4)
    {
    alarm=1;
    }
    }
    if(alarm==1)
    {
    if(!Up) //min++;
    {
    a_min=a_min+1; delay(50000);
    }
    if(!Down) //min--;
    {
    a_min=a_min-1; delay(50000);
    }
    }
    if(alarm==2)
    {
    if(!Up) //hour++;
    {
    a_hour=a_hour+1; delay(50000);
    }
    if(!Down) //hour--;
    {
    a_hour=a_hour-1; delay(50000);
    }
    }
    if(alarm==3)
    {
    if(!Up) //hour++;
    {
    on_off=1; delay(50000);
    }
    if(!Down) //hour--;
    {
    on_off=0; delay(50000);
    }
    }
    }

    //************************************************** *******************
    Set_Clock();
    delay(1000);
    }
    void T0_ISR(void) interrupt 1 // Dung ngat Timer0 de doc DS1307
    {
    TR0=0;
    TF0=0;
    TH0=0x3C; // Gia tri cho Timer0: 50000(us)x10=0.5(s)
    TL0=0xAF;
    time++;
    if(time==10)
    {
    time=0; bat_nhay++; read_time=1;
    if(bat_nhay==2) bat_nhay=0;
    }
    TR0=1;
    }
    /*************************************/
    void T1_ISR(void) interrupt 3 // Dung ngat Timer1 de hien thi 15 Led_7D
    {
    TR1=0;
    TF1=0;
    TH1=0xFC; // Gia tri cho Timer1: 1000(us) x 15 = 15(ms)
    TL1=0x18;
    if(Display==0)
    {
    index++;
    if(index==1)
    {
    Data=sec;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L01=1;
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    }
    if(index==2)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L02=1;
    P0=led7_data[Data/10]; //xuat gia tri hang truc
    }
    //************************************************** ****************************
    if(index==3)
    {
    if(mode==1 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=min;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L03=1;
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    }
    }
    if(index==4)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L04=1;
    P0=led7_data[Data/10]; //xuat gia tri hang truc
    }
    //************************************************** ****************************
    if(index==5)
    {
    if(mode==2 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=hour;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L05=1;
    P0=led7_data[Data%10];
    }
    }
    if(index==6)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L06=1;
    P0=led7_data[Data/10];
    }
    //************************************************** ****************************
    if(index==7)
    {
    if(mode==3 && bat_nhay==1){ index++; }
    else
    {
    Data=day;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L15=1;
    P0=led7_data[Data%10];
    }
    }
    //************************************************** ****************************
    if(index==8)
    {
    if(mode==4 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=date;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L07=1;
    P0=led7_data[Data/10];// xuat gia tri hang truc
    }
    }
    if(index==9)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L08=1;
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    }
    //************************************************** ****************************
    if(index==10)
    {
    if(mode==5 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=month;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L09=1;
    P0=led7_data[Data/10];// xuat gia tri hang truc
    }
    }
    if(index==11)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L10=1;
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    }
    //************************************************** ****************************
    if(index==12)
    {
    if(mode==6 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=year;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L13=1;
    P0=led7_data[Data/10];// xuat gia tri hang truc
    }
    }
    if(index==13)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L14=1;
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    }
    if(index==14)
    {
    Data=year_20;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L11=1;
    P0=led7_data[Data/10];// xuat gia tri hang truc
    }
    if(index==15)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L12=1;
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    index=0;
    }
    }
    if(Display==1)
    {
    index++;
    if(index==1)
    {
    if(alarm==1 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=a_min;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L03=1;
    P0=led7_data[Data%10];
    }
    }
    if(index==2)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L04=1;
    P0=led7_data[Data/10];
    }
    if(index==3)
    {
    if(alarm==2 && bat_nhay==1){ index++; index++; }
    else
    {
    Data=a_hour;
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L05=1;
    P0=led7_data[Data%10];
    }
    }
    if(index==4)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L06=1;
    P0=led7_data[Data/10];
    }
    if(index==5)
    {
    if(alarm==3 && bat_nhay==1){ index++; index++; }
    else
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    if(on_off==1)
    {
    L13=1;
    P0=0xC8;
    }
    else
    {
    L13=1;
    P0=0x8E;
    }
    }
    }
    if(index==6)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    if(on_off==1)
    {
    L14=1;
    P0=0xFF;
    }
    else
    {
    L14=1;
    P0=0x8E;
    }
    }
    if(index==7)
    {
    P2=0x00; L09=L10=L11=L12=L13=L14=L15=0;
    P0=0xff;
    L12=1;
    P0=led7_data[0];
    index=0;
    }
    }
    //************************************************** ****************************
    TR1=1;
    }
    //************ CHUONG TRINH CHINH *************
    void main()
    {
    bip(); delay(10);
    Out_1Hz();

    set_main();
    year_20=20;
    time=index=mode=read_time=0;
    setup_timer();
    while(1)
    {
    Keypad();
    if(hour>=12) PM=0;
    else PM=1;
    if((mode==0)&&(read_time==1))
    {
    read_time = 0;
    Read_DS1307();
    }
    if(((a_min==min)&&(a_hour==hour)))
    {
    if(sec<59) { bip(); delay(10000);}
    }
    }
    }
    ? M? Ngu?n Chương Tr?nh đ?ng h? s? Keil C
    #include<regx52.h>
    #include<math.h>
    unsigned char a,b,nd;
    unsigned char M[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x03,0x78,0x00,0x1 8};
    void delay(unsigned char time)
    {
    unsigned char i,j;
    for(i=1;i<10;i++)
    for(j=1;j<time;j++)
    {}
    }
    void hienthi(void)
    {
    a=nd/10;
    b=nd%10;
    P3=M[a];
    P0_0=1;
    P0_0=0;
    delay(2);
    P3=M[b];
    P0_1=1; //mo
    P0_1=0; //chot
    delay(2);
    }
    void chuyendoi(void)
    {
    P1_0=1; //RD=1
    P1_1=0; //WR=0
    delay(2);
    P1_1=1; //WR=1 bat dau chuyen doi
    while(P1_2);//cho cho chuyen doi xong
    P1_0=0; //dua du lieu ra cac chan D0 - D7
    nd=P2;
    }
    void main()
    {
    P2=0xff; //dat P2 lam cong vao
    P1_2=1; //dat P1_2 lam cong vao INTR
    while(1)
    {
    chuyendoi();
    hienthi();
    }

  • #2
    chương trình này khá giống của mình, chỉ khác là có người đã thêm cái đọc ADC vào thôi. và mình đảm bảo rằng chương trình hiển thị time ngon lành ko vấn đề j, nếu ko chạy thì hãy kiểm tra lại phần cứng đi, cái này làm mạch thực tế nhiều rồi.
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #3
      mình kiểm tra hết rồi, và củng hỏi thầy và thầy bảo là bị lổi phần mả code ở led 7 đoạn ko xuất được ra led

      Comment

      Về tác giả

      Collapse

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

      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