[C17] Review buổi học số 2 Clock - Interrupt 11/12/2017

Vũ Huy Hợp

Thành Viên PIF
Hi all :1cool_byebye:
Vậy là chúng ta đã kết thúc buổi học thứ 2, mình xin tóm tắt lại nội dung buổi học cho những bạn không đi được có thể theo kịp bài nhé!
1. Chữa bài tập về nhà
-
Do buổi trước còn khá nhiều bạn chưa làm được bài 2 nên anh Huân đã chữa bài 2 trên lớp các bạn tham khảo code :D
Code:
BTVN 2 GPIO

int led_num = 1;//1-8
int led_dir = 1;//1: left to right, 2: right to left
int led_idx = 0;//current led, 0-7
int led_cnt = 0;//increase every 10 ms
int button1_pre_state = 0;//0: not pressed, 1: pressed
int button2_pre_state = 0;//0: not pressed, 1: pressed

void main(void)
{
    wdt...
    config_clock
    config_gpio:P1.0, P1.1:input, P2: output
    while(1)
    {
        int button1_state, button2_state;

        if (!(P1IN & BIT0))//button led_num
        {
            button1_state = 1;//pressed
        }
        else
        {
            button1_state = 0;
        }
        if ((button1_pre_state == 0) && (button1_state == 1))
        {
            led_num++;
            if (led_num > 8)
                led_num = 1;
        }
        button1_pre_state = button1_state;

        if (!(P1IN & BIT1))//button led_dir
        {
            button2_state = 1;
        }
        else
        {
            button2_state = 0;
        }
        if ((button2_pre_state == 0) && (button2_state == 1))
        {
            if (led_dir == 1)
                led_dir = 2;
            else
                led_dir = 1;
        }
        button2_pre_state = button2_state;

        //led_dir, led_num, led_idx -> 8 led
        led_cnt++;
        if (led_cnt == 50) // 500 ms
        {
            led_cnt = 0;
            if (led_dir == 1)
            {
                led_idx++;
                if (led_idx > 7)
                    led_idx = 0;
            }
            else if (led_dir == 2)
            {
                led_idx--;
                if (led_idx < 0)
                    led_idx = 7;
            }
            P2OUT = (1<<led_idx);// led_num = 1
        }
        delay 10 ms
    }
}

2. Nội dung buổi học
a. Clock + LPM

- Xung clock là gì?
- Có những loại xung clock nào? Cách config cho vi điều khiển như thế nào?
- Có những mode tiếp kiệm năng lượng nào? Cách sử dụng chúng ra sao?
- Các bạn có thể đọc lại slides bài giảng để tìm câu trả lời nhé!:brick: [Slides]
b. Interrupt
- Interrupt là gì? Tại sao cần phải sử dụng interrupt?

- Ứng dụng của Interrupt?
- Cách config Interrupt?
- Tài liệu tham khảo phần này các bạn có thể xem trong [User's Guide] nhé!:5cool_beat_plaster:
- Code mẫu tham khảo tại đây nhé: [Code]

3. Demo led ma trận 8x8
Hôm bữa trên lớp mình đã demo led phần code game trên led ma trận 2 màu 8x8. Các bạn có hứng thú có thể làm thử để tập code nhé!:brick:
  • Một số kiến thức các bạn cần tìm hiểu:
- 74HC595 nguyên lý hoạt động và cách sử dụng các bạn có thể xem ở đây: http://www.payitforward.edu.vn/wordpress/tutorials/dien-tu-co-ban-cho-sv-nam-nhat/bai-4/
- Kỹ thuật quét led ma trận các bạn có thể tìm hiểu tại: http://www.hocavr.com/index.php/en/app/dotmatrix

  • Mọi thắc mắc các bạn có thể comment ở phía dưới để có thể được giải đáp nhé :1cool_byebye:
4. Bài tập về nhà :6cool_boss:
- Thực hiện bài tập 2 của buổi học 1 bằng cách sử dụng ngắt port để đọc nút nhấn.
- Thực hiện mạch Led ma trận 8x8. Schematics và layout download tại đây.
 
Last edited:
Top