Giáo trình Lập trình C Nghề Điện tử Công nghiệp Cao đẳng (2018)

Giáo trình lập trình C cho ngành điện tử công nghiệp hệ cao đẳng. Tài liệu học tập lập trình C cơ bản đến nâng cao, dành cho sinh viên và kỹ sư điện tử.

Người đăng

Ẩn danh

Thể loại

Giáo trình

2018

180
2
0

Phí lưu trữ

45 Point

Mục lục chi tiết

LỜI NÓI ĐẦU

1. CHƯƠNG TRÌNH MÔ ĐUN

1.1. Bài 1 Giới thiệu về ngôn ngữ c

1.1.1. Ngôn ngữ lập trình

1.1.2. Giới thiệu về ngôn ngữ lập trình c

1.1.3. Môi trường lập trình turbo c

1.2. Bài 2 Đối tượng trong chương trình

1.3. Bài 3 Cấu trúc lệnh tuần tự

1.3.1. Lệnh gán và biểu thức

1.3.2. Thâm nhập vào thư viện chuẩn

1.3.3. Các hàm vào ra chuẩn

1.3.4. Đưa kết quả lên màn hình - hàm printf

1.3.5. Vào số liệu từ bàn phím - hàm scanf

1.3.6. Đưa kết quả ra máy in

1.4. Bài 4 Cấu trúc điều khiển

1.4.1. Cấu trúc có điều kiện

1.4.2. Lệnh nhảy không điều kiện - câu lệnh goto

1.4.3. Cấu trúc rẽ nhánh - câu lệnh switch

1.5. Bài 5 Cấu trúc lệnh lặp

1.5.1. Cấu trúc lặp với for và while

1.5.2. Chu trình do-while

1.5.3. Câu lệnh break

1.5.4. Câu lệnh continue

1.6. Bài 6 Các kiểu dữ liệu có cấu trúc

1.7. Bài 7 Hàm

1.7.1. Hàm không cho các giá trị

1.7.2. Bộ tiền xử lý C

TÀI LIỆU THAM KHẢO

2. CHƯƠNG TRÌNH MÔ ĐUN

Tóm tắt

I. Tổng quan Giáo trình lập trình C Điện tử Công nghiệp Cao đẳng

Giáo trình lập trình C Điện tử Công nghiệp Cao đẳng là tài liệu nền tảng, giữ vai trò cốt lõi trong chương trình đào tạo kỹ sư và kỹ thuật viên thực hành. Nội dung không chỉ tập trung vào cú pháp của ngôn ngữ lập trình C mà còn định hướng ứng dụng trực tiếp vào việc điều khiển các hệ thống phần cứng. Đây là cầu nối quan trọng giữa lý thuyết lập trình và thực tiễn trong các ngành kỹ thuật điện tử viễn thôngngành tự động hóa. Mục tiêu chính của giáo trình là trang bị kiến thức để sinh viên có thể phát triển các hệ thống nhúng, điều khiển vi điều khiển, và tương tác với các mạch điện tử công nghiệp. Theo tài liệu của Trịnh Thị Hạnh (2018), C là một ngôn ngữ lập trình hệ thống mạnh mẽ, mềm dẻo, và sở hữu một thư viện hàm phong phú. Điều này làm cho nó trở thành lựa chọn ưu tiên để giải quyết các bài toán kỹ thuật phức tạp, đặc biệt là trong lĩnh vực giao tiếp phần cứng. Giáo trình chuẩn thường được cấu trúc theo một lộ trình học tập khoa học, bắt đầu từ những khái niệm cơ bản nhất và tiến dần đến các ứng dụng chuyên sâu. Lộ trình này đảm bảo người học xây dựng được một nền tảng vững chắc trước khi tiếp cận các đồ án môn học phức tạp. Việc nắm vững tài liệu này là điều kiện tiên quyết để thành công trong lĩnh vực điện tử hiện đại, nơi mà phần mềm và phần cứng tích hợp ngày càng chặt chẽ.

1.1. Vai trò của ngôn ngữ lập trình C trong hệ thống nhúng

Ngôn ngữ lập trình C đóng vai trò không thể thay thế trong việc phát triển hệ thống nhúng. Theo giáo trình gốc, C là “ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler”. Ưu điểm vượt trội của C là khả năng truy cập trực tiếp vào bộ nhớ và các thanh ghi phần cứng, cho phép lập trình viên kiểm soát tối ưu tài nguyên của vi điều khiển. Khác với các ngôn ngữ bậc cao hơn, C tạo ra mã máy (machine code) hiệu quả và có kích thước nhỏ gọn, một yếu tố cực kỳ quan trọng đối với các thiết bị có bộ nhớ và sức mạnh xử lý hạn chế. Hầu hết các nhà sản xuất vi điều khiển PIC, vi điều khiển 8051, vi điều khiển AVRlập trình C cho ARM đều cung cấp các trình biên dịch C chuyên dụng như Keil C. Điều này tạo ra một hệ sinh thái phát triển mạnh mẽ và đồng nhất, giúp việc chuyển đổi giữa các nền tảng phần cứng trở nên dễ dàng hơn. Nhờ tính linh hoạt và hiệu suất cao, C trở thành công cụ chủ lực để xây dựng firmware cho các thiết bị công nghiệp, từ việc điều khiển cảm biến công nghiệp đơn giản đến quản lý các dây chuyền sản xuất tự động phức tạp.

1.2. Cấu trúc một tài liệu lập trình C chuẩn cho ngành Điện tử

Một tài liệu lập trình C chuẩn cho sinh viên cao đẳng ngành Điện tử Công nghiệp thường được thiết kế theo một cấu trúc logic, đi từ tổng quan đến chi tiết. Phần mở đầu giới thiệu về lịch sử, đặc điểm của ngôn ngữ C và môi trường lập trình như Turbo C. Các chương tiếp theo tập trung vào các thành phần cốt lõi: biến, hằng, kiểu dữ liệu, và các toán tử. Sau khi nắm vững cú pháp cơ bản, giáo trình sẽ chuyển sang các cấu trúc lệnh tuần tự, cấu trúc điều khiển (if-else, switch-case) và cấu trúc lặp (for, while). Đây là những kiến thức nền tảng để xây dựng thuật toán và logic cho chương trình. Các phần nâng cao hơn sẽ đi sâu vào hàm, mảng, con trỏ và các kiểu dữ liệu có cấu trúc. Đặc biệt, đối với chuyên ngành điện tử, giáo trình sẽ dành một phần quan trọng để hướng dẫn các hàm vào/ra chuẩn, cách giao tiếp LCD, lập trình LED 7 đoạn, và tương tác với các thiết bị ngoại vi khác. Cuối cùng, các bài tập lập trình C có lời giảicode mẫu lập trình C được cung cấp để sinh viên có thể thực hành và củng cố kiến thức.

II. Những thách thức khi học lập trình C Điện tử Công nghiệp

Việc tiếp cận giáo trình lập trình C Điện tử Công nghiệp Cao đẳng đặt ra nhiều thách thức không nhỏ cho sinh viên. Khác với lập trình ứng dụng phần mềm thuần túy, lập trình nhúng đòi hỏi người học phải có tư duy đồng thời về cả logic phần mềm và nguyên lý hoạt động của phần cứng. Như trong lời nói đầu của tài liệu tham khảo, C được mô tả là “hơi khó hiểu” đối với người mới bắt đầu do sự “mềm dẻo” của nó. Một trong những rào cản lớn nhất là khái niệm con trỏ và quản lý bộ nhớ thủ công. Việc thao tác sai với con trỏ có thể dẫn đến những lỗi khó lường trên vi điều khiển, gây treo hệ thống hoặc hoạt động sai chức năng. Thách thức thứ hai là sự trừu tượng trong việc kết nối mã lệnh với hoạt động vật lý của mạch điện tử. Sinh viên thường gặp khó khăn khi hình dung làm thế nào một dòng lệnh C lại có thể làm một đèn LED nhấp nháy hay một động cơ quay. Sự thiếu hụt các thiết bị thực hành, bộ công cụ (kit) phát triển, và các công cụ mô phỏng như Proteus mô phỏng cũng là một trở ngại lớn. Hơn nữa, việc gỡ lỗi (debug) trên hệ thống nhúng phức tạp hơn nhiều so với trên máy tính, đòi hỏi kiến thức sâu về cả trình biên dịch, trình nạp và cấu trúc phần cứng. Vượt qua những thách thức này yêu cầu sự kiên trì, tư duy logic và khả năng kết hợp kiến thức liên ngành.

2.1. Khó khăn trong việc hiểu con trỏ và giao tiếp phần cứng

Con trỏ là một trong những khái niệm mạnh mẽ nhưng cũng khó nắm bắt nhất trong ngôn ngữ lập trình C. Đối với lập trình nhúng, việc sử dụng con trỏ để truy cập và thay đổi trực tiếp các ô nhớ, thanh ghi điều khiển của vi điều khiển là kỹ năng bắt buộc. Tuy nhiên, sự trừu tượng của địa chỉ bộ nhớ và các phép toán trên con trỏ thường gây bối rối cho người mới học. Một lỗi nhỏ trong việc cấp phát hoặc giải phóng bộ nhớ có thể gây ra những hành vi không mong muốn trên thiết bị. Bên cạnh đó, việc giao tiếp phần cứng thông qua các giao thức như UART, SPI, I2C đòi hỏi sự hiểu biết sâu sắc về datasheet của linh kiện. Lập trình viên phải cấu hình đúng các bit trong thanh ghi, xử lý các vấn đề về định thời (timing), và đồng bộ hóa dữ liệu giữa các thiết bị. Việc này khác biệt hoàn toàn với việc gọi các API cấp cao trong lập trình ứng dụng, đòi hỏi sự tỉ mỉ và chính xác tuyệt đối.

2.2. Từ lý thuyết đến thực hành lập trình C trên vi điều khiển

Khoảng cách giữa lý thuyết trong giáo trình lập trình C và việc triển khai trên mạch điện tử thực tế là một thách thức lớn. Sinh viên có thể viết thành thạo các thuật toán trên giấy hoặc trên trình biên dịch máy tính, nhưng khi nạp chương trình vào vi điều khiển, nó lại không hoạt động như mong đợi. Nguyên nhân có thể đến từ nhiều yếu tố phần cứng: kết nối sai dây, linh kiện hỏng, nhiễu điện, hoặc nguồn cấp không ổn định. Ngoài ra, sự khác biệt giữa các dòng vi điều khiển (PIC, AVR, 8051) về kiến trúc, tập lệnh và thanh ghi ngoại vi cũng yêu cầu người học phải liên tục thích ứng. Sử dụng phần mềm Proteus mô phỏng có thể giúp giảm bớt khó khăn này bằng cách cho phép kiểm tra logic chương trình trước khi triển khai trên phần cứng. Tuy nhiên, mô phỏng không thể tái tạo hoàn toàn các điều kiện vật lý thực tế. Do đó, kỹ năng đo đạc, phân tích mạch và gỡ lỗi phần cứng là không thể thiếu để trở thành một kỹ sư lập trình nhúng giỏi.

III. Hướng dẫn học lập trình C từ cơ bản theo giáo trình Cao đẳng

Để chinh phục giáo trình lập trình C Điện tử Công nghiệp Cao đẳng, cần có một phương pháp học tập hệ thống và bài bản. Cách tiếp cận hiệu quả là bám sát cấu trúc của các tài liệu chính thống, như giáo trình của Trường Cao đẳng nghề Việt Nam - Hàn Quốc. Bước đầu tiên và quan trọng nhất là phải nắm thật vững các khái niệm cơ bản. Thay vì sao chép code mẫu lập trình C, người học nên tự gõ lại từng dòng lệnh để hiểu rõ cú pháp, vai trò của từng từ khóa và cấu trúc của một chương trình. Việc cài đặt một môi trường phát triển tích hợp (IDE) như Keil C hoặc Turbo C và thực hành biên dịch chương trình "Hello World" là bước khởi đầu không thể bỏ qua. Tiếp theo, cần tập trung vào việc hiểu sâu các kiểu dữ liệu, biến, hằng và các toán tử. Đây là những viên gạch nền móng cho mọi chương trình. Sau khi đã tự tin với các kiến thức cơ bản, người học nên chuyển sang thực hành với các cấu trúc điều khiển và vòng lặp. Việc giải quyết các bài tập lập trình C có lời giải, từ đơn giản đến phức tạp, sẽ giúp rèn luyện tư duy thuật toán. Điều quan trọng là phải hiểu được luồng thực thi của chương trình, cách các lệnh if-else, switch-case, for, while điều hướng hoạt động của vi điều khiển. Quá trình này đòi hỏi sự kiên nhẫn và thực hành liên tục.

3.1. Bắt đầu với cú pháp và môi trường lập trình Keil C

Bước khởi đầu là làm quen với cú pháp cơ bản của ngôn ngữ lập trình C và thiết lập môi trường làm việc. Cú pháp của C khá cô đọng, chỉ bao gồm 32 từ khóa chuẩn. Người học cần nắm rõ cách khai báo biến, hàm, quy tắc đặt tên, và ý nghĩa của các dấu chấm phẩy, ngoặc nhọn. Môi trường Keil C là một lựa chọn phổ biến và mạnh mẽ cho lập trình nhúng, đặc biệt với các dòng vi điều khiển 8051 và ARM. Cần học cách tạo một project mới, viết mã nguồn trong trình soạn thảo, cấu hình các thông số cho vi điều khiển mục tiêu, và thực hiện quá trình biên dịch (compile) để tạo ra file HEX. Công cụ gỡ lỗi (debugger) và mô phỏng tích hợp trong Keil C cũng là một tính năng cực kỳ hữu ích, cho phép chạy chương trình từng bước, theo dõi giá trị của các biến và thanh ghi mà không cần đến phần cứng thực. Việc thành thạo môi trường này sẽ giúp quá trình phát triển và kiểm thử sản phẩm sau này trở nên hiệu quả hơn rất nhiều.

3.2. Nắm vững cấu trúc điều khiển và vòng lặp trong ngôn ngữ C

Cấu trúc điều khiển và vòng lặp là xương sống của mọi chương trình, quyết định logic và luồng hoạt động. Trong lập trình C cho hệ thống nhúng, chúng được sử dụng để ra quyết định dựa trên trạng thái của cảm biến hoặc nút nhấn. Lệnh if-else là cấu trúc cơ bản nhất để rẽ nhánh, thực thi một khối lệnh nếu điều kiện đúng và một khối lệnh khác nếu điều kiện sai. Lệnh switch-case là giải pháp hiệu quả để xử lý các trường hợp có nhiều lựa chọn, ví dụ như đọc giá trị từ một ma trận phím. Các cấu trúc vòng lặp như for, whiledo-while cho phép thực hiện lặp đi lặp lại một công việc. Ví dụ, vòng lặp for thường được dùng để quét LED 7 đoạn, trong khi vòng lặp while(1) tạo thành vòng lặp vô tận, là cấu trúc chính trong hầu hết các chương trình vi điều khiển để thiết bị hoạt động liên tục. Hiểu rõ khi nào nên sử dụng loại cấu trúc nào là chìa khóa để viết mã nguồn tối ưu và dễ bảo trì.

IV. Phương pháp lập trình C cho vi điều khiển Điện tử Công nghiệp

Sau khi nắm vững lý thuyết, việc áp dụng lập trình C vào vi điều khiển là bước quan trọng nhất. Phương pháp tiếp cận hiệu quả là học qua từng module chức năng của vi điều khiển, bắt đầu từ những ngoại vi đơn giản nhất. Module vào/ra cơ bản (GPIO - General Purpose Input/Output) thường là điểm khởi đầu. Sinh viên học cách cấu hình một chân (pin) của vi điều khiển là đầu vào (để đọc trạng thái nút nhấn) hoặc đầu ra (để điều khiển LED). Từ đó, có thể xây dựng các ứng dụng đơn giản như đèn chớp tắt, đèn giao thông. Bước tiếp theo là làm việc với các ngoại vi phức tạp hơn như Timer/Counter. Đây là thành phần cốt lõi để tạo ra các khoảng thời gian trễ chính xác, tạo xung PWM để điều khiển động cơ DC hoặc điều khiển độ sáng của đèn LED. Sau đó, việc học cách giao tiếp LCDlập trình LED 7 đoạn giúp xây dựng giao diện người dùng đơn giản cho thiết bị. Các giao thức truyền thông nối tiếp như UART, SPI, I2C là kiến thức bắt buộc để kết nối vi điều khiển với máy tính hoặc các module, IC khác. Cuối cùng, việc xử lý tín hiệu analog thông qua bộ chuyển đổi ADC và DAC mở ra khả năng tương tác với thế giới thực, đọc dữ liệu từ cảm biến công nghiệp như nhiệt độ, độ ẩm, ánh sáng. Mỗi bước đều cần kết hợp giữa đọc tài liệu lập trình C, datasheet của linh kiện và thực hành trên kit.

4.1. Kỹ thuật lập trình giao tiếp ngoại vi LCD LED động cơ

Giao tiếp với các thiết bị ngoại vi là ứng dụng phổ biến nhất của lập trình nhúng. Để hiển thị thông tin, giao tiếp LCD (ví dụ LCD 16x2) là một lựa chọn thông dụng. Lập trình viên cần gửi các lệnh điều khiển và dữ liệu theo đúng giao thức (4-bit hoặc 8-bit) đến các chân của LCD. Tương tự, lập trình LED 7 đoạn đòi hỏi kỹ thuật quét (multiplexing) để hiển thị nhiều chữ số trên một bộ chân I/O giới hạn, giúp tiết kiệm tài nguyên của vi điều khiển. Đối với các ứng dụng trong ngành tự động hóa, việc điều khiển động cơ DC là rất quan trọng. Thông thường, người ta sử dụng kỹ thuật điều chế độ rộng xung (PWM) để thay đổi tốc độ quay của động cơ. Tín hiệu PWM được tạo ra bởi module Timer/Counter của vi điều khiển và được khuếch đại qua một mạch cầu H (H-Bridge) trước khi đến động cơ. Nắm vững các kỹ thuật này là nền tảng để xây dựng các sản phẩm điện tử hoàn chỉnh.

4.2. Xử lý giao tiếp truyền thông nối tiếp UART SPI và I2C

Các giao thức truyền thông nối tiếp là phương tiện để các vi điều khiển và linh kiện điện tử "nói chuyện" với nhau. Giao tiếp UART (Universal Asynchronous Receiver-Transmitter) là giao thức điểm-đến-điểm đơn giản, thường được dùng để kết nối vi điều khiển với máy tính qua cổng COM ảo hoặc với các module GPS, Bluetooth. Giao tiếp SPI (Serial Peripheral Interface) là một giao thức đồng bộ, tốc độ cao, hoạt động theo mô hình chủ-tớ (master-slave), rất phù hợp để giao tiếp với các thẻ nhớ SD, màn hình đồ họa, và các loại cảm biến tốc độ cao. Giao tiếp I2C (Inter-Integrated Circuit) chỉ sử dụng hai dây (SDA và SCL) để kết nối nhiều thiết bị trên cùng một bus, lý tưởng cho việc giao tiếp với các IC cảm biến, bộ nhớ EEPROM trong một không gian mạch điện tử nhỏ gọn. Việc lập trình cho các giao thức này đòi hỏi phải cấu hình đúng tốc độ baud, khung truyền, và tuân thủ chặt chẽ timing diagram được mô tả trong datasheet.

V. Ứng dụng thực tiễn của lập trình C trong đồ án ngành Điện tử

Kiến thức từ giáo trình lập trình C Điện tử Công nghiệp Cao đẳng được thể hiện rõ nét nhất thông qua các đồ án môn học. Đây là cơ hội để sinh viên tổng hợp kiến thức, áp dụng vào giải quyết một bài toán thực tế và phát triển kỹ năng làm việc nhóm. Các đồ án không chỉ củng cố kỹ năng viết code mà còn rèn luyện khả năng thiết kế mạch điện tử, lựa chọn linh kiện, và gỡ lỗi hệ thống. Mức độ phức tạp của đồ án tăng dần theo trình độ của sinh viên. Ở cấp độ cơ bản, các dự án có thể là đồng hồ số hiển thị trên LED 7 đoạn, mạch đo nhiệt độ và hiển thị lên LCD, hoặc hệ thống đèn giao thông tự động. Ở cấp độ cao hơn, sinh viên có thể phát triển các hệ thống phức tạp hơn như máy đếm sản phẩm sử dụng cảm biến công nghiệp, robot dò đường, hoặc một trạm thời tiết mini thu thập dữ liệu và gửi về máy tính. Việc hoàn thành một đồ án không chỉ mang lại điểm số mà còn là một sản phẩm cụ thể, một minh chứng cho năng lực của sinh viên khi tìm kiếm việc làm. Các code mẫu lập trình C từ các dự án thành công trước đó là nguồn tham khảo quý giá, nhưng việc tự mình xây dựng giải pháp từ đầu mới thực sự mang lại giá trị học tập cao nhất.

5.1. Xây dựng mạch điện tử từ bài tập C có lời giải

Việc chuyển đổi từ các bài tập lập trình C có lời giải trong sách vở sang các mạch điện tử hoạt động là một bước tiến quan trọng. Các bài tập này thường cung cấp sẵn thuật toán và logic, nhiệm vụ của sinh viên là hiện thực hóa chúng trên phần cứng. Ví dụ, một bài tập yêu cầu viết chương trình điều khiển 8 LED sáng đuổi có thể được hiện thực hóa bằng một vi điều khiển 8051, 8 đèn LED và 8 điện trở hạn dòng. Sinh viên phải viết code, biên dịch bằng Keil C, sau đó sử dụng mạch nạp để nạp file HEX vào vi điều khiển. Quá trình này giúp hiểu rõ mối liên hệ giữa các port, các chân của vi điều khiển với các linh kiện bên ngoài. Sử dụng phần mềm Proteus mô phỏng trước khi lắp ráp mạch thật là một thói quen tốt, giúp phát hiện sớm các lỗi logic trong code hoặc lỗi thiết kế trong sơ đồ nguyên lý, tiết kiệm thời gian và chi phí.

5.2. Phát triển đồ án môn học ứng dụng trong ngành tự động hóa

Trong ngành tự động hóa, lập trình C cho hệ thống nhúng là kỹ năng không thể thiếu. Các đồ án môn học thường mô phỏng các hệ thống công nghiệp thu nhỏ. Ví dụ, một đồ án có thể là hệ thống phân loại sản phẩm theo màu sắc hoặc kích thước. Hệ thống này bao gồm một băng chuyền được điều khiển động cơ DC, các cảm biến màu sắc hoặc cảm biến tiệm cận, và các cơ cấu chấp hành như piston khí nén. Vi điều khiển sẽ là bộ não trung tâm, nhận tín hiệu từ cảm biến, xử lý thông tin và ra quyết định điều khiển cơ cấu chấp hành. Toàn bộ logic điều khiển được viết bằng ngôn ngữ lập trình C. Một dự án khác có thể là hệ thống giám sát và cảnh báo nhiệt độ trong lò sấy công nghiệp, sử dụng cảm biến công nghiệp và gửi dữ liệu về trung tâm qua giao tiếp UART. Những đồ án này giúp sinh viên làm quen với quy trình phát triển một sản phẩm tự động hóa hoàn chỉnh.

VI. Định hướng từ giáo trình C đến kỹ năng lập trình hệ thống nhúng

Hoàn thành giáo trình lập trình C Điện tử Công nghiệp Cao đẳng chỉ là bước khởi đầu trên con đường trở thành một kỹ sư lập trình hệ thống nhúng chuyên nghiệp. Ngôn ngữ C cung cấp một nền tảng vững chắc, nhưng thế giới công nghệ luôn vận động và đòi hỏi sự cập nhật liên tục. Để nâng cao năng lực cạnh tranh, sinh viên cần có một định hướng phát triển rõ ràng. Một hướng đi tự nhiên là chuyển tiếp lên ngôn ngữ C++. Mặc dù có cú pháp tương đồng, C++ mang đến sức mạnh của lập trình hướng đối tượng (OOP), cho phép xây dựng các dự án lớn, phức tạp và dễ bảo trì hơn. Một hướng phát triển khác, chuyên sâu hơn, là đi sâu vào kiến trúc của các dòng vi xử lý hiện đại, đặc biệt là lập trình C cho ARM. Kiến trúc ARM đang thống trị thị trường thiết bị di động và hệ thống nhúng hiệu năng cao. Việc học cách lập trình cho các dòng vi điều khiển ARM Cortex-M sẽ mở ra nhiều cơ hội việc làm hấp dẫn. Ngoài ra, tìm hiểu về Hệ điều hành thời gian thực (RTOS) như FreeRTOS là một bước tiến quan trọng. RTOS cho phép quản lý các tác vụ đa nhiệm một cách hiệu quả, một yêu cầu gần như bắt buộc trong các hệ thống nhúng phức tạp ngày nay. Con đường học tập là vô tận, nhưng với nền tảng C vững chắc, mọi kỹ năng nâng cao đều sẽ trở nên dễ tiếp cận hơn.

6.1. Từ C đến C Hướng đi cho lập trình hướng đối tượng

C++ có thể được xem là một phiên bản mở rộng của C, bổ sung thêm các tính năng của lập trình hướng đối tượng (OOP) như Lớp (Class), Đối tượng (Object), Kế thừa (Inheritance), và Đa hình (Polymorphism). Đối với các hệ thống nhúng ngày càng phức tạp, việc áp dụng OOP giúp quản lý code hiệu quả hơn. Thay vì sử dụng các biến toàn cục và các hàm rời rạc, lập trình viên có thể đóng gói dữ liệu và các hành vi liên quan vào trong một đối tượng. Ví dụ, có thể tạo một lớp Motor bao gồm các thuộc tính như tốc độ, chiều quay và các phương thức như start(), stop(), setSpeed(). Cách tiếp cận này làm cho mã nguồn trở nên rõ ràng, dễ tái sử dụng và dễ nâng cấp. Nhiều trình biên dịch cho vi điều khiển hiện đại đều hỗ trợ C++, mở ra một hướng phát triển mạnh mẽ cho các kỹ sư lập trình nhúng.

6.2. Nâng cao với lập trình C cho ARM và hệ điều hành thời gian thực

Kiến trúc ARM (Advanced RISC Machines) là tiêu chuẩn của ngành công nghiệp cho các hệ thống nhúng hiệu suất cao và tiết kiệm năng lượng. Việc học lập trình C cho ARM, đặc biệt là các dòng vi điều khiển STM32, NXP LPC, là một bước nâng cấp kỹ năng đáng giá. Lập trình ARM đòi hỏi sự hiểu biết về kiến trúc lõi Cortex-M, hệ thống bus, và cách cấu hình các ngoại vi phức tạp thông qua các thư viện HAL hoặc LL do nhà sản xuất cung cấp. Song song đó, việc tìm hiểu về Hệ điều hành thời gian thực (RTOS) là cực kỳ cần thiết. Một RTOS cho phép chia một chương trình lớn thành nhiều tác vụ (task) độc lập, mỗi tác vụ có một độ ưu tiên riêng. RTOS sẽ quản lý việc lập lịch để các tác vụ chạy xen kẽ, đảm bảo các công việc quan trọng (ví dụ như xử lý tín hiệu khẩn cấp từ cảm biến công nghiệp) luôn được ưu tiên thực thi đúng hạn. Kỹ năng kết hợp lập trình C, kiến trúc ARM và RTOS là bộ ba kỹ năng vàng cho một kỹ sư hệ thống nhúng chuyên nghiệp.

29/09/2025

Trích đoạn nội dung tài liệu

ỦY BAN NHÂN DÂN THÀNH PHỐ HÀ NỘI TRƯỜNG CAO ĐẲNG NGHỀ VIỆT NAM - HÀN QUỐC THÀNH PHỐ HÀ NỘI TRỊNH THỊ HẠNH (Chủ biên) NGUYỄN ANH DŨNG – TRẦN VĂN NAM GIÁO TRÌNH LẬP TRÌNH C Nghề: Điện tử công nghiệp Trình độ: Cao đẳng (Lưu hành nội bộ) Hà Nội - Năm 2018 LỜI NÓI ĐẦU Ngôn ngữ lập trình C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển các ứng dụng. Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất “mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn. Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới. Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức phức tạp.

Ngoài ra, C cũng cho phép người lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác. Tuy nhiên, điều mà người mới vừa học lập trình C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của C. Dù vậy, C được phổ biến khá rộng rãi và đã trở thành một công cụ lập trình khá mạnh, được sử dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện nay. Nhóm biên soạn đã tham khảo các tài liệu: “Lập trình C” dùng cho sinh viên các Trường Cao đẳng.

Tài liệu “Nhập ngôn ngữ lập trình C” và nhiều tài liệu khác. Mặc dù nhóm biên soạn đã có nhiều cố gắng nhưng không tránh được những thiếu sót. Rất mong đồng nghiệp và độc giả góp ý kiến để giáo trình hoàn thiện hơn. Xin chân thành cảm ơn! Hà Nội, ngày … tháng … năm 2018 Chủ biên: Trịnh Thị Hạnh 1 MỤC LỤC LỜI NÓI ĐẦU.

2 CHƯƠNG TRÌNH MÔ ĐUN. 4 Bài 1 Giới thiệu về ngôn ngữ c .1 Ngôn ngữ lập trình .2 Giới thiệu về ngôn ngữ lập trình c .3 Môi trường lập trình turbo c. 22 Bài 2 Đối tượng trong chương trình. 31 Bài 3 Cấu trúc lệnh tuần tự .1 Lệnh gán và biểu thức .2 Thâm nhập vào thư viện chuẩn .3 Các hàm vào ra chuẩn .4 Đưa kết quả lên màn hình - hàm printf .5 Vào số liệu từ bàn phím - hàm scanf .6 Đưa kết quả ra máy in.

39 Bài 4 Cấu trúc điều khiển .1 Cấu trúc có điều kiện .2 Lệnh nhảy không điều kiện - câu lệnh goto .3 Cấu trúc rẽ nhánh - câu lệnh switch. 49 Bài 5 Cấu trúc lệnh lặp .1 Cấu trúc lặp với for và while .2 Chu trình do-while .3 Câu lệnh break .4 Câu lệnh continue. 71 2 Bài 6 Các kiểu dữ liệu có cấu trúc .2 Hàm không cho các giá trị .4 Bộ tiền xử lý C. 155 TÀI LIỆU THAM KHẢO.

179 3 CHƯƠNG TRÌNH MÔ ĐUN Tên mô đun: Lập trình C Mã mô đun: MĐ26 Thời gian mô đun: 90 giờ; (Lý thuyết: 25 giờ; TH: 60 giờ; KT: 5 giờ) I. VỊ TRÍ TÍNH CHẤT CỦA MÔN HỌC - Vị trí: Là môn học được bố trí sau khi sinh viên học xong các môn chung, các môn học cơ sở chuyên ngành đào tạo chuyên môn nghề - Tính chất: Là môn học bắt buộc trong chương trình đào tạo nghề tin học II. MỤC TIÊU MÔ ĐUN Về kiến thức - Nắm được cú pháp của ngôn ngữ lập trình C - Sử dụng được môi trường lập trình C để soạn thảo, biên dịch và hiệu chỉnh chương trình Về kỹ năng - Viết và thực hiện chương trình trên máy tính Về năng lực tự chủ - Rèn luyện cho học sinh thái độ nghiêm túc, cẩn thận, chính xác trong học tập và thực hiện công việc III. NỘI DUNG MÔ ĐUN 1.Nội dung tổng quát phân bố thời gian: Thời gian STT Tên các bài trong mô đun Tổng Lý Thực Kiểm số thuyết hành tra 1.

Bài 1: Giới thiệu về ngôn ngữ c 9 4 5 0 2. Bài 2: Đối tượng trong chương trình 7 2 5 0 3. Bài 3: Cấu trúc lệnh tuần tự 7 2 5 0 4. Bài 4: Cấu trúc điều khiển 8 2 5 1 5.

Bài 5: Cấu trúc lệnh lặp 8 2 6 0 6. Bài 6: Các kiểu dữ liệu có cấu trúc 33 9 21 3 7. Bài 7: Hàm 18 4 13 1 Cộng 90 25 60 5 4 Bài 1 Giới thiệu về ngôn ngữ c Mục tiêu: - Cung cấp các khái niệm cơ bản về C - Sự ra đời và phát triển của ngôn ngữ C - Nắm được các chức năng cơ bản và môi trường lập trình của Turbo C Nội dung: 1.1 Ngôn ngữ lập trình 1.1 Khái niệm ngôn ngữ lập trình Ngôn ngữ lập trình là một ngôn ngữ dùng để viết chương trình cho máy tính. Ta có thể chia ngôn ngữ lập trình thành các loại sau: ngôn ngữ máy, hợp ngữ và ngôn ngữ cấp cao.

Ngôn ngữ máy (machine language): Là các chỉ thị dưới dạng nhị phân, can thiệp trực tiếp vào trong các mạch điện tử. Chương trình được viết bằng ngôn ngữ máy thì có thể được thực hiện ngay không cần qua bước trung gian nào. Tuy nhiên chương trình viết bằng ngôn ngữ máy dễ sai sót, cồng kềnh và khó đọc, khó hiểu vì toàn những con số 0 và 1. Hợp ngữ (assembly language): Bao gồm tên các câu lệnh và quy tắc viết các câu lệnh đó.

Tên các câu lệnh bao gồm hai phần: phần mã lệnh (viết tựa tiếng Anh) chỉ phép toán cần thực hiện và địa chỉ chứa toán hạng của phép toán đó. Ví dụ: INPUT a ; Nhập giá trị cho a từ bàn phím LOAD a ; Đọc giá trị a vào thanh ghi tổng A PRINT a; Hiển thị giá trị của a ra màn hình. INPUT b ADD b; Cộng giá trị của thanh ghi tổng A với giá trị b Trong các lệnh trên thì INPUT, LOAD, PRINT, ADD là các mã lệnh còn a, b là địa chỉ. Để máy thực hiện được một chương trình viết bằng hợp ngữ thì chương trình đó phải được dịch sang ngôn ngữ máy.

Công cụ thực hiện việc dịch đó được gọi là Assembler. Ngôn ngữ cấp cao (High level language): Ra đời và phát triển nhằm phản ánh cách thức người lập trình nghĩ và làm. Rất gần với ngôn ngữ con người (Anh ngữ) nhưng chính xác như ngôn ngữ toán học. Cùng với sự phát triển của các thế 5 hệ máy tính, ngôn ngữ lập trình cấp cao cũng được phát triển rất đa dạng và phong phú, việc lập trình cho máy tính vì thế mà cũng có nhiều khuynh hướng khác nhau: lập trình cấu trúc, lập trình hướng đối tượng, lập trình logic, lập trình hàm.

Một chương trình viết bằng ngôn ngữ cấp cao được gọi là chương trình nguồn (source programs). Để máy tính "hiểu" và thực hiện được các lệnh trong chương trình nguồn thì phải có một chương trình dịch để dịch chuơng trình nguồn (viết bằng ngôn ngữ cấp cao) thành dạng chương trình có khả năng thực thi.2 Chương trình dịch Như trên đã trình bày, muốn chuyển từ chương trình nguồn sang chương trình đích phải có chương trình dịch. Thông thường mỗi một ngôn ngữ cấp cao đều có một chương trình dịch riêng nhưng chung quy lại thì có hai cách dịch: thông dịch và biên dịch. Thông dịch (interpreter): Là cách dịch từng lệnh một, dịch tới đâu thực hiện tới đó.

Chẳng hạn ngôn ngữ LISP sử dụng trình thông dịch. Biên dịch (compiler): Dịch toàn bộ chương trình nguồn thành chương trình đích rồi sau đó mới thực hiện. Các ngôn ngữ sử dụng trình biên dịch như Pascal, C. Giữa thông dịch và biên dịch có khác nhau ở chỗ: Do thông dịch là vừa dịch vừa thực thi chương trình còn biên dịch là dịch xong toàn bộ chương trình rồi mới thực thi nên chương trình viết bằng ngôn ngữ biên dịch thực hiện nhanh hơn chương trình viết bằng ngôn ngữ thông dịch.

Một số ngôn ngữ sử dụng kết hợp giữa thông dịch và biên dịch chẳng hạn như Java. Chương trình nguồn của Java được biên dịch tạo thành một chương trình đối tượng (một dạng mã trung gian) và khi thực hiện thì từng lệnh trong chương trình đối tượng được thông dịch thành mã máy.2 Giới thiệu về ngôn ngữ lập trình c 1.1 Giới thiệu C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển các ứng dụng. Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie (làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ lập trình C dựa trên ngôn ngữ BCPL (do Martin Richards đưa ra vào năm 1967) và ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 khi viết hệ điều hành UNIX đầu tiên trên máy PDP-7) và được cài đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11. Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển “Ngôn ngữ lập trình C” và được phổ biến rộng rãi đến nay.

6 Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều hành Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp. Nhưng về sau, với những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuôn khổ của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình để rồi các công ty lập trình sử dụng một cách rộng rãi. Sau đó, các công ty sản xuất phần mềm lần lượt đưa ra các phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng được khai sinh từ đó. Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất “mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn.

Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới. Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cũng cho phép người lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác. Tuy nhiên, điều mà người mới vừa học lập trình C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của C.

Dù vậy, C được phổ biến khá rộng rãi và đã trở thành một công cụ lập trình khá mạnh, được sử dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện nay.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ