1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

vi dieu khien

Thảo luận trong 'Vi điều khiển - Mạch Số' bắt đầu bởi tronglmbg, 23 Tháng tám 2012.

  1. tronglmbg New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
    co ai biet các lệnh trong này dùng để làm j` k? nếu biết thì ghi dõ từng lệnh ra cho mình nha
    thank các bạn nhiều!
    #include<reg52.h>
    #include<stdio.h>
    sbit mode = P1^4;
    sbit status_ =P1^5;
    sbit up_ = P1^6;
    sbit down_ = P1^7;
    unsigned int vi_tri,logic_mode;
    unsigned long k;
    unsigned char so[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
    unsigned int gio,phut,giay,ngay,thang,nam;
    void set_reg (void);
    unsigned char date_mon (unsigned char month, unsigned char year );
    void delay_ms (unsigned int time);
    void clear (void);
    void quet_gio (void);
    void quet_phut (void);
    void quet_giay (void);
    void gio_phut_giay (void);
    void quet_ngay (void);
    void quet_thang (void);
    void quet_nam (void);
    void ngay_thang_nam (void);
    void scan_mode (void);
    void dat_gio (void);
    void dat_phut (void);
    void dat_giay(void);
    void dat_ngay (void);
    void dat_thang (void);
    void dat_nam (void);
    void scan_vitri (void);
    void up_date (void);
    void up_time (void);
    //==================================================
    void main (void)
    {
    set_reg();
    while (1)
    {
    scan_mode();
    if (status_ ==0)
    {
    while (status_ ==0);
    EA=0;TR1=0;
    vi_tri =vi_tri+1;
    if (vi_tri ==5)
    {vi_tri=0;
    IE=0X88;EA=1;
    TH1=-1000/256;
    TL1=-1000%256;
    TF1 = 0;TR1=1;}
    }
    scan_vitri();
    }
    }
    void set_reg (void) ////////////////////////////////
    {
    gio = 13; ngay = 22;
    phut = 15; thang = 11;
    giay = 30; nam = 9 ;
    k = 0 ; vi_tri = 0 ;
    logic_mode =1;
    IE = 0X88;
    TMOD = 0X10;
    EA = 1 ;
    TH1 = -1000/256;
    TL1 = -1000%256;
    TR1 = 1 ;
    TF1 = 1 ;
    }
    unsigned char date_mon (unsigned char month, unsigned char year )
    {
    unsigned char date_m; //ham tinh toan cho nam nhuan
    switch (month)
    {
    case 1: date_m = 31 ; break;
    case 2: if ((year %4)==0)
    date_m = 28;
    else
    date_m = 29 ; break;
    case 3: date_m = 31 ; break;
    case 5: date_m = 31 ; break;
    case 7: date_m = 31 ; break;
    case 8: date_m = 31 ; break;
    case 10: date_m = 31 ; break;
    case 12: date_m = 31 ; break;
    case 4: date_m = 30 ; break;
    case 6: date_m = 30 ; break;
    case 9: date_m = 30 ; break;
    case 11: date_m = 30 ; break;
    }
    return (date_m);
    } ///////////////////////////////
    void delay_ms (unsigned int time)
    {
    unsigned int i;//ham tre dung timer 0

    //unsigned char j;
    for (i=time;i>0;i--)
    {TMOD=0X01;
    TH0=-1000/256;
    TL0=-1000%256;TR0=1;
    while(!TF0); TR0=0;TF0=0;
    }
    // for (j=100;j>0;j--);*/
    }
    void clear (void)
    {
    P0=0XFF;
    P2=0XFF;
    delay_ms (2);
    }
    void quet_gio (void)
    {
    clear();P2=0X7F; //1
    P0=so[gio/10]; delay_ms(2);
    clear();P2=0XBF; //2
    P0=so[gio%10]; delay_ms(2);
    }
    void quet_phut (void)
    {
    clear();P2=0XEF; //4
    P0=so[phut/10];delay_ms(2);
    clear();P2=0XF7; //5
    P0=so[phut%10];delay_ms(2);
    }
    void quet_giay (void)
    {
    clear();P2=0XFD; //7
    P0=so[giay/10];delay_ms(2);
    clear();P2=0XFE; //8
    P0=so[giay%10];delay_ms(2);
    }
    void gio_phut_giay (void)
    {
    quet_gio();
    clear(); P2=0XDF; //3
    P0=0XBF; delay_ms(2);
    quet_phut();
    clear();P2=0XFB; //6
    P0=0XBF; delay_ms(2);
    quet_giay();
    }
    void quet_ngay (void)
    {
    clear();P2=0X7F; //1
    P0=so[ngay/10];delay_ms(2);
    clear();P2=0XBF; //2
    P0=so[ngay%10];delay_ms(2);
    }
    void quet_thang (void)
    {
    clear();P2=0XEF; //4
    P0=so[thang/10];delay_ms(2);
    clear();P2=0XF7; //5
    P0=so[thang%10];delay_ms(2);
    }
    void quet_nam (void)
    {
    clear();P2=0XFD; //7
    P0=so[nam/10];delay_ms(2);
    clear();P2=0XFE; //8
    P0=so[nam%10];delay_ms(2);
    }
    void ngay_thang_nam (void)
    {
    quet_ngay();
    clear();P2=0XDF; //3
    P0=0XBF;delay_ms(2);
    quet_thang();
    clear();P2=0XFB; //6
    P0=0XBF;delay_ms(2);
    quet_nam();
    }
    //-------------------------------------------- ////////////////////////////
    void scan_mode (void)
    {
    if ((logic_mode==1) && (mode==0))
    {
    while (mode==0);
    logic_mode=0;
    }
    if ((logic_mode==0) && (mode==0))
    {
    while (mode==0);
    logic_mode=1;
    }
    }
    //==================================================
    void dat_gio (void)
    {if (up_ ==0)
    {while (up_ ==0);
    gio = gio+1;
    if (gio>=24) gio = 0;
    }
    if (down_ ==0)
    {while (down_ ==0);
    gio = gio -1;
    if (gio==0) gio=24 ;
    }
    }
    void dat_phut (void)
    {if (up_ ==0)
    {while (up_ ==0);
    phut = phut +1;
    if (phut>=60) phut=0;
    }
    if (down_ ==0)
    {while (down_ ==0 );
    phut = phut-1;
    if (phut==0) phut=60;
    }
    }
    void dat_giay (void)
    { if (up_==0)
    {while(up_==0);
    giay=giay+1;
    if (giay==60) giay=0;
    }
    if (down_==0)
    { while(down_==0);
    giay=giay-1;
    if( giay==0) giay=59;

    }
    }
    void dat_ngay (void)
    {if (up_ ==0)
    {while (up_ ==0);
    ngay = ngay +1;
    if (ngay >(date_mon (thang, nam)))ngay = 1;
    }
    if (down_ ==0)
    {while (down_ ==0);
    ngay = ngay -1;
    if (ngay==0) ngay = date_mon (thang,nam);
    }
    }
    void dat_thang (void)
    {if (up_ ==0)
    {while (up_ ==0);
    thang = thang +1;
    if (thang >12) thang =1;
    }
    if (down_ ==0)
    {while (down_ ==0);
    thang = thang -1;
    if (thang == 0) thang=12;
    }
    }
    void dat_nam (void)
    {if (up_ ==0)
    {while (up_ ==0);
    nam = nam +1;
    if (nam>99) nam=0;
    }
    if (down_ ==0)
    {while (down_ ==0);
    nam = nam - 1;
    if (nam==0) nam =99;
    }
    }
    void scan_vitri (void)
    {
    if (vi_tri==1)
    {if (logic_mode==1) {dat_gio();quet_gio();}
    else {dat_ngay();quet_ngay();}
    }
    if (vi_tri==2)
    {if (logic_mode==1) {dat_phut();quet_phut();}
    else {dat_thang();quet_thang();}
    }
    if (vi_tri==3)
    {if (logic_mode==1) {dat_giay(); quet_giay();}
    else {dat_nam();quet_nam();}
    }
    }
    void up_date (void)
    {
    ngay = ngay+1;
    if (ngay >(date_mon (thang, nam)))
    { ngay=1; thang = thang +1;
    if (thang >=13)
    { thang=1; nam=nam+1;
    if (nam>=100) nam =0;
    }
    }
    }
    void up_time (void)
    {giay = giay+1;
    if (giay==60)
    { giay=0; phut = phut +1;
    if (phut ==60)
    { phut=0; gio = gio+1;
    if (gio==24)
    { gio=0; up_date();}
    }
    }
    }
    //======================================================
    void ngatT1 (void) interrupt 3
    {
    TR1=0; TF1=0; //tan so tran timer phuc vu ham tang giay//
    TH1=-1000/256;
    TL1=-1000%256;
    k=k+1;
    if(k>=50) // 1 S
    {
    up_time();
    k=0;
    }
    if (logic_mode ==1)
    gio_phut_giay ();
    if (logic_mode ==0)
    ngay_thang_nam();
    TR1 =1;
    }
  2. hailua64 New Member

    Số bài viết: 10
    Đã được thích: 0
    Điểm thành tích: 0
  3. vancanh Member

    Số bài viết: 67
    Đã được thích: 1
    Điểm thành tích: 6
    Học vi điều khiển đã có lệnh sẵn mà ko chiệu tìm hiểu thì học vđk làm gì hả pạn. Phải chiệu khó đầu tư chứ
  4. cornboyspkt Member

    Số bài viết: 587
    Đã được thích: 1
    Điểm thành tích: 18
    eo, bạn đưa nguyên cái code dài ngoằng thế thì ai mà dám ngồi đọc.
    Bạn nên đọc từng chương trình con xem nó là gì đã. Chứ bạn hỏi thế này, chẳng ai giải đáp cho abn5 đươc đâu
  5. cornboyspkt Member

    Số bài viết: 587
    Đã được thích: 1
    Điểm thành tích: 18
    Mình đọc sơ qua thì đây là code cho 1 lịch vạn niên. Bạn chịu khó học từ cơ bản nhé. Học mà hiểu code thế này thì không học nổi đâu
  6. sinhvien_2012 Member

    Số bài viết: 72
    Đã được thích: 0
    Điểm thành tích: 6
    thà đi hỏi 1 lệnh trong code thì còn có người, chứ đi hỏi người ta tất cả các lệnh trong đó thì...chắc chẳng có ai trả lời :D

Chia sẻ trang này