51单片机MAX7219程序编写与测试

控制/MCU

1878人已加入

描述

#include“reg52.h”

#include “intrins.h”

#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; //_/-

}

2: http://www.weboch.com.cn/news_show.asp?newsid=138

感谢该作者。

//max7219 led drive program

//for 51 mcu

//designed by zhaoliang

//2005-6-12 13:52

#include“reg52.h”

#include “intrins.h”

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

//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

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分