📄 clockface.c
字号:
/* $Id: clockface.c,v 1.15 2005/10/30 19:44:38 simimeie Exp $ * Functions for controlling the "clock face", which consists of 60 LEDs * (12 big, 48 smaller) that are controlled by a MAX 7219 and show the * seconds like an analog clock. */#define BV _BV#include <avr/io.h>#include "clockface.h" /* Connected to PB2 - PB4 on our mainboard */#define CFPORT PORTB#define CFDDR DDRB#define DINPIN PB4#define CLKPIN PB2#define LOADPIN PB3uint8_t clockface_status;uint8_t clockface_lastval;uint8_t clockface_brightness;void clockface_init(void) { CFDDR |= BV(DINPIN); CFDDR |= BV(CLKPIN); CFDDR |= BV(LOADPIN); sendmax7219command(0x0C, 0x00); /* Shutdown */}void sendmax7219command(uint8_t address, uint8_t data) { uint8_t i; for (i = 0; i < 4; i++) { if (address & 0x08) { CFPORT |= BV(DINPIN); } else { CFPORT &= (uint8_t)~BV(DINPIN); } CFPORT |= BV(CLKPIN); CFPORT &= (uint8_t)~BV(CLKPIN); address <<= 1; } for (i = 0; i < 8; i++) { if (data & 0x80) { CFPORT |= BV(DINPIN); } else { CFPORT &= (uint8_t)~BV(DINPIN); } CFPORT |= BV(CLKPIN); CFPORT &= (uint8_t)~BV(CLKPIN); data <<= 1; } CFPORT &= (uint8_t)~BV(DINPIN); CFPORT |= BV(LOADPIN); CFPORT &= (uint8_t)~BV(LOADPIN);}void clockface_update(uint8_t mode, uint8_t seconds) { uint8_t i; if ((seconds == 0) && (mode == 2)) { seconds = 60; } for (i=1; i<=8; i++) { uint8_t j; if (mode == 2) { /* Only the current second LED is on */ j = (0x11 << (seconds & 3)); } else { if (seconds <= 8) { if (seconds == 8) { j = 0xff; } else if (seconds == 0) { j = 0x00; } else { j = ((0xFF >> (8-seconds)) << (8-seconds)); } seconds = 8; } else { j = 0xff; } if (mode == 1) { j = (uint8_t)~j; } } seconds -= 8; sendmax7219command(i, j); } sendmax7219command(0x09, 0x00); /* No decode mode */ sendmax7219command(0x0F, 0x00); /* Disable digit test mode */ sendmax7219command(0x0B, 0x07); /* Scan Limit (all digits on) */ if (clockface_brightness) { sendmax7219command(0x0A, clockface_brightness); /* Intensity */ sendmax7219command(0x0C, 0x01); /* Disable shutdown mode */ } else { sendmax7219command(0x0C, 0x00); /* Shutdown */ }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -