Thông báo

Collapse
No announcement yet.

Đếm từ 0000 đến 9999 dùng LCD16x2 và AVR8 ?

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

  • Đếm từ 0000 đến 9999 dùng LCD16x2 và AVR8 ?

    - Chào các Bạn. Mình đang tự học AVR viết bằng C nên gặp không ít khó khăn. Mong các Bạn giúp đỡ.
    - Mình muốn làm bộ đếm từ 0000 đến 9999 dùng LCD16x2 và AVR8. Khi nhấn 1 phím D0 thì LCD hiển thị giá trị từ 0000 lên 00001 và cứ như vậy cho đến 9999. LCD mình dùng Port B.
    Attached Files

  • #2
    Cụ thể anh gặp khó khăn j?
    Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

    Comment


    • #3
      bạn dùng codevison sẽ rất nhanh và tiết kiệm thời gian . Còn ASM thì khá phức tạp nếu bạn là người mới thì nên học asm ( đề quen cách suy nghĩ , lập trình ) . Còn nếu không gắn bó lâu với vi điều khiển thì bạn học Codevision cũng dc . Mổi ngôn ngữ có ưu nhược điềm riêng.
      Mạch nạp Little Programmer
      MSC-51,AVR,EEPROM ... etc

      Site Fukusei shop :

      Comment


      • #4
        Nguyên văn bởi lackiuvn Xem bài viết
        - Chào các Bạn. Mình đang tự học AVR viết bằng C nên gặp không ít khó khăn. Mong các Bạn giúp đỡ.
        - Mình muốn làm bộ đếm từ 0000 đến 9999 dùng LCD16x2 và AVR8. Khi nhấn 1 phím D0 thì LCD hiển thị giá trị từ 0000 lên 00001 và cứ như vậy cho đến 9999. LCD mình dùng Port B.
        Chương trình này dùng codevisionC rất đơn giản đây là chương trình đếm từ 000 đến 256 còn từ 0000 đến 9999 bạn tự làm nhé rất dễ mà


        #include <mega8.h>

        // Alphanumeric LCD Module functions
        #asm
        .equ __lcd_port=0x18 ;PORTB
        #endasm
        #include <lcd.h>
        #include<delay.h>
        // Declare your global variables here
        void lcd_putnum(unsigned char so,unsigned char x,unsigned char y)
        {
        unsigned char a,b,c;
        a=so/100;
        // lay fan tram
        b=(so-100*a)/10;
        // lay fan chuc
        c=(so-100*a-10*b);
        // lay hang don vi
        lcd_gotoxy(x,y);
        // ve vi tri x,y
        lcd_putchar(a+48);
        // day ra hang tram, ma ascii
        lcd_putchar(b+48);
        // day ra hang chuc, ma ascii
        lcd_putchar(c+48);
        // day ra hang don vi, ma ascii
        }

        void main(void)
        {
        unsigned char i;
        PORTB=0xFF;
        DDRB=0xFF;
        PORTD=0xFF;
        DDRD=0x00;

        // LCD module initialization
        lcd_init(16);

        while (1)
        {
        if(PIND.0==0)
        {
        for(i=0;i<1000;i++)
        {
        lcd_putnum(i,0,0);
        delay_ms(50);
        }
        };
        if (PIND.1==0)
        lcd_clear();
        };
        }

        Comment


        • #5
          Chỉnh sửa chút từ code của huetkiem để khi nhấn PORTD.0 sẽ đếm 1 đơn vị. Đã test chạy ngon bạn thử xem sao:
          #include <mega8.h>

          // Alphanumeric LCD Module functions
          #asm
          .equ __lcd_port=0x18 ;PORTB
          #endasm
          #include <lcd.h>
          #include<delay.h>
          // Declare your global variables here
          void lcd_putnum(unsigned char so,unsigned char x,unsigned char y)
          {
          unsigned char a,b,c;
          a=so/100;
          // lay fan tram
          b=(so-100*a)/10;
          // lay fan chuc
          c=(so-100*a-10*b);
          // lay hang don vi
          lcd_gotoxy(x,y);
          // ve vi tri x,y
          lcd_putsf("Number:");
          lcd_putchar(a+48);
          // day ra hang tram, ma ascii
          lcd_putchar(b+48);
          // day ra hang chuc, ma ascii
          lcd_putchar(c+48);
          // day ra hang don vi, ma ascii
          }

          void main(void)
          {
          int m = 0;
          unsigned char i;
          PORTB=0xFF;
          DDRB=0xFF;
          PORTD=0xFF;
          DDRD=0x00;

          // LCD module initialization
          lcd_init(16);

          while (1)
          {
          if(PIND.0==0 & m ==0)
          {
          ++i;
          m=1;
          if ( i>999) i = 0;
          lcd_putnum(i,0,0);
          delay_ms(50);

          }
          if (PIND.0 == 1) m=0;
          };
          if (PIND.1==0)
          lcd_clear();

          }

          Comment


          • #6
            bạn có thẻ dùng lun mấy hàm trong thư vien stdlib.h của cv,nó đã tạo sẵn cho chúng ta rùi.ví dung như hàm
            void itoa(int n, char *str),áp dụng cho bài của bạn.
            và nên dùng trễ để khi bấn một phím trong khoảng 0.1s thì mới nhận định là nó có tác động,còn nếu phím đó nhỏ hơn khoảng thời gian đó mà phím đó đã nhả ra thì coi nó là nhiễu và bỏ qua.
            hãy quý những j hiện tại mình đang có

            Comment


            • #7
              Nguyên văn bởi sirdanhvt Xem bài viết
              Chỉnh sửa chút từ code của huetkiem để khi nhấn PORTD.0 sẽ đếm 1 đơn vị. Đã test chạy ngon bạn thử xem sao:
              Bác ơi em muốn xuất ra led 7 thanh thì phải làm sao ạh, rất mong được chỉ giáo.

              Comment


              • #8
                mình đang học asm hiển thị từ 0 đến 9999 lên LCD có ai chỉ dùm mình với

                Comment


                • #9
                  bác nào có code asm của chương trình này cho mình xin vs ,

                  Comment

                  Về tác giả

                  Collapse

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

                  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