访问电脑版页面

导航:老古开发网手机版51单片机51单片机Keil C51编程

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

导读:
关键字:
MAX7219,51单片机,

#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

}

来源:未知   作者:工程师周亮  2018/9/25 15:20:00
栏目: [ 51单片机Keil C51编程]

相关阅读

几种码制转换 BCD TO HEX,HEX TO BCD ,BIN TO HEX

让Ultra Edit和Keil结合的更紧密

在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

在Keil c51调试中,如何查看外部存储器XDATA?

Keil C51中如何实现代码优化?

C51中 INT 转换为 2个CHAR?

proteus与keil的完美结合(没有开发板,让你也学的爽!)

[转载]C51中断处理过程

Keil C51编译错误总结

C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT(转)

keil 7.0编译出现:error C316: unterminated conditionals

51单片机CO2检测显示程序解析

Keil C51单片机中变量的使用方法解析

MCS51单片机程序设计时堆栈的计算方法解析

那位大虾能告诉我C51 的printf()函数有什么用?

C51单片机的几种常用延时程序设计

在Keil c51调试中,如何查看特殊寄存器?

volatile的用法

一文知道keil编译程序的过程

SBUF=0x65,c=SBUF结果为c=0???