Thông báo

Collapse
No announcement yet.

giúp em code mạch đếm sản phẩm hiện thị LCD với ạ

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

  • giúp em code mạch đếm sản phẩm hiện thị LCD với ạ

    tình hình em chuẩn bị đi bảo vệ môn vi điều khiển rùi mà code có mấy chỗ chưa hiểu mong bác nào chỉ giáo em với ạ
    code day ạ:
    #include<reg52.h>
    #include<stdio.h>
    #include<intrins.h>
    sbit RS_LCD = P1^0;
    sbit RW_LCD = P1^1;
    sbit E_LCD = P1^2;
    unsigned char dong[] = {0x00,0x80,0xc0};
    unsigned long d=0;

    void delay_short(){ // Tao tre ngan
    unsigned int i;
    for(i=0;i<=3;i++);
    }
    void delay(void) // Phuc vu ngat Timer0;
    {
    TMOD = 0x01; //Timer 0 che do 1
    TH0 = -1000/256; // Chu ky xung 2000us
    TH0 = -1000%256;
    TR0 = 1;
    while (!TF0);
    TR0 = 0;
    TF0 = 0;
    }
    void ktra_coban(){
    unsigned char x;
    P2 = 0xff; //11111111: P2 muc cao LCD dang hoat dong;
    RS_LCD = 0; // Chon thanh ghi lenh
    RW_LCD = 1; // Doc tu LCD
    do {
    E_LCD = 1; // Cho phep
    delay_short();
    E_LCD = 0; // Cam
    x=P2;
    x=x&0x80; //1000000: Xoa 7 bit thap cua P2;
    }
    while(x!=0x80);
    }

    void ghi_lenh(unsigned char command){
    ktra_coban();
    delay();
    P2 = command;
    RS_LCD = 0; //Chon thanh ghi lenh
    RW_LCD = 0; //write to LCD
    E_LCD = 1;
    delay_short();
    E_LCD = 0;
    }
    void ghi_kytu(unsigned char kytu){
    ktra_coban();
    delay();
    P2 = kytu;
    RS_LCD = 1; // Chon thanh ghi du lieu
    RW_LCD = 0; // Ghi vao LCD
    E_LCD =1;
    delay_short();
    E_LCD = 0;
    }
    void ghi_nhanh ( unsigned char kytu){
    delay_short();
    P2 = kytu;
    RS_LCD = 1; // Chon thanh ghi lenh
    RW_LCD = 0; // Ghi vao LCD
    E_LCD = 1;
    delay_short();
    E_LCD = 0;
    }
    void ghi_chuoi(char *str){
    while(*str){
    ghi_kytu(*str);
    str++;
    }
    }
    void ghi_nhanh_chuoi(char *str){
    while(*str){
    ghi_nhanh(*str);
    str++;
    }
    }

    void move(unsigned char y,unsigned char x){ //Ham di chuyen con tro tren man hinh LCD
    ghi_lenh(dong[y]+x); // y la dong, x la cot
    }

    void setting(){ //khoi tao LCD
    ghi_lenh(0x01);
    ghi_lenh(0x38);
    // ghi_lenh(0x0f);
    ghi_lenh(0x0e);
    // ghi_lenh(0x1c); //Dich con tro, dich chuyen con tro sang phai
    // ghi_lenh(0x0c); //Bat hien thi ,tat con tro
    }

    void write_number(unsigned long number){ //Ham tao mot day so dem;
    int j;
    unsigned char array[10]; //Day 10 phan tu tren mot dong;
    for(j=0 ; j<10 ; j++)
    {
    array[j] = number%10; //chia lay du roi thuc hien dua vao mang
    number /= 10;
    }
    for(j=9 ; j>=0 ; j--){ //Hien thi tu trai qua;
    ghi_nhanh(array[j]+0x30); //00110000 : Hien thi mot dong Font 5*7;
    }
    }

    void main(){
    setting();
    IE = 0x00; //00000000 : Khong cho phep ngat;
    ghi_lenh(0x01); //00000001 : Xoa man hinh
    ghi_lenh(0x80);
    ghi_chuoi(" CDT2-K5");
    ghi_lenh(0xc0); //11000000 oc co bao ban va dia chi cua CGRAM or DDRAM
    ghi_chuoi(" 1234 ");
    delay();
    ghi_lenh(0x01);
    ghi_chuoi(" DO AN ");
    ghi_lenh(0xc0);
    ghi_chuoi("DEM SAN PHAM LCD");
    delay();
    ghi_lenh(0x01);
    ghi_chuoi(" SVTH ");
    ghi_lenh(0xc0);
    ghi_chuoi(" abc ");
    delay();
    ghi_lenh(0x01);
    ghi_lenh(0x0c);
    ghi_nhanh_chuoi(" SO SAN PHAM LA");
    IE = 0x81; //10000001 : Cho phep ngat ngoai Timer0;
    IT0 = 1; //Uu tien ngat tu ngoai Timer0;
    while(1){
    move(2,3); // Di chuyen den vi tri 3 dong 2;
    write_number(d);
    }
    }

    void sp() interrupt 0 //Ngat ngoai Timer0
    {
    d++;
    }

    các bác cho em hỏi chỗ này để làm j ạ:
    void delay(void) // Phuc vu ngat Timer0;
    {
    TMOD = 0x01; //Timer 0 che do 1
    TH0 = -1000/256; // Chu ky xung 2000us
    TH0 = -1000%256;
    TR0 = 1;
    while (!TF0);
    TR0 = 0;
    TF0 = 0;
    }
    như code trên em bỏ đi có dc không ạ?
    chu kì xung 2000us làm j ạ?


    IE = 0x81; //10000001 : Cho phep ngat ngoai Timer0;
    IT0 = 1; //Uu tien ngat tu ngoai Timer0;
    2 cái này để làm j ạ?
    bỏ đi có dc không các bác?
    mọi ng giúp em với ạ gần BV rùi mà còn vài chỗ này không bít j
    thank mọi ng giúp em ạ

  • #2
    cái này mình mới làm lại cho bạn....code dễ hiểu hơn dùng counter 0.... 16bit....
    DEM SAN PHAM.rar
    pass: hoangbaolam

    Comment


    • #3
      thank ban nha

      Comment


      • #4
        bạn hỏi quá nhiều cái làm gì @@.
        Nguyễn Huy Biên - 01649 802 694
        gmail :

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X