|
//**************************************************
//MAX7219C.C
#include
#include // _nop_() 使用空指令
#define uchar unsigned char
#define uint unsigned int
sbit LOAD =P1^4;
sbit CLK =P1^3;
sbit DIN =P1^2;
uchar addr[16]; //显示数据表每位2个(地址+数据)
//**************************************************
void delay1ms(uint x)
{
uchar a,b;
uint i;
for (i=x;i>0;i--)
for(a=10;a>0;a--)
for(b=44;b>0;b--);
}
//**************************************************
//发送一个字节的数据
void Send_beyt(uchar Data)
{
uchar a;
for(a=8;a!=0;a--)
{
CLK=0;
if((Data&0x80)==0)
DIN=0;
else
DIN=1;
Data<<=1;
CLK=1;
_nop_();
_nop_();
}
}
//**************************************************
//发送多数据,addr是数据表的首地址,numb是数据的个数
void Send_all (uchar *addr,uchar numb)
{
uchar a,b=0;
for (a=numb;a>0;a--)
{
LOAD=0;
Send_beyt(addr);
b++;
Send_beyt(addr);
b++;
LOAD=1;
}
}
//**************************************************
//MAX7219初始化程序
/*
采用BCD格式在第2位显示8,则发送0x02后发送0x08
如果采用非译码方式,则abcdefg分别对应七段的7654321
*/
void M7219_Init(void)
{
addr[0]=0x09;
addr[1]=0xff; //采用BCD码,0不译码
addr[2]=0x0b;
addr[3]=0x03; //显示位数=n-1
addr[4]=0x0c;
addr[5]=0x01; //
addr[6]=0x0a;
addr[7]=0x0f; //亮度
Send_all(addr,8); //发送
addr[0]=0x01; //先将位地址写入,此
addr[2]=0x02;
addr[4]=0x03;
addr[6]=0x04;
addr[8]=0x05;
addr[10]=0x06;
addr[12]=0x07;
addr[14]=0x08;
}
//**************************************************
void main(void)
{
uchar a;
M7219_Init();
delay1ms(10);
while (1)
{
addr[1]=0x01;
addr[3]=0x02;
addr[5]=0x03;
addr[7]=0x04;
addr[8]=0x05;
addr[9]=0x06;
addr[10]=0x07;
Send_all(addr,14);
}
}
|
|