Thông báo

Collapse
No announcement yet.

[Help!!!] Lập trình cho button trong VĐK

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

  • [Help!!!] Lập trình cho button trong VĐK

    Em nghĩ nát óc k ra nên muốn nhờ các bác gợi ý giúp em vấn đề này, mong nhận được sự giúp đỡ từ các bác, em mới học môn này nên kiến thức còn rất nông!
    Mạch gồm có 2 led 7 đoạn dùng để làm mạch đếm từ 00-99
    có 4 nút nhấn:
    -nút thứ nhất Start, stop
    -nút thứ hai Up, down
    -nút thứ 3 chẵn, lẻ
    -nút thứ tư là reset
    yêu cầu như thế này: Ban đầu led hiển thị 00, nhấn nút 1 mạch bắt đầu đếm lần lượt 00-99, nhấn lần nữa mạch dừng tại số đang đếm, nhấn nút 2 mạch đếm lên (bắt đầu từ vị trí 00 lên hoặc từ vị trí đang dừng ở trên đếm tiếp lên), nhấn lần nữa mạch đếm xuống (xuống từ vị trí đang dừng ở trên), nhấn nút 3 mạch đếm chẵn (nếu đang đếm lên, sẽ tiếp tục lên, nếu số đếm đang ở 3 thì tự động đếm 4-6-8...) nhấn lần nữa mạch đếm lẻ, cũng tương tự như đếm chẵn. nhấn nút thứ tư mạch reset về 00 và k đếm. hơi rắc rối và phức tạp nhưng em đã cố gắng hết sức để diễn đạt đề bài, cảm ơn các anh chị!
    P/s: em dùng Keil C ạ

  • #2
    bạn muốn mọi người viết hộ hết sao? ít nhất bạn cũng phải cho mọi người biết bạn làm được những gì rồi chứ
    Nguyễn Huy Biên - 01649 802 694
    gmail :

    Comment


    • #3
      Nguyên văn bởi bienhou Xem bài viết
      bạn muốn mọi người viết hộ hết sao? ít nhất bạn cũng phải cho mọi người biết bạn làm được những gì rồi chứ
      ko ạ, em chỉ muốn nhờ anh chị gợi ý cho em cách làm thôi, em chỉ làm được nếu các chức năng đó là rời rạc, còn nếu liên kết lại với nhau và có thể thực hiện được chồng chéo nhau thì em nghĩ k ra

      Comment


      • #4
        thì bạn viết riêng chương trình con cho mỗi điều kiện, và tùy vào từng điều kiện mà gọi chương trình con đó ra thử xem

        Comment


        • #5
          Nguyên văn bởi kunsocks Xem bài viết
          ko ạ, em chỉ muốn nhờ anh chị gợi ý cho em cách làm thôi, em chỉ làm được nếu các chức năng đó là rời rạc, còn nếu liên kết lại với nhau và có thể thực hiện được chồng chéo nhau thì em nghĩ k ra
          bạn đả viết dc rùi, thì bạn chỉ cần biến hóa các lệnh để nó thực hiện, giống như tôn ngộ không đó, lập trình cần phải biến hóa khôn lường. bạn có để làm ct con, rùi gọi nó nếu có điều kiện xảy ra
          không tiếp nhận cuộc gọi qua điện thoại vì đi làm toàn tập, tính khí thất thường, hay nóng võ công lại cao

          Comment


          • #6
            đây là hình ảnh em mô phỏng

            Code thì em mới viết được như vậy, nhưng sao của em nó chỉ đếm 2 vòng rồi lại dừng ở 00 chứ k đếm hoài, em đặt vòng lặp while(1) vào nhưng mô phỏng thì nó lại ko chạy, và em k biết phải làm sao để nhấn nút start lần nữa thì nó dừng đếm
            #include <AT89X52.h>
            #define start P3_0
            #define chan P3_1
            #define up P3_2
            #define reset P3_4
            unsigned char ma7doan[10]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};
            unsigned char i, chuc, dv;
            void delay (unsigned int i)
            {
            while(i--)
            {}
            }
            void xuatport()
            {
            P0=ma7doan[chuc];
            P2=ma7doan[dv];
            delay(10000);
            }
            void dem()
            {
            for(i=0; i<100; i++)
            {
            chuc=i/10;
            dv=i%10;
            xuatport();
            }
            }
            void bat()
            { unsigned char tt=0;
            do
            {
            if(start==0)
            {delay(2000);
            if (start==0)
            {
            tt=~tt;
            }
            while(start==0)
            {}
            }
            }
            while(tt==0);
            {}
            }
            void demchan()
            { unsigned char j;
            for (j=0; j<100; j=j+2)
            {
            chuc=j/10;
            dv=j%10;
            xuatport();
            }
            }
            void button_chan()
            {
            unsigned char tt=0;
            do
            {
            if (chan==0)
            {
            delay(2000);
            if (chan==0)
            {
            tt=~tt;
            }
            while(chan==0)
            {}
            }
            }
            while(tt=0);
            {}
            }
            void main()
            {
            P0=0XC0;
            P2=0XC0;
            bat();
            dem();
            demchan();
            button_chan();
            }
            Em mới học được có 3 buổi về vi xử lý nên chưa rành, hơn nữa Ngôn ngữ C em tự mày mò chứ k có ai dạy cả, nếu có gì sai mong các anh chị chỉ dùm cho em để em sửa

            Comment


            • #7
              Bạn làm thế này :
              1. Khai báo 1 biến toàn cục ví dụ có tên là menu.
              2. 1 chương trình kiểm tra các nút. Nếu ấn Start thì gán menu =1, Stop thì menu =2 ..... ( cái này nên dùng ngắt timer)
              3. 1 chương trình xử lý biến menu. Nếu menu=1 thì bắt đầu đếm, menu = 2 thì dừng .... ( cái này dùng trong while(1))

              Tóm lại là 1 chương trình kiểm ra nút nhấn để gán giá trị cho menu. 1 chương trình sẽ kiểm tra giá trị menu để đếm tương ứng. Chương trình toàn if và else if thôi đơn giản mà

              Comment


              • #8
                ^^ hình như em đã mường tượng được ra ý anh nói, nhưng mà anh ơi, anh nói rõ dùm em cái while(1) được k, em k hiểu nó, nhiều lúc viết chương trình, tưởng cần thì xóa đi nó lại chạy, nhiều khi k viết cái đó nó lại k chạy

                Comment


                • #9
                  while(1) là mở đầu của 1 vòng lặp mãi mãi. Đôi khi gặp vòng lặp while(true) cũng vậy.
                  cấu trúc đủ của nó là :
                  Code:
                  while(1)
                  {
                  lệnh 1;
                  lệnh 2;
                  ....
                  lệnh n;
                  }
                  các lệnh trong hàm while(1) ( các lệnh từ lệnh 1 đến n) sẽ tuần tự được thực hiện rồi cứ lặp lại mãi mãi làm cho vi điều khiển cứ làm đi làm lại một số công việc nào đó mà không dừng lại. Như vậy bạn hay gặp kiểu lặp này trong hàm main() khi đã cấu hình mọi thứ tạm ổn thì nó sẽ đi vào vòng lặp này để bắt đầu làm việc.
                  Một số ít trường hợp thấy trong vòng lặp này không có lệnh nào thì khi đó hàm này chỉ có chức năng làm cho vi điều khiển không dừng lại và việc xử lý đã nằm ở nơi khác, trong 1 hàm ngắt chẳng hạn. Chắc hơi khó hiểu

                  Comment


                  • #10
                    theo em thì anh làm một cái hàm con chứa các lệnh thay đổi của các nút. rồi cho vào trong vòng lặp for để đếm

                    Comment


                    • #11
                      Nguyên văn bởi duong_act Xem bài viết
                      while(1) là mở đầu của 1 vòng lặp mãi mãi. Đôi khi gặp vòng lặp while(true) cũng vậy.
                      cấu trúc đủ của nó là :
                      Code:
                      while(1)
                      {
                      lệnh 1;
                      lệnh 2;
                      ....
                      lệnh n;
                      }
                      các lệnh trong hàm while(1) ( các lệnh từ lệnh 1 đến n) sẽ tuần tự được thực hiện rồi cứ lặp lại mãi mãi làm cho vi điều khiển cứ làm đi làm lại một số công việc nào đó mà không dừng lại. Như vậy bạn hay gặp kiểu lặp này trong hàm main() khi đã cấu hình mọi thứ tạm ổn thì nó sẽ đi vào vòng lặp này để bắt đầu làm việc.
                      Một số ít trường hợp thấy trong vòng lặp này không có lệnh nào thì khi đó hàm này chỉ có chức năng làm cho vi điều khiển không dừng lại và việc xử lý đã nằm ở nơi khác, trong 1 hàm ngắt chẳng hạn. Chắc hơi khó hiểu
                      Đúng đúng, anh nói chí phải, hầu như hàm main() nào em cũng gặp cái vòng lặp đó, trong đó chẳng có lệnh nào cả, nhưng vấn đề sao em cũng đặt nó vào hàm main() để nó lặp mãi mãi mà nó k chịu lặp, vậy mới ức chứ

                      Comment


                      • #12
                        CHắc bạn viết sai đâu đó thôi.

                        Comment


                        • #13
                          đọc title mà cứ tưởng nút bấm thế nào như: các kiểu phân biệt: bấm ngắn, bấm dài (bấm & giữ), bấm đúp 2 cái, bấm đúp 3 cái thì cũng là vấn đề đấy hi hi

                          Comment


                          • #14
                            máy bác cho em hỏi
                            1 nút nhấn đếm chẵn đếm lẻ thì làm sao vậy
                            mình làm như thế nay ma ko đúng mấy bác cho ý kiến
                            if(tt3==1)
                            {
                            dem=dem+2;
                            delay(40000);
                            chuc=dem/10;
                            dvi=dem%10;
                            P2=ma7d[chuc];
                            P3=ma7d[dvi];
                            if(dem==99){dem=0;}

                            }
                            if(tt3==2)
                            {
                            dem=dem*2+1;
                            delay(40000);
                            chuc=dem/10;
                            dvi=dem%10;
                            P2=ma7d[chuc];
                            P3=ma7d[dvi];
                            if(dem==99){dem=0;}
                            }

                            Comment


                            • #15
                              Cái này bạn dùng timer
                              Dùng biến kiểm tra button chọn chế độ
                              và thực hiện từng button

                              Tự nghiên cứu ắt sẽ thành công !

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X