1. Để hạn chế Spam nội dung trùng lặp, nội dung vi phạm chính sách google
    Đi link tràn lan vào bài viết là đặc điểm của các tài khoản vi phạm nên chúng tôi dừng việc đi link vào bài viết với tài khoản thường Để được đặt được link vào bài viết, các bạn phải đăng ký tài khoản VIP tại đây

các bạn cho mình hỏi về vđk

Thảo luận trong 'Vi điều khiển - Vi xử lý' bắt đầu bởi dientu1711, 15/6/14.

Advertisements

  1. dientu1711

    dientu1711 New Member


    mình đang tham khảo về pic
    viết bằng ngôn ngữ c sử dụng phần mềm ccs
    mình mún hỏi các ae trong diễn đàn giúp mình về 1 vấn đề này
    1 nút nhấn gắn vào chân RA0(input)
    1 led gắn vào chân RB0(output)
    yêu cầu là nhấn 1 lần là led sáng
    nhấn thêm lần nữa là led tắt
    giống như hoạt động của công tắc xung dòng
    thanks các bạn nhìu
     
  2. hungqsbk01

    hungqsbk01 New Member

    Vấn đề bạn đưa ra là tương đối đơn giản, có lẽ là bạn chưa lập trình nhiều nên ý tưởng còn nhiều hạn chế. Mình có thể đưa ra một phương pháp đơn giản như sau:
    Bạn sử dụng 1 biến đếm (ví dụ mình sử dụng biến press_count kiểu nguyên), ban đầu bạn khởi tạo biến này có giá trị bằng 0. Khi nhấn mình sẽ cho biến này tăng lên 1 đơn vị. Khi biến này tăng đến 2 thì bạn sẽ xóa biến này, coi như là quay lại trạng thái đầu tiên. Như vậy bạn có thể định nghĩa được đâu là nhân lần 1, đâu là nhấn lần 2. Công việc còn lại chỉ là output data ra các chân điều khiển của bạn thôi.
    Bạn cứ làm thử theo phương án đó đi. Nếu cần mình sẽ đưa code nếu như bạn đã làm mà không được.
    Chúc bạn thành công!
    [hr]
    Đây là ví dụ về mã chương trình và file mô phỏng
    Chúc bạn thành công
    [HASHTAG]#include[/HASHTAG] <16F877A.h>
    [HASHTAG]#device[/HASHTAG] adc=8
    [HASHTAG]#FUSES[/HASHTAG] NOWDT,HS,NOPUT,PROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD
    [HASHTAG]#use[/HASHTAG] delay(clock=20000000)
    int8 press_count = 0;
    void sys_init(void)
    {
    press_count = 0;
    SET_TRIS_A(0x01);
    SET_TRIS_B(0x00);

    }
    void read_key(void)
    {
    if(input(PIN_A0) == 0)
    {
    delay_ms(500);
    if(input(PIN_A0) == 0)
    {
    press_count++;
    }
    }
    if(press_count == 2) press_count = 0;
    if(press_count == 1) output_high(PIN_B0);
    if(press_count == 0) output_low(PIN_B0);
    }

    void main()
    {
    sys_init();
    while(true)
    {
    read_key();
    }

    }
     

Chia sẻ trang này