|
@@ -4,7 +4,7 @@
|
|
* For more information see
|
|
* For more information see
|
|
* http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays
|
|
* http://www.adnbr.co.uk/articles/max7219-and-7-segment-displays
|
|
*
|
|
*
|
|
- * Created on: 29 ñ³÷. 2016
|
|
|
|
|
|
+ * Created on: 29 �іч. 2016
|
|
* Author: shilov
|
|
* Author: shilov
|
|
*/
|
|
*/
|
|
|
|
|
|
@@ -13,7 +13,7 @@
|
|
#include "configuration.h"
|
|
#include "configuration.h"
|
|
#include "max7219.h"
|
|
#include "max7219.h"
|
|
|
|
|
|
-// çàù¸ëêà
|
|
|
|
|
|
+// защёлка
|
|
#define MAX7219_LOAD1 PinSet(PIN_LOAD)
|
|
#define MAX7219_LOAD1 PinSet(PIN_LOAD)
|
|
#define MAX7219_LOAD0 PinRes(PIN_LOAD)
|
|
#define MAX7219_LOAD0 PinRes(PIN_LOAD)
|
|
|
|
|
|
@@ -21,54 +21,54 @@
|
|
#define MAX7219_OFF 0x00
|
|
#define MAX7219_OFF 0x00
|
|
#define MAX7219_BRIGHT 0x08
|
|
#define MAX7219_BRIGHT 0x08
|
|
|
|
|
|
-// ïåðåâîä ÷èñëà 0-7 â íîìåð èíäèêàòîðà
|
|
|
|
|
|
+// перевод чи�ла 0-7 в номер индикатора
|
|
const uint8_t max7219_dig[8] = {
|
|
const uint8_t max7219_dig[8] = {
|
|
0x05,0x01,0x07,0x03,0x04,0x08,0x06,0x02
|
|
0x05,0x01,0x07,0x03,0x04,0x08,0x06,0x02
|
|
};
|
|
};
|
|
|
|
|
|
-// ïðîãðàììíûé SPI. Âûâîäèò áàéò íà÷èíàÿ ñî ñòàðøåãî áèòà
|
|
|
|
-// âûõîäíûå ïèíû -- SCK, MOSI
|
|
|
|
|
|
+// программный SPI. Выводит байт начина� �о �таршего бита
|
|
|
|
+// выходные пины -- SCK, MOSI
|
|
static void spi_SendByte (uint8_t DataByte) {
|
|
static void spi_SendByte (uint8_t DataByte) {
|
|
- uint8_t i; // ñ÷åò÷èê áèò
|
|
|
|
|
|
+ uint8_t i; // �четчик бит
|
|
|
|
|
|
for (i=8; i!=0; i--) {
|
|
for (i=8; i!=0; i--) {
|
|
- PinRes(PIN_CLK); // âûäàëè ñòðîá
|
|
|
|
- if (bit_is_set(DataByte,7)) { // åñëè áèò 7 == 1
|
|
|
|
|
|
+ PinRes(PIN_CLK); // выдали �троб
|
|
|
|
+ if (bit_is_set(DataByte,7)) { // е�ли бит 7 == 1
|
|
PinSet(PIN_DIN); // MOSI = 1
|
|
PinSet(PIN_DIN); // MOSI = 1
|
|
- } else { // åñëè áèò 7 == 0
|
|
|
|
|
|
+ } else { // е�ли бит 7 == 0
|
|
PinRes(PIN_DIN); // MOSI = 0
|
|
PinRes(PIN_DIN); // MOSI = 0
|
|
}
|
|
}
|
|
- PinSet(PIN_CLK); // çàù¸ëêíóëè ñòðîá
|
|
|
|
- DataByte <<= 1; // ñäâèã âëåâî íà 1 áèò
|
|
|
|
|
|
+ PinSet(PIN_CLK); // защёлкнули �троб
|
|
|
|
+ DataByte <<= 1; // �двиг влево на 1 бит
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void MAX7219_writeData(uint8_t reg, uint8_t data)
|
|
void MAX7219_writeData(uint8_t reg, uint8_t data)
|
|
{
|
|
{
|
|
- MAX7219_LOAD0; // îïóñòèëè çàù¸ëêó
|
|
|
|
|
|
+ MAX7219_LOAD0; // опу�тили защёлку
|
|
// spi_SendByte(reg);
|
|
// spi_SendByte(reg);
|
|
// spi_SendByte(data);
|
|
// spi_SendByte(data);
|
|
|
|
|
|
// software spi
|
|
// software spi
|
|
- uint8_t i; // ñ÷åò÷èê áèò
|
|
|
|
|
|
+ uint8_t i; // �четчик бит
|
|
uint16_t sdata = (reg<<8) || data;
|
|
uint16_t sdata = (reg<<8) || data;
|
|
for (i=16; i!=0; i--) {
|
|
for (i=16; i!=0; i--) {
|
|
- PinRes(PIN_CLK); // âûäàëè ñòðîá
|
|
|
|
- if (bit_is_set(sdata,15)) { // åñëè ñòàðøèé áèò == 1
|
|
|
|
|
|
+ PinRes(PIN_CLK); // выдали �троб
|
|
|
|
+ if (bit_is_set(sdata,15)) { // е�ли �тарший бит == 1
|
|
PinSet(PIN_DIN); // MOSI = 1
|
|
PinSet(PIN_DIN); // MOSI = 1
|
|
- } else { // åñëè ñòàðøèé áèò == 0
|
|
|
|
|
|
+ } else { // е�ли �тарший бит == 0
|
|
PinRes(PIN_DIN); // MOSI = 0
|
|
PinRes(PIN_DIN); // MOSI = 0
|
|
}
|
|
}
|
|
- PinSet(PIN_CLK); // çàù¸ëêíóëè ñòðîá
|
|
|
|
- sdata <<= 1; // ñäâèã âëåâî íà 1 áèò
|
|
|
|
|
|
+ PinSet(PIN_CLK); // защёлкнули �троб
|
|
|
|
+ sdata <<= 1; // �двиг влево на 1 бит
|
|
}
|
|
}
|
|
|
|
|
|
- MAX7219_LOAD1; // ïîäíÿëè çàù¸ëêó
|
|
|
|
|
|
+ MAX7219_LOAD1; // подн�ли защёлку
|
|
}
|
|
}
|
|
|
|
|
|
void MAX7219_Init(void) {
|
|
void MAX7219_Init(void) {
|
|
-// íàñòðîéêà ïèíîâ SPI
|
|
|
|
|
|
+// на�тройка пинов SPI
|
|
pinMode(PIN_LOAD, OUTPUT);
|
|
pinMode(PIN_LOAD, OUTPUT);
|
|
pinMode(PIN_DIN, OUTPUT);
|
|
pinMode(PIN_DIN, OUTPUT);
|
|
pinMode(PIN_CLK, OUTPUT);
|
|
pinMode(PIN_CLK, OUTPUT);
|
|
@@ -76,10 +76,10 @@ void MAX7219_Init(void) {
|
|
PinSet(PIN_DIN);
|
|
PinSet(PIN_DIN);
|
|
PinSet(PIN_CLK);
|
|
PinSet(PIN_CLK);
|
|
|
|
|
|
-// Íàñòðîéêà MAX71219
|
|
|
|
- MAX7219_writeData(MAX7219_MODE_DECODE, 0x00); // âñå áåç BCD äåêîäèðîâàíèÿ
|
|
|
|
|
|
+// �а�тройка MAX71219
|
|
|
|
+ MAX7219_writeData(MAX7219_MODE_DECODE, 0x7B); // без BCD декодировани� 2 и 7
|
|
MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT, MAX7219_DIGITS - 1); // Scan limit runs from 0.
|
|
MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT, MAX7219_DIGITS - 1); // Scan limit runs from 0.
|
|
- MAX7219_writeData(MAX7219_MODE_INTENSITY, MAX7219_BRIGHT); // ÿðêîñòü èç 16
|
|
|
|
- MAX7219_writeData(MAX7219_MODE_POWER,MAX7219_ON); // âêëþ÷èëè ïèòàíèå
|
|
|
|
|
|
+ MAX7219_writeData(MAX7219_MODE_INTENSITY, MAX7219_BRIGHT); // �рко�ть: от 1 до 31 � шагом в 2
|
|
|
|
+ MAX7219_writeData(MAX7219_MODE_POWER,MAX7219_ON); // включили питание
|
|
|
|
|
|
}
|
|
}
|