×
单片机 > 单片机程序设计 > 详情

51单片机MAX7219程序

发布时间:2020-09-03 发布时间:
|

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

#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


关键字:51单片机  MAX7219 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向