max7219驱动数码管显示程序

#include
#include
#define uchar unsigned char
char bright=0x04; /*亮度设置*/
/********************************* 定义MAX7219内部寄存器***************/
#define reg_decode 0x09 /*译码控制寄存器*/
#define reg_intensity 0x0a /*亮度寄存器*/
#define reg_scan_limit 0x0b /*扫描寄存器,控制显示亮度*/
#define reg_shutdown 0x0c /*掉电模式*/
#define reg_display_test 0x0f /*显示检测寄存器*/


/*******************定义7219端口信号************/
sbit dataa=P1^0; /*串行数据输入端口*/
sbit load=P1^1; /*载入数据*/
sbit clk=P1^2; /*片选端*/




/*************定义显示常数表格************/
static const struct{
char asci;
char segs;
}font[21]=
{{' ',0x00},{'0',0x7e},{'1',0x30},{'2',0x6d},{'3',0x79},{'4',0x33},{'5',0x5b},{'6',0x5f},{'7',0x70},{'8',0x7f},{'9',0x7b},
{'A',0x77},{'b',0x1f},{'C',0x4e},{'d',0x3d},{'E',0x4f},{'F',0x47},{'H',0x37},{'L',0x0e},{'r',0x46},{'P',0x67}
};//5


/*****************发送一字节串行数据******************/
static void Sendbyte(uchar dataout)
{char i;
load=0;
for(i=8;i>0;i--)
{
uchar mask=1<<(i-1);
clk=0;
if(dataout&mask)
dataa=1;
else
dataa=0;
clk=1;
}

}


/*********写入数据**********/
static void Write(uchar reg_number,uchar dataout)
{
load=0;
Sendbyte(reg_number);
Sendbyte(dataout);
load=1;
}

/***********查段码表将显示字符转换为显示段码************/
static uchar Lookupcode(char character)
{char i;
for(i=0;i<21;i++)
{if(character==font[i].asci)
{return font[i].segs;}
}
return (0);
}
/*max7219驱动数码管显示电路程序*/

void display(char digit,char character)
{
Write(digit,Lookupcode(character));
}



/**********初始化************/
void init(void)
{char i;
dataa=1;
load=1;
clk=1;
Write(reg_scan_limit,3);
Write(reg_decode,0x00);
Write(reg_shutdown,1); /*结束停机测试,正常工作*/
Write(reg_display_test,0); /*结束显示测试,正常工作*/
for(i=1;i<=8;i++)
{Write(i,0x00);
} /*关闭全部显示器*/
}
/*delay*/
/*void delay(int j)
{uchar i;
for(i=0;i{}} */
void LED_display(void)
{char brightness;
init();
Write(reg_shutdown,1);
Write(reg_display_test,0);
brightness=bright&0x0f;
Write(reg_intensity,brightness);
display(0x01,'1');
display(0x02,'2');
display(0x03,'3');
display(0x04,'4');
}

相关文档
最新文档