📄 max7219.c
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define decodemode 0x09//译码模式寄存器
#define intensity 0x0a//亮度寄存器
#define scanlimt 0x0b //扫描位数寄存器
#define shutdown 0x0c //低功耗模式寄存器
#define displaytest 0x0f //显示寄存器
sbit DIN=P1^0;
sbit LOAD=P1^1;
sbit CLOCK=P1^2;
uchar disbuf[8]={0,0,0,0,0,0,0,0};
/*******对于12MHZ时钟,延时1ms**********/
void delay(uint t)
{
uint i;
while(t--)
{
for(i=0;i<125;i++)
{}
}
}
/**********向MAX7219写入字节(8位)***************/
void sendchar(uchar ch)
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=ch&0x80;
ch=ch<<1;
if(temp)
{
DIN=1;
CLOCK=0;
CLOCK=1;
}
else
{
DIN=0;
CLOCK=0;
CLOCK=1;
}
}
}
/***********向MAX7219写入字(16位)*********/
void writeword(uchar address,uchar num)
{
LOAD=0;
_nop_();
sendchar(address);
_nop_();
sendchar(num);
_nop_();
LOAD=1;
}
/***********MAX7219初始化*************/
void init()
{
//P1=0xff;
writeword(scanlimt,0x07);//扫描位数设置为8位数码管;
writeword(decodemode,0xff);//译码模式设置为BCD译码;
writeword(intensity,0x0a);//亮度级别设置;
writeword(shutdown,0x01);//低功耗模式设置为正常模式;
}
void main()
{
init();
writeword(displaytest,0x01);//开始显示测试,点亮所有LED
delay(2);
writeword(displaytest,0x00);//关显示;
while(1)
{
// uchar i,j;
//8个数码管间隔2s同时变化显示0-9的数字
// for (i=0;i<=9;i++)
// {
// delay(1000);
init();
// for(j=0;j<=7;j++)
// disbuf[j]=i;
//8个数码管分别显示1-8数字
writeword(0x01,1);//第一个数码管显示1
writeword(0x02,2);
writeword(0x03,3);
writeword(0x04,4);
writeword(0x05,5);
writeword(0x06,6);
writeword(0x07,7);
writeword(0x08,8);//第八个数码管显示8
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -