- Đăng vào
Tạo form setting trong C# - Phần 1: Tạo Form
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
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! ";
}
}
}