Dự kiến bài hướng dẫn sẽ gồm 3 phần:
- Phần 1: Thiết kế giao diện bằng Windows Form.
- Phần 2: Viết code PIC CCS-C.
- Phần 3: Mô phỏng trên Proteus.(Nhiều người chê proteus nhưng mình làm mô phỏng trên Proteus ổn là đổ vào mạch thật chạy cũng OK)
Trong project C# mình sẽ hướng dẫn các bạn cách tạo form setting để cài đặt thông số cho Serial Port trong module giao tiếp RS232 mà mình đã thực hiện trong đồ án nhỏ của mình. Thông số cài đặt của sẽ được lưu lại cho dù bạn có đóng chương trình, khi mở chương trình bạn sẽ không phải mất thời gian cài đặt lại cái thông số cho hệ thống.


Vào mục setting của solution tạo các gia trị cài đặt như hình trên
Code Setting Form
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Ports; namespace PIC2PC { public partial class SettingForm : Form { SerialPort SettingPort = new SerialPort(); // Port chua thong so cai dat public SettingForm() { InitializeComponent(); // Quet cac port com tren may tinh string[] Ports = SerialPort.GetPortNames(); cmbPorts.Items.AddRange(Ports); // Add cac port tim duoc vao combobox // Khoi tao Baudrate string[] Baudrate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" }; cmbBaudrates.Items.AddRange(Baudrate); //Khoi tao data bits string[] Databits = { "6", "7", "8" }; cmbDatabits.Items.AddRange(Databits); // Khoi tao Parity bit string[] Paritybits = { "None", "Odd", "Even" }; cmbParitybits.Items.AddRange(Paritybits); // Khoi tao Stop bit string[] Stopbits = { "1", "1.5", "2" }; cmbStopbits.Items.AddRange(Stopbits); string[] HandShake = { "None", "XOnXOff", "RequestToSend", "RequestToSendXOnXOff" }; cmbHandshake.Items.AddRange(HandShake); } // Xu ly su kien chon cong COM private void cmbPorts_SelectedIndexChanged(object sender, EventArgs e) { if (SettingPort.IsOpen) SettingPort.Close(); SettingPort.PortName = cmbPorts.SelectedItem.ToString(); } // Xu ly su kien lua chon baudrate private void cmbBaudrates_SelectedIndexChanged(object sender, EventArgs e) { if (SettingPort.IsOpen) SettingPort.Close(); SettingPort.BaudRate = Convert.ToInt32(cmbBaudrates.Text); // Chuyen kieu String Sang kieu so nguyen } // Xu ly su kien lua chon Databits private void cmbDatabits_SelectedIndexChanged(object sender, EventArgs e) { if (SettingPort.IsOpen) SettingPort.Close(); SettingPort.DataBits = Convert.ToInt32(cmbDatabits.Text); } // Xu ly su kien chon Paritybits private void cmbParitybits_SelectedIndexChanged(object sender, EventArgs e) { if (SettingPort.IsOpen) SettingPort.Close(); switch (cmbParitybits.SelectedItem.ToString()) { case "Odd": SettingPort.Parity = Parity.Odd; break; case "None": SettingPort.Parity = Parity.None; break; case "Even": SettingPort.Parity = Parity.Even; break; } } // Xu ly su kien lua chon stopbit private void cmbStopbits_SelectedIndexChanged(object sender, EventArgs e) { if (SettingPort.IsOpen) SettingPort.Close(); switch (cmbStopbits.SelectedItem.ToString()) { case "1": SettingPort.StopBits = StopBits.One; break; case "1.5": SettingPort.StopBits = StopBits.OnePointFive; break; case "2": SettingPort.StopBits = StopBits.Two; break; } } // Xu ly su kien lua chon che do Handshaking private void cmbHandshake_SelectedIndexChanged(object sender, EventArgs e) { if (SettingPort.IsOpen) SettingPort.Close(); switch (cmbHandshake.SelectedItem.ToString()) { case "None": SettingPort.Handshake = Handshake.None; break; case "XOnXOff": SettingPort.Handshake = Handshake.XOnXOff; break; case "RequestToSend": SettingPort.Handshake = Handshake.RequestToSend; break; case "RequestToSendXOnXOff": SettingPort.Handshake = Handshake.RequestToSendXOnXOff; break; } } // Xu ly su kien khi form vua duoc bat len private void SettingForm_Load(object sender, EventArgs e) { // Load cac cai dat ban dau cmbPorts.Text = Properties.Settings.Default.PortName; cmbBaudrates.Text = Convert.ToString(Properties.Settings.Default.BaudRate); cmbDatabits.Text = Convert.ToString(Properties.Settings.Default.DataBits); cmbParitybits.Text = Convert.ToString(Properties.Settings.Default.Parity); cmbHandshake.Text = Convert.ToString(Properties.Settings.Default.Handshake); // StopBits switch (Convert.ToString(Properties.Settings.Default.StopBits)) { case "One": cmbStopbits.Text = "1"; break; case "OnePointFive": cmbStopbits.Text = "1.5"; break; case "Two": cmbStopbits.Text = "2"; break; } } // Xu ly su kien khi click Button Save private void btnSave_Click(object sender, EventArgs e) { Properties.Settings.Default.PortName = SettingPort.PortName; Properties.Settings.Default.BaudRate = SettingPort.BaudRate; Properties.Settings.Default.DataBits = SettingPort.DataBits; Properties.Settings.Default.StopBits = SettingPort.StopBits; Properties.Settings.Default.Parity = SettingPort.Parity; Properties.Settings.Default.Handshake = SettingPort.Handshake; Properties.Settings.Default.Save(); //Saves settings Close(); } // Xu ly su kien khi Click Button Close private void btnClose_Click(object sender, EventArgs e) { Close(); } } }
Code Main Form
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; // Khai bao thu vien Serial Ports using System.IO; using System.IO.Ports; namespace PIC2PC { public partial class DemoPIC2PC : Form { // Khoi tao doi tuong SerialPort ComPort SerialPort ComPort = new SerialPort(); SettingForm SetupForm = new SettingForm(); // Form cai dat thong so public DemoPIC2PC() { InitializeComponent(); } // Xu li su kien khi Click vao Button Setting private void btnSetting_MouseClick(object sender, MouseEventArgs e) { // Neu Port dang mo thi phai dong port ;lai thi moi setting duoc if (ComPort.IsOpen) { ComPort.Close(); lbStatus.Text = "Port is closed !"; } lbStatus.Text = "Port is setting...";// Hien thi trang thai SetupForm.ShowDialog();// Open setting Form btnConnect.Enabled = true; lbStatus.Text = "Port is closed! "; } } }