123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using System;
- using FunnyCommon.Remoting.Interfaces;
- using FunnyCommon.Shared;
- namespace FunnyLed595
- {
- public class Led74Hc595Driver : IDisposable
- {
- private readonly IRemoteGpoutManager _manager;
- private readonly byte _data;
- private readonly byte _cs;
- private readonly byte _clk;
- private IDisposable _bulk;
- public Led74Hc595Driver(byte data, byte clk, byte cs, IRemoteGpoutManager manager)
- {
- _manager = manager;
- _data = data;
- _clk = clk;
- _cs = cs;
- using (_manager.CreateBulk())
- {
- _manager.Allocate(_data);
- _manager.Allocate(_clk);
- _manager.Allocate(_cs);
- _manager.WritePin(_data, false);
- _manager.WritePin(_clk, false);
- _manager.WritePin(_cs, false);
- }
- _bulk = _manager.CreateBulk();
- }
- public void WriteBit(bool value)
- {
- _manager.WritePin(_data, value);
- _manager.Pulse(_clk);//每写一个位 一次时钟脉冲
- }
- public void WriteByte(byte b)
- {
- //从最高位开始写入
- for (var i = 8; i >= 1; i--)
- {
- WriteBit((b & 0x80) > 0);
- b <<= 1;
- }
- }
- public void Flush()
- {
- _manager.Pulse(_cs);
- _bulk.Dispose();
- _bulk = _manager.CreateBulk();
- }
- public void Dispose()
- {
- _manager.Dispose();
- }
- }
- }
|