Version 1.1
This commit is contained in:
229
Core/Src/DS_MAX7219.c
Normal file
229
Core/Src/DS_MAX7219.c
Normal file
@@ -0,0 +1,229 @@
|
||||
#include "DS_MAX7219.h"
|
||||
|
||||
void DS_MAX7219_Init(DS_MAX7219* Display, SPI_HandleTypeDef* SPI, GPIO_TypeDef* PORT_CS, uint16_t Pin_CS)
|
||||
{
|
||||
HAL_Delay(500);
|
||||
Display->SPI = SPI;
|
||||
Display->Intensivity = 8;
|
||||
Display->ScanLimit = 7;
|
||||
Display->DecodeMode = 0;
|
||||
Display->EnableDecodeMode = true;
|
||||
Display->PORT_CS = PORT_CS;
|
||||
Display->Pin_CS = Pin_CS;
|
||||
|
||||
|
||||
Display->DisplaData[0]=
|
||||
Display->DisplaData[1]=
|
||||
Display->DisplaData[2]=
|
||||
Display->DisplaData[3]=
|
||||
Display->DisplaData[4]=
|
||||
Display->DisplaData[5]=
|
||||
Display->DisplaData[6]=
|
||||
Display->DisplaData[7]=' ';
|
||||
|
||||
|
||||
|
||||
__DS_MAX7219_SendConfigData(Display);
|
||||
DS_MAX7219_UpdateDisplay(Display);
|
||||
}
|
||||
|
||||
|
||||
void DS_MAX7219_Print(DS_MAX7219* Display, int64_t Number)
|
||||
{
|
||||
if(Number<0)
|
||||
{
|
||||
Display->DisplaData[0] = '-';
|
||||
Number = Number * -1;
|
||||
}
|
||||
else
|
||||
Display->DisplaData[0] = ' ';
|
||||
|
||||
|
||||
uint8_t t = Number/1000000;
|
||||
|
||||
if(t==0)
|
||||
Display->DisplaData[1] = ' ';
|
||||
else if(t<10)
|
||||
{
|
||||
Display->DisplaData[1] = t;
|
||||
Number = Number - t*1000000;
|
||||
}
|
||||
else
|
||||
{
|
||||
Display->DisplaData[0]=
|
||||
Display->DisplaData[1]=
|
||||
Display->DisplaData[2]=
|
||||
Display->DisplaData[3]=
|
||||
Display->DisplaData[4]=
|
||||
Display->DisplaData[5]=
|
||||
Display->DisplaData[6]=
|
||||
Display->DisplaData[7]='9';
|
||||
}
|
||||
|
||||
|
||||
t = Number / 100000;
|
||||
if(t==0)
|
||||
Display->DisplaData[2] = ' ';
|
||||
else
|
||||
{
|
||||
Display->DisplaData[2] = t;
|
||||
Number = Number - t*100000;
|
||||
}
|
||||
|
||||
t = Number / 10000;
|
||||
if(t==0)
|
||||
Display->DisplaData[3] = ' ';
|
||||
else
|
||||
{
|
||||
Display->DisplaData[3] = t;
|
||||
Number = Number - t*10000;
|
||||
}
|
||||
|
||||
t = Number / 1000;
|
||||
if(t==0)
|
||||
Display->DisplaData[4] = ' ';
|
||||
else
|
||||
{
|
||||
Display->DisplaData[4] = t;
|
||||
Number = Number - t*1000;
|
||||
}
|
||||
|
||||
t = Number / 100;
|
||||
if(t==0)
|
||||
Display->DisplaData[5] = ' ';
|
||||
else
|
||||
{
|
||||
Display->DisplaData[5] = t;
|
||||
Number = Number - t*100;
|
||||
}
|
||||
|
||||
t = Number / 10;
|
||||
if(t==0)
|
||||
Display->DisplaData[6] = ' ';
|
||||
else
|
||||
{
|
||||
Display->DisplaData[6] = t;
|
||||
Number = Number - t*10;
|
||||
}
|
||||
|
||||
Display->DisplaData[7] = Number;
|
||||
|
||||
}
|
||||
|
||||
void DS_MAX7219_UpdateDisplay(DS_MAX7219* Display)
|
||||
{
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
HAL_GPIO_WritePin(Display->PORT_CS, Display->Pin_CS, GPIO_PIN_RESET);
|
||||
uint16_t Data = (i+1<<8) + __DS_MAX7219_ConvertSymbol(Display->DisplaData[7-i]);
|
||||
HAL_SPI_Transmit(Display->SPI, (uint8_t*) &Data, 1 , 100);
|
||||
HAL_GPIO_WritePin(Display->PORT_CS, Display->Pin_CS, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void DS_MAX7219_ConfigureDisplay(DS_MAX7219* Display, uint8_t DecodeMode, uint8_t Intensivity, uint8_t ScanLimit)
|
||||
{
|
||||
Display->DecodeMode = DecodeMode;
|
||||
|
||||
if(Intensivity>0xF)
|
||||
Display->Intensivity = 0xF;
|
||||
else
|
||||
Display->Intensivity = Intensivity;
|
||||
|
||||
if(ScanLimit>0x7)
|
||||
Display->ScanLimit = 0x7;
|
||||
else
|
||||
Display->ScanLimit = ScanLimit;
|
||||
|
||||
|
||||
__DS_MAX7219_SendConfigData(Display);
|
||||
}
|
||||
|
||||
void __DS_MAX7219_SendConfigData(DS_MAX7219* Display)
|
||||
{
|
||||
uint16_t Data[5];
|
||||
//0 - DecodeMode 0x9;
|
||||
//1 - Intensivity 0xA;
|
||||
//2 - ScanLimit 0xB;
|
||||
//3 - Shutdown mode 0xC;
|
||||
//4 - Display Test 0xF;
|
||||
|
||||
if(Display->EnableDecodeMode)
|
||||
Data[0] = 0x9FF;
|
||||
else
|
||||
Data[0] = 0x900;
|
||||
|
||||
Data[1] = 0xA00 + Display->Intensivity;
|
||||
Data[2] = 0xB00 + Display->ScanLimit;
|
||||
Data[3] = 0xC00 + 1;
|
||||
Data[4] = 0xF00 + 0;
|
||||
|
||||
for (uint8_t i = 0; i < 5; i++)
|
||||
{
|
||||
HAL_GPIO_WritePin(Display->PORT_CS, Display->Pin_CS, GPIO_PIN_RESET);
|
||||
HAL_SPI_Transmit(Display->SPI, (uint8_t*) &Data[i], 1, 100);
|
||||
HAL_GPIO_WritePin(Display->PORT_CS, Display->Pin_CS, GPIO_PIN_SET);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint8_t __DS_MAX7219_ConvertSymbol(char Symbol)
|
||||
{
|
||||
switch (Symbol)
|
||||
{
|
||||
// case '0':
|
||||
// return 0;
|
||||
// break;
|
||||
// case '1':
|
||||
// return 1;
|
||||
// break;
|
||||
// case '2':
|
||||
// return 3;
|
||||
// break;
|
||||
// case '3':
|
||||
// return 3;
|
||||
// break;
|
||||
// case '4':
|
||||
// return 4;
|
||||
// break;
|
||||
// case '5':
|
||||
// return 5;
|
||||
// break;
|
||||
// case '6':
|
||||
// return 6;
|
||||
// break;
|
||||
// case '7':
|
||||
// return 7;
|
||||
// break;
|
||||
// case '8':
|
||||
// return 8;
|
||||
// break;
|
||||
// case '9':
|
||||
// return 9;
|
||||
// break;
|
||||
case '-':
|
||||
return 10;
|
||||
break;
|
||||
case 'E':
|
||||
return 11;
|
||||
break;
|
||||
case 'H':
|
||||
return 12;
|
||||
break;
|
||||
case 'L':
|
||||
return 13;
|
||||
break;
|
||||
case 'P':
|
||||
return 14;
|
||||
break;
|
||||
case ' ':
|
||||
return 15;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Symbol;
|
||||
}
|
||||
Reference in New Issue
Block a user