max7219c语言,(转)MAX7219 C语言版驱动程序

MAX7219 C语言版驱动程序

徐丽红  王佰营

该程序已使用过,免调试。

#define           byte   unsigned char

//#define   N_NOP _nop_();//_nop_();_nop_();

///

//MAX7219

//管脚,变量和常数定义;DEFINE

#define  Model_addr  0x09   // X9 H

#define  Bright_addr  0x0a   // XA H

#define  Limit_addr  0x0b   // XB H

#define  Shutd_addr  0x0c   // XC H

#define  Test_addr  0x0f   // Xf H

#define  Set_Normal  0x00 //进入正常而非测试工作方式

#define  Set_Halt  0x00 //进入停机工作方式?

#define  Set_Model  0xff //将BCD码译成B码;

#define  Set_Bright  0x04 //占空比为15/32;

#define  Set_Limit  0x07 //8位显示方式;

#define  Set_Shutd  0x01 //进入正常而非停机工作方式?

sbit  DIN     =P1^0;

sbit  LOAD    =P1^1;

sbit  CLK     =P1^2;

bit  bdata   bonceinit7219;

//

//函数声明;PROPERTY

void Init_7219_begin(void);

void Init_7219(void);

void write_one_8279(byte addr,byte mydate);

//

//函数定义;FOUNCTION

void Init_7219_begin(void)

{//MAX7219显示型号时的初始化;

write_one_8279(Model_addr,0x00);   //将BCD码译成B码?

write_one_8279(Bright_addr,Set_Bright); //占空比为15/32?

write_one_8279(Limit_addr,Set_Limit);   //8位显示方式;

write_one_8279(Shutd_addr,Set_Shutd);   //进入正常工作方式

}

void Init_7219(void)

{//MAX7219正常工作时的初始化;

write_one_8279(Shutd_addr,Set_Halt); //进入停机工作方式

write_one_8279(Model_addr,Set_Model);   //将BCD码译成B码?

write_one_8279(Bright_addr,Set_Bright); //占空比为15/32?

write_one_8279(Limit_addr,Set_Limit);   //8位显示方式;

write_one_8279(Shutd_addr,Set_Shutd);   //进入正常而非停机工作方式

write_one_8279(Test_addr,Set_Normal);   //进入正常而非测试工作方式

}

void write_one_8279( byte addr, //要写入的位置;

byte mydate) //要写入的数据;

{//写数据给MAX7219函数;display data

register byte i;

LOAD=0;     //-\_

for(i=0;i<8;i++)

{

_nop_();

CLK=0;    //-\_

if(addr & 0x80)

DIN=1;

else

DIN=0;

_nop_();

CLK=1;    //_/-

addr=addr<<1;

}

for(i=0;i<8;i++)

{

_nop_();

CLK=0;    //-\_

if(mydate & 0x80)

DIN=1;

else

DIN=0;

_nop_();

CLK=1;    //_/-

mydate=mydate<<1;

}

LOAD=1;     //_/-

}

//max7219 led drive program

//for 51 mcu

//designed by zhaoliang

//2005-6-12 13:52

#i nclude

/***********************************************************************/

//common part

#define  HIGH     1

#define  LOW      0

#define  TRUE      1

#define  FALSE      0

#define  ZERO      0

#define  MSB       0x80

#define  LSB       0x01

//max7219 part

#define  DECODE_MODE   0x09

#define  INTENSITY     0x0A

#define  SCAN_LIMIT    0x0B

#define  SHUT_DOWN     0x0C

#define  DISPLAY_TEST  0x0F

//pin defined

/***********************************************************************/

//change this part at different board

sbit LOAD=P1^2; //MAX7219    Load-Data Input:    rising edge  pin 12

sbit DIN=P1^1; //MAX7219    Serial-Data Input:   rising edge  pin 1

sbit CLK=P1^0; //MAX7219   Serial-Clock Input:  maximum 10MHz  pin 13

//function define

/***********************************************************************/

void Write_Max7219_byte(unsigned char temp);//write max7219 a byte

void Write_Max7219(unsigned char address,unsigned char dat);//write max7219 command and data

void Init_Max7219(void);//Initize max7219

//test program display from 1~8

/***********************************************************************/

void main(void)

{

unsigned char i;

Init_Max7219();

while(TRUE)

{

for(i=1;i<9;i++)

{

Write_Max7219(i,i);

}

}

}

/***********************************************************************/

void Write_Max7219_byte(unsigned char temp)

{

unsigned char i;

for (i=0;i<8;i++)

{

CLK=LOW;

DIN=(bit)(temp&MSB);

temp<<=1;

CLK=HIGH;

}

}

/***********************************************************************/

void Write_Max7219(unsigned char address,unsigned char dat)

{

LOAD=LOW;

Write_Max7219_byte(address);

Write_Max7219_byte(dat);

LOAD=HIGH;

}

/***********************************************************************/

void Init_Max7219(void)

{

Write_Max7219(SHUT_DOWN, 0x01);   //Normal Operation XXXXXXX1 Shutdown Mode   XXXXXXXX0

Write_Max7219(DISPLAY_TEST, 0x00);   //Normal Operation XXXXXXX0 Display Test Mode XXXXXXXX1

Write_Max7219(DECODE_MODE, 0xff);   //Decode Mode Select D7~D0 1 B decode 0 No decode

Write_Max7219(SCAN_LIMIT, 0x07);   //SCAN LIMIT 0~7 0xX0~0xX7

Write_Max7219(INTENSITY, 0x04);   //Set Intensity   0xX0~0xXf

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值