C# POS机客显

最近做winform收银机,设计顾显及打印小票总结。

1、顾显(串口COM1)

只涉及到总计,所以只是简单的功能。

public static ClientDisplayResult Display(decimal total, bool isClear=false)
        {
            var result = new ClientDisplayResult();
            string[] ports = SerialPort.GetPortNames();
            if (ports.Length == 0)
            {
                result.Result = false;
                result.Message = "未检测到串行通信接口";
                Logger.Error(result.Message);
                return result;
            }

            SerialPort serialPort = new SerialPort();
            try
            {
                // 串行端口 Windows:COM1  
                serialPort.PortName = "COM1";
                //串口波特率 默认:2400
                serialPort.BaudRate = 2400;
                //停止位 默认
                serialPort.StopBits = StopBits.One;
                //数据位 默认
                serialPort.DataBits = 8;

                if (!serialPort.IsOpen)
                {
                    serialPort.Open();
                }
                //清空接收缓冲区数据
                serialPort.DiscardInBuffer();

                if (isClear)
                {
                    //清屏\f
                    serialPort.WriteLine(((char)12).ToString());
                }
                else
                {
                    //状态,合计提示灯亮(ESCs2)
                    var text = ((char)27).ToString() + ((char)115).ToString() + ((char)50).ToString();
                    serialPort.Write(text);
                    //显示收款金额(EscQA金额CR)
                    text = ((char)27).ToString() + ((char)81).ToString() + ((char)65).ToString() + total.ToString() + ((char)13).ToString();
                    serialPort.Write(text);
                }
                result.Result = true;
                return result;
            }
            catch (Exception ex)
            {
                Logger.Error("顾显异常",ex);
                result.Result = false;
                result.Message = ex.Message;
                return result;
            }
            finally
            {
                serialPort.Close();
                serialPort.Dispose();
            }
        }

 

=====下面是客显功能较全===============

    /// <summary>
    /// 客显
    /// </summary>
    public class CustomerDisplay
    {
        #region 成员变量
 
        private string spPortName;
        private int spBaudRate;
        private StopBits spStopBits;
        private int spDataBits;
 
        #endregion --成员变量
 
        #region 属性
        /// <summary>
        /// 客显发送类型
        /// </summary>
        public CustomerDispiayType DispiayType { get; set; }
        #endregion --属性
 
        #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="_spPortName">端口名称(COM1,COM2,COM3...)</param>
        /// <param name="_spBaudRate">通信波特率(2400,9600....)</param>
        /// <param name="_spStopBits">停止位</param>
        /// <param name="_spDataBits">数据位</param>
        public CustomerDisplay(string _spPortName, int _spBaudRate, string _spStopBits, int _spDataBits)
        {
            this.spBaudRate = _spBaudRate;
            this.spDataBits = _spDataBits;
            this.spPortName = _spPortName;       
            this.spStopBits = (StopBits)(Enum.Parse(typeof(StopBits), _spStopBits));
        }
        #endregion --构造函数
 
        #region Method
        #region 公共方法
 
        /// <summary>
        /// 数据信息展现
        /// </summary>
        /// <param name="data">发送的数据(清屏可以为null或者空)</param>
        public void DisplayData(string data)
        {
            SerialPort serialPort = new SerialPort();
            serialPort.PortName = spPortName;
            serialPort.BaudRate = spBaudRate;
            serialPort.StopBits = spStopBits;
            serialPort.DataBits = spDataBits;
            serialPort.Open();
 
            //先清屏
            serialPort.WriteLine(((char)12).ToString());
            //指示灯
            string str = ((char)27).ToString() + ((char)115).ToString()+((char)(int)this.DispiayType).ToString();   
            serialPort.WriteLine(str);
 
            //发送数据
            if (!string.IsNullOrEmpty(data))
            {
                serialPort.WriteLine(((char)27).ToString() + ((char)81).ToString() + ((char)65).ToString() + data + ((char)13).ToString());
            }
 
            serialPort.Close();
        }
 
        #endregion --公共方法
        #endregion --Method
    }
 
    /// <summary>
    /// 客显类型
    /// </summary>
    public enum CustomerDispiayType
    {
        /// <summary>
        /// 清屏
        /// </summary>
        Clear,
        /// <summary>
        /// 单价
        /// </summary>
        Price,
        /// <summary>
        /// 合计
        /// </summary>
        Total,
        /// <summary>
        /// 收款
        /// </summary>
        Recive,
        /// <summary>
        /// 找零
        /// </summary>
        Change
    }       

 

调用案例

 class Program
    {
        static void Main(string[] args)
        {
           
            while (true)
            {
                Console.Write("清屏");
                CustomerDisplay disliay = new CustomerDisplay("COM2", 9600, StopBits.One, 8);
 
                disliay.DispiayType = CustomerDispiayType.Clear;
                disliay.DisplayData(null);              
                System.Threading.Thread.Sleep(1000);
 
                Console.Write("找零");
             
                disliay.DispiayType = CustomerDispiayType.Change;
                disliay.DisplayData("230.34");
                System.Threading.Thread.Sleep(1000);
 
                Console.Write("收款");
                disliay.DispiayType = CustomerDispiayType.Recive;
                disliay.DisplayData("10.34");
                
                System.Threading.Thread.Sleep(1000);
 
                Console.Write("总计");
                disliay.DispiayType = CustomerDispiayType.Total;
                disliay.DisplayData("99230.34");
          
                System.Threading.Thread.Sleep(1000);
 
                Console.Write("单价");
                disliay.DispiayType = CustomerDispiayType.Price;
                disliay.DisplayData("18.34");
                
                System.Threading.Thread.Sleep(2000);
 
            }
 
 
            Console.Read();
 
        }
通常情况下指示灯排列号:
 /*
          *当 n=0 , 四种字符 全暗。
          *当 n=1, “单价”字符 亮,“多谢惠顾”亮,其它三种暗。
          *当 n=2, “合计”字符 亮,“多谢惠顾”亮,其它三种暗。
          *当 n=3, “收款”字符 亮,“多谢惠顾”亮,其它三种暗。
          *当 n=4, “找零”字符 亮,“多谢惠顾”闪烁,其它三种暗
      */

 

 

转 : https://www.cnblogs.com/flywing/p/8426690.html

https://blog.csdn.net/wybztn/article/details/7240117

转 : https://wenku.baidu.com/view/b64e5e46021ca300a6c30c22590102020740f2fa.html

 

posted @ 2022-05-24 15:14  与f  阅读(258)  评论(0编辑  收藏  举报