1. Trang chủ
  2. » Công Nghệ Thông Tin

Đề cương bài giảng Lập trình điều khiển thiết bị - ĐH Sư Phạm Kỹ Thuật Hưng Yên

103 37 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 103
Dung lượng 2,47 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

(NB) Đề cương bài giảng Lập trình điều khiển thiết bị gồm các nội dung chính được trình bày như sau: Tổng quan về lập trình điều khiển thiết bị, ngôn ngữ lập trình C#, sử dụng form và các điều khiển cơ bản, sử dụng các điều khiển xử lý hình ảnh và thời gian, tạo mô phỏng thiết bị điều khiển và chuyển động tịnh tiến

Trang 2

MỤC LỤC

MỤC LỤC 1

Bài 1 6

TỔNG QUAN VỀ LẬP TRÌNH ĐIỀU KHIỂN THIẾT BỊ 6

1.1 Lập trình điều khiển thiết bị từ máy 6

1.2 Giới thiệu các giao diện truyền thông trên máy tính 6

1.3 Các ngôn ngữ lập trình 7

1.4 Lập trình điều khiển trong Windows Form 8

1.4.1 Thiết kế giao diện 8

1.4.2 Sử dụng các điều khiển 9

1.4.3 Sử dụng các thư viện 9

Bài 2 10

NGÔN NGỮ LẬP TRÌNH C# 10

2.1 Cấu trúc chương trình 11

2.2 Kiểu dữ liệu 12

2.3 Biến, hằng và cách khai báo 16

2.3.1 Biến 16

2.3.2 Hằng 18

2.4 Các phép toán 21

2.4.1 Phép toán số học 21

2.4.2 Phép toán quan hệ 22

2.4.3 Phép toán logic 22

2.4.4 Phép toán tăng giảm 23

2.4.5 Thứ tự ưu tiên các phép toán 24

2.5 Biểu thức 25

2.5.1 Biểu thức số học 25

2.5.2 Biểu thức logic 26

2.5.3 Biểu thức điều kiện 26

2.5.4 Biểu thức gán 27

2.5.5 Biểu thức ép kiểu 27

2.6 Cấu trúc rẽ nhánh 29

2.6.1 Cấu trúc rẽ nhánh if 29

2.6.2 Cấu trúc rẽ nhánh switch 34

2.7 Cấu trúc lặp while, do while 37

2.7.1 Cấu trúc lặp While 37

Trang 3

2.7.2 Cấu trúc lặp do while 38

2.8 Cấu trúc lặp for và một số lệnh điều khiển khác 41

2.8.1 Cấu trúc lặp for 41

2.8.1 Cấu trúc lặp foreach 46

2.8.1 Các lệnh điều khiển khác 47

Bài 3 47

SỬ DỤNG FORM VÀ CÁC ĐIỀU KHIỂN CƠ BẢN 47

3.1 Form 47

3.1.1 Chức năng 47

3.1.2 Một số thuộc tính thường dùng 48

3.1.3 Một số sự kiện thường dùng 51

3.1.4 Ví dụ minh họa 52

3.2 Labels 54

3.3 Button 54

3.4 Texbox 55

3.5 ComboBox, ListBox 60

3.6 Checkbox, RadioButton 61

Bài 4 62

THỰC HÀNH SỬ DỤNG CÁC ĐIỀU KHIỂN CƠ BẢN 62

4.1 Mục tiêu 62

4.2 Các kiến thức lý thuyết liên quan 62

4.3 Nội dung luyện tập 62

Bài 5 62

SỬ DỤNG CÁC ĐIỀU KHIỂN XỬ LÝ HÌNH ẢNH 62

VÀ THỜI GIAN 62

5.1 PictureBox 62

5.2 ImageList 63

5.3 Timer 63

5.4 DateTimePicker 63

5.5 ListView 63

5.6 TreeView 64

5.7 ProgressBar 64

Bài 6 64

THỰC HÀNH SỬ DỤNG CÁC ĐIỀU KHIỂN XỬ LÝ HÌNH ẢNH VÀ THỜI GIAN 64

6.1 Mục tiêu 64

6.2 Các kiến thức lý thuyết liên quan 64

6.3 Nội dung luyện tập 64

Bài 7 65

KỸ THUẬT THIẾT KẾ GIAO DIỆN 65

7.1 Các nguyên tắc chung trong thiết kế giao diện 65

7.2 Thiết kế giao diện trong C# 65

7.3 Kỹ thuật thiết kế giao diện điều khiển hệ thống 66

Bài 8 66

THẢO LUẬN THIẾT KẾ GIAO DIỆN 66

Trang 4

8.1 Mục tiêu 66

8.2 Tổ chức 66

Bài 9 67

TẠO MÔ PHỎNG THIẾT BỊ ĐIỀU KHIỂN VÀ CHUYỂN ĐỘNG TỊNH TIẾN 67

9.1 Tạo mô phỏng thiết bị điều khiển 67

9.2 Các kỹ thuật tạo mô phỏng chuyển động tịnh tiến 67

9.2.1 Kỹ thuật thay đổi toạ độ 67

9.2.2 Kỹ thuật vẽ lại hình 67

9.3 Các ví dụ về tạo mô phỏng chuyển động tịnh tiến 68

Bài 10 68

THỰC HÀNH LẬP TRÌNH MÔ PHỎNG 68

THIẾT BỊ ĐIỀU KHIỂN 68

10.1 Mục tiêu 68

10.2 Các kiến thức lý thuyết liên quan 68

10.3 Nội dung luyện tập 68

Bài 11 69

TẠO MÔ PHỎNG CHUYỂN ĐỘNG QUAY 69

11.1 Các kỹ thuật tạo mô phỏng chuyển động quay 69

11.1.1 Kỹ thuật vẽ lại hình 69

11.1.2 Kỹ thuật thay hình 69

11.2 Các ví dụ về tạo mô phỏng chuyển quay 70

Bài 12 70

THỰC HÀNH LẬP TRÌNH MÔ PHỎNG 70

THIẾT BỊ CHUYỂN ĐỘNG TỊNH TIẾN 70

12.1 Mục tiêu 70

12.2 Các kiến thức lý thuyết liên quan 70

12.3 Nội dung luyện tập 70

Bài 13 71

CỔNG SONG SONG 71

13.1 Cơ bản về cổng song song 71

13.2 Kiến trúc phần cứng 72

13.3 Các thanh ghi 75

13.4 Ghép nối qua cổng song song 77

Bài 14 80

THỰC HÀNH LẬP TRÌNH 80

MÔ PHỎNG CHUYỂN ĐỘNG QUAY 80

14.1 Mục tiêu 80

14.2 Các kiến thức lý thuyết liên quan 81

14.3 Nội dung luyện tập 81

Bài 15 82

LẬP TRÌNH CỔNG SONG SONG 82

15.1 Cơ bản về lập trình cổng song song 82

15.2 Lập trình cổng song song trong một số ngôn ngữ 82

15.3 Lập trình cổng song song trong C# 82

Bài 16 84

THẢO LUẬN GHÉP NỐI THIẾT BỊ 84

Trang 5

QUA CỔNG SONG SONG 84

16.1 Mục tiêu 84

16.2 Tổ chức 84

Bài 17 84

THỰC HÀNH LẬP TRÌNH CỔNG SONG SONG 84

17.1 Mục tiêu 84

17.2 Các kiến thức lý thuyết liên quan 84

17.3 Nội dung luyện tập 85

Bài 18 85

CỔNG NỐI TIẾP 85

18.1 Giới thiệu chung về cổng nối tiếp 85

18.2 Kiến trúc phần cứng RS232 86

18.3 Giao thức truyền thông RS232 90

18.4 Một số chuẩn giao tiếp nối tiếp khác 91

18.4.1 RS422 91

18.4.2 Chuẩn RS423A 91

18.4.3 Chuẩn RS485 91

Bài 19 92

LẬP TRÌNH CỔNG NỐI TIẾP 92

19.1 Cơ bản về lập trình cổng nối tiếp 92

19.2 Cổng COM ảo 92

19.3 Lập trình cổng COM trong một số ngôn ngữ 92

19.4 Lập trình cổng COM trong C# 92

Bài 20 93

THỰC HÀNH CƠ BẢN LẬP TRÌNH TRUYỀN THÔNG QUA CỔNG NỐI TIẾP 93 20.1 Mục tiêu 93

20.2 Các kiến thức lý thuyết liên quan 93

20.3 Nội dung luyện tập 93

Bài 21 93

THẢO LUẬN GHÉP NỐI THIẾT BỊ QUA CỔNG NỐI TIẾP 93

21.1 Mục tiêu 93

21.2 Tổ chức 93

Bài 22 94

THỰC HÀNH LẬP TRÌNH TRUYỀN THÔNG GIỮA HAI THIẾT BỊ QUA CỔNG NỐI TIẾP 94

22.1 Mục tiêu 94

22.2 Các kiến thức lý thuyết liên quan 94

22.3 Nội dung luyện tập 94

Bài 23 94

MỘT SỐ GIAO DIỆN GHÉP NỐI KHÁC 94

23.1 Ghép nối qua cổng USB 94

23.1.1 Tổng quan 94

23.1.2 Kiến trúc 95

23.1.3 Đặc tính điện 98

23.1.4 Truyền dữ liệu nối tiếp qua cổng USB 98

23.1.5 Lập trình điều khiển 99

Trang 6

23.2 Các khe cắm mở rộng 99

23.2.1 Bus mở rộng 99

23.2.2 Ghép nối qua khe cắm mở rộng 99

23.3 Một số giao diện khác 99

Bài 24 100

THỰC HÀNH LẬP TRÌNH 100

ĐIỀU KHIỂN THIẾT BỊ QUA CỔNG NỐI TIẾP 100

24.1 Mục tiêu 100

24.2 Các kiến thức lý thuyết liên quan 100

24.3 Nội dung luyện tập 100

Bài 25 100

THỰC HÀNH LẬP TRÌNH ỨNG DỤNG TỔNG HỢP 100

25.1 Mục tiêu 100

25.2 Các kiến thức lý thuyết liên quan 101

25.3 Nội dung luyện tập 101

TÀI LIỆU THAM KHẢO 102

Trang 7

ĐỀ CƯƠNG BÀI GIẢNG HỌC PHẦN

LẬP TRÌNH ĐIỀU KHIỂN THIẾT BỊ

Bài 1

TỔNG QUAN VỀ LẬP TRÌNH ĐIỀU KHIỂN THIẾT BỊ

1.1 Lập trình điều khiển thiết bị từ máy

Nhiệm vụ lập trình điều khiển các thiết bị từ máy tính:

- Tạo giao diện người dùng: biểu diễn, mô phỏng các hoạt động cần thiết cho các thiết bị được điều khiển, thể hiện các số liệu được gửi từ thiết bị, gửi lệnh, dữ liệu đến thiết bị

- Thực hiện ghép nối, giao tiếp với các thiết bị thông qua các cổng giao tiếp của máy tính như: COM, LPT, USB,

- Thực hiện truyền thông với thiết bị, điều khiển thiết bị thông qua các giao thức làm việc chung của thiết bị và phần mềm điều khiển trên máy tính

1.2 Giới thiệu các giao diện truyền thông trên máy tính

Các giao diện truyền thông, ghép nối trên máy tính thường được dùng để giao tiếp và điều khiển thiết bị:

- Giao diện nối tiếp RS232 (COM): truyền thông theo giao thức chuẩn, dễ ghép nối, tốc độ thấp, nhiều thiết bị hỗ trợ giao tiếp vật lý cũng như giao thức truyền thông theo giao diện này Giao diện RS232 là một trong các giao diện được sử dụng phổ biến để ghép nối và điều khiển thiết bị

- Giao diện song song LPT: cổng LPT được thiết kế với mục đích chủ yếu

là ghép nối với máy in và để xuất dữ liệu in ấn cũng như điều khiển máy in Tuy nhiên với khả năng ghép nối và điều khiển lập trình, cổng này cũng có thể được sử dụng trong ghép nối và điều khiển các thiết bị khác Mặc dù là cổng song song nhưng tốc độ điều khiển, truyền dữ liệu trên cổng này cũng không cao, khó khăn trong giao tiếp vật lý cũng như lập trình điều khiển Trong thực tế ít được dùng để ghép nối các thiết bị khác

Trang 8

- Giao diện USB: đây là chuẩn truyền thông nối tiếp cho phép truyền với tốc độ cao và có khả năng tương thích tốt với nhiều loại thiết bị Cổng này hiện nay đang được sử dụng khá rộng rãi trong việc ghép nối và điều khiển các thiết bị từ máy tính

Cổng này có một số ưu điểm nối trội:

+ Tốc độ cao

+ Giao tiếp đơn giản

+ Dễ tương thích

+ Hỗ trợ nguồn 5V công suất nhỏ

- Một số giao diện khác: giao diện GAME (thường dùng ghép nối cần điều khiển để điều khiển chương trình trò chơi trên máy tính), các cổng vào ra trên Card âm thanh, các khe cắm mở rộng (ISA, PCI, )

1.3 Các ngôn ngữ lập trình

Tùy môi trường làm việc, phần cứng hệ thống sử dụng, người phát triển hệ thống có thể lựa chọn các ngôn ngữ lập trình khác nhau

Có nhiều ngôn ngữ lập trình cho phép thiết kế giao diện, truy cập các cổng

để tạo ra chương trình điều khiển hệ thống

Trên hệ điều hành MS-DOS: các ngôn ngữ lập trình như C/C++, Pascal, Assembly, điều có khả năng tạo ra chương chương trình điều khiển theo các yêu cầu nhất định Việc truy cập trực tiếp các cổng, thiết bị phần cứng trong hệ điều hành DOS là khá đơn giản Trong Pascal, ta có thể gửi dữ liệu ra cổng P nào đó bởi lệnh Port[p]:=<giá gtrị>; hay trong Assembly là các lệnh IN, OUT

để đọc hay ghi các cổng

Trên hệ điều hành Windows: phổ biến các ngôn ngữ lập trình trực quan, dể dùng như Visual Basic 6.0 (VB6), Visual C, bộ công cụ lập trình trên DotNet như C#, VB.Net, Các ngôn ngữ này có những thế mạnh riêng, tùy yêu cầu và môi trường làm việc mà lựa chọn cho phù hợp

Trang 9

1.4 Lập trình điều khiển trong Windows Form

1.4.1 Thiết kế giao diện

Giao diện người sử dụng là một trong số các thành phần quan trọng nhất của một ứng dụng Đối với người sử dụng, giao diện chính là ứng dụng; họ không cần chú ý đến thành phần mã thực thi bên dưới Ứng dụng của chúng ta

có thể phổ biến được hay không phụ thuộc nhiều vào giao diện

Thông qua giao diện, người dùng điều khiển hoạt động của chương trình Giao diện tốt sẽ giúp người dùng vận hành hệ thống dễ dàng, tốn ít thời gian, giảm các nhầm lẫn trong quá trình điều khiển đồng thời có thể tạo cảm giác thoại mái trong khi làm việc

Cần có khảo sát cẩn thận, nghiên cứu và ứng dụng các nguyên tắc trong thiết kế giao diện Việc thiết kế giao diện phải đặc biệt chú ý đến tính chất công việc, lĩnh vực hoạt động của phần mềm, đối tượng người sử dụng

Với phần mềm điều khiển thiết bị, ngoài các nguyên tắc cơ bản đối với việc thiết kế giao diện phần mềm nói chung, người phát triển hệ thống cần chú ý tới tính chất điều khiển thiết bị ghép nối với máy tính Giao diện thiết kế sao cho

có sự thống nhất với giao diện điều khiển vốn có trên thiết bị cần điều khiển Như vậy sẽ sẽ tạo sự thuận tiện, tận dụng được kiến thức kỹ năng vận hạnh hệ thống có sẵn của người dùng Thông qua giao diện người dùng không chỉ ra các lệnh điều khiển mà còn có thể quan sát được sự biến đổi của hệ thống được điều khiển Do vậy, giao diện cần có phần thể hiện trạng thái hoạt động của thiết bị được điều khiển

Từ các yêu cầu riêng biệt của hệ thống điều khiển, giao diện cần có khả năng mô phỏng các loại chuyển động, tạo ra được các công cụ điều khiển như nút bấm, núm xoay, công tắc, sao cho tương thích với bàn điều khiển của thiết bị (nếu có)

Vấn đề còn lại là điều khiển thiết bị hoạt động thông qua ghép nối với máy tính Để điều khiển, cần thiết phải làm chủ được cổng truyền thông trên máy tính được ghép nối thiết bị Đồng thời phải hiểu rõ và sử dụng được giao thức của thiết bị vào điều khiển, tạo dữ liệu gửi đi, phân tích thông tin nhận được từ thiết bị và thể hiện những thông tin cần thiết trên giao diện của phần mềm điều khiển

Trang 10

1.4.2 Sử dụng các điều khiển

Các điều khiển có sẵn trên các ngôn ngữ lập trình về cơ bản đáp ứng được các yêu cầu điều khiển hoạt động của máy tính Tuy nhiên với nhiệm vụ điều khiển một thiết bị phần cứng bên ngoài, các điều khiển này có thể chưa đáp ứng đủ yêu cầu của phần mềm điều khiển

Ngoài việc tận dụng các điều khiển có sẵn trong môi trường phát triển phần mềm của ngôn ngữ lựa chọn, người phát triển hệ thống điều khiển cần bổ sung thêm các điều khiển thích hợp cho phần mềm như các nút gạt, xoay, công tắc, trên cơ sở mô phỏng và tạo các điều khiển riêng Các điều khiển được mô phỏng về hình ảnh, cách thức hoạt động giống với thực tế trên thiết bị sẽ giúp quá trình học sử dụng, vận hành được thuận tiện, giảm các sai nhầm

1.4.3 Sử dụng các thư viện

Trong quá trình phát triển phần mềm điều khiển, nhiều thao tác can thiệp sâu đến hệ điều hành có thể không thực hiện được trong môi trường phát triển phần mềm ứng dụng thông thường Đôi khi vì lý do thời gian, chi phí mà người phát triển hệ thống sử dụng các thư viện có sẵn vào hệ thống của mình

Tùy ngôn ngữ, công cụ lập trình lựa chọn mà cách khai báo và sử dụng các thư viện này có sự khác biệt nhất định Ví dụ trong VB6, người lập trình có thể khai báo các hàm API được cung cấp trong các file thư viện DLL bởi lệnh Declare, trong C# là import,

Trang 11

Bài 2

NGÔN NGỮ LẬP TRÌNH C#

Ngôn ngữ C# khá đơn giản, dễ học, dễ dùng, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực thi những khái niệm lập trình hiện đại C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng Những tính chất đó hiện diện trong một ngôn ngữ lập trình hiện đại và được phát triển bởi Microsoft, là phần khởi đầu cho kế hoạch NET của họ Tên của ngôn ngữ bao gồm ký tự thăng theo Microsoft nhưng theo ECMA là C#, chỉ bao gồm dấu số thường Microsoft phát triển C# dựa trên C++ và Java C# được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, Delphi và Java

C# theo một hướng nào đó là ngôn ngữ lập trình phản ánh trực tiếp nhất đến NET Framework mà tất cả các chương trình NET chạy, và nó phụ thuộc mạnh

mẽ vào Framework này Các loại dữ liệu cơ sở là những đối tượng, hay được gọi là garbage-collected, và nhiều kiểu trừu tượng khác chẳng hạn như class, delegate, interface, exception, v.v, phản ánh rõ ràng những đặc trưng của NET runtime

So sánh với C và C++, ngôn ngữ này bị giới hạn và được nâng cao ở một vài đặc điểm nào đó, nhưng không bao gồm các giới hạn sau đây:

Các con trỏ chỉ có thể được sử dụng trong chế độ không an toàn Hầu hết các đối tượng được tham chiếu an toàn, và các phép tính đều được kiểm tra tràn bộ đệm Các con trỏ chỉ được sử dụng để gọi các loại kiểu giá trị; còn những đối tượng thuộc bộ thu rác (garbage-collector) thì chỉ được gọi bằng cách tham chiếu

+ Các đối tượng không thể được giải phóng tường minh

+ Chỉ có đơn kế thừa, nhưng có thể cài đặt nhiều interface trừu tượng (abstract interfaces) Chức năng này làm đơn giản hóa sự thực thi của thời gian thực thi

+ C# thì an-toàn-kiểu (typesafe) hơn C++

Trang 12

+ Cú pháp khai báo mảng khác nhau("int[] a = new int[5]" thay vì "int a[5]")

+ Kiểu thứ tự được thay thế bằng tên miền không gian (namespace)

static void Main( )

{

// Các câu lệnh }

Dạng 2: (Có tham số)

static void Main(string[] tên_biến)

{

// Các câu lệnh }

Trang 13

-Chú ý: Nếu trong một chương trình C# mà không có hàm Main đặt trong một lớp nào đó thì chương trình C# này không thể thực hiện được

C# là ngôn ngữ lập trình mạnh về kiểu dữ liệu, một ngôn ngữ mạnh về kiểu

dữ liệu là phải khai báo kiểu của mỗi đối tượng khi tạo (kiểu số nguyên, số thực, kiểu chuỗi, kiểu điều khiển ) và trình biên dịch sẽ giúp cho người lập

Trang 14

trình không bị lỗi khi chỉ cho phép một loại kiểu dữ liệu có thể được gán cho các kiểu dữ liệu khác Kiểu dữ liệu của một đối tượng là một tín hiệu để trình biên dịch nhận biết kích thước của một đối tượng (kiểu int có kích thước là 4 byte) và khả năng của nó (như một đối tượng button có thể vẽ, phản ứng khi nhấn, )

Tương tự như C++ hay Java, C# chia thành hai tập hợp kiểu dữ liệu chính: Kiểu xây dựng sẵn (built-in) mà ngôn ngữ cung cấp cho người lập trình và kiểu được người dùng định nghĩa (user-defined) do người lập trình tạo ra

C# phân tập hợp kiểu dữ liệu này thành hai loại: Kiểu dữ liệu giá trị (value)

và kiểu dữ liệu tham chiếu (reference) Việc phân chi này do sự khác nhau khi lưu kiểu dữ liệu giá trị và kiểu dữ liệu tham chiếu trong bộ nhớ Đối với một kiểu dữ liệu giá trị thì sẽ được lưu giữ kích thước thật trong bộ nhớ đã cấp phát

là stack Trong khi đó thì địa chỉ của kiểu dữ liệu tham chiếu thì được lưu trong stack nhưng đối tượng thật sự thì lưu trong bộ nhớ heap

Nếu chúng ta có một đối tượng có kích thước rất lớn thì việc lưu giữ chúng trên bộ nhớ heap rất có ích, trong chương 4 sẽ trình bày những lợi ích và bất lợi khi làm việc với kiểu dữ liệu tham chiếu, còn trong chương này chỉ tập trung kiểu dữ kiểu cơ bản hay kiểu xây dựng sẵn

Ghi chú: Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá trị ngoại trừ các đối tượng và chuỗi Và tất cả các kiểu do người dùng định nghĩa ngoại trừ kiểu cấu trúc đều là kiểu dữ liệu tham chiếu

Ngoài ra C# cũng hỗ trợ một kiểu con trỏ C++, nhưng hiếm khi được sử dụng, và chỉ khi nào làm việc với những đoạn mã lệnh không được quản lý (unmanaged code) Mã lệnh không được quản lý là các lệnh được viết bên ngoài nền MS.NET, như là các đối tượng COM

Kiểu dữ liệu xây dựng sẵn: Ngôn ngữ C# đưa ra các kiểu dữ liệu xây dựng sẵn rất hữu dụng, phù hợp với một ngôn ngữ lập trình hiện đại, mỗi kiểu dữ liệu được ánh xạ đến một kiểu dữ liệu được hỗ trợ bởi hệ thống xác nhận ngôn ngữ chung (Common Language Specification: CLS) trong MS.NET Việc ánh

xạ các kiểu dữ liệu nguyên thuỷ của C# đến các kiểu dữ liệu của NET sẽ đảm bảo các đối tượng được tạo ra trong C# có thể được sử dụng đồng thời với các đối tượng được tạo bởi bất cứ ngôn ngữ khác được biên dịch bởi NET, như VB.NET Mỗi kiểu dữ liệu có một sự xác nhận và kích thước không thay đổi, không giống như

Trang 15

C++, int trong C# luôn có kích thước là 4 byte bởi vì nó được ánh xạ từ kiểu Int32 trong NET

Sau đây chúng ta đi tìm hiểu chi tiết một sô kiểu dữ liệu dựng sẵn có trong C#:

2.2.1 Kiểu nguyên

Dùng để lưu trữ các giá trị nguyên trong giới hạn cho phép tuỳ thuộc vào từng kiểu dữ liệu nguyên cụ thể Trong ngôn ngữ C# có một số kiểu dữ liệu nguyên sau:

byte Kiểu NET Mô tả

short 2 Int16 Số nguyên có dấu giá trị từ -32768 đến

32767

2.147.483.647

long 8 Int64 Kiểu số nguyên có dấu có giá trị trong

khoảng : -9.223.370.036.854.775.808 đến 9.223.372.036.854.775.807

18,446,744,073,709,551,615

Thông thường để chọn một kiểu dữ liệu nguyên để sử dụng như short, int hay long thường dựa vào độ lớn của giá trị muốn sử dụng Ví dụ, một biến ushort có thể lưu giữ giá trị từ 0 đến 65.535, trong khi biến ulong có thể lưu giữ giá trị từ 0 đến 18,446,744,073,709,551,615, do đó tùy vào miền giá trị của phạm vi sử dụng biến mà chọn các kiểu dữ liệu thích hợp nhất Kiểu dữ liệu int thường được sử dụng nhiều nhất trong lập trình vì với kích thước 4 byte của nó cũng đủ để lưu các giá trị nguyên cần thiết

Kiểu số nguyên có dấu thường được lựa chọn sử dụng nhiều nhất trong kiểu

số trừ khi có lý do chính đáng để sử dụng kiểu dữ liệu không dấu

Cách tốt nhất khi sử dụng biến không dấu là giá trị của biến luôn luôn dương, biến này thường thể hiện một thuộc tính nào đó có miền giá trị dương

Trang 16

Ví dụ khi cần khai báo một biến lưu giữ tuổi của một người thì ta dùng kiểu byte (số nguyên từ 0-255) vì tuổi của người không thể nào âm được

decimal 8 Decimal Có độ chính xác đến 28 con số và giá trị

thập phân, được dùng trong tính toán tài chính, kiểu này đòi hỏi phải có hậu tố “m” hay “M” theo sau giá trị

Kiểu float, double, và decimal đưa ra nhiều mức độ khác nhau về kích thước cũng như độ chính xác.Với thao tác trên các phân số nhỏ thì kiểu float là thích hợp nhất Tuy nhiên lưu ý rằng trình biên dịch luôn luôn hiểu bất cứ một

số thực nào cũng là một số kiểu double trừ khi chúng ta khai báo rõ ràng Để gán một số kiểu float thì số phải có ký tự f theo sau

float soFloat = 24f;

2.2.3 Kiểu ký tự

Kiểu ký tự được thể hiện bằng kiểu char, biểu diễn cho các ký tự mã Unicode gồm các chữ cái, chữ số và các ký tự đặc biệt Kiểu char có 65536(216) ký tự trong tập mã Unicode 16 bit Mã của 128 ký tụ đầu của tập Unicode hoàn toàn trùng với mã của 128 ký tự trong tập mã ASCII 7-bit và mã của 256 ký tự ban đầu hoàn toàn tương ứng với 256 ký tự của tập mã ISO Latin-1 8-bit

Một hằng ký tự được bao trong dấu nháy đơn

Trang 17

char k=’c’;

Kiểu C# Số byte Kiểu NET Mô tả

2.2.4 Kiểu logic

Dùng để biểu diễn các giá trị logic và chỉ chứa một trong hai giá trị true và false

Kiểu C# Số byte Kiểu NET Mô tả

Đây là cách chung để khởi tạo một chuỗi ký tự với giá trị hằng:

string chuoi = “Xin chao”;

2.3 Biến, hằng và cách khai báo

2.3.1 Biến

Biến là yếu tố cơ bản của bất kỳ ngôn ngữ máy tính nào Biến là vùng trống trong bộ nhớ máy tính dành cho một kiểu dữ liệu nào đó và có đặt tên Các biến trong bộ nhớ ở các thời điểm khác nhau có thể cất giữ các giá trị khác nhau Trước khi sử dụng một biến nào đó phải khai báo nó Chính quy khai báo:

Trang 18

• Kiểu 1: Khai báo biến không có giá trị khởi đầu

char ch=’A’; hoặc char ch=’\u0041’

• Chú ý: Trong C# trước khi sử dụng một biến thì biến đó phải được khởi gán

một giá trị cụ thể, nếu không chương trình dịch sẽ báo lỗi

Trang 19

là DoSoi và DoDong, nhưng không cho phép giá trị của hai biến này bị thay đổi hay bị gán Để ngăn ngừa việc gán giá trị khác, ta phải sử dụng biến kiểu hằng

Trang 20

b) Hằng số thực

Được viết theo hai cách sau:

- Dạng thập phân gồm: Phần nguyên, dấu chấm thập phân, phần thập phân

c) Hằng ký tự

Là một ký hiệu trong bảng mã Unicode được đặt trong hai dấu nháy đơn Giá trị của hằng kí tự chính là mã Unicode của kí hiệu

Ví dụ: Hằng ‘A’ có giá trị là 65

 Chú ý: Hằng ký tự biểu thị mã của ký tự đó trong bảng mã Unicode 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ụ:

(char) ((int)'A'+ 10) Hằng ký tự còn có thể được viết theo cách: ‘\uc1c2c3c4’ trong đó c1c2c3c4

là một số hệ 16 mà giá trị của nó chính là mã Unicode của ký tự cần biểu diễn

Ví dụ: ‘A’ hay ‘\u0041’

Ký tự ‘A’ có giá trị 65 trong bảng Unicode, đổi giá trị 65 hệ thập phân sang

hệ thập lục phân ta được giá trị là 41

Một số ký tự đặc biệt:

\\ Dấu gạch chéo ngược

Trang 21

\t Nhảy cách ngang, ký tự tab

const kieu_du_kieu ten_hang = gia_tri_hang;

Một hằng phải được khởi tạo khi khai báo, và chỉ khởi tạo duy nhất một lần trong suốt chương trình và không được thay đổi

Ví dụ: const int DOSOI = 100;

Trong khai báo trên, 100 là một hằng số và DOSOI là tên hằng có kiểu nguyên Ví dụ: minh họa việc sử dụng những biểu tượng hằng

class HangSo

{

static void Main()

{

const int DOSOI = 100; // Độ C

const int DODONG = 0; // Độ C

System.Console.WriteLine( “Do dong cua nuoc {0}”, DODONG );

System.Console.WriteLine( “Do soi cua nuoc {0}”, DOSOI );

}

}

-

 Kết quả:

Do dong cua nuoc 0

Do soi cua nuoc 100

Trang 22

- Phép toán % trả về phần dư của phép chia

Trang 23

2.4.2 Phép toán quan hệ

Những toán tử quan hệ được dùng để so sánh giữa hai giá trị, và sau

đó trả về kết quả là một giá trị logic kiểu bool (true hay false) Ví dụ toán tử

so sánh lớn hơn (>) trả về giá trị là true nếu giá trị bên trái của toán tử lớn hơn giá trị bên phải của toán tử Do vậy 5 > 2 trả về một giá trị là true, trong khi 2 > 5 trả về giá trị false

Các toán tử quan hệ trong ngôn ngữ C# được trình bày ở bảng bên dưới

! Phép phủ định một ngôi (not) !(3>1) false

&&

Liên kết hai biểu thức logic Phép và (and) Giá trị bằng 1 khi cả 2 toán hạng có giá trị 1

(2>1)&&(5=2) false

||

Liên kết hai biểu thức logic

Phép hoặc (or) Giá trị biểu thức bằng 1 khi một trong hai toán hạng bằng 1

(4>3)||(1>8) true

Trang 24

Bảng giá trị của các phép toán logic

X Y X && Y X || Y ! X

2.4.4 Phép toán tăng giảm

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 kiểu (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

Dấu phép toán ++ và có thể đứng trước hoặc đứng sau toán hạng Như vậy ta có thể viết: ++n, n++, n, n

Sự khác nhau của ++n và n++ ở chỗ: Trong phép toán n++ thì n tăng sau khi giá trị của nó được sử dụng, còn trong ++n thì giá trị của n tăng trước khi giá trị của nó được sử dụng Tương tự đối với n và n

Ví dụ: giả sử trước mỗi phép tính int i=3, j=15;

i=++j; j=j+1; i=j; i = ?

j = ? i=j++; i=j; j=j+1; i = ?

Trang 25

j = i++ +5; j=i+5; i=i+1; i = ?

j = ?

2.4.5 Thứ tự ưu tiên các phép toán

Trình biên dịch phải xác định thứ tự thực hiện các toán tử trong trường hợp một biểu thức có nhiều phép toán, giả sử, có biểu thức sau:

var1 = 5+7*3;

Biểu thức trên có ba phép toán để thực hiện bao gồm (=, +,*) Ta thử xét các phép toán theo thứ tự từ trái sang phải, đầu tiên là gán giá trị 5 cho biến var1, sau đó cộng 7 vào 5 là 12 cuối cùng là nhân với 3, kết quả trả về là 36, điều này thật sự có vấn đề, không đúng với mục đích yêu cầu của chúng ta

Do vậy việc xây dựng một trình tự xử lý các toán tử là hết sức cần thiết

Các luật về độ ưu tiên xử lý sẽ bảo trình biên dịch biết được toán tử nào được thực hiện trước trong biểu thức.Tương tự như trong phép toán đại

số thì phép nhân có độ ưu tiên thực hiện trước phép toán cộng, do vậy 5+7*3 cho kết quả là 26 đúng hơn kết quả 36 Và cả hai phép toán cộng và phép toán nhân điều có độ ưu tiên cao hơn phép gán Như vậy trình biên dịch sẽ thực hiện các phép toán rồi sau đó thực hiện phép gán ở bước cuối cùng Kết quả đúng của câu lệnh trên là biến var1 sẽ nhận giá trị là 26

Trong ngôn ngữ C#, dấu ngoặc được sử dụng để thay đổi thứ tự xử lý, điều này cũng giống trong tính toán đại số Khi đó muốn kết quả 36 cho biến var1 có thể viết:

Trang 26

Các phép toán được liệt kê cùng loại sẽ có thứ tự theo mục thứ thự của bảng: thứ tự trái tức là độ ưu tiên của các phép toán từ bên trái sang, thứ tự phải thì các phép toán có độ ưu tiên từ bên phải qua trái Các toán tử khác loại thì có độ ưu tiên từ trên xuống dưới, do vậy các toán tử loại cơ bản sẽ có

độ ưu tiên cao nhất và phép toán gán sẽ có độ ưu tiên thấp nhất trong các toán tử

Trang 27

2.5.2 Biểu thức logic

Biểu thức logic đó là sự kết hợp giữa các toán hạng với các toán tử(toán

tử số học, toán tử quan hệ, toán tử logic) v à kết quả cho ta là một giá trị logic Biểu thức logic được dùng làm điều kiện trong các cấu trúc điều khiển(if, while, ) và một số trường hợp khác

Ví dụ: (1>=2)&&(5==4)

2.5.3 Biểu thức điều kiện

Hầu hết các toán tử đòi hỏi có một toán hạng như toán tử (++, ) hay hai toán hạng như (+,-,*,/, ) Tuy nhiên, C# còn cung cấp thêm một toán tử

có ba toán hạng (?:) Toán tử này có cú pháp sử dụng như sau:

<Biểu thức điều kiện > ? <Biểu thức thứ 1> : <Biểu thức thứ 2>

Toán tử này sẽ xác định giá trị của một biểu thức điều kiện, và biểu thức điều kiện này phải trả về một giá trị kiểu bool Khi điều kiện đúng thì <biểu thức thứ 1> sẽ được thực hiện, còn ngược lại điều kiện sai thì <biểu thức thứ 2> sẽ được thực hiện Có thể diễn giải theo ngôn ngữ tự nhiên thì toán tử này

có ý nghĩa : “Nếu điều kiện đúng thì làm công việc thứ nhất, còn ngược lại

điều kiện sai thì làm công việc thứ hai” Cách sử dụng toán tử ba ngôi này

Trang 28

2.5.4 Biểu thức gán

Trong C# dùng dấu “=” làm dấu phép gán Biểu thức gán có thể được thể hiện dưới các dạng như sau:

Biến = Biểu_thức Biến op = Biểu_thức

Cá ch viết dưới tương đương Biến = (biến) op (Biểu_thức) trong đó

op là một toán tử nào đó Giá trị của Biểu_thức sẽ được gán cho biến sau câu lệnh này

Ví dụ: x + = y tương đương với x = x+y

Nếu ta thêm dấu ; vào sau biểu thức gán sẽ thu được một câu lệnh gán Biểu thức gán có thể được sử dụng trong các phép toán và các câu lệnh như các biểu thức thông thường Chẳng hạn khi viết: a=b=5; thì điều đó

có nghĩa rằng gán giá trị của biểu thức b=5 cho biến a Kết quả là b=5 và a=5 Tương tự sau câu lệnh: x = (a=5) * (b=10); sẽ gán 5 cho a, 10 cho b và sau đó gán tiếp 50 cho x

2.5.5 Biểu thức ép kiểu

Những đối tượng của một kiểu dữ liệu này có thể được chuyển sang những đối tượng của một kiểu dữ liệu khác thông qua cơ chế chuyển đổi tường minh hay ngầm định Chuyển đổi nhầm định được thực hiện một cách

tự động, trình biên dịch sẽ thực hiện công việc này Còn chuyển đổi tường minh diễn ra khi chúng ta gán ép một giá trị cho kiểu dữ liệu khác

Trang 29

Việc chuyển đổi giá trị ngầm định được thực hiện một cách tự động

và đảm bảo là không mất thông tin và tuân theo chính quy sau:

Ví dụ: Chúng ta có thể gán một biến kiểu char cho một biến kiểu int,

trình biên dịch sẽ chuyển đổi kiểu một cách ngầm định từ kiểu char sang kiểu int

char x = ‘A’;

int y = x; // chuyển đổi ngầm định (y sẽ có giá trị 65)

Tuy nhiên, nếu chúng ta thực hiện chuyển đổi ngược lại thì trình biên dịch sẽ báo lỗi Trình biên dịch sẽ không thực hiện việc chuyển đổi ngầm định từ số kiểu int sang kiểu char

int y =65;

char x = y// Trình biên dịch không chuyển đổi ngầm định

Khi biên dịch trình biên dịch trả về thông báo lỗi:

char x = (char)y ; // Ép kiểu tường minh, trình biên dịch không báo lỗi

Trong một biểu thức mà có nhiều kiểu dữ liệu khác nhau, trước khi tính toán máy sẽ chuyển từ kiểu thấp hơn lên kiểu cao hơn theo sơ đồ như ở trên

Trang 30

y=4-x; /*Khi biên dịch sẽ bị lỗi, vì 4-x sẽ cho kiểu int và không thể gán cho biến kiểu short*/

short x=1, y;

y = (short )(4 - x);

y = Convert.ToInt16(4 - x); // kiểu short chính là int16

* Chú ý: Khi ép kiểu thì bản thân biểu thức không bị thay đối kiểu mà chỉ

có giá trị của biểu thức ép kiểu mới thay đổi

* btđk là một biểu thức cho giá trị logic

* Công_việc có thể là một lệnh đơn, một khối lệnh hay một cấu trúc điều khiển nào đó

Ví dụ:

if ( a>0)

Trang 31

Console.Write(a + “La so duong“) ;

• Sơ đồ cú pháp

• Nguyên tắc hoạt động: Đầu tiên máy tính toán giá trị của btđk Nếu btđk có

giá trị True thì máy tiến hành thực hiện Công_việc sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if Nếu btđk có giá trị là False thì máy bỏ qua việc thực hiện Công_việc trong câu lệnh if mà tiến hành thực hiện ngay các câu lệnh sau câu lệnh if

b/ Cấu trúc rẽ nhánh dạng đầy đủ

• Cú pháp câu lệnh

if (btđk) công_việc1;

else công_việc2;

Trong đó:

* if, else là từ khoá

* btđk là một biểu thức cho giá trị logic

btđk

True

Công việc

False

Trang 32

* Công_việc1,Công_việc2 có thể là một lệnh đơn, một cấu trúc điều khiển nào đó hay một khối lệnh

• Nguyên tắc hoạt động: Đầu tiên máy tính toán giá trị của btđk Nếu btđk có

giá trị True thì máy tiến hành thực hiện Công_việc1 sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if Nếu btđk có giá trị là False thì máy tiến hành thực hiện công_việc2 sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if

Ví dụ1: Lập chương trình giải phương trình bậc nhất dạng ax+b=0

Trang 35

case en: Khối_lệnh_n;[break;]

[default: Khối_lệnh_n+1; break;]

} Trong đó: + switch, case, default là các từ khoá

+ bieu_thuc: là một biểu thức cho giá trị nguyên hoặc là xâu

+ ei:là giá trị nguyên mà biểu thức có thể nhận được

+ Những phần đặt trong hai dấu [ và ] có thể có hoặc không

* Sự hoạt động của cấu trúc điều khiển switch phụ thuộc vào giá trị của

bieu_thuc

Khi giá trị này bằng ei máy sẽ nhảy tới khối lệnh có nhãn case ei và thực hiện Khối_lệnh_i Nếu Khối_lệnh_i là rỗng thì ta có thể đặt break sau Khối_lệnh_i hoặc không, với trường hợp không có break thì máy sẽ tiến hành nhảy xuống thực hiện Khối_lệnh_(i+1) Nếu Khối_lệnh_i khác rỗng(tức là có công việc phải thực hiện) thì sau Khối_lệnh_i ta phải đặt câu lệnh break Khi máy gặp câu lệnh break thì máy sẽ thoát khỏi cấu trúc switch và thực hiện các câu lệnh tiếp theo sau cấu trúc lệnh này

Khi giá trị của bieu_thuc khác tất cả các giá trị ei thì cách làm việc của máy lại phụ thuộc vào sự có mặt hay không có mặt của default Khi có default máy nhảy tới câu lệnh có nhãn default Khi không có default máy tiến hành thực hiện các câu lệnh sau cấu trúc này

Ví dụ 1: Viết chương trình nhập vào một số từ 1 đến 7 in ra thứ tương ứng

using System;

Trang 37

Ví dụ 2: Nhập vào một tháng của một năm bất kỳ sau đó cho biết tháng đó có bao

int month, year,sumday;

Console.Write("Nhap thang="); month = int.Parse(Console.ReadLine()); Console.Write("Nhap year="); year = int.Parse(Console.ReadLine());

case 11: sumday = 30; break;

case 2: if (year % 400==0 || (year % 4 == 0 && year % 100 != 0))

Trang 38

* btđk là một biểu thức cho giá trị logic

* Công_việc có thể là một lệnh đơn, một cấu trúc điều khiển nào đó hay một khối lệnh

* Sơ đồ cú pháp

• Sự hoạt động: Câu lệnh while được tiến hành lần lượt được tiến hành

theo các bước sau:

Bước 1: Tiến hành tính toán giá trị của btđk

Bước 2: Nếu biểu thức điều kiện có giá trị là False máy sẽ thoát khỏi chu trình và tiến hành thực hiện các câu lệnh sau câu lệnh while Nếu biểu thức điều kiện có giá trị là True máy sẽ tiến hành thực hiện Công_việc và quay về bước 1

btđkTrue

Công việc

False

Trang 39

Ví dụ 1: Nhập vào hai số nguyên bất kỳ và cho biết ước số chung lớn nhất

của hai số nguyên đó

}while(btđk);

Trong đó:

- while ,do là từ khoá

Trang 40

- btđk là một biểu thức cho giá trị logic

• Sơ đồ cú pháp

• Sự hoạt động: Câu lệnh do while được tiến hành lần lượt theo các bước

sau:

Bước 1: Thực hiện Công_việc

Bước 2: Sau khi thực hiện xong Công_việc máy tiến hành tính toán giá trị của btđk

+ Nếu btđk có giá trị True máy sẽ trở lại bước 1 để tiếp tục thực hiện vòng lặp mới của chu trình

+ Nếu btđk có giá trị bằng False máy sẽ ra khỏi chu trình và chuyển tới câu lệnh đứng sau cấu trúc do while

• Ví dụ áp dụng

Ví dụ 1: Bài toán gửi tiền tiết kiệm, giả sử ta có số tiền là a gửi vào ngân

hàng Hỏi sau bao nhiêu tháng ta thu được số tiền là b(b>a) biết rằng lãi xuất hàng tháng là 5%

e

Công việc;

False

Ngày đăng: 08/05/2021, 17:14

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Jan Axelson, "Paranell Port Complete", Lakeview Research LLC, 2007 Sách, tạp chí
Tiêu đề: Paranell Port Complete
[2] Jan Axelson, "Serial Port Complete", Lakeview Research LLC, 2007 Sách, tạp chí
Tiêu đề: Serial Port Complete
[3] Jan Axelson, "USB Complete", Lakeview Research LLC, 2001 Sách, tạp chí
Tiêu đề: USB Complete
[4] Compaq, Hewlett-Package, Intel, Lucent, Microsoft, NEC, Philips, "Universal Serial Bus Specification", Revision 2.0, 2000 Sách, tạp chí
Tiêu đề: Universal Serial Bus Specification
[5] Nguyễn Ngọc Bình Phương. Thái Thanh Phong. , "Lập trình Visual Basic 6.0", NXB Giao thông Vận tải, 2006 Sách, tạp chí
Tiêu đề: Lập trình Visual Basic 6.0
Nhà XB: NXB Giao thông Vận tải
[6] Khoa CNTT, Các đề cương bài giảng về lập trình C# Khác
[7] Bộ môn KTMT, Bài tập thực hành lập trình Điều khiển thiết bị Khác

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w