您的位置 首页 IC

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

51单片机MAX7219程序编写与测试-#include“reg52.h”
#include “intrins.h”
#define byte unsigned char
//#define N_NOP _nop_();//_nop_();_nop_();

#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

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/347279.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部