#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIN = P1^0; // 數(shù)據(jù)輸入
sbit CLK = P1^1; // 時鐘
sbit CS = P1^2; // 片選
// MAX7219寄存器地址
#define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUTDOWN 0x0C
#define DISPLAY_TEST 0x0F
// 延時函數(shù)
void delay(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
// 向MAX7219寫入數(shù)據(jù)
void MAX7219_Write(uchar address, uchar dat) {
uchar i;
CS = 0; // 使能MAX7219
// 發(fā)送地址
for(i = 8; i > 0; i--) {
CLK = 0;
DIN = (address & 0x80) ? 1 : 0; // 發(fā)送最高位
address <<= 1;
CLK = 1;
}
// 發(fā)送數(shù)據(jù)
for(i = 8; i > 0; i--) {
CLK = 0;
DIN = (dat & 0x80) ? 1 : 0; // 發(fā)送最高位
dat <<= 1;
CLK = 1;
}
CS = 1; // 禁用MAX7219
}
// 初始化MAX7219
void MAX7219_Init() {
MAX7219_Write(SHUTDOWN, 0x01); // 退出關機模式
MAX7219_Write(DISPLAY_TEST, 0x00); // 關閉顯示測試
MAX7219_Write(DECODE_MODE, 0x00); // 不使用BCD解碼
MAX7219_Write(SCAN_LIMIT, 0x07); // 掃描所有8位
MAX7219_Write(INTENSITY, 0x0F); // 設置亮度為最大
}
// 主函數(shù)
void main() {
uchar i;
MAX7219_Init(); // 初始化MAX7219
while(1) {
// 顯示0-7的數(shù)字
for(i = 1; i <= 8; i++) {
MAX7219_Write(i, i);
delay(500); // 延時500ms
}
}
} |