?? my7219.h
字號:
/***************************************************************************
* MAX7219驅動函數庫(非譯碼方式)
* Author:Xieqin
* CopyRight:2004/06/22
****************************************************************************/
#ifndef __MY7219_H__
#define __MY7219_H__
sbit CLK=P1^2; //時鐘脈沖口
sbit LOAD=P1^3; //位選口
sbit DIN=P1^4; //數據輸入口
/******************************************************************************
/* 定義顯示數字0-9數字以及字母A、B、C、D、E、F*/ //數字及字母段碼
unsigned int code LED_Code[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B,//0~~~9
0x77,0x1F,0x4E,0x3D,0x4F,0x47};//A,B,C,D,E,F
/* 定義顯示位置LED0-LED8數組 */ //數碼管地址
unsigned int code LED_Location[]={0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,0x0800};
/******************************************************************************
/******************************************************************************
MAX7219 發送命令(16 bit)子程序
******************************************************************************/
void Send_LED( unsigned int n )
{ //n=待發送16位數據
unsigned int i;
CLK = 0;
LOAD = 0;
DIN = 0;
for ( i=0x8000; i>0x0000; i>>=1 )
{
if ((n&i)== 0 ) DIN = 0;
else DIN = 1;
CLK = 1;
CLK = 0;
}
LOAD = 1;
}
/******************************************************************************
MAX7219初始化子程序
******************************************************************************/
void Init_MAX7219()
{
Send_LED( 0x0C01 ); /* 置LED為正常狀態 */
Send_LED( 0x0A02 ); /* 置LED亮度為5/32 */
Send_LED( 0x0B06); /* 置LED掃描范圍DIGIT0-5 */
Send_LED( 0x0900 ); /* 置LED顯示為譯碼方式 ,00不譯碼,FF譯碼*/
Send_LED( 0x0F00 ); /* 置LED顯示測試模式寄存器,0正常工作,1測試狀態*/
}
/******************************************************************************
MAX7219清屏子程序
******************************************************************************/
void Cls()
{
unsigned int i;
for (i=0x0100; i<=0x0800; i+=0x0100 ) Send_LED( i ); // DIGIT0-7 = 0
}
/******************************************************************************
MAX7219位驅動與段驅動子程序
******************************************************************************/
void LED_Drive(unsigned char location,unsigned char number)
{ //location=數據管序號,number=待顯數字
if ( ( number & 0x80 ) == 0 )
{
Send_LED( LED_Location[ location ] | LED_Code[ number ] );
}
else
{
Send_LED( LED_Location[ location ] | LED_Code[ number & 0x7F ] | 0x80 );
}
}
void Delay7219(unsigned int n)//7219專用延時函數
{
unsigned int i;
unsigned char j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}
void Loading7219(unsigned char n1,unsigned char n2)//7219初始化顯示函數
{
unsigned char i,j;
unsigned int x;
for(x=0x80,j=0;j<10;j++)
{
if(j==8)x=0xff;//各位均顯示示8+小數點
if(j==9)x=0x00;//各位清屏
for(i=n1;i<=n2;i++)//8位數碼輸出顯示示代碼
{
Send_LED( LED_Location[ i ] | x);
}
Delay7219(1000);
if(j<8)x>>=1;
}
}
//*********************************************************************************
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -