03、單片機MAX7219級聯教程,附驅動源碼

51或者STM32開發中,我們在很多時候都會使用到數碼管,數碼管的刷新會佔用很大的時間資源,少數的數碼管不影響系統的運行,但如果數碼管過多,刷新這一工作勢必會影響系統的運行,下面來介紹一種芯片方案,單片機只需向芯片寫入要顯示的數字即可,不需要CPU自己來做動態刷新的工作。

原理圖

#include <reg52.h>
#include <intrins.h>
#define u8 unsigned char
#define uint unsigned int
sbit DIN = P2^0;
sbit LOAD = P2^1;
sbit CLK = P2^2;
u8 Disp_Buffer[8]={2,0,0,9,10,8,10,9};
//軟件延時函數,延時 xms
void DelayMS(uint x)
{
	u8 t;
	while(x--)
	{
		for(t=120;t>0;t--);
	}
} 
/向第 Num_Addr 片 7219 的 Addr 寄存器寫入一個 Dat 數據
//Num_Addr:7219 地址(0~255)
//Addr:7219 數顯寄存器地址(1~8)
//Dat:要顯示的數據(0~15)(含字母)
void Write(u8 Num_Addr,u8 Addr,u8 Dat)
{
	u8 i,j;
	LOAD = 0;
	for(i=0;i<8;i++)
	{
		CLK = 0;
		if(Addr&0x80)
		DIN=1;
		else
		DIN=0;
		Addr <<= 1;
		CLK = 1;
		_nop_();
		_nop_();
		CLK = 0;
	} 
	for(i=0;i<8;i++)
	{
		CLK = 0;
		if(Dat&0x80)
		DIN=1;
		else
		DIN=0;
		Dat <<= 1;
		CLK = 1;
		_nop_();
		_nop_();
		CLK = 0;
	} 
	for(i=0;i<Num_Addr;i++)
	{
		for(j=0;j<16;j++)
		{
			CLK = 0;
			DIN = 0;
			CLK = 1;
			_nop_();
			_nop_();
			CLK = 0;
		}
	}
	 LOAD = 1;
} 
void Initialise7219()//初始化
{
	//第 0 個 7219 初始化
	Write(0x00,0x09,0xff); //編碼模式
	Write(0x00,0x0b,0x07); //全部掃描
	Write(0x00,0x0c,0x01); //正常模式:1,掉電模式:0
	Write(0x00,0x0a,0x07); //消隱時間設爲 T/2
	//第 1 個 7219 初始化
	Write(0x01,0x09,0xff); //編碼模式
	Write(0x01,0x0b,0x07); //全部掃描
	Write(0x01,0x0c,0x01); //正常模式
	Write(0x01,0x0a,0x07); //消隱時間設爲 T/2
}
void main()
{
	u8 i;
	Initialise7219();
	DelayMS(1);
	for(i=0;i<8;i++)
	{
		Write(0x00,i+1,Disp_Buffer[i]);
	} 
	Write(0x01,1,Disp_Buffer[0]);
	Write(0x01,2,11);
	Write(0x01,3,12);
	Write(0x01,4,13);
	Write(0x01,5,14);
	while(1);
} 
/*大學生單片機交流 QQ 羣>>677033632*/

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章