LINK TẢI LUẬN VĂN MIỄN PHÍ CHO AE KET-NOI
Ôn lại về ngôn ngữ C theo chuẩn ANSI
Chương 1 : Ôn lại về ngôn ngữ C theo chuẩn ANSI 1.1. Cấu trúc cơ bản của một chương trình C
Trước tiên ta xét ví du: Viết chương trình C hiện dòng thông báo “ Chào các bạn đến với chương trình C” ra màn hình.
Cụ thể chương trình
/* Chương trình thí dụ*/
// my first program in C
#include #include void main()
{
clrscr();/* Câu lệnh xoá màn hình*/ printf(“Chào các bạn đến với chương trình C!”); getch();
}
Khai báo tệp tiêu đề
Trong ngôn ngữ lập trình C khi sử dụng các hàm chuẩn trong các thư viện chuẩn chúng ta phải khai báo tệp tiêu đề(header file) chứa các hàm nguyên mẫu tương ứng các hàm đó, các lệnh được bắt đầu bằng #include theo sau là tệp tiêu đề
Có hai cách viết như sau:
Cách 1: #include <[đường dẫn\] tentep>
Ví dụ: #include #include
Cách 2: #include “[đường dẫn\]tentep” Ví dụ: #include “a:\Baitap\Bai2.C”
#include
Cách 1 tự động tìm tentep trong thư mục INCLUDE
Cách 2 tự động tìm tentep trong thư mục hiện thời nếu không có thì tìm trong thư mục INCLUDE
Trong thí dụ trên chúng ta có sử dụng hàm printf(...) là hàm chuẩn được khai báo trong tệp tiêu đề stdio.h và hàm getch(), clrscr() được khai báo trong tệp tiêu đề conio.h.
Downloaded by Golden Arowana ([email protected])
1
lOMoARcPSD|9997659
Do đó trong chương trình có hai dòng khai báo sau ở đầu chương trình: #include
#include
Chú thích và dấu kết thúc câu lệnh
Trong ngôn ngữ lập trình C những phần được viết trong /*...*/ được gọi là phần chú thích. Mọi ký tự nằm trong /*...*/ khi dịch chương trình dich bỏ qua, ta được phép dùng chúng để minh hoạ cho các thành phần chương trình làm cho chương trình dễ hiểu, mạch lạc. Lời chú thích có thể xuất hiện bất kỳ đâu trong chương trình và có thể trải trên nhiều dòng khác nhau trong chương trình.
Trong chương trình viết bằng ngôn ngữ C mỗi câu lệnh có thể viết trên một hay nhiều dòng và phải kết thúc bằng dấu chấm phẩy(.
1.2. Các yếu tố cơ bản của ngôn ngữ C - ANSI
1.2.1 Bộ chữ viết
Ngôn ngữ C được xây dựng trên bộ ký tự sau: Cácchữcáihoa:ABC ....Z
Các chữ cái thường:a b c ... z
Các chữ số:0 1 2... 9
Các dấu chấm câu: , . ; : / ? [ ] { } @ # $ % ^ * & ( ) + - = < > ‘ “...
Các dấu ngăn cách không nhìn thấy như dấu cách, dấu nhảy cách tab, dấu xuống
dòng
Dấu gạch nối dưới _
1.2.2 Từ khoá
Là những từ có một ý nghĩa hoàn toàn xác định trong chương trình: Ví dụ: void struct class while ....
Không được dùng từ khoá để đặt tên cho các hằng, biến, mảng, hàm .... Từ khoá phải viết bằng chữ thường
Ví dụ từ khoá viết đúng: struct Ví dụ từ khoá viết sai: Struct
Downloaded by Golden Arowana ([email protected])
2
lOMoARcPSD|9997659
1.2.3 Tên
Là một dãy ký tự được dùng để chỉ tên hằng, tên biến, tên mảng, tên hàm...Tên được tạo thành từ các chữ cái a..z, A..Z, chữ số 0..9, dấu gạch dưới. Tên không được bắt đầu bằng chữ số, chứa các kí tự đặc biệt như dấu cách, dấu phép toán...
Tên không được đặt trùng với từ khoá. Ví dụ: Giai_Phuong_Trinh_Bac2
abc123
Chú ý:
-Trong ngôn ngữ lập trình C tên được phân biệt chữ hoa và chữ thường
-Thông thường chữ hoa thường được dùng để đặt tên cho các hằng, còn các đại lượng khác thì dùng chữ thường.
2.1.4Một số kiểu dữ liệu cơ bản
- Kiểu ký tự (Char)
a Một giá trị kiểu char chiếm một byte và biểu diễn được một ký tự trong bảng mã ASCII.
- Kiểu số nguyên
Một giá trị kiểu số nguyên là một phần tử của một tập các số nguyên mà máy tính có thể biểu diễn. Trong ngôn ngữ lập trình C có nhiều kiểu dữ liệu số nguyên với dải giá trị khác nhau cụ thể:
Kiểu
Char
Unsigned char Int
Unsigned int Short int Unsigigned Short Long Int Unsigigned Long
- Kiểu số thực
Phạm vi biểu diễn
-128 -> 127
0->255
-32768->32767
0->65535
-32768->32767
0-> 32767 -2147483648->-2147483647 0-> 4294967295
Kích thước(byte) 1
1
2
2 2 2 4 4
Một giá trị kiểu số thực là một phần tử của một tập các số thực mà máy tính có thể
biểu diễn. Trong ngôn ngữ lập trình C có nhiều kiểu dữ liệu số thực với dải giá trị khác nhau cụ thể:
Kiểu Phạm vi biểu diễn Kích thước(byte)
Downloaded by Golden Arowana ([email protected])
3
lOMoARcPSD|9997659
Float 3.4E-38 -> 3.4E+38 4 Double 1.7E-311 -> 1.7E3+311 8 Long double 3.4E-4932->3.4E+4932 10
- Khai báo hằng, biến, mảng + Khai báo hằng
+ Hằng số thực
Được viết theo hai cách sau:
- Dạng thập phân gồmhần nguyên, dấu chấm thập phân, phần thập phân
Ví dụ:34.2 -344.122
- Dạng khoa học(dạng mũ) gồm: Phần định trị và phần mũ. Phần định trị là số
nguyên hay số thực dạng thập phân, phần mũ bắt đầu bằng E hay e theo sau là số nguyên
Ví dụ: 1234.54E-122
+ Hằng số nguyên
- Hệ thập phân bình thường VD: 545
- Hệ cơ số 8(Octal)
Bắt đầu bằng số 0 và chỉ biểu diễn số dương
Ví dụ: 024=2010 - Hệ cơ số 16(Hecxa)
Bắt đầu bằng 0x
Ví dụ: 0xAB = 16310
+ Hằng ký tự
Là một ký tự riêng biệt được đặt trong hai dấu nháy đơn Ví dụ: ‘a’ ‘9’ .....
Chú ý: Hằng ký tự biểu thị mã của ký tự đó trong bảng mã ASCII. Do vậy một hằng ký tự cũng có thể tham gia vào các phép toán.
Ví dụ:
+ Hằng xâu ký tự
‘A’+10 có giá trị (65+10=75)
- Là một dãy các ký tự đặt trong hay dấu nháy “......”
- Xâu ký được lưu trữ trong một mảng ô nhớ liền nhau song còn thêm ô nhớ cuối cùng chứa mã là 0(ký hiệu là ‘\0’ )
Downloaded by Golden Arowana ([email protected])
4
lOMoARcPSD|9997659
Ví dụ: “Nguyen Van Anh”
+ Cách khai báo một hằng
Cách 1:#define Tenhang Giatri Ví dụ: #define MAX 100
Cách 2: const kieu_du_kieu ten_hang=gia_tri_hang; Ví dụ: const int n=20;
Sự khác nhau giữa định nghĩa hằng số dùng #define và const ở chỗ:
* Với const đây là hằng số cố định, một hằng số thực sự và chỉ có một hằng số
chứa trong ô nhớ.
* Với #define khi gặp hằng số này chương trình dịch sẽ lắp giá trị hằng số này vào
trong biểu thức cần tính với số lần thoải mái. Điều đó có nghĩa là mỗi khi gặp hằng này máy sẽ lắp đủ ô nhớ chứa hằng số này vào đó.
+ Khai báo biến
- Các biến trước khi sử dụng phải khai báo theo mẫu sau:
kieu_du_lieu danh_sach_cac_bien_can_khai_bao; Ví dụ: int x,y;
float a;
- Khi khai báo một biến ta có thể khởi đầu giá trị cho nó theo mẫu sau:
kieu_du_lieu ten_bien = gia_tri; Ví dụ: float x=5.;
int n=10;
- Để lấy địa chỉ của một biến ta dùng toán tử & cụ thể như sau:
&ten_bien
Ví dụ: &x lấy địa chỉ của biến a
&n lấy địa chỉ của biến n + Khai báo xâu ký tự.
char str[10]
+ Các phần tử của mảng là một ký tự
+ Xâu bao giờ cũng kết thúc bằng phần tử ký hiệu là NUL(‘\0’) Một hằng xâu ký tự được đặt trong dấu nháy kép
VD: “DHSPKT” để lưu giữ xâu này thì hệ thống phải dùng 1 mảng có 7 ô nhớ.
Downloaded by Golden Arowana ([email protected])
5
ký tự đơn ‘a’
xâu ký tự “a”
VD: char ch[10]=”DHSPKT” - Khai báo mảng
float *px;
a0 \
lOMoARcPSD|9997659
D H S P K T \0
a
Mảng là một dãy biến liên tiếp cùng tên nhưng khác nhau bởi chỉ số. Tất cả các biến này có cùng một kiểu là kiểu của mảng.
+ Cách khái báo mảng
- Đối với mảng một chiều
kieu_du_lieu ten_mang[kich_thuc_mang];
- Đối với mảng hai chiều
kieu_du_lieu ten_mang[kich_thuc_hang][kich_thuoc_cot];
- Đối với mảng nhiều chiều
kieu_du_lieu ten_mang[kich_thuc_1][kich_thuoc_2]...[kich_thuoc_n];
Ví dụ:
int a[10];
float x[3][5];
char x[30];
+ Cách thức truy nhập các phần tử của mảng
Mỗi phần tử của mảng được truy nhập thông qua tên và chỉ số tương ứng, phần tử đầu tiên có chỉ số là 0.
Cách truy nhập
- Mảng một chiều:
- Mang hai chiều:
Ví dụ: m[0] m[5]
- biến con trỏ
Ta có thể sử dụng tên con trỏ hay dạng khai báo của nó trong các biểu thức Ví dụ:
tenmang[chiso] tenmang[chisodong][chisocot]
Downloaded by Golden Arowana ([email protected])
6
lOMoARcPSD|9997659
Ở đây: px là tên con trỏ
*px dạng khai báo của con trỏ
- Sử dụng tên con trỏ: Con trỏ cũng là một biến nên khi tên của nó xuất hiện trong các biểu thức thì giá trị của nó sẽ được sử dụng trong biểu thức này. Chỉ có một điều cần lưu ý ở đây: giá trị của một con trỏ là dịa chỉ của biến nào đó.
Ví dụ: float a,*p,*h;
p=&a;/* Gán địa chỉ của biến a cho p hay nói cách khác cho con trỏ p trỏ tới biến a */
h=p;/* Gán con trỏ p cho con trỏ h */ *p=5;// a=5
Các phép toán trên con trỏ
Có bốn nhóm phép toán liên quan đến con trỏ và địa chỉ: Phép gán, phép tăng giảm địa chỉ, phép truy nhập bộ nhớ và phép so sánh.
+ Phép gán
Ví dụ: int x,y,*trox,*troy; char z;
trox=&x;
troy=&y;
trox=(int *)(&z); ép kiểu
+ Phép tăng giảm địa chỉ
Một con trỏ có thể cộng với một giá trị nguyên (int, long) để cho kết quả là một con trỏ cùng kiểu.
Ví dụ: int a[10], *tro1, *tro2, *tro3;
tro1=a; tương đương với tro1=a[0]; tro2=tro1+1;
tro3=tro1+9;
Cụ thể máy sẽ cung cấp các khoảng nhớ liên tiếp của mảng a như sau:
a[0] a[1]
tro1 ↑ tro2↑ tro3 ↑
+ Hiệu hai con trỏ
Hai con trỏ cùng kiểu trừ đi nhau cho ta một số nguyên Ví dụ: float x[10],*trox,*troy;
int z;
a[9]
Downloaded by Golden Arowana ([email protected])
7
lOMoARcPSD|9997659
trox=x+1; tương đương trox=&x[1] troy=&x[5];
z=troy-trox;/* z có giá trị là 4 */
x[0] x[1] x[9]
Chú ý: Không được lấy tổng, hiệu, tích, thương, % hai con trỏ
- Khối lệnh
- Là một dãy các câu lệnh được bao bởi các dấu { và }
- Máy coi một khối lệnh tương tự như một lệnh riêng lẻ, chỗ nào viết được một lệnh riêng lẻ cũng có quyền đặt vào đó một khối lệnh. Việc bắt đầu một khối lệnh { và kết thúc một khối lệnh } tương tự như câu lệnh hợp thành trong Pascal sử dụng cặp từ khoá begin...end.
- Đầu mỗi khối lệnh có thể đặt các khai báo biến, mảng...
- Các khối lệnh có thể lồng nhau
- Các biến được khai báo trong khối lệnh nào thì chỉ có hiệu lực trong khối đó.
- Khi máy kết thúc phiên làm việc với khối lệnh nào thì tất cả các biến cục bộ bên
trong khối lệnh đó đều bị giải phóng.
2.3 Biểu thức và Các phép toán
2.3.1 Phép toán số học hai ngôi
Các phép toán số học hai ngôi được thống kê ở bảng sau:
Phép toán
Ý nghĩa
Phép cộng
Phép trừ
Phép nhân
Phép chia
Phép lấy phần dư
Ví dụ 2+4=6
2-3=-1 4*2=8 5/3=1 6/2=0
+
-
*
/
% Chú ý:
- Nếu phép chia hai toán hạng đều nguyên thì phép chia cho kết quả là phần nguyên của thương hai toán hạng đó.
- Nếu một trong hai toán hạng là kiểu thực thì lúc này kết quả của phép chia cho ta giá trị đúng.
- Phép toán lấy phần dư % chỉ áp dụng cho trường hợp hai toán hạng là số nguyên.
2.3.2.Phép quan hệ và logic
Downloaded by Golden Arowana ([email protected])
8
Phép toán quan hệ
>
>=
<
<=
==
!=
Ý nghĩa
Phép so sánh lớn hơn
Phép so sánh lớn hơn hay bằng
Phép so sánh nhỏ hơn
Phép so sánh nhỏ hơn hay bằng
Phép so sánh bằng nhau
Phép so sánh khác nhau
Ví dụ
Kết quả
lOMoARcPSD|9997659
Trong ngôn ngữ lập trình C coi mọi giá trị khác không là đúng(“TRUE”) và mọi giá trị bằng không là sai(“FALSE”)
Các phép toán quan hệ sau đây cho kết quả là 1 nếu điều khiện được thoả mãn và bằng 0 trong trường hợp ngược lại:
1>2
2>=2
3<3
4<2
4==5
2!=7
0
1
0
0
0
1
Các phép toán logic được thể hiện dưới bảng sau:
Phép toán logic
!
&&
||
Ý nghĩa
Phép phủ định(not)
Phép và (and)
Phép hoặc(or)
Ví dụ
!(3>1)
(2>1)&&(5=2)
(4>3)||(1>8)
Kết quả
0
0
1
2.3.3. Sự chuyển đổi kiểu
Việc chuyển đổi kiểu dữ liểu trong C thường diễn ra tự động trong các
trường hợp
sau:
- Khi toán hạng trong một phép toán có kiểu khác nhau thì kiểu thấp hơn được
chuyển thành kiểu cao hơn: int->long->float->double
- Khi gán một giá trị kiểu này cho một biến(hay phần tử mảng) kiểu kia.
Ví dụ: int c;
c=2.45;/* c sẽ nhận giá trị là 2*/
- Khi truyền giá trị cho các đối số của hàm, trong câu lênh return của hàm.
Ngoài ra ta có thể chuyển từ một kiểu giá trị này sang một kiểu giá trị khác bất kỳ ta muốn bằng cách ép kiểu theo mẫu sau:
(Kiểi_dữ_liệu)biểu_thức Ví dụ:
float c=7.4; int n;
n=(int)c*3;/* khi đó n có giá trị 21*/
2.3.4 Phép tăng giảm
Downloaded by Golden Arowana ([email protected])
9
Chương 1 : Ôn lại về ngôn ngữ C theo chuẩn ANSI
1.1. Cấu trúc cơ bản của một chương trình C ................................................1 1.2. Các yếu tố cơ bản của ngôn ngữ C – ANSI ..............................................2 1.2.1 Bộ chữ viết..................................................................................2 1.2.2 Từ khoá .....................................................................................2 1.2.3 Tên...........................................................................................3 2.1.4 Một số kiểu dữ liệu cơ bản................................................................3 2.3 Biểu thức và Các phép toán .............................................................8 2.3.1 Phép toán số học hai ngôi .............................................................8 2.3.2.Phép quan hệ và logic .....................................................................9 2.3.3. Sự chuyển đổi kiểu........................................................................9 2.3.4 Phép tăng giảm ...........................................................................10 2.3.5 Câu lệnh gán ..............................................................................10 2.3.6. Biểu thức điều kiện.......................................................................11 2.4 Các toán tử điều khiển chương trình .....................................................11 2.4.1 Cấu trúc điều khiển if ....................................................................11 2.4.1.2 Cấu trúc rẽ nhánh if dạng khuyết.................................................... 11 2.4.1.2. Cấu trúc rẽ nhánh if dạng dầy đủ ...................................................11 2.4.2 Cấu trúc điều khiển switch .............................................................11 2.4.3 Cấu trúc lặp while ........................................................................12 2.4.4 Cấu trúc lặp do...while .................................................................. 12 2.4.5 Cấu trúc lặp for ...........................................................................12 2.5 Hàm, lập trình hướng hàm ................................................................13 2.5.1 Cách xây dựng một hàm .................................................................13 2.5.2 Sự hoạt động của một hàm ..............................................................13 2.5.2.1 Biến mảng động ........................................................................14 2.5.2.2 Biến mảng ngoài ........................................................................14 2.5.2.3 Biến mảng tĩnh .........................................................................14
Chương 2: Ôn lại về vi điều khiển AT89C51
2.1. Sơ đồ chân tín hiệu của 80C51/AT89C51........................................... 15 2.2. Sơ đồ khối ................................................................................16 2.3. Các thanh ghi chức năng đặc biệt. ....................................................17
Downloaded by Golden Arowana ([email protected])
83
lOMoARcPSD|9997659
2.4. Khối tạo thời gian và bộ đếm (Timer/Counter). ....................................24 2.5. Bộ nhớ chương trình và bộ nhớ dữ liệu nội trú..................................... 27 2.6. Nguyên lý truyền tin nối tiếp của AT89C51....................................... 30 2.5.6.3. Các tốc độ Baud ....................................................................34 2.5.6.4. Sử dụng Timer 1 để tạo ra các tốc độ Baud .....................................35 2.7. Cơ chế ngắt trong On-chip AT89C51 ................................................36 2.8 Kết nối cơ bản của vi điều khiển 8051 ................................................40
Chương 3 C cho vi điều khiển 8051
3.1 Keil C cho vi điều khiển ................................................................41 3.1.1 Những kiểu dữ liệu riêng của C51 ...................................................41 3.1.2 Hàm với phần định nghĩa mở rộng................................................... 43 3.2 Project 1 Led đơn .........................................................................45 3.2.1 Mạch và nguyên ly hoạt động......................................................... 45 3.2.2 Lập trình .................................................................................47 3.3 Project 2 dãy 8 Led đơn ..................................................................48 3.3.1 Nguyên lí hoạt động ....................................................................48 3.3.2 Lập trình ................................................................................48 3.3.3 Ðiều khiển ra cả cổng ..................................................................51 3.4 Project 3 điều khiển Led 7 thanh .......................................................54 3.4.1 Hình dạng và cấu tạo ..................................................................54 3.4.2 Nguyên lí hoạt động ...................................................................55 3.4.3 Lập trình ................................................................................55 3.5 Phím nhấn ................................................................................62 3.5.1 Ðếm số lần phím bấm giới hạn từ 0 đến 9 hiển thị ra led 7 thanh. .............62 3.5.1.1Nguyên lí hoạt động: ...............................................................63 3.5.1.2 Lập trình ..............................................................................63 3.5.2 Ðọc ma trận phím ................................................................................................65 3.5.2.1 Nguyên lí quét phím: .......................................................................................65 3.5.2.2 Lập trình ...........................................................................................................66 3.6 Ghép nối với LCD .................................................................................................68 3.6.1 Nguyên lý hoạt động của LCD ...........................................................................69 3.6.2 Mã (Hex) Lệnh đến thanh ghi của LCD ............................................................69
Downloaded by Golden Arowana ([email protected])
84
lOMoARcPSD|9997659
3.6.3 Lập trình ..............................................................................................................70 3.7 Điều khiển động cơ DC .........................................................................................74 3.7.1 Mạch nguyên ly ..................................................................................................74 3.7.2 Lập trình ..............................................................................................................75 3.8 Ghép nối Matrix Led .............................................................................................79 3.8.1 Sơ đồ cấu tạo ...................................................................................................79 3.8.2 Sơ đồ kết nối Matrix Led 8x8 .........................................................................79 3.8.3 Nguyên lí hoạt động ...........................................................................................80 3.8.4 Lập trình .............................................................................................................81
lOMoARcPSD|9997659
Trong ngôn ngữ lập trình C đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và thực). Toán tử tăng ++ sẽ thêm 1 vào toán hạng của nó, toán tử giảm – sẽ trừ đi 1.
Do Drive thay đổi chính sách, nên một số link cũ yêu cầu duyệt download. các bạn chỉ cần làm theo hướng dẫn.
Password giải nén nếu cần: ket-noi.com | Bấm trực tiếp vào Link để tải:
Ôn lại về ngôn ngữ C theo chuẩn ANSI
Chương 1 : Ôn lại về ngôn ngữ C theo chuẩn ANSI 1.1. Cấu trúc cơ bản của một chương trình C
Trước tiên ta xét ví du: Viết chương trình C hiện dòng thông báo “ Chào các bạn đến với chương trình C” ra màn hình.
Cụ thể chương trình
/* Chương trình thí dụ*/
// my first program in C
#include
{
clrscr();/* Câu lệnh xoá màn hình*/ printf(“Chào các bạn đến với chương trình C!”); getch();
}
Khai báo tệp tiêu đề
Trong ngôn ngữ lập trình C khi sử dụng các hàm chuẩn trong các thư viện chuẩn chúng ta phải khai báo tệp tiêu đề(header file) chứa các hàm nguyên mẫu tương ứng các hàm đó, các lệnh được bắt đầu bằng #include theo sau là tệp tiêu đề
Có hai cách viết như sau:
Cách 1: #include <[đường dẫn\] tentep>
Ví dụ: #include
Cách 2: #include “[đường dẫn\]tentep” Ví dụ: #include “a:\Baitap\Bai2.C”
#include
Cách 1 tự động tìm tentep trong thư mục INCLUDE
Cách 2 tự động tìm tentep trong thư mục hiện thời nếu không có thì tìm trong thư mục INCLUDE
Trong thí dụ trên chúng ta có sử dụng hàm printf(...) là hàm chuẩn được khai báo trong tệp tiêu đề stdio.h và hàm getch(), clrscr() được khai báo trong tệp tiêu đề conio.h.
Downloaded by Golden Arowana ([email protected])
1
lOMoARcPSD|9997659
Do đó trong chương trình có hai dòng khai báo sau ở đầu chương trình: #include
#include
Chú thích và dấu kết thúc câu lệnh
Trong ngôn ngữ lập trình C những phần được viết trong /*...*/ được gọi là phần chú thích. Mọi ký tự nằm trong /*...*/ khi dịch chương trình dich bỏ qua, ta được phép dùng chúng để minh hoạ cho các thành phần chương trình làm cho chương trình dễ hiểu, mạch lạc. Lời chú thích có thể xuất hiện bất kỳ đâu trong chương trình và có thể trải trên nhiều dòng khác nhau trong chương trình.
Trong chương trình viết bằng ngôn ngữ C mỗi câu lệnh có thể viết trên một hay nhiều dòng và phải kết thúc bằng dấu chấm phẩy(.
1.2. Các yếu tố cơ bản của ngôn ngữ C - ANSI
1.2.1 Bộ chữ viết
Ngôn ngữ C được xây dựng trên bộ ký tự sau: Cácchữcáihoa:ABC ....Z
Các chữ cái thường:a b c ... z
Các chữ số:0 1 2... 9
Các dấu chấm câu: , . ; : / ? [ ] { } @ # $ % ^ * & ( ) + - = < > ‘ “...
Các dấu ngăn cách không nhìn thấy như dấu cách, dấu nhảy cách tab, dấu xuống
dòng
Dấu gạch nối dưới _
1.2.2 Từ khoá
Là những từ có một ý nghĩa hoàn toàn xác định trong chương trình: Ví dụ: void struct class while ....
Không được dùng từ khoá để đặt tên cho các hằng, biến, mảng, hàm .... Từ khoá phải viết bằng chữ thường
Ví dụ từ khoá viết đúng: struct Ví dụ từ khoá viết sai: Struct
Downloaded by Golden Arowana ([email protected])
2
lOMoARcPSD|9997659
1.2.3 Tên
Là một dãy ký tự được dùng để chỉ tên hằng, tên biến, tên mảng, tên hàm...Tên được tạo thành từ các chữ cái a..z, A..Z, chữ số 0..9, dấu gạch dưới. Tên không được bắt đầu bằng chữ số, chứa các kí tự đặc biệt như dấu cách, dấu phép toán...
Tên không được đặt trùng với từ khoá. Ví dụ: Giai_Phuong_Trinh_Bac2
abc123
Chú ý:
-Trong ngôn ngữ lập trình C tên được phân biệt chữ hoa và chữ thường
-Thông thường chữ hoa thường được dùng để đặt tên cho các hằng, còn các đại lượng khác thì dùng chữ thường.
2.1.4Một số kiểu dữ liệu cơ bản
- Kiểu ký tự (Char)
a Một giá trị kiểu char chiếm một byte và biểu diễn được một ký tự trong bảng mã ASCII.
- Kiểu số nguyên
Một giá trị kiểu số nguyên là một phần tử của một tập các số nguyên mà máy tính có thể biểu diễn. Trong ngôn ngữ lập trình C có nhiều kiểu dữ liệu số nguyên với dải giá trị khác nhau cụ thể:
Kiểu
Char
Unsigned char Int
Unsigned int Short int Unsigigned Short Long Int Unsigigned Long
- Kiểu số thực
Phạm vi biểu diễn
-128 -> 127
0->255
-32768->32767
0->65535
-32768->32767
0-> 32767 -2147483648->-2147483647 0-> 4294967295
Kích thước(byte) 1
1
2
2 2 2 4 4
Một giá trị kiểu số thực là một phần tử của một tập các số thực mà máy tính có thể
biểu diễn. Trong ngôn ngữ lập trình C có nhiều kiểu dữ liệu số thực với dải giá trị khác nhau cụ thể:
Kiểu Phạm vi biểu diễn Kích thước(byte)
Downloaded by Golden Arowana ([email protected])
3
lOMoARcPSD|9997659
Float 3.4E-38 -> 3.4E+38 4 Double 1.7E-311 -> 1.7E3+311 8 Long double 3.4E-4932->3.4E+4932 10
- Khai báo hằng, biến, mảng + Khai báo hằng
+ Hằng số thực
Được viết theo hai cách sau:
- Dạng thập phân gồmhần nguyên, dấu chấm thập phân, phần thập phân
Ví dụ:34.2 -344.122
- Dạng khoa học(dạng mũ) gồm: Phần định trị và phần mũ. Phần định trị là số
nguyên hay số thực dạng thập phân, phần mũ bắt đầu bằng E hay e theo sau là số nguyên
Ví dụ: 1234.54E-122
+ Hằng số nguyên
- Hệ thập phân bình thường VD: 545
- Hệ cơ số 8(Octal)
Bắt đầu bằng số 0 và chỉ biểu diễn số dương
Ví dụ: 024=2010 - Hệ cơ số 16(Hecxa)
Bắt đầu bằng 0x
Ví dụ: 0xAB = 16310
+ Hằng ký tự
Là một ký tự riêng biệt được đặt trong hai dấu nháy đơn Ví dụ: ‘a’ ‘9’ .....
Chú ý: Hằng ký tự biểu thị mã của ký tự đó trong bảng mã ASCII. Do vậy một hằng ký tự cũng có thể tham gia vào các phép toán.
Ví dụ:
+ Hằng xâu ký tự
‘A’+10 có giá trị (65+10=75)
- Là một dãy các ký tự đặt trong hay dấu nháy “......”
- Xâu ký được lưu trữ trong một mảng ô nhớ liền nhau song còn thêm ô nhớ cuối cùng chứa mã là 0(ký hiệu là ‘\0’ )
Downloaded by Golden Arowana ([email protected])
4
lOMoARcPSD|9997659
Ví dụ: “Nguyen Van Anh”
+ Cách khai báo một hằng
Cách 1:#define Tenhang Giatri Ví dụ: #define MAX 100
Cách 2: const kieu_du_kieu ten_hang=gia_tri_hang; Ví dụ: const int n=20;
Sự khác nhau giữa định nghĩa hằng số dùng #define và const ở chỗ:
* Với const đây là hằng số cố định, một hằng số thực sự và chỉ có một hằng số
chứa trong ô nhớ.
* Với #define khi gặp hằng số này chương trình dịch sẽ lắp giá trị hằng số này vào
trong biểu thức cần tính với số lần thoải mái. Điều đó có nghĩa là mỗi khi gặp hằng này máy sẽ lắp đủ ô nhớ chứa hằng số này vào đó.
+ Khai báo biến
- Các biến trước khi sử dụng phải khai báo theo mẫu sau:
kieu_du_lieu danh_sach_cac_bien_can_khai_bao; Ví dụ: int x,y;
float a;
- Khi khai báo một biến ta có thể khởi đầu giá trị cho nó theo mẫu sau:
kieu_du_lieu ten_bien = gia_tri; Ví dụ: float x=5.;
int n=10;
- Để lấy địa chỉ của một biến ta dùng toán tử & cụ thể như sau:
&ten_bien
Ví dụ: &x lấy địa chỉ của biến a
&n lấy địa chỉ của biến n + Khai báo xâu ký tự.
char str[10]
+ Các phần tử của mảng là một ký tự
+ Xâu bao giờ cũng kết thúc bằng phần tử ký hiệu là NUL(‘\0’) Một hằng xâu ký tự được đặt trong dấu nháy kép
VD: “DHSPKT” để lưu giữ xâu này thì hệ thống phải dùng 1 mảng có 7 ô nhớ.
Downloaded by Golden Arowana ([email protected])
5
ký tự đơn ‘a’
xâu ký tự “a”
VD: char ch[10]=”DHSPKT” - Khai báo mảng
float *px;
a0 \
lOMoARcPSD|9997659
D H S P K T \0
a
Mảng là một dãy biến liên tiếp cùng tên nhưng khác nhau bởi chỉ số. Tất cả các biến này có cùng một kiểu là kiểu của mảng.
+ Cách khái báo mảng
- Đối với mảng một chiều
kieu_du_lieu ten_mang[kich_thuc_mang];
- Đối với mảng hai chiều
kieu_du_lieu ten_mang[kich_thuc_hang][kich_thuoc_cot];
- Đối với mảng nhiều chiều
kieu_du_lieu ten_mang[kich_thuc_1][kich_thuoc_2]...[kich_thuoc_n];
Ví dụ:
int a[10];
float x[3][5];
char x[30];
+ Cách thức truy nhập các phần tử của mảng
Mỗi phần tử của mảng được truy nhập thông qua tên và chỉ số tương ứng, phần tử đầu tiên có chỉ số là 0.
Cách truy nhập
- Mảng một chiều:
- Mang hai chiều:
Ví dụ: m[0] m[5]
- biến con trỏ
Ta có thể sử dụng tên con trỏ hay dạng khai báo của nó trong các biểu thức Ví dụ:
tenmang[chiso] tenmang[chisodong][chisocot]
Downloaded by Golden Arowana ([email protected])
6
lOMoARcPSD|9997659
Ở đây: px là tên con trỏ
*px dạng khai báo của con trỏ
- Sử dụng tên con trỏ: Con trỏ cũng là một biến nên khi tên của nó xuất hiện trong các biểu thức thì giá trị của nó sẽ được sử dụng trong biểu thức này. Chỉ có một điều cần lưu ý ở đây: giá trị của một con trỏ là dịa chỉ của biến nào đó.
Ví dụ: float a,*p,*h;
p=&a;/* Gán địa chỉ của biến a cho p hay nói cách khác cho con trỏ p trỏ tới biến a */
h=p;/* Gán con trỏ p cho con trỏ h */ *p=5;// a=5
Các phép toán trên con trỏ
Có bốn nhóm phép toán liên quan đến con trỏ và địa chỉ: Phép gán, phép tăng giảm địa chỉ, phép truy nhập bộ nhớ và phép so sánh.
+ Phép gán
Ví dụ: int x,y,*trox,*troy; char z;
trox=&x;
troy=&y;
trox=(int *)(&z); ép kiểu
+ Phép tăng giảm địa chỉ
Một con trỏ có thể cộng với một giá trị nguyên (int, long) để cho kết quả là một con trỏ cùng kiểu.
Ví dụ: int a[10], *tro1, *tro2, *tro3;
tro1=a; tương đương với tro1=a[0]; tro2=tro1+1;
tro3=tro1+9;
Cụ thể máy sẽ cung cấp các khoảng nhớ liên tiếp của mảng a như sau:
a[0] a[1]
tro1 ↑ tro2↑ tro3 ↑
+ Hiệu hai con trỏ
Hai con trỏ cùng kiểu trừ đi nhau cho ta một số nguyên Ví dụ: float x[10],*trox,*troy;
int z;
a[9]
Downloaded by Golden Arowana ([email protected])
7
lOMoARcPSD|9997659
trox=x+1; tương đương trox=&x[1] troy=&x[5];
z=troy-trox;/* z có giá trị là 4 */
x[0] x[1] x[9]
Chú ý: Không được lấy tổng, hiệu, tích, thương, % hai con trỏ
- Khối lệnh
- Là một dãy các câu lệnh được bao bởi các dấu { và }
- Máy coi một khối lệnh tương tự như một lệnh riêng lẻ, chỗ nào viết được một lệnh riêng lẻ cũng có quyền đặt vào đó một khối lệnh. Việc bắt đầu một khối lệnh { và kết thúc một khối lệnh } tương tự như câu lệnh hợp thành trong Pascal sử dụng cặp từ khoá begin...end.
- Đầu mỗi khối lệnh có thể đặt các khai báo biến, mảng...
- Các khối lệnh có thể lồng nhau
- Các biến được khai báo trong khối lệnh nào thì chỉ có hiệu lực trong khối đó.
- Khi máy kết thúc phiên làm việc với khối lệnh nào thì tất cả các biến cục bộ bên
trong khối lệnh đó đều bị giải phóng.
2.3 Biểu thức và Các phép toán
2.3.1 Phép toán số học hai ngôi
Các phép toán số học hai ngôi được thống kê ở bảng sau:
Phép toán
Ý nghĩa
Phép cộng
Phép trừ
Phép nhân
Phép chia
Phép lấy phần dư
Ví dụ 2+4=6
2-3=-1 4*2=8 5/3=1 6/2=0
+
-
*
/
% Chú ý:
- Nếu phép chia hai toán hạng đều nguyên thì phép chia cho kết quả là phần nguyên của thương hai toán hạng đó.
- Nếu một trong hai toán hạng là kiểu thực thì lúc này kết quả của phép chia cho ta giá trị đúng.
- Phép toán lấy phần dư % chỉ áp dụng cho trường hợp hai toán hạng là số nguyên.
2.3.2.Phép quan hệ và logic
Downloaded by Golden Arowana ([email protected])
8
Phép toán quan hệ
>
>=
<
<=
==
!=
Ý nghĩa
Phép so sánh lớn hơn
Phép so sánh lớn hơn hay bằng
Phép so sánh nhỏ hơn
Phép so sánh nhỏ hơn hay bằng
Phép so sánh bằng nhau
Phép so sánh khác nhau
Ví dụ
Kết quả
lOMoARcPSD|9997659
Trong ngôn ngữ lập trình C coi mọi giá trị khác không là đúng(“TRUE”) và mọi giá trị bằng không là sai(“FALSE”)
Các phép toán quan hệ sau đây cho kết quả là 1 nếu điều khiện được thoả mãn và bằng 0 trong trường hợp ngược lại:
1>2
2>=2
3<3
4<2
4==5
2!=7
0
1
0
0
0
1
Các phép toán logic được thể hiện dưới bảng sau:
Phép toán logic
!
&&
||
Ý nghĩa
Phép phủ định(not)
Phép và (and)
Phép hoặc(or)
Ví dụ
!(3>1)
(2>1)&&(5=2)
(4>3)||(1>8)
Kết quả
0
0
1
2.3.3. Sự chuyển đổi kiểu
Việc chuyển đổi kiểu dữ liểu trong C thường diễn ra tự động trong các
trường hợp
sau:
- Khi toán hạng trong một phép toán có kiểu khác nhau thì kiểu thấp hơn được
chuyển thành kiểu cao hơn: int->long->float->double
- Khi gán một giá trị kiểu này cho một biến(hay phần tử mảng) kiểu kia.
Ví dụ: int c;
c=2.45;/* c sẽ nhận giá trị là 2*/
- Khi truyền giá trị cho các đối số của hàm, trong câu lênh return của hàm.
Ngoài ra ta có thể chuyển từ một kiểu giá trị này sang một kiểu giá trị khác bất kỳ ta muốn bằng cách ép kiểu theo mẫu sau:
(Kiểi_dữ_liệu)biểu_thức Ví dụ:
float c=7.4; int n;
n=(int)c*3;/* khi đó n có giá trị 21*/
2.3.4 Phép tăng giảm
Downloaded by Golden Arowana ([email protected])
9
Chương 1 : Ôn lại về ngôn ngữ C theo chuẩn ANSI
1.1. Cấu trúc cơ bản của một chương trình C ................................................1 1.2. Các yếu tố cơ bản của ngôn ngữ C – ANSI ..............................................2 1.2.1 Bộ chữ viết..................................................................................2 1.2.2 Từ khoá .....................................................................................2 1.2.3 Tên...........................................................................................3 2.1.4 Một số kiểu dữ liệu cơ bản................................................................3 2.3 Biểu thức và Các phép toán .............................................................8 2.3.1 Phép toán số học hai ngôi .............................................................8 2.3.2.Phép quan hệ và logic .....................................................................9 2.3.3. Sự chuyển đổi kiểu........................................................................9 2.3.4 Phép tăng giảm ...........................................................................10 2.3.5 Câu lệnh gán ..............................................................................10 2.3.6. Biểu thức điều kiện.......................................................................11 2.4 Các toán tử điều khiển chương trình .....................................................11 2.4.1 Cấu trúc điều khiển if ....................................................................11 2.4.1.2 Cấu trúc rẽ nhánh if dạng khuyết.................................................... 11 2.4.1.2. Cấu trúc rẽ nhánh if dạng dầy đủ ...................................................11 2.4.2 Cấu trúc điều khiển switch .............................................................11 2.4.3 Cấu trúc lặp while ........................................................................12 2.4.4 Cấu trúc lặp do...while .................................................................. 12 2.4.5 Cấu trúc lặp for ...........................................................................12 2.5 Hàm, lập trình hướng hàm ................................................................13 2.5.1 Cách xây dựng một hàm .................................................................13 2.5.2 Sự hoạt động của một hàm ..............................................................13 2.5.2.1 Biến mảng động ........................................................................14 2.5.2.2 Biến mảng ngoài ........................................................................14 2.5.2.3 Biến mảng tĩnh .........................................................................14
Chương 2: Ôn lại về vi điều khiển AT89C51
2.1. Sơ đồ chân tín hiệu của 80C51/AT89C51........................................... 15 2.2. Sơ đồ khối ................................................................................16 2.3. Các thanh ghi chức năng đặc biệt. ....................................................17
Downloaded by Golden Arowana ([email protected])
83
lOMoARcPSD|9997659
2.4. Khối tạo thời gian và bộ đếm (Timer/Counter). ....................................24 2.5. Bộ nhớ chương trình và bộ nhớ dữ liệu nội trú..................................... 27 2.6. Nguyên lý truyền tin nối tiếp của AT89C51....................................... 30 2.5.6.3. Các tốc độ Baud ....................................................................34 2.5.6.4. Sử dụng Timer 1 để tạo ra các tốc độ Baud .....................................35 2.7. Cơ chế ngắt trong On-chip AT89C51 ................................................36 2.8 Kết nối cơ bản của vi điều khiển 8051 ................................................40
Chương 3 C cho vi điều khiển 8051
3.1 Keil C cho vi điều khiển ................................................................41 3.1.1 Những kiểu dữ liệu riêng của C51 ...................................................41 3.1.2 Hàm với phần định nghĩa mở rộng................................................... 43 3.2 Project 1 Led đơn .........................................................................45 3.2.1 Mạch và nguyên ly hoạt động......................................................... 45 3.2.2 Lập trình .................................................................................47 3.3 Project 2 dãy 8 Led đơn ..................................................................48 3.3.1 Nguyên lí hoạt động ....................................................................48 3.3.2 Lập trình ................................................................................48 3.3.3 Ðiều khiển ra cả cổng ..................................................................51 3.4 Project 3 điều khiển Led 7 thanh .......................................................54 3.4.1 Hình dạng và cấu tạo ..................................................................54 3.4.2 Nguyên lí hoạt động ...................................................................55 3.4.3 Lập trình ................................................................................55 3.5 Phím nhấn ................................................................................62 3.5.1 Ðếm số lần phím bấm giới hạn từ 0 đến 9 hiển thị ra led 7 thanh. .............62 3.5.1.1Nguyên lí hoạt động: ...............................................................63 3.5.1.2 Lập trình ..............................................................................63 3.5.2 Ðọc ma trận phím ................................................................................................65 3.5.2.1 Nguyên lí quét phím: .......................................................................................65 3.5.2.2 Lập trình ...........................................................................................................66 3.6 Ghép nối với LCD .................................................................................................68 3.6.1 Nguyên lý hoạt động của LCD ...........................................................................69 3.6.2 Mã (Hex) Lệnh đến thanh ghi của LCD ............................................................69
Downloaded by Golden Arowana ([email protected])
84
lOMoARcPSD|9997659
3.6.3 Lập trình ..............................................................................................................70 3.7 Điều khiển động cơ DC .........................................................................................74 3.7.1 Mạch nguyên ly ..................................................................................................74 3.7.2 Lập trình ..............................................................................................................75 3.8 Ghép nối Matrix Led .............................................................................................79 3.8.1 Sơ đồ cấu tạo ...................................................................................................79 3.8.2 Sơ đồ kết nối Matrix Led 8x8 .........................................................................79 3.8.3 Nguyên lí hoạt động ...........................................................................................80 3.8.4 Lập trình .............................................................................................................81
lOMoARcPSD|9997659
Trong ngôn ngữ lập trình C đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và thực). Toán tử tăng ++ sẽ thêm 1 vào toán hạng của nó, toán tử giảm – sẽ trừ đi 1.
Do Drive thay đổi chính sách, nên một số link cũ yêu cầu duyệt download. các bạn chỉ cần làm theo hướng dẫn.
Password giải nén nếu cần: ket-noi.com | Bấm trực tiếp vào Link để tải:
You must be registered for see links
Last edited by a moderator: