[C7] Bài tập cho các bạn C7 trong thời gian thi giữa kì :D

Manhdd

Cố Vấn CLB
Staff member
Thi giữa kỳ là giai đoạn ít phải lên trường nên ngoài lúc thi ra thì nhiều bạn "rất rảnh"
. Rảnh rỗi thì các bạn dễ sinh nông nổi, lại hùa nhau kết bè cánh chơi dota, CS, ... tùm lum, mất phong cách sinh viên
. Thôi thì xoa dịu mấy ham muốn "tiêu cực" đó bằng cách lôi mấy module đã làm ra code vậy

Đề bài rất đơn giản: Yêu cầu là các bạn phải code được cho LCD của mình (dời con trỏ, hiện chữ, xoá chữ, ...) dùng các hàm có sẵn trong driver LCD đính kèm (có update 1 tí nhé :d).
Kế đó, bạn nào còn thời gian thì mượn mấy module còn lại của nhóm, hoặc tự làm lấy để code. Viết code càng nhiều càng có kinh nghiệm. Có gì không hiểu các bạn cứ chủ động hỏi Advisor. Mình không yêu cầu các bạn phải code thêm bao nhiêu module, vì việc học là ở các bạn mà


Hướng dẫn module LCD

Trước tiên, xem mô tả chi tiết về LCD tại link này (phần code cho AVR có thể bỏ qua, không thì đọc qua cho biết cũng tốt)
Chi tiết các bước làm việc với LCD:
- LCD
+ Nối nguồn 5V cho LCD vào 2 chân VSS (-), VDD (+). Nguồn này phải chung GND với MSP430 (nếu kéo nguồn 5V từ mạch main qua thì đương nhiên là chung rồi.
+ Nối chân R/W xuống GND (GND ở đâu thì động não nhá
) để cấu hình LCD hoạt động ở chế độ chờ ghi dữ liệu xuống để hiển thị.
+ Chuẩn bị đường bus từ các chân RS, EN, D4, D5, D6, D7. Các chân D4-D5-D6-D7 nên dùng luôn 1 cọng bus 4; 2 bus từ RS, EN nên để khác màu cho đỡ lằng nhằng.
- Main MSP430
+ Nối bus cổng nạp từ LaunchPad
+ Xem drivers LCD, mở file LCD.c lên, kéo xuống bảng tra PINS MAPPING (!! PAY ATTENTION !!) . Bảng này định nghĩa chân nào của LCD nối với chân nào của MSP430. Bảng trong driver được đính kèm dưới bài này là:

Code:
/****************************************************************************
* PINS MAPPING (!! PAY ATTENTION !!)
******************************************************************************/
 
// Your YM1602C 16x2 must be supplied with a voltage between 4.5V-5.5V
// However, signal pins can understand 3.3V logic level from MSP430 as '1'
// Check your hardware connecting and map it to these definitions below
// Map: LCD PIN <-> Output_Port _ out/dir  ->  Output_Pin
 
#define LCD_RS        P2_out -> _bit.b0 // P2.0
#define LCD_RS_DIR    P2_dir -> _bit.b0
#define LCD_EN        P2_out -> _bit.b1 // P2.1
#define LCD_EN_DIR    P2_dir -> _bit.b1
//  This driver just help you to "write" LCD, not to read LCD "status".
// So that, you must pull your pin LCD_RW to GND (0V).
#define LCD_DATA_4    P2_out -> _bit.b2 // P2.2
#define LCD_DATA_4_DIR P2_dir -> _bit.b2
#define LCD_DATA_5    P2_out -> _bit.b3 // P2.3
#define LCD_DATA_5_DIR P2_dir -> _bit.b3
#define LCD_DATA_6    P2_out -> _bit.b4 // P2.4
#define LCD_DATA_6_DIR P2_dir -> _bit.b4
#define LCD_DATA_7    P2_out -> _bit.b5 // P2.5
#define LCD_DATA_7_DIR P2_dir -> _bit.b5
Các chân này có thể được sửa lại (sửa port và sửa pin). Lưu ý là khi sửa cần sửa cả thanh ghi OUT và DIR cho mỗi chân. Chân P2.6 và P2.7 có chức năng mặc định là nối thạch anh nên nếu bất đắc dĩ phải chọn là GPIO thì cần thêm trước vòng while(1) dòng code config:
Code:
P2SEL &= ~(BIT6 + BIT7);
+ Dựa vào cái bảng đó nối chân tương ứng từ LCD sang chân của MSP430 (mặc định là 6 chân P2.0 -> P2.5 tương ứng RS, EN, D4, D5, D6, D7.)
- Coding
+ Tạo 1 project trống, tạo và add file LCD_main.c ; hay cách khác là tạo 1 project có file main.c rồi Right_CLick > Rename thành LCD_main.c
+ Chép driver vào project: Dùng Windows Explorer tìm đến thư mục chứa các file driver, copy những driver cần thiết. Ví dụ cope driver Basic_config và LCD thì copy hết 4 file *.c và *.h luôn.
+ Trong CCS, ở Project Explorer, tại project vừa tạo: Right_CLick > Paste
+ Trong LCD_main.c, cần có thêm dòng khai báo driver (include "*.h") là có thể sử dụng các hàm của driver. Để ý là phần lớn các drivers (libraries) đều có cấu trúc: *.h chứa các define và prototype của các hàm trong driver, *.c mô tả cụ thể các hàm, cả 2 file này đều có comment đầy đủ.
+ Dùng các hàm trong driver để viết code. Ví dụ code nhấp nháy chữ 'C' và chuỗi "Seven_xxxx" trên LCD (đã test chạy):

Code:
#include <msp430.h>
#include "Basic_config.h"
#include "LCD.h"
void main()
{
    unsigned int val = 0;
    Config_stop_WDT(); // stop WDT, see description in Basic_config.c
    //Config_Clocks();
    lcd_init (); // init LCD, see description in LCD.c
 
    while (1)
    {
        lcd_clear (); // clear LCD
        delay_ms (500); // delay 500ms
 
        lcd_gotoxy(3,0); // move cursor
        lcd_putc ('C');
        lcd_gotoxy(3,1); // move cursor
        lcd_puts ("Seven_");
        lcd_put_num(val, 0, 0); // write number stored in val
        delay_ms (500); // delay 500ms
        if (val++ == 9999) // check val and after that increase val
            val = 0; // reset val
    }
}
+ Đổ code xuống chip, nếu chưa chạy liền thì reset thử. Chưa chạy nữa thì kiểm tra lại hết phần mềm (cùng lắm là down project mẫu ở dưới), phần cứng (chỉnh biến trở tương phản thử)

Hướng dẫn sơ lược module keypad và led ma trận sẽ được post sau, trong box C7.

Do thi giữa học kỳ, các bạn được nghỉ 2 tuần. Chúng ta sẽ gặp nhau vào 27-10 ở phòng cũ nhé!
Chúc các bạn thi tốt!


PS: <<Tổng hợp Bài giảng và Drivers C7 >>
 

Attachments

Manhdd

Cố Vấn CLB
Staff member
Project mẫu có driver LCD và Basic_Config cho C7 đã được đính kèm từ lâu tại đây, vậy mà hôm nay vẫn có bạn thắc mắc yêu cầu nó :(
Đành phải viết thêm hướng dẫn add project:
- Download về, giải nén, chép thư mục này vô workspace (cái thư mục mà CSS hỏi mỗi khi khởi động)
- Mở CSS lên, vào Project/ Import Existing CSS Eclipse Project, Browse đến thư mục này để add nó vào
 

MMKC

Thành Viên PIF
Em nghe nói là có đề giữa kì cho C7 phải không a ?
 

Manhdd

Cố Vấn CLB
Staff member
Em nghe nói là có đề giữa kì cho C7 phải không a ?
Đề giữa kì đáng ra là lúc mấy em thi giữa kì. Nhưng lúc đó bận bịu quá nên chỉ yêu cầu các bạn phát triển các module thôi. Bạn nào có tự đầu tư tìm tòi thì sẽ tự đi tiếp được thôi :)
 
Top