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

📄 7219.c

📁 一个数字滤波的程序
💻 C
字号:

#define CLOCK_DOWN() *PORT_DATA&=(CLOCK^0xffff)
#define CLOCK_UP() *PORT_DATA|=CLOCK
#define LOAD_DOWN() *PORT_DATA&=(LOAD^0xffff)
#define LOAD_UP() *PORT_DATA|=LOAD

#define CODE_MODE 0x0900
#define INTENSITY 0x0a00
#define SCAN_LIMIT 0x0b00
#define SHUT_DOWN 0x0c00
#define TEST 0xf00

unsigned int *PORT_DATA;
unsigned int *PORT_ATRRIB;
unsigned int *PORT_DIR;

unsigned int CLOCK;
unsigned int DATA;
unsigned int LOAD;

unsigned int LED_data[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};

volatile  unsigned int  *P_WatchDog_Clear = (unsigned int*)(0x7012); 

void Reverse(unsigned int *temp,unsigned int *array,unsigned int num)
{
	unsigned int i;
	for (i=1;i<=num;i++)
	{
		temp[i-1]=array[num-i];
	}
}

void send_data(unsigned int data)
{
	unsigned int i;
	LOAD_DOWN();
	*P_WatchDog_Clear=1;
	for(i=0;i<16;i++)
	{
		CLOCK_DOWN();
		if(data&0x8000) *PORT_DATA|=DATA;
		else *PORT_DATA&=(DATA^0xffff);
		CLOCK_UP();
		data<<=1;
	}
	LOAD_UP();
}

void ini_7219(unsigned int port,unsigned int data,unsigned int load,unsigned int clock,unsigned int lightness)
{
	if(port==0) 
		PORT_DATA=(unsigned int*)(0x7005);
	else 
		PORT_DATA=(unsigned int*)(0x7000);
	CLOCK=clock;
	DATA=data;
	LOAD=load;
	send_data(SHUT_DOWN|1);
	send_data(INTENSITY|lightness);
	send_data(CODE_MODE|0xff);
}

void show(unsigned int *data,unsigned int num,unsigned int dot,unsigned int reverse)
{
	int i;
	unsigned int temp[8];
	if(num>0)
	{
		if (reverse) Reverse(temp,data,num);
		else
		{
			for (i=0;i<num;i++) temp[i]=data[i];
		}
		send_data(SHUT_DOWN|1);
		send_data(SCAN_LIMIT|(num-1));
		if (!dot)
		{
		
			for(i=0;i<num;i++)
				send_data(((i+1)<<8)|temp[i]);
		}
		else
		{
			for(i=0;i<num;i++)
			{
				if (i==dot)
					send_data(((i+1)<<8)|temp[i]|128);
				else 
					send_data(((i+1)<<8)|temp[i]);
			}
		}
	}
	else 	send_data(SHUT_DOWN|0);
}

void IntToArray(unsigned int a,unsigned int *array,unsigned int *num)
{
	unsigned long int j=0,b[6]={1,10,100,1000,10000,100000};
	long int temp,i=1,c[5]={0,0,0,0,0};
	 while(1)
	 {
	 	i=b[j];
	 	if (i>=a) break;
	 	j++;
	 }
	 for (i=j-1;i>=0;i--)
	 {
	 temp=a-c[3]-c[2]-c[1]-c[0]-c[4];
	 c[i]=b[i];
	 array[i]=1;
	 while(1)
	 {
	 	if ((temp-c[i])<0) 
	 	{
	 		array[i]=0;
	 		c[i]=0;
	 	}
	 	if ((temp-c[i])<b[i]) break;
	 	c[i]+=b[i];
	 	array[i]++;
	 }
	 }
	*num=j;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -