Ngồi nghịch tìm ra cách này. Các bạn dùng để comment các dòng code thì thực sự hiệu quả và người đọc sẽ cảm thấy dễ thở hơn với ngôn ngữ mẹ đẻ.
Trước hết đảm bảo rằng Nation Language Code Page là 1258 (ANSI/OEM-Viet Nam). Bạn có thể chọn như sau
Chọn Edit >> Properties… >> chọn tab Text
Sau đó bạn cài unikey và chọn bảng mã là Vietnamese Locale CP 1258. Tiếp đến đảm bảo cách gõ của bạn là telex và tích chọn [luôn sử dụng clipboard cho unicode]
Gõ tiếng việt trong MPLAB 8.x
Tập hợp các trang web bổ ích
Trong khi tìm kiếm tài liệu làm luận văn bất chợt tôi nhận thấy mình cần phải lưu trữ lại các trang web một cách có hệ thống để tiện cho việc tìm kiếm.
Suy nghĩ theo kiểu cấu trúc cây ta sẽ chia ra làm các nhánh theo lĩnh vực tìm hiểu. Hiện tại tôi quan tâm tới: điện tử (vi điều khiển, fpga(sẽ tìm hiểu trong thời gian tới)), robotics (có 3 mảng: robot cấu trúc hở, robot song song và robot dáng người).
I. Điện tử
II. Robotics
1.
2.
3. Humanoid Robot, Two-legged Robot
Trang này có tài liệu free
http://www.intechopen.com
http://www.mathworks.com/products/demos/
Lib LCD CodevisionAVR
CodevisionAVR là một công cụ để gen code rất tốt dùng cho VĐK AVR. Không cần phải bàn nhiều về tính năng hấp dẫn của soft này. Nếu bạn muốn đi nhanh vào ứng dụng và ít quan tâm tới các register thì CodevisionAVR có lẽ là một lựa chọn hợp lý. Vì đang sử dụng soft V2.03.4 cũng không rõ trong các version mới hơn đã có những tính năng nào hấp dẫn hơn không, nhưng cũng có một nhận xét về một số điểm còn hạn chế. Khá rõ ràng là việc thư viện LCD có nhưng còn hạn chế. Bạn khá bị động trong việc chọn các chân để giao tiếp với LCD. Thường thì tất cả là các chân PORTB hoặc PORTD v.v… Do đó dựa vào code có khá nhiều cho LCD viết cho CCS, mình recode lại cho LCD (16×2), chỉ cần chỉnh sửa một chút trong khai báo các chân điều khiển và dữ liệu bạn sẽ có thể điều khiển LCD theo ý mình. Vì luôn có mục đích tiếp cận chân nên mình code cho giao tiếp 4 bit và cũng bởi lẽ giao tiếp 8 bit quá đơn giản với bạn nếu bạn muốn code một code mới rồi.
/*
Recoded by TrungTQ
Email: trungkstn@gmail.com
*/
/*=================================================*/
#include <string.h>
#include <delay.h>
#include <stdio.h>
#include <stdarg.h>
/*=================================================*/
#define LCD_RS PORTC.0
#define LCD_EN PORTC.1
/*=================================================*/
#define LCD_D4 PORTC.2
#define LCD_D5 PORTC.3
#define LCD_D6 PORTC.4
#define LCD_D7 PORTC.5
/*=================================================*/
unsigned char Testbit(unsigned char Data, unsigned char i)
{
if((Data & i) == i) return 1;
return 0;
}
/*==================================================*/
void LCD_Init();
void LCD_GotoXY(unsigned char x, unsigned char y);
void LCD_PutChar(unsigned char c);
void LCD_PutFlashString(flash unsigned char* str);
void LCD_PutString(unsigned char* str);
void LCD_Clear();
void LCD_SetData(unsigned char Data);
void LCD_SendData(unsigned char Data);
/*==================================================*/
void LCD_Pulse()
{
LCD_EN = 1;
delay_ms(5);
LCD_EN = 0;
delay_ms(5);
}
/*==================================================*/
void LCD_SetData(unsigned char Data)
{
LCD_D4 = Testbit(Data, 1);
LCD_D5 = Testbit(Data, 2);
LCD_D6 = Testbit(Data, 4);
LCD_D7 = Testbit(Data, 8);
}
/*==================================================*/
void LCD_SendData(unsigned char Data)
{
LCD_SetData((Data>>4) & 0x0F);
LCD_Pulse();
LCD_SetData(Data & 0x0F);
LCD_Pulse();
}
/*==================================================*/
void LCD_Init()
{
LCD_RS = 0;
LCD_EN = 1;
LCD_Pulse();
delay_ms(10);
LCD_SetData(0x02);/* Mode 4 bits */
LCD_Pulse();
LCD_SendData(0x28);/* Mode 4 bits 2 lines */
LCD_SendData(0x0C);
LCD_SendData(0x06);
LCD_SendData(0x02);
LCD_Clear();
}
/*==================================================*/
void LCD_Clear()
{
LCD_SendData(0x01);
}
/*==================================================*/
void LCD_GotoXY(unsigned char x, unsigned char y)
{
LCD_SendData((x-1) + 64*(y-1) + 0x80);
}
/*==================================================*/
void LCD_PutChar(unsigned char c)
{
LCD_RS = 1;
LCD_SendData(c);
LCD_RS = 0;
}
/*==================================================*/
unsigned char strlen2(flash unsigned char *s)
{
flash unsigned char *sc;
for (sc = s; *sc != 0; sc++);
return(sc - s);
}
/*==================================================*/
void LCD_PutFlashString(flash unsigned char* str)
{
int i;
for(i = 0; i < strlen2(str); i++)
{
LCD_PutChar(str[i]);
}
}
/*==================================================*/
void LCD_PutString(unsigned char* str)
{
int i;
for(i = 0; i < strlen(str); i++)
{
LCD_PutChar(str[i]);
}
}
/*==================================================*/