我参照一本C51书和MAX7219的数据手册,搭了个MAX7219控制共阴极数码管的电路。原理图见附件。源程序如下:
#include <stc89c52rc.h>
#include <absacc.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DIN=P1^0;
sbit CLK=P1^1;
sbit LOAD=P1^2;
/*void delay(uint x)
{
uint k,z;
for(k=0;k<x;k++)
for(z=300;z>0;z--);
} */
void send(uchar add,uchar dat)
{
uchar ADS,i,j;
LOAD=0;
i=0;
while(i<16)
{
if(i<8) ADS=add;
else ADS=dat;
for(j=8;j>=1;j--)
{
DIN=ADS&0X80;
ADS=ADS<<1;
CLK=1;
CLK=0;
}
i=i+8;
//delay(20);
}
LOAD=1;
}
void main(void)
{
send(0x0c,0x01); //初始化MAX7219,开机
send(0x0b,0x01); //接两个数码管
send(0x0a,0xf5); //亮度控制,11/32
send(0x09,0xff); //译码方式,code B 译码7-0
while(1)
{
send(0x01,0x81); //在两个数码管上显示1~2,带小数点显示
send(0x02,0x82);
}
}
程序下载进去以后,发现所用的两个数码管位选一直是高电平。
我搞不明白,请高手指教,谢谢! |