📄 max7219级连.txt
字号:
#include <at89x51.h>
#include <stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit din=P2^0;
sbit load=P2^1;
sbit clk=P2^2;
//uchar codeseg[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
void delay(uint i)
{
uchar j;
while(i--)
for(j=0;j<120;j++);
}
void send(uchar outdata) //写串行数据子程序
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=outdata&0x80;
outdata=outdata<<1;
if(temp==0x80)
{
clk=0;
din=1;
_nop_();
clk=1; //提供上升沿
}
else
{
clk=0;
din=0;
_nop_();
clk=1; //提供上升沿
}
}
}
void write(uchar addr1,uchar num1,uchar addr2,uchar num2)
{
load=0; //当LOAD为低电平时,芯片接收来自DIN的数据,接收完毕,
_nop_();
send(addr1);
_nop_();
send(num1);
_nop_();
clk=0;
_nop_();
clk=1; //从DIN输入的数据经过16.5个CLK脉冲后移到DOUT引脚上。
//所以发完16个数据后必须加一个脉冲,否则数据传不到第二片
send(addr2);
_nop_();
send(num2);
load=1; //LOAD回到高电平时,接收的数据将被锁定
}
void init()
{
write(0x09,0xff,0x09,0xff); //设置译码方式,使用bcd译码
write(0x0a,0x0a,0x0a,0x0a); //设置亮度
write(0x0b,0x07,0x0b,0x07); //设置扫描的位数
write(0x0c,0x01,0x0c,0x01); //设置待机方式
} //先设置后面一片的工作方式,在设置前面一片的工作方式
void main()
{
write(0x0f,0x01,0x0f,0x01);
_nop_();
_nop_();
_nop_();
_nop_();
write(0x0f,0x00,0x0f,0x00); //测试显示
init(); //max7219初始化
while(1)
{
write(0x01,1,0x01,9);//先送位,再送段/先发送给第一片
write(0x02,2,0x02,2);
write(0x03,3,0x03,3);
write(0x04,4,0x04,4);
write(0x05,5,0x05,5);
write(0x06,6,0x06,6);
write(0x07,7,0x07,7);
write(0x08,8,0x08,8);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -