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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • lackiuvn
    Thành viên mới
    • May 2008
    • 5

    #1

    Đế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
  • Le Thi Bich
    Thành viên tích cực
    • Sep 2008
    • 304

    #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

    • phucthinhel
      Thành viên tích cực
      • Jan 2006
      • 782

      #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

      • huetkiem
        Thành viên mới
        • Jun 2008
        • 11

        #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

        • sirdanhvt
          Thành viên mới
          • Dec 2008
          • 4

          #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

          • xl09
            Thành viên chính thức
            • Nov 2009
            • 37

            #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

            • kitty511
              Thành viên chính thức
              • Sep 2007
              • 76

              #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

              • meoguun
                Thành viên mới
                • Apr 2012
                • 3

                #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

                • cao_aba3
                  Thành viên mới
                  • Nov 2013
                  • 6

                  #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

                  Đang tải...