C# pos机客显(利用SerialPort )

    /// <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, “找零”字符 亮,“多谢惠顾”闪烁,其它三种暗
      */

阅读更多
换一批

100分求win2k下控制POS机客显代码

02-25

有DELPHI示例代码,怎奈搞了很久也没搞出来,只好来请各位大哥不吝赐教.rnDELPHI示例代码如下:rn*****************************************************************rn首先把API_COM.DLL文件复制到编写的源程序目录下,接着在程序的开头声明调用的三个函数来源:rnvarrn Form1: TForm1;rn加入下面三行声明rnfunction com_init(com:Integer; baud:Dword):Boolean;stdcall;external 'api_com.dll';rnfunction com_rest:Boolean;stdcall;external 'api_com.dll';rnfunction com_send(buf:PChar; len:Integer):Boolean;stdcall;external 'api_com.dll';rnrnimplementationrnrn$R *.DFMrnrnCom_init(1,2400)是打开串口进行通讯,1是打开COM1,波特率为2400。如果打开成功,它会返回逻辑真告知串口打开。rnCom_rest是关闭串口。rnCom_send(命令,长度)是发送数据到串口。rnrn在窗体创建时打开端口rnprocedure TForm1.FormCreate(Sender: TObject);rnbeginrnCom_init(1,2400);rnend;rnrn在按钮中发送内容rnprocedure TForm1.Button1Click(Sender: TObject);rnbeginrnPDStr:=Chr(2)+Chr(77);控制顾客显示屏开钱箱指令rnif com_send(Pchar(PDStr),Length(PDStr)) thenrnbeginrnLabel1.Caption :='已经发送命令';rnendrnelsernbeginrnLabel1.Caption :='发送失败';rnend;rnend;rnrn在关闭窗体时关闭端口rnprocedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);rnbeginrnCom_rest;rnend;rn上面语句是控制顾客显示屏开钱箱的命令,其他的命令集只需要改变按钮中的PDStr的值即可:rn下面是控制顾客显示屏显示1234.56的命令:rnPDStr:=Chr(27)+Chr(81)+Chr(65)+’1234.56’+Chr(13);rnif com_send(Pchar(PDStr),Length(PDStr)) thenrnbeginrnLabel1.Caption :='已经发送命令';rnendrnelsernbeginrnLabel1.Caption :='发送失败';rnend;rn下面是控制顾客显示屏显示“总计”灯的命令:rnPDStr:= Chr(27)+Chr(115)+’2’;rnif com_send(Pchar(PDStr),Length(PDStr)) thenrnbeginrnLabel1.Caption :='已经发送命令';rnendrnelsernbeginrnLabel1.Caption :='发送失败';rnend;rn如果需要控制串口的POS58打印机打印,也只需要重新给PDStr赋值:rnPDStr:=’Delphi Printer on COM1’+chr(10);rn要POS58开钱箱,则需要如下赋值:rnPDStr:= Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255);rn***********************************************************************rn

没有更多推荐了,返回首页