?? max7219.c
字號(hào):
#include <reg51.h>
/*********************** 定義MAX7219 內(nèi)部寄存器 **********************/
#define REG_DECODE 0x09 // 譯碼方式寄存器
#define REG_INTENSITY 0x0a // 亮度寄存器
#define REG_SCAN_LIMIT 0x0b // 掃描界限寄存器
#define REG_SHUTDOWN 0x0c // 停機(jī)寄存器
#define REG_DISPLAY_TEST 0x0f // 顯示測(cè)試寄存器
#define INTENSITY_MIN 0x00 // 最小顯示亮度
#define INTENSITY_MAX 0x0f // 最大顯示亮度
/*********************** 定義MAX7219 端口信號(hào) ************************/
sbit DATA=P1^0;
sbit LOAD=P1^1;
sbit CLK=P1^2;
/************************** 定義顯示常數(shù)表格 *************************/
static const struct {
char ascii;
char segs;
} Font[] = {
{' ', 0x00},{'0', 0x7e},{'1', 0x30},{'2', 0x6d},{'3', 0x79},{'4', 0x33},
{'5', 0x5b},{'6', 0x5f},{'7', 0x70},{'8', 0x7f},{'9', 0x7b},{'A', 0x77},
{'B', 0x1f},{'C', 0x4e},{'D', 0x3d},{'E', 0x4f},{'F', 0x47},{'H',0x37},
{'L',0x0e}, {'O',0x7e},{'\0', 0x00}
};
/************************** 函數(shù)原型說明 *****************************/
static void Write (unsigned char reg_number, unsigned char dataout);
static void SendByte (unsigned char dataout);
static unsigned char LookupCode (char character);
void Init (void);
void ShutdownStart (void);
void ShutdownStop (void);
void DisplayTestStart (void);
void DisplayTestStop (void);
void SetBrightness (char brightness);
void Clear (void);
void DisplayChar (char digit, char character);
/************************************************************************
* 函數(shù)原型:void Init()
* 功 能: 對(duì)MAX7219進(jìn)行初始化,調(diào)用任何其他函數(shù)之前必需先調(diào)用此函數(shù)
*************************************************************************/
void Init (void) {
DATA=1;LOAD=1;CLK=1;
Write(REG_SCAN_LIMIT, 7); // 掃描8位數(shù)字
Write(REG_DECODE, 0x00); // 設(shè)置不譯碼方式
ShutdownStop(); // 結(jié)束停機(jī)方式,正常工作
DisplayTestStop(); // 結(jié)束顯示測(cè)試,正常工作
Clear(); // 清零全部顯示器
SetBrightness(INTENSITY_MAX); // 設(shè)置最大亮度
}
/*************************************************************************
* 函數(shù)原型:void ShutdownStart()
* 功 能: 進(jìn)入停機(jī)方式
**************************************************************************/
void ShutdownStart (void) {
Write(REG_SHUTDOWN, 0);
}
/*************************************************************************
* 函數(shù)原型:void ShutdownStop()
* 功 能:結(jié)束停機(jī)方式
**************************************************************************/
void ShutdownStop (void) {
Write(REG_SHUTDOWN, 1);
}
/*************************************************************************
* 函數(shù)原型:void DisplayTestStart()
* 功 能:?jiǎn)?dòng)顯示測(cè)試
**************************************************************************/
void DisplayTestStart (void) {
Write(REG_DISPLAY_TEST, 1);
}
/*************************************************************************
* 函數(shù)原型:void DisplayTestStop()
* 功 能:結(jié)束顯示測(cè)試
**************************************************************************/
void DisplayTestStop (void) {
Write(REG_DISPLAY_TEST, 0);
}
/*************************************************************************
* 函數(shù)原型:void SetBrightness(char brightness)
* 功 能:設(shè)置LED顯示亮度
* 參 數(shù):亮度值(brightness = 0-15)
*************************************************************************/
void SetBrightness (char brightness) {
brightness &= 0x0f; // 屏蔽參數(shù)中的多余位
Write(REG_INTENSITY, brightness); // 設(shè)置亮度
}
/*************************************************************************
* 函數(shù)原型:void Clear()
* 功 能:關(guān)閉全部顯示器
**************************************************************************/
void Clear (void) {
char i;
for (i=1; i <= 8; i++)
Write(i, 0x00); // 關(guān)閉全部顯示器
}
/*************************************************************************
* 函數(shù)原型:void DisplayChar(char digit, char character)
* 功 能:在指定數(shù)位上顯示字符
* 參 數(shù):digit = 數(shù)位(0-7)
character = 顯示字符(0-9, A-Z)
*************************************************************************/
void DisplayChar (char digit, char character) {
Write(digit, LookupCode(character));
}
/*************************************************************************
* 函數(shù)原型:static unsigned char LookupCode(char character)
* 功 能:查段碼表將顯示字符轉(zhuǎn)換為顯示段碼
* 參 數(shù):character = 顯示字符
* 返 回 值:顯示段碼
**************************************************************************/
static unsigned char LookupCode (char character) {
char i;
for (i = 0; Font[i].ascii; i++) // 查表搜尋顯示字符的ASCII碼
if (character == Font[i].ascii)
return Font[i].segs; // 找到則返回對(duì)應(yīng)的顯示段碼
return 0; // 未找到則返回0
}
/*************************************************************************
* 函數(shù)原型:static void Write (unsigned char reg_number, unsigned char dataout)
* 功 能:向指定的MAX7219內(nèi)部寄存器寫入數(shù)據(jù)
* 參 數(shù): reg_number = MAX7219內(nèi)部寄存器地址
dataout = 待寫入的數(shù)據(jù)
**************************************************************************/
static void Write (unsigned char reg_number, unsigned char dataout) {
LOAD=1; // 使LOAD變高,啟動(dòng)串行數(shù)據(jù)發(fā)送
SendByte(reg_number); // 發(fā)送MAX7219內(nèi)部寄存器地址
SendByte(dataout); // 發(fā)送待寫入的數(shù)據(jù)
LOAD=0; // 使LOAD變低,鎖存數(shù)據(jù)
LOAD=1; // 使LOAD變高,串行數(shù)據(jù)結(jié)束
}
/*************************************************************************
* 函數(shù)原型:static void SendByte (unsigned char dataout)
* 功 能:向MAX7219發(fā)送一個(gè)字節(jié)串行數(shù)據(jù)
* 參 數(shù):dataout = 待發(fā)送的數(shù)據(jù)
**************************************************************************/
static void SendByte (unsigned char dataout) {
char i;
for (i=8; i>0; i--) {
unsigned char mask = 1 << (i - 1);
CLK=0; // 使CLK變低
if (dataout & mask) // 發(fā)送一位數(shù)據(jù)"1"或"0"
DATA=1;
else
DATA=0;
CLK=1; // 使CLK變高
}
}
/**************************************************************************
* 函數(shù)原型:main()
* 功 能:初始化MAX7219,設(shè)置亮度,在指定數(shù)位上顯示字符
**************************************************************************/
void main(void) {
Init (); // 初始化MAX7219
ShutdownStart (); // 停機(jī)
ShutdownStop (); // 結(jié)束停機(jī)
DisplayTestStart (); // 顯示測(cè)試
DisplayTestStop (); // 結(jié)束顯示測(cè)試
SetBrightness (0x02); // 設(shè)置顯示亮度
DisplayChar (0x01, '0'); // 第1位LED顯示0
DisplayChar (0x02, '1'); // 第2位LED顯示1
DisplayChar (0x03, '2'); // 第3位LED顯示2
DisplayChar (0x04, '3'); // 第4位LED顯示3
Clear (); // 關(guān)閉全部LED顯示器
DisplayChar (0x05, 'A'); // 第5位LED顯示A
DisplayChar (0x06, 'B'); // 第6位LED顯示B
DisplayChar (0x07, 'C'); // 第7位LED顯示C
DisplayChar (0x08, 'D'); // 第8位LED顯示D
DisplayChar (0x08, '\0'); // 第8位LED顯示“暗碼”
while(1);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -