CHƯƠNG 3 : THIẾT KẾ NHIỆT KẾ ĐIỆN TỬ
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' {
}