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

📄 drv7219.c

📁 max7219驱动程序,用keil编译
💻 C
字号:
#define DRV7219_GLOBALS
#include  <config.h>

sbit MAX7221DI=P0^2;//MAX7221管脚定义
sbit MAX7221CS=P0^1;
sbit MAX7221CLK=P0^0;

unsigned char code disptable[62]= {//0~30
									0x7e,0x30,0x6d,0x79,0x33,  // 0  1  2  3  4
								   0x5b,0x5f,0x70,0x7f,0x7b,  // 5  6  7  8  9
								   0x77,0x1f,0x4e,0x3d,0x4f,  // A  b  C  d  E
								   0x47,0x00,0x01,0x37,0x38,  // F     -  H  J
								   0x76,0x1d,0x67,0x05,0x3e,  // n  o  P  r  U
								   0x0e,0x09,0x27,0x0e,0x0f,  // L  =  Y  L  t
								   0x17,                      // h
								   //31~61
								   0xfe,0xb0,0xed,0xf9,0xb3,  // 0. 1. 2. 3. 4.
								   0xdb,0xdf,0xf0,0xff,0xfb,  // 5. 6. 7. 8. 9.
								   0xf7,0x9f,0xce,0xbd,0xcf,  // A. b. C. d. E.
								   0xc7,0x80,0x81,0xb7,0xb8,  // F.  . -. H. J.
								   0xf6,0x9d,0xe7,0x85,0xbe,  // n. o. P. r. U.
								   0x8e,0x89,0xa7,0x8e,0x8f,  // L. =. Y. L. t.
								   0x97};                     // h.
// 显示段码表段码对应位:dp-d7,a-D6,b-D5,c-D4,d-D3,e-D2,f-D1,g-D0   1-段码亮

uchar code er[8]={0xe,23,0x0,0x10,0x10,0x10,0x10,0x10};//Er

unsigned int code jsfdz[12] = {1,2,5,10,20,50,100,200,500,1000,2000,5000};//对应分度值的100倍
unsigned char code fdzxsdm[12][3] = {{1,0,31},{2,0,31},{5,0,31},      //分度值显示代码
                                    {1,31,16},{2,31,16},{5,31,16},
                                    {1,16,16},{2,16,16},{5,16,16},
                                    {0,1,16},{0,2,16},{0,5,16}};



void DI_0(void)
{
  //P2&=~BIT0;
  MAX7221DI=0;
}


void DI_1(void)
{
  //P2|=BIT0;
  MAX7221DI=1;
}

void CLK_0(void)
{
  //P2&=~BIT2;
  MAX7221CLK=0;
}

void CLK_1(void)
{
  //P2|=BIT2;
   MAX7221CLK=1;
}

void CS_0(void)
{
  //P2&=~BIT1;
  MAX7221CS=0;
}

void CS_1(void)
{

  //P2|=BIT1;
  MAX7221CS=1;
}

void disp(uchar addr,uchar _data)
{
  //P00	CLK
  //P01	LOAD
  //P02	DI
  uchar i;

  CLK_0();//数据默认状态为低	上升沿锁存数据,下降沿数据从7219的DOUT端输出
  CS_1();//片选默认状态为高
  DI_1();//数据线默认状态为高
  
  CS_0();//片选有效
  //delay(0xff);//延时
  for(i=0;i<8;i++)//先发高位,后发低位,先发地址,后发数据
  {
    if(addr&0x80)//测试最高位
      DI_1();//数据有效
    else
      DI_0();  
	//延时
    CLK_1();//上升沿锁存数据  
    //delay(0xff);//延时
    CLK_0();//下降沿数据输出
    addr<<=1;
   }
   
     for(i=0;i<8;i++)//先发高位,后发低位,先发地址,后发数据
  {
    if(_data&0x80)//测试最高位
      DI_1();//数据有效
    else
      DI_0();  
    //delay(0xff);//延时
    CLK_1();//上升沿锁存数据  
    //delay(0xff);//延时
    CLK_0();//下降沿数据输出
    _data<<=1;
   }
   
   
  CS_1();//片选无效
}


void display(void)
{
	unsigned char count,addr;
	addr = 0x08;                      // Initial start address of MAX7219
	for (count=0;count<8;count++)
	{
		disp(addr,disptable[dispbuf[count]]);
		addr--;
	}
}



void led_init(void)
{
uchar i;
  disp(0x00,0x00);//地址0,器件级联,设置为不级联
  for(i=1;i<9;i++)
  {
  //disp(i,0x10);//数据寄存器初始值设定
  dispbuf[i-1]=0x10;
  }
  disp(0x09,0x00);//解码模式,设置为不解码 0不解码,1解码
  disp(0x0a,0x0f);//亮度设置,设置为最亮
  disp(0x0b,0x07);//扫描位数限制,设置为8位
  disp(0x0c,0x01);//关闭模式,设置为不关闭
  //disp(0x0f,0x00);//测试寄存器,设置为不测试
  display();
  disp(0x0f,0x01);//测试寄存器,测试
}

/*
void flash_led(void)
{
disp(0x0c,0x01);//关闭模式,设置为不关闭
delay(0x4fff);
disp(0x0c,0x00);//关闭模式,设置为关闭
delay(0x4fff);
}
*/

void blank(void)//显示黑屏
{
	uchar i;
	for(i=0;i<8;i++)
	dispbuf[i]=0x10;
}
void disp_err(uchar n)//显示错误号n
{

	
	blank();//关led显示
	dispbuf[7]=0xe;//E
	dispbuf[6]=23;//r
	dispbuf[5]=n;//错误号
	display();//显示缓冲区
}


void disp_num(long num)//显示整数
{
  uchar i;
  char fu=0;
  EA=0;
  if(num<0)//负数的情况
  {
  	fu=1;
	num*=(-1);
  }
  if(num>99999999)
  	{	
		//num=0;
		//disp_err(1);//显示错误提示0
		//return;
	}
  	dispbuf[0]=num%10;//显示个位
	num/=10;
  for(i=1;i<8;i++)//显示其余7位
  {
    if(num==0)
		dispbuf[i]=0x10;//黑屏
	else
    	dispbuf[i]=num%10;
		num/=10;
	
  }
  //dispbuf[2]+=31;//在第三位显示小数点
  if(fu)
  dispbuf[7]=17;//"-"
  display();
  EA=1;
}
// Display the data of the display buffer.
/*
void disp_bcd(uchar x,uchar dt)
{
EA=0;
	dispbuf[7-x*2]=(dt>>4)&0x0f;
	dispbuf[6-x*2]=dt&0x0f;
	display();
EA=1;
}

*/

⌨️ 快捷键说明

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