BỘ CÔNG THƯƠNGTRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ ĐIỆN TỬ BÁO CÁO TIỂU LUẬN MÔN: GIAO TIẾP ĐIỀU KHIỂN THIẾT BỊ NGOẠI VI Giảng viên: Phạm Quang Trí Lớp:DTVT1
Trang 1BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH
KHOA CÔNG NGHỆ ĐIỆN TỬ
BÁO CÁO TIỂU LUẬN
MÔN: GIAO TIẾP ĐIỀU KHIỂN THIẾT BỊ NGOẠI VI
Giảng viên: Phạm Quang Trí Lớp:DTVT17B
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2024
Trang 2ĐỀ TÀI: ĐIỀU KHIỂN 3 THIẾT BỊ LÀM VIỆC TUẦN TỰ
Yêu cầu 1: Vẽ sơ đồ mô phỏng phần cứng của toàn hệ thống điều khiển
Yêu cầu vận hành:
Nhấn nút START(Khởi động) thì thiết bị 1 hoạt động, t1 giây sau đó thì thiết bị 2 hoạt động, t2 giây sau đó thì thiết bị 3 hoạt động
Nhấn nút STOP_1 (Tắt đèn) thì thiết bị 1 dừng hoạt động
Nhấn nút STOP_2 (Tắt quạt) thì thiết bị 2 dừng hoạt động
Nhấn nút STOP_3 (Tắt tivi) thì thiết bị 3 dừng hoạt động
Nhấn nút STOP_ALL (Tắt hết) thì cả 3 thiết bị dừng hoạt động
Yêu cầu trong thiết kế:
Giao diện trên máy tính có các nút nhấn điều khiển độc lập cho từng thiết bị START, STOP_1, STOP_2, STOP_3, STOP_ALL và hiển thị minh hoạ trạng thái hiện tại của từng thiết bị ( đang hoạt động, đang dừng hoạt động ) Cho phép người dùng thay đổi các khoảng thời gian t1 và t2 ( giới hạn trong khoảng từ 3 đến 20 giây, mặc định là 10 giây).Bóng đèn L1, L2 và L3 đại diện cho các thiết bị tương ứng
Sơ đồ nguyên lí:
Trang 3 Yêu cầu 2: Trình bày rõ, chi tiết lưu đồ giải thuật và mã nguồn của chương trình điều khiển (Firmware)
Lưu đồ giải thuật Firmware:
Trang 5Code Firmware:
#define in_size 1
#define out_size 1
unsigned char readbuff[in_size] absolute 0x500; // chua du lieu doc duoc tu USB
unsigned char writebuff[out_size] absolute 0x540; // chua du lieu nhan duoc tu USBvoid interrupt(void)
// kich hoat nut ngat USB
USBIF_bit = 0; // xoa co ngat USB
USBIE_bit = 1; // cho phep ngat USB
GIE_bit = 1; // cho phep ngat toan cuc
PEIE_bit = 1; // cho phep ngat ngoai vi
while(1)
{
Trang 6LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); delay_ms(10000);
LATE2_bit = 0;
writebuff[0] = 'W';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
Trang 7LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
Trang 8LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
else if(readbuff[0] == '%')
{
Trang 9LATE0_bit = 0;
writebuff[0] = 'F';
HID_Write(&writebuff,out_size); delay_ms(15000);
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
else if(readbuff[0] == '&')
{
LATE0_bit = 0;
writebuff[0] = 'F';
HID_Write(&writebuff,out_size); delay_ms(17000);
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
Trang 10HID_Write(&writebuff,out_size); }
LATE1_bit = 0;
writebuff[0] = 'U';
HID_Write(&writebuff,out_size); }
else if(readbuff[0] == 'E')
else if(readbuff[0] == 'e')
Trang 11else if(readbuff[0] == 'Y')
else if(readbuff[0] == 'y')
else if(readbuff[0] == 'I')
else if(readbuff[0] == 'i')
else if(readbuff[0] == 'P')
{
delay_ms(14000);
Trang 12LATE2_bit = 0;
writebuff[0] = 'W';
HID_Write(&writebuff,out_size); }
Trang 13else if(readbuff[0] == 'A')
Trang 20byte[] readbuff = newbyte[2];
byte[] writebuff = newbyte[2];
public Form2()
{
InitializeComponent();
Trang 22}
elseif (domainUpDown2.Text == "10")
{
writebuff[1] = (byte)'m';
Trang 23usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "18")
Trang 24{
writebuff[1] = (byte)'D';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 25}
elseif (domainUpDown2.Text == "14")
{
writebuff[1] = (byte)'P';
Trang 26usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
Trang 27{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 28}
elseif (domainUpDown2.Text == "18")
{
writebuff[1] = (byte)'D';
Trang 29usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "7")
Trang 30{
writebuff[1] = (byte)'T';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 31if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
Trang 32usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "11")
Trang 33{
writebuff[1] = (byte)'y';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 34if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "7")
{
writebuff[1] = (byte)'T';
Trang 35usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "15")
Trang 36{
writebuff[1] = (byte)'p';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 38usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "19")
Trang 39{
writebuff[1] = (byte)'d';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 40}
elseif (domainUpDown2.Text == "15")
{
writebuff[1] = (byte)'p';
Trang 41usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "4")
Trang 42{
writebuff[1] = (byte)'e';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 43}
elseif (domainUpDown2.Text == "19")
{
writebuff[1] = (byte)'d';
Trang 44usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "8")
Trang 45{
writebuff[1] = (byte)'t';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 46if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 47usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "12")
Trang 48{
writebuff[1] = (byte)'I';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 49if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "8")
{
writebuff[1] = (byte)'t';
Trang 50usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "16")
Trang 51{
writebuff[1] = (byte)'S';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 53usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "20")
Trang 54{
writebuff[1] = (byte)'G';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 55}
elseif (domainUpDown2.Text == "16")
{
writebuff[1] = (byte)'S';
Trang 56usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "5")
Trang 57{
writebuff[1] = (byte)'R';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 58}
elseif (domainUpDown2.Text == "20")
{
writebuff[1] = (byte)'G';
Trang 59usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
elseif (domainUpDown2.Text == "9")
Trang 60{
writebuff[1] = (byte)'Y';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
elseif (domainUpDown2.Text == "12")
{
writebuff[1] = (byte)'I';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
Trang 61elseif (domainUpDown2.Text == "17")
{
writebuff[1] = (byte)'s';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 62}
elseif (domainUpDown2.Text == "13")
{
Trang 63writebuff[1] = (byte)'i';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
}
Trang 64if (domainUpDown2.Text == "3")
{
writebuff[1] = (byte)'E';
usbHidPort1.SpecifiedDevice.SendData(writebuff); domainUpDown2.Enabled = false;
Trang 65}
elseif (domainUpDown2.Text == "17")
{
Trang 66MessageBox.Show("Vui lòng chọn thời gian ", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
Trang 67DialogResult answer = MessageBox.Show("Bạn có muốn đóng chương trình không ?",
"Cảnh báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (answer == DialogResult.No)
{
e.Cancel = true;
}
}
// xử lý nhận dữ liệu từ thiết bị thông qua thiết bị
privatevoid usbHidPort1_OnDataRecieved(object sender, DataRecievedEventArgs args) {
Trang 68pictureBox1.Image = USB.Properties.Resources.of;
pictureBox2.Image = USB.Properties.Resources.of;
pictureBox3.Image = USB.Properties.Resources.of;
Trang 69privatevoid usbHidPort1_OnSpecifiedDeviceArrived(object sender, EventArgs e)
// xử lý khi một thiết bị khi HID-USB gỡ ra khỏi bus USB
privatevoid usbHidPort1_OnSpecifiedDeviceRemoved(object sender, EventArgs e) {
textBox2.BackColor = Color.Red;
pictureBox1.Image = USB.Properties.Resources.of;
pictureBox2.Image = USB.Properties.Resources.of;
pictureBox3.Image = USB.Properties.Resources.of;
// xử lý phát hiện thiết bị HID-USB xuất hiện
protectedoverridevoid OnHandleCreated (EventArgs e)
{
Trang 71privatevoid domainUpDown2_SelectedItemChanged(object sender, EventArgs e)
Kết quả mô phỏng bằng video link Youtube ở yêu cầu 5
Yêu cầu 5: Quay video clip chứng minh kết quả thực hiện, tải lên Youtube và ghi liên kết báo cáo
https://youtu.be/2qXVsElyrPU