⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7219.c

📁 芯片
💻 C
📖 第 1 页 / 共 3 页
字号:

/*==============================================================================
开机画面
==============================================================================*/
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 + -