⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max7219.c

📁 电磁流量计的源程序。将流体流量用电磁转换方式变换成弱电信号
💻 C
字号:
/************************************************************************/
/*                                                                      */
/*			7 Segment Driver MAX7219			                        */
/*                                                                      */
/*                                                                      */
/*                                                                      */
/*      right seg is named first seg                                    */
/************************************************************************/

#include "reg52.h"
#include "typedef.h"
#include "function.h"
#include "define.h"
#include "varible.h"


sbit	DISP_CS = P3^5;
sbit	DISP_OUT = P3^3;
sbit	DISP_CLK  = P1^6;
/***************************************/
/*       functoion declare             */
/***************************************/
void Disp_init(void);
void Disp_write( unsigned int disp_data);
void Get_dispdata(float disp_fdata);
void Convert_data(unsigned char j,unsigned char seg_data);
void Disp_out( void );

void Clear_disp_memory(void);
void Convert_hdata(unsigned long int temp_data);
void Convert_ldata(unsigned int temp_data);


const unsigned char  code dp_blink_potion[]=
{  0x00,0x02,0x04,0x08 } ;	
   

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

const unsigned char code disp_data[]=
{ 0x7e,                     //led disp 0
  0x30,                     //led disp 1
  0x6d,                     //led disp 2
  0x79,                     //led disp 3
  0x33,                     //led disp 4
  0x5b,                     //led disp 5
  0x5f,                     //led disp 6
  0x70,                     //led disp 7
  0x7f,                     //led disp 8
  0x7b                      //led disp 9
 };                         //0--9
/**************************************/
/*   varible declare                  */
/**************************************/
void Disp_init(void)
{ 
  unsigned char i ;
  disp_mode = PARA_DISP ;
  disp_mode_old = disp_mode ;
  disp_no_u = 0 ;
  disp_time = 0 ;
  DISP_CLK = 0;
  DISP_CS = 0;
  
  
  Disp_write( 0x0900 );		// no decode for digits7-0
  Disp_write( 0x0B06 );		// 7 Digits /last digit si alarm led
  Disp_write( 0x0C01 );		// normal operation 
  Disp_write( 0x0F00 );		// Testmode off
  Disp_write( 0x0A04 );		// 9/32 Bright
  
  for(i=0;i<7;i++)
      disp_memory[i] = disp_BLANK ;
   
  Disp_out();
}

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


void Disp_write( unsigned int disp_data )
{
  unsigned char i = 16;
  
   DISP_CS = 0;            //MAX chip valid
  do
    {
        DISP_OUT = disp_data & 0x8000;
        disp_data <<= 1;
        DISP_CLK = 1;
        DISP_CLK = 0;
     } while( --i );

//  DISP_OUT = 0;
  DISP_CS = 1;           //invalid
 
}

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








/**********************************************/
/*     disp_memory                            */
/**********************************************/

void Get_dispdata(float disp_fdata)
{
   unsigned char disp_byte ;
  unsigned char i;
  if( disp_fdata == 0)
        { 
		    for(i=0;i<4;i++)
		      {
			     disp_memory[i] = disp_0 ;
				 if((dp_point == i)&&(i!=0))
				     disp_memory[i]|=disp_DP;
			  }
			  return;
		 }
  if(dp_point == ONE_BIT )
      disp_fdata *= 10.0 ;
  else if(dp_point == TWO_BIT )
      disp_fdata *= 100.0 ;
  else if(dp_point == THREE_BIT)
      disp_fdata *= 1000.0 ;
 
  
  i=0;

  while(i<6)
     {    
          disp_byte = (unsigned long int)disp_fdata%10;  //get disp (seg) data
          Convert_data(i,disp_byte);
          i++;
          disp_fdata /= 10.0 ;
     }
	 return;
     
     
 }



/*********************************************/
/*********************************************/
void Convert_data(unsigned char j, unsigned char seg_data)
{        
     if(seg_data <= 9)
          disp_memory[j] = disp_data[seg_data];
 
	if((j != 0)&&(dp_point ==j ))

	   disp_memory[j] |= disp_DP ;   //disp DP
	   return;
	
 }


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

 void Disp_out(void)
 {
     unsigned char data  i;
     unsigned int byte ;
     unsigned int disp_seg ;
/* repeat reset 7219 interface /2004-07-24 */
    Disp_write( 0x0900 );		// no decode for digits7-0
    Disp_write( 0x0B06 );		// 7 Digits /last digit si alarm led
    Disp_write( 0x0C01 );		// normal operation 
    Disp_write( 0x0F00 );		// Testmode off
    Disp_write( 0x0A04 );		// 9/32 Bright
/*  2004-07-24 over */     

     disp_seg = 0x100 ;            //seg0-seg6
     for(i=0;i<7;i++)
     {
     
     byte = disp_memory[i] + disp_seg ;
     Disp_write(byte) ;
     disp_seg = disp_seg + 0x100 ;   //next seg

     }
  }

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

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

void Clear_disp_memory(void)
{
 unsigned char i ;
 for(i=0;i<7;i++)
    disp_memory[i] = disp_BLANK;

 return;
}

/**************************************/
/*************************************/
void Convert_hdata(unsigned long int temp_data)
{
 unsigned char i,disp_code;
 if(temp_data <= 99999)
 {
 	for(i=0;i<5;i++)
   	{
   		disp_code = temp_data%10 ;
   		if(disp_code <= 9)
       		disp_memory[i]=disp_data[disp_code];
		temp_data=(unsigned int)(temp_data/10);
   }
 }

  return;

 }

 /*********************************/
 /*********************************/
 void Convert_ldata(unsigned int temp_data)
 {
  unsigned char i,byte;
  if(temp_data <= 9999)
  {
  	for(i=0;i<6;i++)
    {
      byte=temp_data%10;
      Convert_data(i,byte);
      temp_data=temp_data/10;
      }
  }
   return;
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -