Thông báo

Collapse
No announcement yet.

Xin code sao băng

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

  • Xin code sao băng

    Bạn nào có code sao băng cho mình xin với( viết bằng asm nha), hay hướng dẫn mình cách viết cũng được. Mình có ý kiến vầy, code sao băng dựa trên nguyên tắc điều chỉnh độ rộng xung để điều chỉnh led sáng tắt. Nếu mình dùng trở để hạn dòng từng con led có được không
    Ví dụ: mình có 5 con led và mắc theo thứ tự như sau:
    led: 5 4 3 2 1
    trở: 330 330x2 330x3 330+4 330x5
    nếu mắc như vậy thì điện áp vào mỗi led sẽ khác nhau, như vậy thì cũng tương đương như mình viết code điều chỉnh độ rộng xung rồi, nếu như vậy có hợp lý không, theo mình nếu như cách này để làm viền thì sẽ tiết kiệm được bộ nhớ của VXL. Mình mới vào VXL nên còn gà lắm.

  • #2
    cách của bạn hay đấy, bạn thay 5 con trở đó bằng 5 con biến trở rồi ngồi đó vặn liên tục để tạo hiệu ứng sao băng nhá, 5 con biến trở thì phải dùng 5 tay để vặn tức là 2 người rưỡi đấy

    Code:
            pwm_1    bit     p3.0
            pwm_2    bit     p3.1
            pwm_3    bit     p3.2
            pwm_4    bit     p3.3
    
    
    
        org 00h
            ljmp main
        org 0bh
            ljmp timer0
        org 40h
    
    main:
        mov    sp,#5fh
        mov    tmod,#02h ;che do auto reload 8bit
        mov    ie,#82h   ;cho phep cac ngat và timer0 hoat dong
        mov    th0,#-1
        mov    tl0,#-1
        setb   tr0
        mov    dem,#0
        mov    duty_1,#0
        mov    duty_2,#0
        mov    duty_3,#0
        mov    duty_4,#0
    sjmp $
    
    timer0:
        push   acc     ;cat du lieu vao ngan xep
        push   psw
        inc    dem
        mov    a,dem
        cjne   a,duty_1,clr_pwm_2
        clr    pwm_1
    clr_pwm_2:
        cjne   a,duty_2,clr_pwm_3
        clr    pwm_2
    clr_pwm_3:
        cjne   a,duty_3,clr_pwm_4
        clr    pwm_3
    clr_pwm_4:
        cjne   a,duty_4,setb_pwm
        clr    pwm_4
    setb_pwm:
        cjne   a,#255,exit
        setb   p3.0
        setb   p3.1
        setb   p3.2
        setb   p3.3
    exit:
        pop    psw     ;lay du lieu tu ngan xep
        pop    acc
        reti
    
    end
    các duty để điều chỉnh độ rộng xung nhá (0<=duty_x<=255), bạn dựa vào đó mà phát triển lên nhiều PWM hơn

    Comment


    • #3
      bạn thử nói rõ hơn về nguyên lý hoạt động của nó đc ko??? mình thấy cái này rât hay muốn làm nhưng ko biết nó hoat động thế nào???

      Comment


      • #4
        bộ đếm đếm từ 0->255 trong khi mỗi lần ngắt timer tăng bộ đếm lên 1 và so sánh nó với chỉ số duty, nếu đếm = duty thì cho PWM xuống mức thấp, sau khi đếm=255 thì setb PWM lên cao, như vậy ta sẽ có trong khoảng từ 0->duty thì PWM ở mức cao và trong khoảng duty->255 thì PWM ở mức thấp, như vậy ta có thể thay đổi chỉ số duty để điều khiển thời gian ở mức cao và mức thấp.

        Comment


        • #5
          Nguyên văn bởi lengo90 Xem bài viết
          cách của bạn hay đấy, bạn thay 5 con trở đó bằng 5 con biến trở rồi ngồi đó vặn liên tục để tạo hiệu ứng sao băng nhá, 5 con biến trở thì phải dùng 5 tay để vặn tức là 2 người rưỡi đấy

          Code:
                  pwm_1    bit     p3.0
                  pwm_2    bit     p3.1
                  pwm_3    bit     p3.2
                  pwm_4    bit     p3.3
          
          
          
              org 00h
                  ljmp main
              org 0bh
                  ljmp timer0
              org 40h
          
          main:
              mov    sp,#5fh
              mov    tmod,#02h ;che do auto reload 8bit
              mov    ie,#82h   ;cho phep cac ngat và timer0 hoat dong
              mov    th0,#-1
              mov    tl0,#-1
              setb   tr0
              mov    dem,#0
              mov    duty_1,#0
              mov    duty_2,#0
              mov    duty_3,#0
              mov    duty_4,#0
          sjmp $
          
          timer0:
              push   acc     ;cat du lieu vao ngan xep
              push   psw
              inc    dem
              mov    a,dem
              cjne   a,duty_1,clr_pwm_2
              clr    pwm_1
          clr_pwm_2:
              cjne   a,duty_2,clr_pwm_3
              clr    pwm_2
          clr_pwm_3:
              cjne   a,duty_3,clr_pwm_4
              clr    pwm_3
          clr_pwm_4:
              cjne   a,duty_4,setb_pwm
              clr    pwm_4
          setb_pwm:
              cjne   a,#255,exit
              setb   p3.0
              setb   p3.1
              setb   p3.2
              setb   p3.3
          exit:
              pop    psw     ;lay du lieu tu ngan xep
              pop    acc
              reti
          
          end
          các duty để điều chỉnh độ rộng xung nhá (0<=duty_x<=255), bạn dựa vào đó mà phát triển lên nhiều PWM hơn
          hihi.Thank bạn đã share code cho mình. Mình chỉ suy nghĩ vậy, mà bạn hiểu nhầm ý mình rồi, khi mình sử dụng trở như vậy thì điẹn áp đặt lên mỗi trở sẽ khác nhau ( mặc định vậy luôn nhá), nếu như điện áp đặt lên mỗi led khác nhau thì độ sáng cũng khác nhau chứ. Nếu như vậy thì mình chỉ cần set code sáng dần là được, khi đó nếu tới led có giá trị trở cao thì độ sáng sẽ yếu rồi sáng dần lên theo giá trị trở, chứ đâu cần phải 2,5 người ngồi vặn biến trở đâu bạn

          Comment


          • #6
            a có sơ đồ mạch + các linh kiện up lên cho em xin

            Comment


            • #7
              Nguyên văn bởi khocvole_241 Xem bài viết
              a có sơ đồ mạch + các linh kiện up lên cho em xin
              bạn chịu khó tìm trên diễn đàn, có rất nhiều ae chia sẽ trên đấy đấy

              Comment


              • #8
                bạn có thể viết code ví dụ hoàn chỉnh (vì mình chưa rành lắm về lập trình nên chưa biết thay thế câu lệnh , nên báo lỗi dong lệnh Dem; cac Duty khi biên dich sang,Hex
                cám bạn nhiều về đoạn code này,

                Comment


                • #9
                  Nguyên văn bởi lengo90 Xem bài viết
                  cách của bạn hay đấy, bạn thay 5 con trở đó bằng 5 con biến trở rồi ngồi đó vặn liên tục để tạo hiệu ứng sao băng nhá, 5 con biến trở thì phải dùng 5 tay để vặn tức là 2 người rưỡi đấy

                  Code:
                          pwm_1    bit     p3.0
                          pwm_2    bit     p3.1
                          pwm_3    bit     p3.2
                          pwm_4    bit     p3.3
                  
                  
                  
                      org 00h
                          ljmp main
                      org 0bh
                          ljmp timer0
                      org 40h
                  
                  main:
                      mov    sp,#5fh
                      mov    tmod,#02h ;che do auto reload 8bit
                      mov    ie,#82h   ;cho phep cac ngat và timer0 hoat dong
                      mov    th0,#-1
                      mov    tl0,#-1
                      setb   tr0
                      mov    dem,#0
                      mov    duty_1,#0
                      mov    duty_2,#0
                      mov    duty_3,#0
                      mov    duty_4,#0
                  sjmp $
                  
                  timer0:
                      push   acc     ;cat du lieu vao ngan xep
                      push   psw
                      inc    dem
                      mov    a,dem
                      cjne   a,duty_1,clr_pwm_2
                      clr    pwm_1
                  clr_pwm_2:
                      cjne   a,duty_2,clr_pwm_3
                      clr    pwm_2
                  clr_pwm_3:
                      cjne   a,duty_3,clr_pwm_4
                      clr    pwm_3
                  clr_pwm_4:
                      cjne   a,duty_4,setb_pwm
                      clr    pwm_4
                  setb_pwm:
                      cjne   a,#255,exit
                      setb   p3.0
                      setb   p3.1
                      setb   p3.2
                      setb   p3.3
                  exit:
                      pop    psw     ;lay du lieu tu ngan xep
                      pop    acc
                      reti
                  
                  end
                  các duty để điều chỉnh độ rộng xung nhá (0<=duty_x<=255), bạn dựa vào đó mà phát triển lên nhiều PWM hơn
                  Đây là code cho dong 8051 hay chip nào thế ban ơi?có thể cho chíp 89xx k?

                  Comment

                  Về tác giả

                  Collapse

                  [VN]NMD Tìm hiểu thêm về [VN]NMD

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

                  Collapse

                  Đang tải...
                  X