MAX7219的程序

/**************************************************
*程序名称:  MAX7219 C语言控制程序          
*程序功能: 3线串行控制8位共阴数码管       
***************************************************/
#include
#include          
sbit DIN_7219=P0^5;   //7219串行数据输入端
sbit LOAD_7219=P0^6;   //7219数据锁存端
sbit CLK_7219=P0^7;   //7219时钟输入端
#define uchar unsigned char
uchar code LEDcode[]=
{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00     /*0,1,2,3,4,5,6,7,8,9,全灭*/
  /*0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff,*/   };    /*A,B,C,D,E,F,P,U,全亮*/

/**************************************************
*         向MAX7219写入1字节(8位)函数        *
***************************************************/
void write_7219_byte (uchar dat)
{
 uchar i,temp;
 for (i=0;i<8;i++)
   { 
       temp=dat&0x80;
       dat=dat<<1;
       if(temp)
          DIN_7219=1;   
       else
          DIN_7219=0;
    CLK_7219=0;
    _nop_();
       CLK_7219=1;  //时钟上升沿把数据送入寄存器锁定  
   }
}
/**************************************************
*        向MAX7219写入地址和控制字(16位)    *
***************************************************/
void write_7219 (uchar addr,uchar dat)
{
 LOAD_7219=0;     //寄存器打开,等待数据的送入
 _nop_();
 write_7219_byte (addr);   //选择寄存器地址
 _nop_();
 write_7219_byte (dat);    //选择让芯片执行什么命令
 _nop_();
 LOAD_7219=1; //第16个上升沿之后,第17个上升沿之前必须把pinCLK置高,否则数据丢失
}
/**************************************************
*                MAX7219初始化       *
***************************************************/
void init_7219 (void)
   {
     write_7219 (0x0c,0x01);     /*  设置电源工作模式            */ 
     write_7219 (0x0a,0x02);     /*  设置亮度(19/32,根据需要增减)*/
     write_7219 (0x0b,0x03);     /*  设置扫描界限(根据需要增减)  */
     write_7219 (0x09,0x00);     /*  设置译码模式(00不译,FF译)    */
  write_7219 (0x0f,0x00);     /*  显示测试(00为正常工作状态)  */
   }
/**************************************************
*                MAX7219清除显示      *
***************************************************/
void clear_7219(void)
{
 uchar i;       //变量i,用来选择数码管位选
 for(i=8;i>0;i--)     //i自减,选择完所有的8位
 {
  write_7219(i,0x00);  //对应位选的段全部清除显示
 }
}
/**************************************************
*                MAX7219主函数       *
***************************************************/
void main(void)
{
    init_7219 ();          //MAX7219初始化
 clear_7219();   //MAX7219清除显示,免去干扰
    while(1)   
  {  
   write_7219(0x01,LEDcode[5]);      //扫描第一位(LSB),并送段码显示
   write_7219(0x02,LEDcode[5]|0x80); //扫描第二位,并送段码显示,同时加显小数点2|  0x80 如果不加小数点就去掉|0x80
   write_7219(0x03,LEDcode[5]);      //扫描第三位,并送段码显示
   write_7219(0x04,LEDcode[5]);   //扫描第四位,并送段码显示
 //  write_7219(0x05,LEDcode[5]);   //扫描第五位,并送段码显示
 //  write_7219(0x06,LEDcode[6]);   //扫描第六位,并送段码显示
 //  write_7219(0x07,LEDcode[7]);   //扫描第七位,并送段码显示
 //  write_7219(0x08,LEDcode[8]);   //扫描第八位(MSB),并送段码显示
 
  }    
}

你可能感兴趣的:(MAX7219的程序)