コード例 #1
0
        private static void ShiftBytes(ShiftRegister sr, int value)
        {
            if (sr.BitLength > 32)
            {
                throw new ArgumentException($"{nameof(ShiftBytes)}: bit length must be  8-32.");
            }

            for (int i = (sr.BitLength / 8) - 1; i > 0; i--)
            {
                int shift            = i * 8;
                int downShiftedValue = value >> shift;
                sr.ShiftByte((byte)downShiftedValue);
            }

            sr.ShiftByte((byte)value);
        }
コード例 #2
0
        private static void BinaryCounter(ShiftRegister sr, CancellationTokenSource cancellationSource)
        {
            Console.WriteLine($"Write 0 through 255");
            for (int i = 0; i < 256; i++)
            {
                sr.ShiftByte((byte)i);
                Thread.Sleep(50);
                sr.ShiftClear();

                if (IsCanceled(sr, cancellationSource))
                {
                    return;
                }
            }

            sr.ShiftClear();

            if (sr.BitLength > 8)
            {
                Console.WriteLine($"Write 256 through 4095; pick up the pace");
                for (int i = 256; i < 4096; i++)
                {
                    ShiftBytes(sr, i);
                    Thread.Sleep(25);
                    sr.ShiftClear();

                    if (IsCanceled(sr, cancellationSource))
                    {
                        return;
                    }
                }
            }

            sr.ShiftClear();
        }
コード例 #3
0
        private static void DemonstrateShiftingBytes(ShiftRegister sr, CancellationTokenSource cancellationSource)
        {
            int delay = 1000;

            Console.WriteLine($"Write a set of values with {nameof(sr.ShiftByte)}");
            // this can be specified as ints or binary notation -- its all the same
            var values = new byte[] { 0b1, 23, 56, 127, 128, 170, 0b_1010_1010 };

            foreach (var value in values)
            {
                Console.WriteLine($"Value: {value}");
                sr.ShiftByte(value);
                Thread.Sleep(delay);
                sr.ShiftClear();

                if (IsCanceled(sr, cancellationSource))
                {
                    return;
                }
            }

            byte litPattern = 0b_1111_1111; // 255

            Console.WriteLine($"Write {litPattern} to each register with {nameof(sr.ShiftByte)}");
            for (int i = 0; i < sr.BitLength / 8; i++)
            {
                sr.ShiftByte(litPattern);
            }

            Thread.Sleep(delay);

            Console.WriteLine("Output disable");
            sr.OutputEnable = false;
            Thread.Sleep(delay * 2);

            Console.WriteLine("Output enable");
            sr.OutputEnable = true;
            Thread.Sleep(delay * 2);

            Console.WriteLine($"Write 23 then 56 with {nameof(sr.ShiftByte)}");
            sr.ShiftByte(23);
            Thread.Sleep(delay);
            sr.ShiftByte(56);
            sr.ShiftClear();
        }
コード例 #4
0
        private static void BinaryCounter(ShiftRegister sr, CancellationTokenSource cancellationSource)
        {
            int endValue = 1000;

            Console.WriteLine($"Write 0 through {endValue}");
            var delay = 10;

            for (int i = 0; i < endValue; i++)
            {
                sr.ShiftByte((byte)i);
                Thread.Sleep(delay);
                sr.ShiftClear();

                if (IsCanceled(sr, cancellationSource))
                {
                    return;
                }
            }
        }