예제 #1
0
        /// <summary>
        ///     Set one of the two alarms on the DS323x module.
        /// </summary>
        /// <param name="alarm">Define the alarm to be set.</param>
        /// <param name="time">Date and time for the alarm.</param>
        /// <param name="type">Type of alarm to set.</param>
        public void SetAlarm(Alarm alarm, DateTime time, AlarmType type)
        {
            byte[] data     = null;
            var    register = Registers.Alarm1Seconds;
            var    element  = 0;

            if (alarm == Alarm.Alarm1Raised)
            {
                data    = new byte[5];
                element = 1;
                data[0] = Converters.ByteToBCD((byte)(time.Second & 0xff));
            }
            else
            {
                data     = new byte[4];
                register = Registers.Alarm2Minutes;
            }
            data[element++] = Converters.ByteToBCD((byte)(time.Minute & 0xff));
            data[element++] = Converters.ByteToBCD((byte)(time.Hour & 0xff));
            if ((type == AlarmType.WhenDayHoursMinutesMatch) || (type == AlarmType.WhenDayHoursMinutesSecondsMatch))
            {
                data[element] = (byte)(DayOfWeekToByte(time.DayOfWeek) | 0x40);
            }
            else
            {
                data[element] = Converters.ByteToBCD((byte)(time.Day & 0xff));
            }
            switch (type)
            {
            //
            //  Alarm 1 interrupts.
            //
            case AlarmType.OncePerSecond:
                data[0] |= 0x80;
                data[1] |= 0x80;
                data[2] |= 0x80;
                data[3] |= 0x80;
                break;

            case AlarmType.WhenSecondsMatch:
                data[1] |= 0x80;
                data[2] |= 0x80;
                data[3] |= 0x80;
                break;

            case AlarmType.WhenMinutesSecondsMatch:
                data[2] |= 0x80;
                data[3] |= 0x80;
                break;

            case AlarmType.WhenHoursMinutesSecondsMatch:
                data[3] |= 0x80;
                break;

            case AlarmType.WhenDateHoursMinutesSecondsMatch:
                break;

            case AlarmType.WhenDayHoursMinutesSecondsMatch:
                data[3] |= 0x40;
                break;

            //
            //  Alarm 2 interupts.
            //
            case AlarmType.OncePerMinute:
                data[0] |= 0x80;
                data[1] |= 0x80;
                data[2] |= 0x80;
                break;

            case AlarmType.WhenMinutesMatch:
                data[1] |= 0x80;
                data[2] |= 0x80;
                break;

            case AlarmType.WhenHoursMinutesMatch:
                data[2] |= 0x80;
                break;

            case AlarmType.WhenDateHoursMinutesMatch:
                break;

            case AlarmType.WhenDayHoursMinutesMatch:
                data[2] |= 0x40;
                break;
            }
            _ds323x.WriteRegisters(register, data);
            //
            //  Turn the relevant alarm on.
            //
            var controlRegister = ControlRegister;
            var bits            = (byte)ControlRegisterBits.A1IE;

            if (alarm == Alarm.Alarm2Raised)
            {
                bits = (byte)ControlRegisterBits.A2IE;
            }
            controlRegister |= (byte)ControlRegisterBits.INTCON;
            controlRegister |= bits;
            ControlRegister  = controlRegister;
        }
예제 #2
0
 public void UpdateDisplay()
 {
     _I2CBus.WriteRegisters(0x0, displayBuffer);
 }