Chương trình mơ phỏng

Một phần của tài liệu THIẾT kế NHIỆT kế điện tử ( DIGITAL THERMOMETER) DÙNG 8051 và LM35 (Trang 39)

CHƯƠNG 3 : THIẾT KẾ NHIỆT KẾ ĐIỆN TỬ

3.3.3 Chương trình mơ phỏng

Giải thích sơ đồ nguyên lý:

-Khi được cấp nguồn, người dùng cần nhấn nút reset. Lúc này hệ thống sẽ nhận và xử lý các tín hiệu nhiệt đo được và hiển thị kết quả đo lên màn hình.

- LM35: Nhận các giá trị nhiệt độ cần đo.

- ADC0804: Chuyển đổi các tín hiệu tương tự nhận được từ LM35 thành tín hiệu số gửi vào vi điều khiển

- Vi điều khiển 8051: Xử lý các tín hiệu.

- LCD 16x2: Nhận các tín hiệu đo và hiển thị kết quả.

3.3.4 Lưu đồ thuật tốn

Giải thích lưu đồ thuật tốn:

Bắt đầu chương trình ta cài đặt hệ thống, lúc này cảm biến bắt đầu hoạt động.Cảm biến nhận giá trị sau đó qua các bộ phận xử lý gửi các giá trị đo được lên màn hình hiển thị. Lặp lại chương trình.

.

3.3.4 Thi cơng phần cứng

Kêt luận

Qua q trình thực tập tại cơng ty HCL Vietnam, được sự đồng ý của nhà trường, sự đồng ý của phía cơng ty cùng với sự giúp đỡ tận tình của cơ Nguyễn Thùy Dung em đã hồn thành đề tài.

Qua bài thực tập, em đã được trang bị thêm kiến thức về lập trình nhúng và lập trình vi điều khiển. Đặc biệt, em đã được học và trải nghiệm ở mơi trường chun nghiệp và hiện đại. Góp phần quan trọng trong việc trau dồi củng cố kiến thức, rút ra được kinh nghiệm mà từ lâu bản thân cịn thiếu sót.

Báo cáo đề tài: “Thiết kế nhiệt kế điện tử (Digital Thermometer) dùng 8051 và

LM35” về cơ bản đã giải quyết được vấn đề kiểm tra nhiệt độ. Hệ thống cịn có thể phát

triển thêm các tính năng như: gửi dữ liệu đo được lên internet, tích hợp thêm thiết bị cảnh báo nhiệt độ. Mục tiêu tạo ra các sản phẩm chính xác, dễ sử dụng, nhanh chóng và tiện lợi phục vụ cho đời sống hàng ngày.

TÀI LIỆU THAM KHẢO

[1]. https://dientutuonglai.com/vi-dieu-khien-8051/

[2]. Nguyễn Ngọc Cương, Nguyễn Đình Nghĩa, Đỗ Quốc Huy, Trần Nghi Phú và Phạm Thành Cơng, 2011. Giáo trình Ngơn ngữ lâ ̣p trình C/C++. Nhà xuất bản Thông Tin Và Truyền Thông. Hà Nô ̣i. 191 trang.

PHỤ LỤC

* Chương trình điều khiển #include <reg51.h>

sbit rs = P2 ^ 7; // Đăng ký Chân chọn (RS) của màn hình LCD 16 * 2 sbit rw = P2 ^ 6; // Chân đọc / ghi (RW) của màn hình LCD 16 * 2 sbit en = P2 ^ 5; // Bật chân (E) của màn hình LCD 16 * 2

sbit rd_adc = P3 ^ 0; // Đọc chân (RD) của ADC0804 sbit wr_adc = P3 ^ 1; // Ghi (WR) chân của ADC0804 sbit intr_adc = P3 ^ 2; // Chân ngắt (INTR) của ADC0804

void delay (unsigned int); // hàm tạo độ trễ

void cmdwrt (unsigned char); // chức năng gửi lệnh đến màn hình LCD 16 * 2 void datawrt (unsigned char); // chức năng gửi dữ liệu đến màn hình LCD 16 * 2

void convert_display (unsigned char); // chức năng chuyển đổi giá trị ADC thành nhiệt độ và hiển thị trên màn hình LCD 16 * 2

void main (void) // hàm chính {

unsigned char;

unsigned char cmd [] = {0x38,0x01,0x06,0x0c, 0x82}; // 16 * 2 lệnh khởi tạo lcd unsigned char data1 [] = "Nhiệt độ:";

unsigned char value;

P1 = 0xFF; // đặt Cổng 1 làm cổng đầu vào P0 = 0x00; // đặt Cổng 0 làm cổng đầu ra

for (i = 0; i <5; i ++) // gửi lệnh đến màn hình LCD 16 * 2 hiển thị một lệnh tại một thời điểm

{

cmdwrt (cmd [i]); // lệnh gọi hàm để gửi lệnh đến màn hình LCD 16 * 2 delay (1);

}

for (i = 0; i <12; i ++) // gửi dữ liệu đến màn hình LCD 16 * 2 hiển thị một ký tự tại một thời điểm

{

datawrt (data1 [i]); // lệnh gọi hàm để gửi dữ liệu đến màn hình LCD 16 * 2 delay (1);

}

intr_adc = 1; // tạo chân INTR làm đầu vào rd_adc = 1; // đặt chân RD CAO

wr_adc = 1; // đặt WR pin LOW while (1) // lặp lại mãi mãi {

wr_adc = 0; // gửi xung LOW đến HIGH trên chân WR delay(1);

wr_adc = 1;

while (intr_adc == 1); // đợi Kết thúc chuyển đổi

rd_adc = 0; // làm cho RD = 0 để đọc dữ liệu từ ADC0804 value = P1; // sao chép dữ liệu ADC

convert_display (value); // lệnh gọi hàm để chuyển đổi dữ liệu ADC thành nhiệt độ và hiển thị trên màn hình LCD 16 * 2

delay (1000); // khoảng thời gian giữa mọi chu kỳ rd_adc = 1; // tạo RD = 1 cho chu kỳ tiếp theo }

}

void cmdwrt (unsigned char x) {

P0 = x; // gửi lệnh đến Cổng 0 có kết nối màn hình LCD 16 * 2 rs = 0; // tạo RS = 0 cho lệnh

rw = 0; // tạo RW = 0 cho thao tác ghi

en = 1; // gửi xung CAO đến THẤP trên chân Enable (E) để bắt đầu thao tác ghi lệnh delay (1);

en = 0; }

void datawrt (unsigned char y) {

P0 = y; // gửi dữ liệu đến Cổng 0 trên đó màn hình LCD 16 * 2 được kết nối rs = 1; // tạo RS = 1 cho lệnh

rw = 0; // tạo RW = 0 cho thao tác ghi

en = 1; // gửi xung CAO đến THẤP trên chân Enable (E) để bắt đầu thao tác ghi dữ liệu delay (1);

en = 0; }

void convert_display (unsigned char value) {

unsigned char x1, x2, x3;

cmdwrt (0xc6); // lệnh đặt con trỏ ở vị trí thứ 6 của dịng thứ 2 trên màn hình LCD 16 * 2

x1 = (value / 10); // chia giá trị cho 10 và lưu trữ thương trong biến x1 x1 = x1 + (0x30); // chuyển đổi biến x1 thành ascii bằng cách thêm 0x30 x2 = value % 10; // chia giá trị cho 10 và lưu phần dư trong biến x2 x2 = x2 + (0x30); // chuyển đổi biến x2 thành ascii bằng cách thêm 0x30 x3 = 0xDF; // giá trị ascii của ký hiệu độ (°)

datawrt (x1); // hiển thị nhiệt độ trên màn hình LCD 16 * 2 datawrt (x2);

datawrt (x3); datawrt ('C'); }

void delay (unsigned int z) {

unsigned int p, q;

for (p = 0; p <z; p ++) // lặp lại lần 'z' {

}

Một phần của tài liệu THIẾT kế NHIỆT kế điện tử ( DIGITAL THERMOMETER) DÙNG 8051 và LM35 (Trang 39)

Tải bản đầy đủ (PDF)

(50 trang)