⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clockface.c

📁 WWVB receiver using AVR.
💻 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 + -