📄 7219.c
字号:
/*==============================================================================
开机画面
==============================================================================*/
void LCD1602_LOGO(void )
{
code char exampl001[] = " BeiJing Vossel ";
code char exampl002[] = "VS7219 Test/Demo";
ePutstr(0,0,exampl001);
ePutstr(0,1,exampl002);
Delay400ms();
}
// =★=★=★=★=★=★=★=★=★=★=★= 8*1按键扫描程序 =★=★=★=★=★=★=★=★=★=★=★=
unsigned char KEYB_SCAN(void );
unsigned char WaitForKEYS(void );
// =★=★=★=★=★= 按键扫描程序 =★=★=★=★=★=
unsigned char KEYB_SCAN(void )
{
unsigned char recode;
unsigned char temp1,temp2;
//KeyBoard_GND = 1;
KeyBoard_GND = 0;
Delay10ms();
temp1 = P2;
if(temp1 != 0xff) //确定是否有键按下
{
Delay10ms();Delay10ms(); //延时去抖
temp2 = P2;
if(temp1 == temp2 ) //确定是否有键按下
{
recode = (temp2 & 0xff) ;
return( ~recode ); //返回特征字节码
}
}
return(0); //无按键按下,返回值为0
}
/*--------------------------------------------------------------------------------
调用方式:unsigned char WaitForKEYS(void )
函数说明:检测是否有按键按下。
--------------------------------------------------------------------------------*/
unsigned char WaitForKEYS(void )
{
key = 0x00;
Delay100ms();
//Delay200ms();
key = KEYB_SCAN();
KeyBoard_GND = 1;
Delay10ms();//Delay10ms();Delay10ms();Delay10ms();Delay10ms();
}
// =★=★=★=★=★=★=★=★=★=★= VS7219驱动程序 =★=★=★=★=★=★=★=★=★=★=
void Write_Byte_VS7219(unsigned char temp); //write VS7219 a byte
void Write_VS7219(unsigned char address, unsigned char ddata); //write VS7219 command and data
void TestIC_Write_VS7219(unsigned char address, unsigned char ddata);
void Initial_VS7219_A(void); //Initize VS7219
void Initial_VS7219_B(void); //Initize VS7219
void TestIC_Initial_VS7219_A(void);
void TestIC_Initial_VS7219_B(void);
void TestIC_YanShi_VS7219_Decode(void);
void TestIC_YanShi_VS7219_NoDecode(void);
void TestIC_YanShi_VS7219(void);
/*******************************************************************************
函数:Write_Byte_VS7219
说明:显示亮度和位数用的VS7219
输入:字节temp,(格式:先送字节的高位,后送字节的低位)
输出:无
*******************************************************************************/
void Write_Byte_VS7219(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++)
{
VS7219_CLK = LOW; //上升
//VS7219_CLK = HIGH; //下降
VS7219_DIN = (bit)(temp & MSB);
temp<<=1;
VS7219_CLK = HIGH; //上升
//VS7219_CLK = LOW; //下降
}
}
/*******************************************************************************
函数:Write_VS7219
说明:写数据,显示亮度和位数用的VS7219
输入:address, ddata(格式:先送地址字节,后送操作数据字节)
输出:无
*******************************************************************************/
void Write_VS7219(unsigned char address, unsigned char ddata)
{
VS7219_LOAD = LOW;
Write_Byte_VS7219(address);
Write_Byte_VS7219(ddata);
VS7219_LOAD = HIGH;
}
/*******************************************************************************
函数:TestIC_Write_VS7219
说明:写数据,测试IC显示数据用的VS7219
输入:address, ddata(格式:先送地址字节,后送操作数据字节)
输出:无
*******************************************************************************/
void TestIC_Write_VS7219(unsigned char address, unsigned char ddata)
{
VS7219_LOAD_TestIC = LOW;
Write_Byte_VS7219(address);
Write_Byte_VS7219(ddata);
VS7219_LOAD_TestIC = HIGH;
}
/*******************************************************************************
函数:Initial_VS7219_A
说明:VS7219的初始化,显示亮度和位数用的VS7219
输入:无
输出:无
*******************************************************************************/
void Initial_VS7219_A(void)
{
Write_VS7219(DECODE_MODE, 0x00); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
Write_VS7219(INTENSITY, 0x0a); //Set Intensity : 0xX0~0xXf
Write_VS7219(SCAN_LIMIT, 0x03); //SCAN LIMIT : 0xX0~0xX7
Write_VS7219(SHUTDOWN, 0x01); //Normal Operation XXXXXXX1 ; Shutdown Mode XXXXXXXX0
Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1
Write_VS7219(Digit0,FLAG_LED); // LED指示位
Write_VS7219(Digit1,0x30); // 显示的位数 1
Write_VS7219(Digit2,0x7e); // 显示的亮度的十位 0
Write_VS7219(Digit3,0x30); // 显示的亮度的个位 1
}
/*******************************************************************************
函数:Initial_VS7219_B
说明:开机VS7219的初始化,设置显示亮度和位数用的VS7219
输入:无
输出:无
*******************************************************************************/
void Initial_VS7219_B(void)
{
Write_VS7219(DECODE_MODE, 0x00); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
Write_VS7219(INTENSITY, 0x0a); //Set Intensity : 0xX0~0xXf
Write_VS7219(SCAN_LIMIT, 0x03); //SCAN LIMIT : 0xX0~0xX7
Write_VS7219(SHUTDOWN, 0x01); //Normal Operation XXXXXXX1 ; Shutdown Mode XXXXXXXX0
Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1
Write_VS7219(Digit0,0x7f); // LED指示位
Write_VS7219(Digit1,0x01); // 显示的位数
Write_VS7219(Digit2,0x01); // 显示的亮度的十位
Write_VS7219(Digit3,0x01); // 显示的亮度的个位
Write_VS7219(Digit0,0x01); // LED指示位
}
/*******************************************************************************
函数:VS7219_LEDyanshi
说明:VS7219显示演示
输入:无
输出:无
*******************************************************************************/
void VS7219_LEDyanshi(void)
{
unsigned char i,j,tmp;
unsigned char tmp2[]={0x40,0x60,0x70,0x78,0x7c,0x7e, 0x3e,0x5e,0x6e,0x76,0x7a,0x7c};
Write_VS7219(DECODE_MODE, 0x00); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
Write_VS7219(INTENSITY, 0x0a); //Set Intensity : 0xX0~0xXf
Write_VS7219(SCAN_LIMIT, 0x03); //SCAN LIMIT : 0xX0~0xX7
Write_VS7219(SHUTDOWN, 0x01); //Normal Operation XXXXXXX1 ; Shutdown Mode XXXXXXXX0
Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1
Write_VS7219(Digit0,0x40); // LED指示位
Write_VS7219(Digit1,0x01); // 显示的位数
Write_VS7219(Digit2,0x01); // 显示的亮度的十位
Write_VS7219(Digit3,0x01); // 显示的亮度的个位
for(;;)
{
tmp = 0x40;
for(i=0;i<13;i++)
{
tmp = tmp2[i];
Write_VS7219(Digit0,tmp);
Write_VS7219(Digit1,tmp);
Write_VS7219(Digit2,tmp);
Write_VS7219(Digit3,tmp);
Delay100ms();//Delay200ms();
WaitForKEYS(); // 检测按键按下
if(key != 0x00) goto W_VS7219_LEDyanshi;
if(i == 11) i = 5;
}
}
/*
for(i=1;i<129;i++)
{
Write_VS7219(Digit0,i);
Delay200ms();
if(i == 128) i = 0;
}*/
W_VS7219_LEDyanshi:;
}
/*******************************************************************************
函数:TestIC_Initial_VS7219_A
说明:VS7219的初始化,测试IC显示数据用的VS7219
输入:无
输出:无
*******************************************************************************/
void TestIC_Initial_VS7219_A(void)
{
unsigned char i;
TestIC_Write_VS7219(DECODE_MODE, 0x00); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
TestIC_Write_VS7219(INTENSITY, 0x01); //Set Intensity : 0xX0~0xXf
TestIC_Write_VS7219(SCAN_LIMIT, 0x07); //SCAN LIMIT : 0xX0~0xX7
TestIC_Write_VS7219(SHUTDOWN, 0x00); //Normal Operation XXXXXXX1 ; Shutdown Mode XXXXXXXX0
TestIC_Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1}
for(i=1;i<9;i++)
{
TestIC_Write_VS7219(i,0);
}
}
/*******************************************************************************
函数:TestIC_Initial_VS7219_B
说明:开机VS7219的初始化,测试IC显示数据用的VS7219
输入:无
输出:无
*******************************************************************************/
void TestIC_Initial_VS7219_B(void)
{
unsigned char i;
TestIC_Write_VS7219(DECODE_MODE, 0xff); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
TestIC_Write_VS7219(INTENSITY, 0x0a); //Set Intensity : 0xX0~0xXf
TestIC_Write_VS7219(SCAN_LIMIT, 0x07); //SCAN LIMIT : 0xX0~0xX7
TestIC_Write_VS7219(SHUTDOWN, 0x01); //Normal Operation XXXXXXX1 ; Shutdown Mode XXXXXXXX0
TestIC_Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1}
for(i=1;i<9;i++)
{
TestIC_Write_VS7219(i,0x0f);
}
}
/*******************************************************************************
函数:TestIC_YanShi_VS7219_Decode
说明:演示显示,译码时的显示
输入:无
输出:无
*******************************************************************************/
void TestIC_YanShi_VS7219_Decode(void)
{
unsigned char temp,i,j;
unsigned char *app;
/*
TestIC_Write_VS7219(INTENSITY, 0x0a); //Set Intensity : 0xX0~0xXf
TestIC_Write_VS7219(SCAN_LIMIT, 0x07); //SCAN LIMIT : 0xX0~0xX7
TestIC_Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1
TestIC_Write_VS7219(DECODE_MODE, 0xff); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
TestIC_Write_VS7219(Digit0,0); Delay200ms();
TestIC_Write_VS7219(Digit1,1); Delay200ms();
TestIC_Write_VS7219(Digit2,2); Delay200ms();
TestIC_Write_VS7219(Digit3,3); Delay200ms();
TestIC_Write_VS7219(Digit4,4); Delay200ms();
TestIC_Write_VS7219(Digit5,5); Delay200ms();
TestIC_Write_VS7219(Digit6,6); Delay200ms();
TestIC_Write_VS7219(Digit7,7); Delay200ms();
while(TRUE)
{
for(i=0;i<16;i++)
{
for(j=1;j<9;j++)
{
temp = i + j - 1;
if(temp > 16) temp = temp - 16;
TestIC_Write_VS7219(j,temp);
//TestIC_Write_VS7219(j,Num_Decode[temp]);
}
Delay400ms();
WaitForKEYS(); // 当检测按键按下时跳出循环
if(key != 0x00) goto W_TestIC_YanShi_VS7219_Decode;
}
}
*/
//0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0b,0x0d,0x0e,0x0f
// 0 1 2 3 4 5 6 7 8 9 - H E L P 空
while(TRUE)
{
for(i=0;i<16;i++)
{
app = &Num_Decode[i]; // app = Num_NoDecode;
//TestIC_Write_VS7219(Digit0, app); Delay10ms();
//TestIC_Write_VS7219(Digit1, app++); Delay10ms();
//TestIC_Write_VS7219(Digit2, app++); Delay10ms();
//TestIC_Write_VS7219(Digit3, app++); Delay10ms();
//TestIC_Write_VS7219(Digit4, app++); Delay10ms();
//TestIC_Write_VS7219(Digit5, app++); Delay10ms();
//TestIC_Write_VS7219(Digit6, app++); Delay10ms();
//TestIC_Write_VS7219(Digit7, app++); Delay10ms();
for(j=1;j<9;j++)
{
temp = i + j - 1;
if(temp > 15) temp = temp - 16;
TestIC_Write_VS7219(j,Num_Decode[temp]);
Delay10ms();
}
Delay400ms();
WaitForKEYS(); // 当检测按键按下时跳出循环
if(key != 0x00) goto W_TestIC_YanShi_VS7219_Decode;
}
}
W_TestIC_YanShi_VS7219_Decode: ;
}
/*******************************************************************************
函数:TestIC_YanShi_VS7219_No_Decode
说明:演示显示,不译码时的显示
输入:无
输出:无
*******************************************************************************/
void TestIC_YanShi_VS7219_NoDecode(void)
{
//int i;
unsigned char temp,i,j;
unsigned char *app;
/*
TestIC_Write_VS7219(INTENSITY, 0x0a); //Set Intensity : 0xX0~0xXf
TestIC_Write_VS7219(SCAN_LIMIT, 0x07); //SCAN LIMIT : 0xX0~0xX7
TestIC_Write_VS7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 ; Display Test Mode XXXXXXXX1
TestIC_Write_VS7219(DECODE_MODE, 0x00); //Decode Mode Select D7~D0 : 1 B decode ; 0 No decode
TestIC_Write_VS7219(Digit0,0x7e); Delay200ms();
TestIC_Write_VS7219(Digit1,0x30); Delay200ms();
TestIC_Write_VS7219(Digit2,0x6d); Delay200ms();
TestIC_Write_VS7219(Digit3,0x79); Delay200ms();
TestIC_Write_VS7219(Digit4,0x33); Delay200ms();
TestIC_Write_VS7219(Digit5,0x5b); Delay200ms();
TestIC_Write_VS7219(Digit6,0x5f); Delay200ms();
TestIC_Write_VS7219(Digit7,0x70); Delay200ms();
*/
//0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00,0x79,0x4f,0x01,0x47,0x4f,0x4f,0x0e,0x08,0x5f,0x1d,0x1d,0x3d,0x40,0x37,0x4f,0x0e,0x67,0x00
// 0 1 2 3 4 5 6 7 8 9 空 3 E - F E E L _ G o o d - H E L P 空
while(TRUE)
{
for(i=0;i<29;i++)
{
app = &Num_NoDecode[i]; // app = Num_NoDecode;
//TestIC_Write_VS7219(Digit0, app); Delay10ms();
//TestIC_Write_VS7219(Digit1, app++); Delay10ms();
//TestIC_Write_VS7219(Digit2, app++); Delay10ms();
//TestIC_Write_VS7219(Digit3, app++); Delay10ms();
//TestIC_Write_VS7219(Digit4, app++); Delay10ms();
//TestIC_Write_VS7219(Digit5, app++); Delay10ms();
//TestIC_Write_VS7219(Digit6, app++); Delay10ms();
//TestIC_Write_VS7219(Digit7, app++); Delay10ms();
for(j=1;j<9;j++)
{
temp = i + j - 1;
if(temp > 28) temp = temp - 29;
TestIC_Write_VS7219(j,Num_NoDecode[temp]);
Delay10ms();
}
Delay400ms();
WaitForKEYS(); // 当检测按键按下时跳出循环
if(key != 0x00) goto W_TestIC_YanShi_VS7219_NoDecode;
}
}
W_TestIC_YanShi_VS7219_NoDecode: ;
}
/*******************************************************************************
函数:TestIC_YanShi_VS7219
说明:演示显示,同时选择是译码/不译码时的显示
输入:无
输出:无
*******************************************************************************/
void TestIC_YanShi_VS7219(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -