📄 max7219驱动led.c
字号:
#include <REGX51.H>
#include<intrins.h>//标准库文件,程序中使用到了"_nop_()"
//管脚定义
sbit LOAD=P1^2; //MAX7219片选 12脚
sbit DIN=P1^1; //MAX7219串行数据 1脚
sbit CLK=P1^0; //MAX7219串行时钟 13脚
//寄存器宏定义
#define DECODE_MODE 0x09 //译码控制寄存器
#define INTENSITY 0x0A //亮度控制寄存器
#define SCAN_LIMIT 0x0B //扫描界限寄存器
#define SHUT_DOWN 0x0C //关断模式寄存器
#define DISPLAY_TEST 0x0F //测试控制寄存器
//函数声明
void Write7219(unsigned char address,unsigned char dat);
void Initial(void);
void delay(unsigned int t);
//地址、数据发送子程序
void Write7219(unsigned char address,unsigned char dat)
{
unsigned char i;
LOAD=0; //拉低片选线,选中器件
//发送地址
for (i=0;i<8;i++) //移位循环8次
{
CLK=0; //清零时钟总线
DIN=(bit)(address&0x80); //每次取高字节
address<<=1; //左移一位
CLK=1; //时钟上升沿,发送地址
}
//发送数据
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
CLK=1; //时钟上升沿,发送数据
}
LOAD=1; //发送结束,上升沿锁存数据
}
//MAX7219初始化,设置MAX7219内部的控制寄存器
void Initial(void)
{
Write7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1)
Write7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0)
Write7219(DECODE_MODE,0xff); //选用全译码模式
Write7219(SCAN_LIMIT,0x07); //8只LED全用
Write7219(INTENSITY,0x0F); //设置初始亮度
}
//测试程序
void main(void)
{
unsigned char i;
Initial(); //MAX7219初始化
while(1)
{
for(i=1;i<9;i++)
{
Write7219(i,i); //数码管显示1~8
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -