Thông báo

Collapse
No announcement yet.

Lập trình bộ đếm và hiển thị lên LCD

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

  • Lập trình bộ đếm và hiển thị lên LCD

    Chào mọi người !
    Mình đang làm đề tài lập trình bộ đếm sản phẩm, hiển thị lên LCD. Nhưng chẳng có tại liệu tham khảo nên gặp khó khăn chút ít. Đặc biệt là phần hiển thị LCD,(chẳng có tại liệu gì).Vậy ai đã làm rồi hoặc biết tài liệu gì thì giới thiệu hộ mình cái.thanks!

    Mình đang viết thử đoạn code mô phỏng, các bạn xem cùng nhé(nếu rảnh, ngắn thôi)
    yêu cầu:
    +dùng timer0 tạo xung 1 giây gửi đến chân p3.5 kích hoạt bộ đếm timer 1(chế độ 2)
    +lấy dữ liệu từ TL1 chuyển thành mã ascii rồi chuyển đến cổng p1 để hiển thị lên màn LCD

    (Mình viết thử 1 đoạn nhỏ-->thế mà đã có lỗi rồi)
    Code của mình đây (Chạy vẫn chua đúng)


    ; Lap trinh bo dem 0..99, du lieu hien thi len chan p0
    ;================================================= ===
    ;dung timer 1 lam bo dem
    ;dung timer 0 lam bo dinh thoi
    ;su dung ngat tao xung 1giay tren chan p2.5 (duoc noi voi chan p3.5)
    ;F thach anh = 11.0592Mhz-->T=1.085us
    ; xung cao=xung thap= 0. 5(giay):1.085us=460830 chukimay
    ;460830:65536=7
    ;================================================= ====================

    ;LCD
    ;================================================= ====================
    ;CHAN P2.2 NOI VOI E
    ; P2.1 NOI R/W
    ;P2.0 NOI RS
    ;================================================= ====================

    #include <C:\Program Files\Rigel\Reads51\Include\sfr51.inc>;
    ORG 00H
    LJMP START

    ORG 0BH
    ;XULI NGAT BO DINH THOI
    CJNE R0,#01H,KB
    MOV R0,#0
    CPL P2.5
    KB:
    INC R0
    MOV TH0,#0
    MOV TL0,#0
    RETI
    ;XU LI NGAT BO DEM
    ORG 1BH
    CLR TF1
    RETI

    ;CHUONG TRINH CHINH
    ;================================================= ====================
    ORG 30H
    START:
    ;THIET LAP BO DT

    MOV TMOD , #01100001B ;BODEM CHE DO 2,BODT CDO 1
    MOV TH0,#0
    MOV TL0,#0
    MOV R0,#0 ;TAO R0=7-->XUNG 1HZ, TAO BANG 0 KIEM
    SETB P2.5 ;TRA CHO NHANH

    ;THIET LAP BO DEM
    MOV TH1,#-60
    SETB P3.5 ;THIET LAP DAU VAO

    ; LENH CHO LCD
    ; -------------
    MOV A,#38H
    ACALL COMWRT
    MOV A,#0EH
    ACALL COMWRT
    MOV A,#01H ;clear LCD
    ACALL COMWRT
    MOV A,#06H ;cursor di.ch pha?i
    ACALL COMWRT
    MOV A,#80H ;chuyen cursor den line 1, pos. 6
    ACALL COMWRT
    MOV IE,#10000010B ;CHO PHEP NGAT
    SETB TR0
    SETB TR1

    ;NHAN DU LIEU TU TL1 DE HIEN THI LEN LCD
    ; ---------------------------------------------------------
    HERE:
    MOV A,TL1
    MOV 40H,A ;LUU A VO DIA CHI 40H DE KIEM TRA
    SUBB A,#-60
    MOV B,#10
    DIV AB
    ORL A,#30H
    ACALL DATAWRT

    MOV A,B
    ORL A,#30H
    ACALL DATAWRT

    MOV A,#0CH ;TAT CON TRO
    ACALL COMWRT

    MOV A,#80H ; VE DAU DONG THU NHAT
    ACALL COMWRT

    LAP: MOV A,TL1
    CJNE A,40H,HERE ;SO SANH NEU BANG TIEP TUC NHAP TL1 VAO A
    SJMP LAP



    ;================================================= ====================



    ;LCD_VIETLENH VA DU LIEU
    ;================================================= ====================
    COMWRT :
    MOV P1,A
    CLR P2.0
    clr P2.1
    SETB P2.2
    CLR P2.2
    ACALL DELAY ;HAY !
    RET

    DATAWRT:
    MOV P1,A
    SETB P2.0
    clr P2.1
    SETB P2.2
    CLR P2.2
    ACALL DELAY ;HAY !
    RET

    DELAY:

    MOV R1,#255
    TRE: DJNZ R1, TRE

    RET

    END



    *************************
    HET
    *************************
    PS: doan code tren da duoc dua, cac ban down file rar ve thi nap code nay vao nhé. Code này chạy tốt hơn
    Chạy mô phỏng các bạn sẽ thấy. Lúc đầu không phải bộ đếm 60, khoảng 2 3 chu kì sau mới trở vè bộ đếm 60
    Chẳng biết lõi gì nhỉ.
    Lần đầu viết, còn non lắm.Mogn dựoc chỉ giáo!
    Attached Files
    Last edited by learn_et; 27-03-2007, 22:55.

  • #2
    Vài lời nhắn gửi:
    1: MOV IE,#10000010B ;CHO PHEP NGAT >>Lênhk này bạn phải đặt dưới cùng trước nhãn HERE hay một vị trí nào đó, đảm bảo sau khi đã khởi tạo xong mới gọi ngắt (trừ khi lệnh khởi tạo của bạn ngắn)
    2: Khi đã thiết lập Timer1 chế độ đếm thì bạn bỏ qua ngắt của nó, chỉ viết phần xử lý ngắt của Timer 0 thực hiện việc nạp lại giá trị cho TL0 và TH0 để đảm bảo việc ngắt tạo xung 1Hz.
    3: Phần khởi tạo cho LCD chưa đúng, càn xem kỹ tài liệu
    4: Vì lâu rồi mình ko làm lại asm nên kô thể có một source cụ thể cho bạn dc. Nhưng mình cung cấp cho bạn môt số link sẽ giúp ích cho bạn
    Rất nhiều chương trình ASM cho 8051 mà trước đây mình viết, đã chạy OK
    http://dientuvietnam.net/forums/showthread.php?t=3228
    File nén, cần đăng nhập trước khi nhấn link.
    http://dientuvietnam.net/forums/atta...8&d=1158475104

    Tìm thêm trên diễn đàn các topic khác về LCD và timer, có rất nhiều
    Mình nhắc lại: Chịu khó tìm kiếm trên diễn đàn
    Ethernet-RS232, PIC Webserver, RFID Reader
    CallerID, Cảnh báo BTS, ...
    0988006696
    linhnc308@gmail.com
    http://linhnc308.blogspot.com

    Comment


    • #3
      reply:
      1/ minh` tiep thu y kien nay
      2/ Việc mình dùng ngắt ở đây mục đích là đếm liên tục( nó sẽ thiết lập cờ TF1 = 0, thực ra trong phần ngắt nó cũng tự làm công viẹc này), nếu không dùng ngắt thì khi đếm đến giá trị max, cờ TF1 sẽ ở trạng thái cao, bộ đếm sẽ dừng lại! đúng không
      3/ Chưa đúng chỗ nào thế (^^)
      4/ thanks!

      Các bạn cho ý kiến nhé!

      Comment


      • #4
        Chang ai trả lời cả, tự mình trả lời vậy
        Dù là dùng chế độ hai nhưng ban đâu nó không tự nạp giá trị TH1 cho TL1, nên chỉ viêc khởi tạo ban đâu nạp cho TL1 ggias trị của TL1 là ok.

        Comment


        • #5
          em có chương trình viết cho lcd nè.
          bác xem rùi cho ý kiến nhé:
          Học thầy không tày học bạn ...

          Comment


          • #6
            đây là chương trình em viêt có mô phỏng luôn băng proteus 6.9
            Attached Files
            Học thầy không tày học bạn ...

            Comment


            • #7
              vai loi gop y
              de dem san pham thi ban len dung ngat ngoai canh xuong de dem san pham
              de cam bien san pham bang hong ngoai thi ban dung thu phat hong ngoai o tan so 38khz nen su dung ngat time
              de hien thi so dem thi ban dung mot time nua
              chuc ban thanh cong
              Attached Files
              Điện thoại:
              email:

              Comment


              • #8
                minh cung hoi hoi ve thiet ke bo do tan so va hien thi tren lcd ai biet chi jum minh voi

                Comment


                • #9
                  Hy vọng bạn có thể tham khảo.
                  Attached Files

                  Comment


                  • #10
                    cac bac oi giup jum em voi.em co bai tap lon nhu sau :thiet ke bo do tan so. tan so dc do dc hien thi tren lcd.tan so co chuyen mach de do 3 dai tan khac nhau nham dam bao do chinh xac (dai 1 tu 10hz den 100hz dai 2 tu 100 den 500hz dai 3 tu 1khz den 5khz
                    ) he thong co kem theo mot tao xung voi cac tan so tuong ung voi 3 dai tan. bac nao biet giup jum em voi.day la dia chi cua em hothieugia86@gmail.com

                    Comment


                    • #11
                      - Các bạn có thể tham khảo ví dụ về giao tiếp LCD này. Ngoài ra có thể tham khảo ở luồng này:

                      http://www.diendandientu.com/diendan...d?thread=10222
                      0912666017

                      Comment


                      • #12
                        em làm đồ án về LCD, mong các anh chị chỉ giùm em với

                        em làm đồ án về giao tiếp LCD, em chưa kiếm được tài liệu nào phù hợp hết,em cũng chưa biết bắt đầu làm từ đâu, mong các anh chị chỉ giùm em với, về vi điều khiển theo anh chị em nên dùng con vi xử lý gì, thanks you

                        Comment


                        • #13
                          Nguyên văn bởi learn_et Xem bài viết
                          Chào mọi người !
                          Mình đang làm đề tài lập trình bộ đếm sản phẩm, hiển thị lên LCD. Nhưng chẳng có tại liệu tham khảo nên gặp khó khăn chút ít. Đặc biệt là phần hiển thị LCD,(chẳng có tại liệu gì).Vậy ai đã làm rồi hoặc biết tài liệu gì thì giới thiệu hộ mình cái.thanks!

                          Mình đang viết thử đoạn code mô phỏng, các bạn xem cùng nhé(nếu rảnh, ngắn thôi)
                          yêu cầu:
                          +dùng timer0 tạo xung 1 giây gửi đến chân p3.5 kích hoạt bộ đếm timer 1(chế độ 2)
                          +lấy dữ liệu từ TL1 chuyển thành mã ascii rồi chuyển đến cổng p1 để hiển thị lên màn LCD

                          (Mình viết thử 1 đoạn nhỏ-->thế mà đã có lỗi rồi)
                          Code của mình đây (Chạy vẫn chua đúng)


                          ; Lap trinh bo dem 0..99, du lieu hien thi len chan p0
                          ;================================================= ===
                          ;dung timer 1 lam bo dem
                          ;dung timer 0 lam bo dinh thoi
                          ;su dung ngat tao xung 1giay tren chan p2.5 (duoc noi voi chan p3.5)
                          ;F thach anh = 11.0592Mhz-->T=1.085us
                          ; xung cao=xung thap= 0. 5(giay):1.085us=460830 chukimay
                          ;460830:65536=7
                          ;================================================= ====================

                          ;LCD
                          ;================================================= ====================
                          ;CHAN P2.2 NOI VOI E
                          ; P2.1 NOI R/W
                          ;P2.0 NOI RS
                          ;================================================= ====================

                          #include <C:\Program Files\Rigel\Reads51\Include\sfr51.inc>;
                          ORG 00H
                          LJMP START

                          ORG 0BH
                          ;XULI NGAT BO DINH THOI
                          CJNE R0,#01H,KB
                          MOV R0,#0
                          CPL P2.5
                          KB:
                          INC R0
                          MOV TH0,#0
                          MOV TL0,#0
                          RETI
                          ;XU LI NGAT BO DEM
                          ORG 1BH
                          CLR TF1
                          RETI

                          ;CHUONG TRINH CHINH
                          ;================================================= ====================
                          ORG 30H
                          START:
                          ;THIET LAP BO DT

                          MOV TMOD , #01100001B ;BODEM CHE DO 2,BODT CDO 1
                          MOV TH0,#0
                          MOV TL0,#0
                          MOV R0,#0 ;TAO R0=7-->XUNG 1HZ, TAO BANG 0 KIEM
                          SETB P2.5 ;TRA CHO NHANH

                          ;THIET LAP BO DEM
                          MOV TH1,#-60
                          SETB P3.5 ;THIET LAP DAU VAO

                          ; LENH CHO LCD
                          ; -------------
                          MOV A,#38H
                          ACALL COMWRT
                          MOV A,#0EH
                          ACALL COMWRT
                          MOV A,#01H ;clear LCD
                          ACALL COMWRT
                          MOV A,#06H ;cursor di.ch pha?i
                          ACALL COMWRT
                          MOV A,#80H ;chuyen cursor den line 1, pos. 6
                          ACALL COMWRT
                          MOV IE,#10000010B ;CHO PHEP NGAT
                          SETB TR0
                          SETB TR1

                          ;NHAN DU LIEU TU TL1 DE HIEN THI LEN LCD
                          ; ---------------------------------------------------------
                          HERE:
                          MOV A,TL1
                          MOV 40H,A ;LUU A VO DIA CHI 40H DE KIEM TRA
                          SUBB A,#-60
                          MOV B,#10
                          DIV AB
                          ORL A,#30H
                          ACALL DATAWRT

                          MOV A,B
                          ORL A,#30H
                          ACALL DATAWRT

                          MOV A,#0CH ;TAT CON TRO
                          ACALL COMWRT

                          MOV A,#80H ; VE DAU DONG THU NHAT
                          ACALL COMWRT

                          LAP: MOV A,TL1
                          CJNE A,40H,HERE ;SO SANH NEU BANG TIEP TUC NHAP TL1 VAO A
                          SJMP LAP



                          ;================================================= ====================




                          ;LCD_VIETLENH VA DU LIEU
                          ;================================================= ====================
                          COMWRT :
                          MOV P1,A
                          CLR P2.0
                          clr P2.1
                          SETB P2.2
                          CLR P2.2
                          ACALL DELAY ;HAY !
                          RET

                          DATAWRT:
                          MOV P1,A
                          SETB P2.0
                          clr P2.1
                          SETB P2.2
                          CLR P2.2
                          ACALL DELAY ;HAY !
                          RET

                          DELAY:

                          MOV R1,#255
                          TRE: DJNZ R1, TRE

                          RET

                          END



                          *************************
                          HET
                          *************************
                          PS: doan code tren da duoc dua, cac ban down file rar ve thi nap code nay vao nhé. Code này chạy tốt hơn
                          Chạy mô phỏng các bạn sẽ thấy. Lúc đầu không phải bộ đếm 60, khoảng 2 3 chu kì sau mới trở vè bộ đếm 60
                          Chẳng biết lõi gì nhỉ.
                          Lần đầu viết, còn non lắm.Mogn dựoc chỉ giáo!
                          bạn tham khảo phần khởi tạo LCD này nhé:

                          org 00h
                          ljmp main


                          ;chuong trinh con tao tre
                          delay:
                          mov tmod,#01h
                          mov th0,#high(-800)
                          mov tl0,#low(-800)
                          setb tr0
                          jnb tf0,$
                          clr tf0
                          clr tr0
                          ret
                          ;chuong trinh con tao tre 5ms
                          delay5ms:
                          mov r0,#5
                          loop:
                          acall delay
                          djnz r0,loop
                          ret
                          ;chuong trinh con tao tre 50ms
                          delay100ms:
                          mov r0,#100
                          loopp:
                          acall delay
                          djnz r0,loopp
                          ret
                          ;chuong trinh con tao tre 1s
                          delay1s:
                          mov r0,#100

                          loopp9:
                          mov r7,#10
                          loo:
                          acall delay
                          djnz r7,loo
                          djnz r0,loopp9
                          ret
                          ;chuong trinh con LCD o che do nhan lenh
                          nhanlenh:
                          push acc
                          acall delay5ms
                          clr rs ;dat LCD o che do nhan lenh
                          clr rw
                          acall delay5ms
                          mov p1,a ;dua du lieu ra P1
                          setb e ;cho phep hien thi
                          nop
                          clr e
                          pop acc
                          ret
                          ;chuong trinh con LCD o che do nhan so
                          nhanso:
                          push acc
                          acall delay5ms
                          setb rs ;dat LCD o che do nhan du lieu
                          clr rw
                          acall delay5ms
                          mov p1,a ;dua du lieu ra P1
                          setb e ;cho phep hien thi
                          nop
                          clr e
                          pop acc
                          ret
                          ;chuong trinh con nhan du lieu va hien thi cac chu cai
                          nhanchu:
                          push 01h
                          push acc
                          push dph
                          push dpl
                          loop9:
                          acall delay5ms
                          setb rs
                          clr rw
                          acall delay5ms
                          clr a
                          movc a,@a+dptr
                          mov p1,a
                          setb e
                          nop
                          clr e
                          acall delay5ms
                          inc dptr

                          cjne a,#0,loop9
                          pop dpl
                          pop dph
                          pop acc
                          pop 01h
                          ret
                          ;chuong trinh con thiet lap cho LCd
                          kdlcd:
                          acall delay100ms ;cho Vcc dat dc gia tri dinh muc

                          mov a,#38h ;hien thi 2 dong - co chu 5x7
                          acall nhanlenh
                          acall delay5ms
                          mov a,#0ch ;
                          acall nhanlenh
                          acall delay5ms
                          mov a,#0ch ;
                          acall nhanlenh
                          acall delay5ms

                          mov a,#06h ;con tro tu dong tang
                          acall nhanlenh
                          acall delay100ms
                          ret

                          Comment


                          • #14
                            Nguyên văn bởi nguyentuantu Xem bài viết
                            em làm đồ án về giao tiếp LCD, em chưa kiếm được tài liệu nào phù hợp hết,em cũng chưa biết bắt đầu làm từ đâu, mong các anh chị chỉ giùm em với, về vi điều khiển theo anh chị em nên dùng con vi xử lý gì, thanks you
                            Giao tiếp LCD à? Dùng 89S52 cho rẻ, dễ làm. Bạn có thể vào link dưới đây, có luôn tut cho 2 kiểu giao tiếp: 4 chân data, 8 chân data.
                            http://www.8052.com/tutlcd.phtml

                            Comment


                            • #15
                              ai xem dùm bài mình với

                              Mình cũng đang gặp đề tài đếm sp qua cổng hồng ngoại hiển thị LCD.
                              ai xem hộ với_cái phần ngắt và phần đếm sản phẩm vẫn chưa được,ai giúp mình với nha


                              #include<reg51.h>
                              #include<stdio.h>
                              sbit RS=P1^0;
                              sbit RW=P1^1;
                              sbit EN=P1^2;
                              char x;
                              void delay30ms(void)
                              {
                              TMOD= 0x10;
                              TH1 = 35535/256;
                              TL1 = 35535%256;
                              TR1 = 1;
                              while(!TF1);
                              TR1 =TF1 =0;
                              }
                              void delay (unsigned long int t)
                              {
                              unsigned long int i;
                              for (i=0;i<t;++i);
                              }
                              void busy_flag (void) // kiêm tra co ban LCD
                              {
                              P2 = 0xff;
                              RS =0;
                              RW =1;
                              do
                              {
                              EN=1;
                              delay(10);
                              EN=0;
                              x=P2;
                              x=x&0x80;
                              }
                              while (x==0x80);
                              }
                              void write_command (unsigned char LCD_command) // ghi lenh ra LCD
                              {
                              busy_flag();
                              P2 =LCD_command;
                              RS =0;
                              RW =0;
                              EN =1;
                              delay(50);
                              EN =0;
                              delay(50);
                              }
                              void write_data (unsigned char LCD_data) // ghi du lieu can hien thi LCD
                              {
                              busy_flag();
                              P2=LCD_data;
                              RS =1;
                              RW =0;
                              EN =1;
                              delay(30);
                              EN=0;
                              delay(30);
                              }
                              void write_string(char*s)
                              {
                              while(*s)
                              {
                              write_data(*s);
                              s++; //ghi 1 chuoi ki tu ra LCD
                              }
                              }
                              void init (void) // khoi tao LCD
                              {
                              write_command(0x02);
                              write_command(0x38);
                              write_command(0x06);
                              write_command(0x0e);
                              }
                              void ngIT1 (void) interrupt 2
                              {
                              unsigned char nghin,tram,chuc,donvi;
                              int d;
                              nghin = d/1000;
                              tram = ( d%1000)/100;
                              chuc= (( d%1000)%100)/10;
                              donvi = (( d%1000)%100)%10;
                              d++;
                              }
                              void main (void)
                              {
                              unsigned char nghin,tram,chuc,donvi;
                              int d;
                              IE=0X84; //Ngat bang muc IT1==0
                              d=0;
                              delay30ms();
                              init();
                              while(1)
                              {
                              write_command(0x01);
                              write_command(0x80);
                              write_string(" SO SAN PHAM :");
                              write_command(0xc0);
                              write_command(0x06);
                              write_data(0x30+nghin); // hien thi ki tu trong bang ascii
                              write_data(0x30+tram);
                              write_data(0x30+chuc);
                              write_data(0x30+donvi);
                              }
                              }

                              đây là sơ đồ nguyên lý



                              đây bao gồm bài làm của mình:
                              Attached Files

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X