?? max7219.c
字號:
#include "DSP28_Device.h"
unsigned int Int_Flag;
interrupt void ISRTimer2(void)
{
Int_Flag = 1;
}
/*************************************************/
/* Delay 60us/unit at 20 MHz crystal clock */
/*************************************************/
void Delay(float P)
{
Int_Flag = 0;
//Timer2
EALLOW;
PieVectTable.TINT2 = &ISRTimer2;
EDIS;
/*設置CPU*/
ConfigCpuTimer(&CpuTimer2, 150, P);
StartCpuTimer2();
/*開中斷*/
IER |= M_INT14;
while(1){if(Int_Flag == 1) break;}
//while(Int_Flag == 0);
StopCpuTimer2();
}
/*************************************************/
/* The function sends a 16 bit control word to */
/* MAX7219 Data Line Input port */
/*************************************************/
void W2MAX7219(unsigned int w)
{
if((Spi_TxReady() == 1))
{
SpiaRegs.SPITXBUF = w;
Delay(10000);
}
}
/*************************************************/
/* The function sets the display intensity by */
/* PWM method */
/* */
/*************************************************/
void Intensity(int brightness)
{
unsigned int w = 0x0A00;
brightness &= 0x0F;
w |= brightness;
W2MAX7219(w);
}
/*************************************************/
/* The function limits the scan digits from 1 to */
/* 8 */
/*************************************************/
void ScanLimit(int digits)
{
unsigned int w = 0x0B00;
w |= (--digits)&0x7;
W2MAX7219(w);
}
/*************************************************/
/* The function makes a display test and flash 5 */
/* times */
/*************************************************/
void DisplayTest(void)
{
int i;
W2MAX7219(0x010f);
W2MAX7219(0x020f);
W2MAX7219(0x030f);
W2MAX7219(0x040f);
W2MAX7219(0x050f);
W2MAX7219(0x060f);
W2MAX7219(0x070f);
for(i=0;i<5;i++)
{
W2MAX7219(0xCF01);
Delay(400000);
W2MAX7219(0xCF00);
Delay(400000);
}
W2MAX7219(0x010f);
W2MAX7219(0x020f);
W2MAX7219(0x030f);
W2MAX7219(0x040f);
W2MAX7219(0x050f);
W2MAX7219(0x060f);
W2MAX7219(0x070f);
}
/*************************************************/
/* The function shutdowns the display and resume */
/* MAX7219 */
/*************************************************/
void ShutDown(int ctrl)
{
if(ctrl==YES) W2MAX7219(0x0C00);
if(ctrl==NO) W2MAX7219(0x0C01);
}
/*************************************************/
/* The function sends a 16 bit display control */
/* word to MAX7219 to select how many digits */
/*************************************************/
void DecodeMode(unsigned int w) //w=0xFF means all 8 LEDs on
{
w &= 0xFF;
w |= 0x0900;
W2MAX7219(w);
}
/*************************************************/
/* The function changes a binary into a compact */
/* BCD code */
/*************************************************/
unsigned int BIN2BCD(unsigned int bin)
{
unsigned int a, v;
a = bin%10;
v = a;
bin /= 10;
a = bin%10;
v |= a<<4;
bin /= 10;
a = bin%10;
v |= a<<8;
bin /= 10;
a = bin%10;
v |= a<<12;
return(v);
}
/*************************************************/
/* The function shows a compact BCD code in 7 */
/* digits */
/*************************************************/
void ShowBCD(unsigned int bcd)
{
int k, m, f3,f2;
// show MSD
f3 = 0; f2 = 0;
m = (bcd&0xF000)>>12;
if (m)
{
k = m | 0x0400;
f3 = 1; // digit 3 on
} else
{
k = 0x0F | 0x0400;
}
W2MAX7219(k);
// show the next digit
m = (bcd&0xF00)>>8;
if(f3)
{
k = m | 0x0300;
} else
{
if (m)
{
k = m | 0x0300;
f2 = 1;
} else
k = 0x0F | 0x0300;
}
W2MAX7219(k);
// show the digit 1
m = (bcd&0xF0)>>4;
if(f2|f3)
{
//k = m | 0x0280; //for the decimal
k = m | 0x0200;
} else
{
if (m)
{
//k = m | 0x0280; //for the decimal
k = m | 0x0200;
} else
//k = 0x0F | 0x0280; //for the decimal
k = 0x0F | 0x0200;
}
W2MAX7219(k);
// show the last digit
m = bcd&0xF;
k = m | 0x0100;
W2MAX7219(k);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -