This product is discontinued and has been replaced by CFA633-RDI-KS.
CFA633-RMC-KS photo

CFA633-RMC-KS

CFA-633 Serial LCD 16x2 +Fans +Keypad, RoHS Compliant, Red LED Backlight, STN Negative, Blue, Transmissive 0C to +50C 6:00

CFA633 Serial Family

  •    Robust packet based communications protocol with 16-bit CRC.
  • Compact size: fits in a 1U rack mount case (35 mm overall height).
  • Advanced digital GPIO control with PWM output.
  • Four fan connectors with RPM monitoring or variable PWM fan power control.
  • Available in a 5.25" half-height LCD drive bay kit, (see mounting bracket photos).
  • ATX power supply control functionality allows the buttons on the CFA-633 to replace the "power" and "reset" buttons on your system, simplifying your front panel design.
  • Temperature monitoring: up to 32 channels at up to 0.5 deg C absolute accuracy. Ready-to-use WRDOWY17 Dallas Semiconductor 1-Wire temperature sensors are optional. Alternatively, you can create your own sensors using DS1822 or DS18B20 parts and the tutorial on creating temperature sensors.
  • Integrated LED backlit 6-button translucent silicon keypad with screened legend.
  • "Fail-Safe" fan power setting allows safe host fan control based on temperature.
  • Non-volatile memory ("EEPROM") capability: Customize the "power-on" display settings plus a 16-byte "scratch" register for storing IP, netmask, system serial number, etc.
For reference only. For design purposes, please use the specifications in the datasheet.

Physical Characteristics

Characters x Lines 16 x 2
Module Overall
width height depth
millimeters 110.5 35 24.1
inches 4.35 1.37 0.94
PCB Outline
width height depth
millimeters 110.5 35 24.1
inches 4.35 1.37 0.94
Other Features Affecting Size
  • Keypad
Please see the datasheet
Viewing Area
width height
millimeters 61 15.8
inches 2.40 0.62
Active Area
width height
millimeters 56.2 11.5
inches 2.21 0.45
Character Size
width height
millimeters 2.95 5.55
inches 0.11 0.21
Character Pitch
width height
millimeters 3.55 5.95
inches 0.13 0.23
Dot Size
width height
millimeters 0.55 0.65
inches 0.02 0.02
Dot Pitch
width height
millimeters 0.6 0.7
Weight 45g
Keystroke Travel 2.4mm

Optical Characteristics

Display Technology LCD
Display Addressing passive
Glass Type/Glass Color STN/Blue
Polarizer Transmissive
View Direction 6
Backlight Color Red
Backlight Type LED
Mode Negative
Foreground Color Red
Background Color Dark

Environmental

Operating Temperatures
min max
Celsius 50°
Farenheit 32° 122°
Storage Temperatures
min max
Celsius -10° 60°
Farenheit 14° 140°
Humidity
min max
Non-condensing 0% 90%

Electronics

Controller CFA 533/633
Interface RS232

Datasheets

CFA633-RMC-KS_Data_Sheet_v3.0.pdf (6MB, Jul 2010, Datasheet v.3.0, Hardware v.1.5a, Firmware v.k1.9)
CFA633-RMC_v2.0.pdf (2MB, Jun 2009, Datasheet v.2.0, Hardware v.1.5a, Firmware v.k1.9)
CFA633-RMC_k1.9c.pdf (1MB, Oct 2008, Datasheet v.1.9c, Hardware v.1.5a, Firmware v.1.9)
CFA_633_k1.9b.pdf (2MB, Sep 2005, Datasheet v.1.9b, Hardware v.1.5a, Firmware v.1.9)
CFA_633_k1.9a.pdf (2MB, May 2005, Datasheet v.1.9a, Hardware v.1.5a, Firmware v.1.9)
CFA_633_1_9.pdf (2MB, Oct 2004, Datasheet v.1.9, Hardware v.1.9, Firmware v.1.9)

Other Files

1 to 1 Template - CFA633-XXX-KS_v2.0_1_TO_1.PDF (56KB)
Other Document - CFA633 v1.5a to v1.5c changes (1MB) Description and images of the changes from the v1.5a CFA633 to the v1.5c CFA633.
Subscribe to Part Change Notices by email Email subscription for changes to CFA633-RMC-KS or RSS RSS feed for changes to CFA633-RMC-KS

Part Change Notice #10402

Products Affected: CFA633-YYB-KS, CFA633-TMC-KS, CFA633-RMC-KS, CFA633-YYB-KU, CFA633-TMC-KU, CFA633-RMC-KU, CFA633-YYH-KS, CFA633-TMI-KS, CFA633-YYH-KU, CFA633-TMI-KU, CFA633-RDI-KU, CFA633-RDI-KS, CFA633-TFH-KU, CFA633-TFH-KS
Date Issued: February 13, 2012
Summary: CFA633 Firmware 2v1
Last revision: v2.0
Description: As part of our continuous improvement process, Crystalfontz America, Inc. is releasing a new version of firmware for the 2v0 hardware based CFA633 family of intelligent modules.
Reason:

Fixes:


Command 10 (0x0A) Read 8 Bytes of LCD Memory.

Corrected the range of data[0] to reflect the native addressing of the LCD controller.



Command 11 (0x0B) Set LCD Cursor position.

Updated algorithm used for updating cursor location.



Corrects potential power-up corruption of boot state with the serial interface (-KS).




Enhancements:


Command 4 (0x04) Store current state as boot state.

Firmware compares stored stated and current state. Returns error if there is a difference.



Command 28 (0x1C) Set ATX Power switch functionality.

Added auto polarity switch. Improved pulse length functionality, and added feature to hold until system off during power down.




Updates:


Command 1 (0x01) Get Hardware & Firmware Version.

Modules with the serial interface, KS, will report: "CFA633:h2.0,s2v1"

Modules with the USB interface, KU, will report: "CFA633:h2.0,u2v1"
Impact: All CFA633 modules are impacted by the new firmware release.
Recommendation: It is recommended that all customers migrate to this new firmware release.
Availability:

Starting 2012-03-01 all standard modules will ship with this new version of the firmware.

Customers with Defined Part (DP) numbers will not have their modules shipped with this new firmware automatically. Please contact our engineering support team at support@crystalfontz.com.

Price Change: This update to the firmware does not affect the pricing of the CFA633 family of modules.

Part Change Notice #10291

Products Affected: CFA633-YYB-KS, CFA633-TMC-KS, CFA633-RMC-KS, CFA633-YYB-KU, CFA633-TMC-KU, CFA633-RMC-KU, CFA533-YYH-KS, CFA533-YYH-KU, CFA533-TMI-KS, CFA533-TMI-KU, CFA533-YYH-KL, CFA533-TMI-KL, CFA533-YYH-KC, CFA533-TMI-KC, CFA533-TMI-KI, CFA533-YYH-KI, CFA633-YYH-KS, CFA633-TMI-KS, CFA633-YYH-KU, CFA633-TMI-KU, CFA633-RDI-KU, CFA633-RDI-KS
Date Issued: November 10, 2010
Summary: Technical Bulletin TB01: Comparison of CFA533 and CFA633 Modules by Version Number
Description: The attached PDF file describes differences between our CFA633 v1.5x and CFA633 v2.0 intelligent display module series. We also list the CFA533 series as a comparison for customers who do not require the fan control available in the CFA633 series. Hardware version numbers are silkscreened on the back of the PCBs.

Additional information can be found in supporting documents for PCN:

http://www.crystalfontz.com/products/document/2371/CFA633_v1-5a_to_v1-5c_changes.pdf

http://www.crystalfontz.com/products/pcnfile/10286/PCN_CFA633_2-0.pdf
Reason: Clarify the differences between the different modules.
Impact: None.
Attachment: TB01_Comparison_of_CFA533_and_CFA633_Modules.pdf (86KB)

Part Change Notice #10286

Products Affected: CFA633-YYB-KS, CFA633-TMC-KS, CFA633-RMC-KS, CFA633-YYB-KU, CFA633-TMC-KU, CFA633-RMC-KU
Date Issued: October 6, 2010
Summary: CFA633 hardware v2.0 / Firmware version 2.0 (called "s2.0" for serial modules and "u2.0" for USB modules)
Last revision: Hardware v1.5c / Firmware v1.9k
Description: In a continuation of product improvement the CFA633 will be moving to a new hardware layout with supporting firmware changes and improvements. Highlights include:
  • Serial and USB interfaces are build options - no more USB daughter board

  • Wide temperature support with -20C ~ +70C operation / -30C ~ +80C storage

  • Taller keypad
Reason: Improvements in design allow for better manufacturing, ESD protection, and appearance.
Impact: The new version is designed to be Fit, Form, and Function compatible with previous versions of the CFA633 series.
Semi-Custom and Defined Parts will be migrated to new part numbers.
Recommendation: Engineering samples should be available by the end of Quarter 4, 2010. Please send an email to support@crystalfontz.com to work with our engineering and support team to assist you with the migration.
Availability: Volume availability First Quarter 2011
Price Change: No change at this time
Attachment: PCN_CFA633_2-0.pdf (1MB)

Part Change Notice #10283

Products Affected: CFA633-YYB-KS, CFA633-TMC-KS, CFA633-RMC-KS, CFA633-YYB-KU, CFA633-TMC-KU, CFA633-RMC-KU, DB633-ALTMI-KS5, DB633-ALTMI-KU3, DB633-ALYYH-KS5, DB633-ALYYH-KU3, DB633-BGTMI-KS5, DB633-BGTMI-KU3, DB633-BGYYH-KS5, DB633-BGYYH-KU3, DB633-BKTMI-KS5, DB633-BKTMI-KU3, DB633-BKYYH-KS5, DB633-BKYYH-KU3, DB633-ALRDI-KS5, DB633-ALRDI-KU3, DB633-BGRDI-KS5, DB633-BGRDI-KU3, DB633-BKRDI-KS5, DB633-BKRDI-KU3, DB633-ALTMI-KS3, DB633-ALTMI-KS4, DB633-ALTMI-KU1, DB633-ALTMI-KU2, DB633-ALYYH-KS3, DB633-ALYYH-KS4, DB633-ALYYH-KU1, DB633-ALYYH-KU2, DB633-BGTMI-KS3, DB633-BGTMI-KS4, DB633-BGTMI-KU1, DB633-BGTMI-KU2, DB633-BGYYH-KS3, DB633-BGYYH-KS4, DB633-BGYYH-KU1, DB633-BGYYH-KU2, DB633-BKTMI-KS3, DB633-BKTMI-KS4, DB633-BKTMI-KU1, DB633-BKTMI-KU2, DB633-BKYYH-KS3, DB633-BKYYH-KS4, DB633-BKYYH-KU1, DB633-BKYYH-KU2, DB633-ALRDI-KS3, DB633-ALRDI-KS4, DB633-ALRDI-KU1, DB633-ALRDI-KU2, DB633-BGRDI-KS3, DB633-BGRDI-KS4, DB633-BGRDI-KU1, DB633-BGRDI-KU2, DB633-BKRDI-KS3, DB633-BKRDI-KS4, DB633-BKRDI-KU1, DB633-BKRDI-KU2
Date Issued: August 12, 2010
Summary: We will be phasing in the CFA-633 hardware version v1.5c over the next few months as the inventory of v1.5a modules is exhausted.
Last revision: 1.5a
Description: The currently shipping version of the CFA-633 hardware is v1.5a.

Here is a list of the changes between v1.5a and v1.5c:

* Changed from black painted steel plated bezel to stainless steel bezel. Your front panel bezel should hide the bezel, so this change should not affect the appearance of your product. If your product design exposes part of the CFA-633's black bezel, that area will now show as stainless steel.
* Increased keep-out clearance on PCB around the mounting holes.
* Minor PCB layout changes.
* Some factory configuration jumpers have changed.

Please see the document linked here for photographs showing the difference:
CFA633_v1-5a_to_v1-5c_changes.pdf
Impact: The v1.5c should be a drop-in replacement for any v1.5a application.
Recommendation: If you currently have a semi-custom part number based on v1.5a, we will need to issue a new semi-custom part number based on the v1.5c platform.
Availability: 0-2 months

Part Change Notice #10282

Products Affected: CFA633-YYB-KS, CFA633-TMC-KS, CFA633-RMC-KS, CFA633-YYB-KU, CFA633-TMC-KU, CFA633-RMC-KU, CFA635-TMF-KU1, CFA635-TMF-KU2, CFA635-TFE-KU1, CFA635-TFE-KU2, CFA635-YYE-KU1, CFA635-YYE-KU2, CFA635-YYE-KS, CFA635-TMF-KS, CFA635-TFE-KS, CFA635-TMF-KL, CFA635-TFE-KL, CFA635-TFE-KU, CFA635-YYE-KL, CFA635-TMF-KU, CFA635-YYE-KU, CFA533-YYH-KS, CFA533-YYH-KU, CFA533-TMI-KS, CFA533-TMI-KU, CFA533-YYH-KL, CFA533-TMI-KL, CFA533-YYH-KC, CFA533-TMI-KC, CFA533-TMI-KI, CFA533-YYH-KI
Date Issued: June 6, 2010
Summary: Keypad height change
Description: Over the next 6 months or so, we will be transitioning to a keypad that is 1.5mm taller than the keypad currently shipping on these modules.
Reason: We have found that in all cases that we are aware of, the keypad being 1.5mm taller will alleviate some customer difficulties.
Recommendation: If you need the keypad to remain the same height for your application, please email support@crystalfontz.com so that we can set aside some of the shorter keypads for your company's application.
Availability: ~0-6 months.
Price Change: None.

add a note add a note

User Contributed Notes for CFA633-RMC-KS

clslcdmenu.zip [24KB]
allen at crystalfontz the com Aug 23, 2012 12:38PM
Visual Basic Demonstration Code for 631 and 633 supports:
- Scrolling text (speed options)
- Backlight Control
- Contrast Control
- Catch button press
- Menu Class (maintain a multi-level menu) 
allen at crystalfontz the com Aug 23, 2012 11:36AM
Java on Windows for changing text commands to CRC16 data packets understandable by CFA631, CFA533/CFA633, CFA635, and CFA735 LCDspublic class CRC16 extends Object
{
    public static void main(String[] args)
    {
        byte[] data = new byte[2];
        // hw - fw
        data[0] = 0x01;
        data[1] = 0x00;
        System.out.println("hw -fw req");
        System.out.println(Integer.toHexString(compute(data)));

        // ping
        data[0] = 0x00;
        data[1] = 0x00;
        System.out.println("ping");
        System.out.println(Integer.toHexString(compute(data)));

        // reboot
        data[0] = 0x05;
        data[1] = 0x00;
        System.out.println("reboot");
        System.out.println(Integer.toHexString(compute(data)));

        // clear lcd
        data[0] = 0x06;
        data[1] = 0x00;
        System.out.println("clear lcd");
        System.out.println(Integer.toHexString(compute(data)));

        // set line 1
        data = new byte[18];
        data[0] = 0x07;
        data[1] = 0x10;
        String text = "Test Test Test  ";
        byte[] textByte = text.getBytes();
        for (int i=0; i < text.length(); i++) data[i+2] = textByte[i];
        System.out.println("text 1");
        System.out.println(Integer.toHexString(compute(data)));
    }
    
    private CRC16()
    {
    }
    
    private static final int[] crcLookupTable =
    {
        0x00000,0x01189,0x02312,0x0329B,0x04624,0x057AD,0x06536,0x074BF,
        0x08C48,0x09DC1,0x0AF5A,0x0BED3,0x0CA6C,0x0DBE5,0x0E97E,0x0F8F7,
        0x01081,0x00108,0x03393,0x0221A,0x056A5,0x0472C,0x075B7,0x0643E,
        0x09CC9,0x08D40,0x0BFDB,0x0AE52,0x0DAED,0x0CB64,0x0F9FF,0x0E876,
        0x02102,0x0308B,0x00210,0x01399,0x06726,0x076AF,0x04434,0x055BD,
        0x0AD4A,0x0BCC3,0x08E58,0x09FD1,0x0EB6E,0x0FAE7,0x0C87C,0x0D9F5,
        0x03183,0x0200A,0x01291,0x00318,0x077A7,0x0662E,0x054B5,0x0453C,
        0x0BDCB,0x0AC42,0x09ED9,0x08F50,0x0FBEF,0x0EA66,0x0D8FD,0x0C974,
        0x04204,0x0538D,0x06116,0x0709F,0x00420,0x015A9,0x02732,0x036BB,
        0x0CE4C,0x0DFC5,0x0ED5E,0x0FCD7,0x08868,0x099E1,0x0AB7A,0x0BAF3,
        0x05285,0x0430C,0x07197,0x0601E,0x014A1,0x00528,0x037B3,0x0263A,
        0x0DECD,0x0CF44,0x0FDDF,0x0EC56,0x098E9,0x08960,0x0BBFB,0x0AA72,
        0x06306,0x0728F,0x04014,0x0519D,0x02522,0x034AB,0x00630,0x017B9,
        0x0EF4E,0x0FEC7,0x0CC5C,0x0DDD5,0x0A96A,0x0B8E3,0x08A78,0x09BF1,
        0x07387,0x0620E,0x05095,0x0411C,0x035A3,0x0242A,0x016B1,0x00738,
        0x0FFCF,0x0EE46,0x0DCDD,0x0CD54,0x0B9EB,0x0A862,0x09AF9,0x08B70,
        0x08408,0x09581,0x0A71A,0x0B693,0x0C22C,0x0D3A5,0x0E13E,0x0F0B7,
        0x00840,0x019C9,0x02B52,0x03ADB,0x04E64,0x05FED,0x06D76,0x07CFF,
        0x09489,0x08500,0x0B79B,0x0A612,0x0D2AD,0x0C324,0x0F1BF,0x0E036,
        0x018C1,0x00948,0x03BD3,0x02A5A,0x05EE5,0x04F6C,0x07DF7,0x06C7E,
        0x0A50A,0x0B483,0x08618,0x09791,0x0E32E,0x0F2A7,0x0C03C,0x0D1B5,
        0x02942,0x038CB,0x00A50,0x01BD9,0x06F66,0x07EEF,0x04C74,0x05DFD,
        0x0B58B,0x0A402,0x09699,0x08710,0x0F3AF,0x0E226,0x0D0BD,0x0C134,
        0x039C3,0x0284A,0x01AD1,0x00B58,0x07FE7,0x06E6E,0x05CF5,0x04D7C,
        0x0C60C,0x0D785,0x0E51E,0x0F497,0x08028,0x091A1,0x0A33A,0x0B2B3,
        0x04A44,0x05BCD,0x06956,0x078DF,0x00C60,0x01DE9,0x02F72,0x03EFB,
        0x0D68D,0x0C704,0x0F59F,0x0E416,0x090A9,0x08120,0x0B3BB,0x0A232,
        0x05AC5,0x04B4C,0x079D7,0x0685E,0x01CE1,0x00D68,0x03FF3,0x02E7A,
        0x0E70E,0x0F687,0x0C41C,0x0D595,0x0A12A,0x0B0A3,0x08238,0x093B1,
        0x06B46,0x07ACF,0x04854,0x059DD,0x02D62,0x03CEB,0x00E70,0x01FF9,
        0x0F78F,0x0E606,0x0D49D,0x0C514,0x0B1AB,0x0A022,0x092B9,0x08330,
        0x07BC7,0x06A4E,0x058D5,0x0495C,0x03DE3,0x02C6A,0x01EF1,0x00F78
    };

    public static int compute(byte[] data)
    {
        int newCrc = 0x0FFFF;
        for (int i = 0; i < data.length; i++)
        {
            int lookup = crcLookupTable[(newCrc ^ data[i]) & 0xFF];
            newCrc = (newCrc >> 8) ^ lookup;
        }
        return(~newCrc);
    }
}
  
allen at crystalfontz the com Aug 23, 2012 11:10AM
This is C# (C sharp) used to control CFA633, CFA635, CFA631 USB LCDs and keypad buttons. It's bare-bones. Does not monitor return packets or SCAB/Keypad reports. 

The first thing to improve would be to open the serial port in a class constructor or open method, then close it in a destructor or a close method so that ports aren't continually opening and closing for each packet, as they are in this example code.
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Text;
namespace ConsoleApplication1
{
    publicclassLCD
    {
        public SerialPort Port = newSerialPort("COM3", 115200, Parity.None, 8, StopBits.One);
        public struct PACKET_STRUCT
        {
            public Byte command, data_length;
            public Byte[] data;
            public uint crc;
            public PACKET_STRUCT(Byte[] byteArray, Byte c, Byte length)
            {
                command = c;
                data_length = length;
                data = byteArray;
                crc = uint.MinValue;
            }
        }

        private static uint[] crcLookupTable =
        {
            0x00000,0x01189,0x02312,0x0329B,0x04624,0x057AD,0x06536,0x074BF,
            0x08C48,0x09DC1,0x0AF5A,0x0BED3,0x0CA6C,0x0DBE5,0x0E97E,0x0F8F7,
            0x01081,0x00108,0x03393,0x0221A,0x056A5,0x0472C,0x075B7,0x0643E,
            0x09CC9,0x08D40,0x0BFDB,0x0AE52,0x0DAED,0x0CB64,0x0F9FF,0x0E876,
            0x02102,0x0308B,0x00210,0x01399,0x06726,0x076AF,0x04434,0x055BD,
            0x0AD4A,0x0BCC3,0x08E58,0x09FD1,0x0EB6E,0x0FAE7,0x0C87C,0x0D9F5,
            0x03183,0x0200A,0x01291,0x00318,0x077A7,0x0662E,0x054B5,0x0453C,
            0x0BDCB,0x0AC42,0x09ED9,0x08F50,0x0FBEF,0x0EA66,0x0D8FD,0x0C974,
            0x04204,0x0538D,0x06116,0x0709F,0x00420,0x015A9,0x02732,0x036BB,
            0x0CE4C,0x0DFC5,0x0ED5E,0x0FCD7,0x08868,0x099E1,0x0AB7A,0x0BAF3,
            0x05285,0x0430C,0x07197,0x0601E,0x014A1,0x00528,0x037B3,0x0263A,
            0x0DECD,0x0CF44,0x0FDDF,0x0EC56,0x098E9,0x08960,0x0BBFB,0x0AA72,
            0x06306,0x0728F,0x04014,0x0519D,0x02522,0x034AB,0x00630,0x017B9,
            0x0EF4E,0x0FEC7,0x0CC5C,0x0DDD5,0x0A96A,0x0B8E3,0x08A78,0x09BF1,
            0x07387,0x0620E,0x05095,0x0411C,0x035A3,0x0242A,0x016B1,0x00738,
            0x0FFCF,0x0EE46,0x0DCDD,0x0CD54,0x0B9EB,0x0A862,0x09AF9,0x08B70,
            0x08408,0x09581,0x0A71A,0x0B693,0x0C22C,0x0D3A5,0x0E13E,0x0F0B7,
            0x00840,0x019C9,0x02B52,0x03ADB,0x04E64,0x05FED,0x06D76,0x07CFF,
            0x09489,0x08500,0x0B79B,0x0A612,0x0D2AD,0x0C324,0x0F1BF,0x0E036,
            0x018C1,0x00948,0x03BD3,0x02A5A,0x05EE5,0x04F6C,0x07DF7,0x06C7E,
            0x0A50A,0x0B483,0x08618,0x09791,0x0E32E,0x0F2A7,0x0C03C,0x0D1B5,
            0x02942,0x038CB,0x00A50,0x01BD9,0x06F66,0x07EEF,0x04C74,0x05DFD,
            0x0B58B,0x0A402,0x09699,0x08710,0x0F3AF,0x0E226,0x0D0BD,0x0C134,
            0x039C3,0x0284A,0x01AD1,0x00B58,0x07FE7,0x06E6E,0x05CF5,0x04D7C,
            0x0C60C,0x0D785,0x0E51E,0x0F497,0x08028,0x091A1,0x0A33A,0x0B2B3,
            0x04A44,0x05BCD,0x06956,0x078DF,0x00C60,0x01DE9,0x02F72,0x03EFB,
            0x0D68D,0x0C704,0x0F59F,0x0E416,0x090A9,0x08120,0x0B3BB,0x0A232,
            0x05AC5,0x04B4C,0x079D7,0x0685E,0x01CE1,0x00D68,0x03FF3,0x02E7A,
            0x0E70E,0x0F687,0x0C41C,0x0D595,0x0A12A,0x0B0A3,0x08238,0x093B1,
            0x06B46,0x07ACF,0x04854,0x059DD,0x02D62,0x03CEB,0x00E70,0x01FF9,
            0x0F78F,0x0E606,0x0D49D,0x0C514,0x0B1AB,0x0A022,0x092B9,0x08330,
            0x07BC7,0x06A4E,0x058D5,0x0495C,0x03DE3,0x02C6A,0x01EF1,0x00F78        
        };
        
        public static uint CalculateCRC(byte[] data, int offset, int length)
        {
            uint newCrc = 0x0FFFF;
            for (int i = offset; i < length; i++)
            {
                uint lookup = crcLookupTable[(newCrc ^ data[i]) & 0xFF];
                newCrc = (newCrc >> 8) ^ lookup;
            }
            return (~newCrc);
        }

        public void Send_Packet(ref PACKET_STRUCT packet)
        {
            byte[] linear_array = new byte[26];
            byte[] crc_bytes;
    
            linear_array[0] = packet.command;
            linear_array[1] = packet.data_length;

            if(packet.data_length > 0)
            {
                Array.Copy(packet.data, 0, linear_array, 2, packet.data_length);
            }

            packet.crc = CalculateCRC(linear_array, 0, packet.data_length + 2);
    
            crc_bytes = BitConverter.GetBytes((ushort)packet.crc);
            Array.Copy(crc_bytes, 0, linear_array, packet.data_length + 2, 2);
 
            Port.Open();
            Port.Write(linear_array, 0, packet.data_length + 4);
            Port.Close();
        }

        public LCD()
        {
            PACKET_STRUCT outgoing = new PACKET_STRUCT();
            outgoing.command = 0x06;
            outgoing.data_length = 0;
            outgoing.data = null;
            Send_Packet(ref outgoing);
        }
    }
}

Then you run this to actually make an object out of the aboveusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        staticvoid Main(string[] args)
        {
            LCD LCD = new LCD(); 
        }
    }
}

More Like This One