📄 digital_led.c
字号:
#include "..\..\includes.h"
#if CFG_DIGITAL_LED_EN > 0
static void Digital_LED_WriteRAM( INT8U addressRAM, INT8U value );
static void Digital_LED_WriteReg( INT8U reg, INT8U value );
static void MAX7219_Write( INT8U address, INT8U value );
static void MAX7219_SendByte( INT8U value );
/**********************************************************************************
* ASCII to SEVEN-SEGMENT conversion table
* a
* ------
* f | | b
* | g |
* Note: The segments are mapped as follows: ------
* e | | c
* a b c d e f g | d |
* -- -- -- -- -- -- -- -- ------
* B7 B6 B5 B4 B3 B2 B1 B0
**********************************************************************************/
static INT8U code DispASCIItoSegTbl[] = { /* ASCII to SEVEN-SEGMENT conversion table */
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00, /* ' ' */
0x00, /* '!', No seven-segment conversion for exclamation point */
0x44, /* '"', Double quote */
0x00, /* '#', Pound sign */
0x00, /* '$', No seven-segment conversion for dollar sign */
0x00, /* '%', No seven-segment conversion for percent sign */
0x00, /* '&', No seven-segment conversion for ampersand */
0x40, /* ''', Single quote */
0x9C, /* '(', Same as '[' */
0xF0, /* ')', Same as ']' */
0x00, /* '*', No seven-segment conversion for asterix */
0x00, /* '+', No seven-segment conversion for plus sign */
0x00, /* ',', No seven-segment conversion for comma */
0x02, /* '-', Minus sign */
0x01, /* '.', No seven-segment conversion for period */
0x00, /* '/', No seven-segment conversion for slash */
0xFC, /* '0' */
0x60, /* '1' */
0xDA, /* '2' */
0xF2, /* '3' */
0x66, /* '4' */
0xB6, /* '5' */
0xBE, /* '6' */
0xE0, /* '7' */
0xFE, /* '8' */
0xF6, /* '9' */
0x00, /* ':', No seven-segment conversion for colon */
0x00, /* ';', No seven-segment conversion for semi-colon */
0x00, /* '<', No seven-segment conversion for less-than sign */
0x12, /* '=', Equal sign */
0x00, /* '>', No seven-segment conversion for greater-than sign */
0xCA, /* '?', Question mark */
0x00, /* '@', No seven-segment conversion for commercial at-sign */
0xEE, /* 'A' */
0x3E, /* 'B', Actually displayed as 'b' */
0x9C, /* 'C' */
0x7A, /* 'D', Actually displayed as 'd' */
0x9E, /* 'E' */
0x8E, /* 'F' */
0xBC, /* 'G', Actually displayed as 'g' */
0x6E, /* 'H' */
0x60, /* 'I', Same as '1' */
0x78, /* 'J' */
0x00, /* 'K', No seven-segment conversion */
0x1C, /* 'L' */
0x00, /* 'M', No seven-segment conversion */
0x2A, /* 'N', Actually displayed as 'n' */
0xFC, /* 'O', Same as '0' */
0xCE, /* 'P' */
0x00, /* 'Q', No seven-segment conversion */
0x0A, /* 'R', Actually displayed as 'r' */
0xB6, /* 'S', Same as '5' */
0x1E, /* 'T', Actually displayed as 't' */
0x7C, /* 'U' */
0x00, /* 'V', No seven-segment conversion */
0x00, /* 'W', No seven-segment conversion */
0x00, /* 'X', No seven-segment conversion */
0x76, /* 'Y' */
0x00, /* 'Z', No seven-segment conversion */
0x00, /* '[' */
0x00, /* '\', No seven-segment conversion */
0x00, /* ']' */
0x00, /* '^', No seven-segment conversion */
0x00, /* '_', Underscore */
0x00, /* '`', No seven-segment conversion for reverse quote */
0xFA, /* 'a' */
0x3E, /* 'b' */
0x1A, /* 'c' */
0x7A, /* 'd' */
0xDE, /* 'e' */
0x8E, /* 'f', Actually displayed as 'F' */
0xBC, /* 'g' */
0x2E, /* 'h' */
0x20, /* 'i' */
0x78, /* 'j', Actually displayed as 'J' */
0x00, /* 'k', No seven-segment conversion */
0x1C, /* 'l', Actually displayed as 'L' */
0x00, /* 'm', No seven-segment conversion */
0x2A, /* 'n' */
0x3A, /* 'o' */
0xCE, /* 'p', Actually displayed as 'P' */
0x00, /* 'q', No seven-segment conversion */
0x0A, /* 'r' */
0xB6, /* 's', Actually displayed as 'S' */
0x1E, /* 't' */
0x38, /* 'u' */
0x00, /* 'v', No seven-segment conversion */
0x00, /* 'w', No seven-segment conversion */
0x00, /* 'x', No seven-segment conversion */
0x76, /* 'y', Actually displayed as 'Y' */
0x00 /* 'z', No seven-segment conversion */
};
//--------------------------------------------------------------
// 初始化数码管
//--------------------------------------------------------------
void Digital_LED_Init( void )
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
// 确定数码管的个数
Digital_LED_WriteReg( SCAN_LIMIT_REG, MAX_DIGITAL_LED_NUM-1 );
// 设置数码管的亮度
Digital_LED_WriteReg( INTENSITY_ADJUST_REG, 2 );
// 选择译码方式
Digital_LED_WriteReg( DECODE_MODE_REG, 0x00 );
// 选择正常工作状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -