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

📄 led.c

📁 使用ads1.2编译器
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	IO0SET=BIT_8;						/*COLCLK*/
	IO0CLR=BIT_8;
}		
void Col_Data_Clk(void)								//送列的8位数据						
{
	INT8U i;
	for(i=0;i<8;i++)
	{
		IO0SET=BIT_5|BIT_6;						/*COLCLK*/
		IO0CLR=BIT_5|BIT_6;
	}
}		
void ROW_DATA_LATCH(void)
{
	IO0SET=BIT_7;		/*显示*/
	IO0CLR=BIT_7;		/**/
}
/****************************************************************************
* 名称:LED_Reflash(INT8U light)
* 功能:刷新LED
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_Reflash(INT8U light)
{
	INT16U i,j,k,l;
	for(l=0;l<8;l++)		//送1/8帧,j=16 每行16个字节
	{
		for(j=0;j<16;j+=4)		//送1/8帧,j=16 每行16个字节
		{
			for(i=0;i<32;i+=8)		//每块板一次送四列
			{
				for(k=0;k<4;k++)		//送一列 k=LED_XSIZE/8
				{
					LED_Add0 = P_FRAME[i+l][k+j];
					LED_Add1 = P_FRAME[32+i+l][k+j];
					LED_Add2 = P_FRAME[64+i+l][k+j];
//					LED_Add3 = P_FRAME[96+i+l][k+j];
					Col_Data_Clk();
				}
			}
		}
		ROW_DATA_LATCH();
		Disp_Open();
		Time0_Startup(light);		//亮度控制
		DelayNS(13);			//行延时,满足每秒大于等于120帧
	}
	Frame_Data();
	WdtFeed();		//看门狗喂狗信号
}
/****************************************************************************
* 名称:LEDReflashTimeTest()
* 功能:测试行周期时间,单位微秒
* 入口参数:
* 出口参数:无
****************************************************************************/
INT32U LEDReflashTimeTest(void)
{
	INT32U i,j,k,l;
	TimeInit0(1);
	Time0_Startup(0xffffffff);
	for(l=0;l<1;l++)		//送1/8帧,j=16 每行16个字节
	{
		for(j=0;j<16;j+=4)		//送1/8帧,j=16 每行16个字节
		{
			for(i=0;i<32;i+=8)		//每块板一次送四个字节
			{
				for(k=0;k<4;k++)		//送一列 k=LED_XSIZE/8
				{
					LED_Add0 = P_FRAME[i+l][k+j];
					LED_Add1 = P_FRAME[32+i+l][k+j];
					LED_Add2 = P_FRAME[64+i+l][k+j];
//					LED_Add3 = P_FRAME[96+i+l][k+j];
					Col_Data_Clk();
				}
			}
		}
		ROW_DATA_LATCH();
		Disp_Open();
		DelayNS(13);			//延时,满足每秒大于等于120帧
	}
	i=Time0_Read();
	return(i);
}
/****************************************************************************
* 名称:LED_Full()
* 功能:立即全屏显示指定帧的内容
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_Full(P_FRAME_DATA p)
{
	INT8U i,j;
	for(i=0;i<LED_YSIZE;i++)		//
	{
		for(j=0;j<16;j++)		//每行16个字节128像素
		{
			if(UART_DATA_COUNT>5) return;
			DISP_BUFFER_DATA.frame[i][j] = p->frame[i][j];
			
		}
	}
}
/****************************************************************************
* 名称:LED_UpMove()
* 功能:显示向上移动
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_UpMove(P_FRAME_DATA p)
{
	INT8U i,j,k,l;
	for(k=0;k<LED_YSIZE;k++)		//
	{
		for(i=0;i<LED_YSIZE;i++)		//
		{
			for(j=0;j<16;j++)		//每行16个字节128像素
			{
				if(i<(LED_YSIZE-1)) DISP_BUFFER_DATA.frame[i][j] = DISP_BUFFER_DATA.frame[i+1][j];
				else DISP_BUFFER_DATA.frame[i][j] = p->frame[k][j];
				
			}
		}
		for(l=0;l<p->move_time;l++)
		{
			if(UART_DATA_COUNT>5) return;
			LED_Reflash(p->disp_light);
		}
	}	
}
/****************************************************************************
* 名称:LED_DownMove()
* 功能:显示向下移动
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_DownMove(P_FRAME_DATA p)
{
	signed char i,j,k,l;
	for(k=(LED_YSIZE-1);k>-1;k--)		//
	{
		for(i=(LED_YSIZE-1);i>-1;i--)		//
		{
			for(j=0;j<16;j++)		//每行16个字节128像素
			{
				if(i>0) DISP_BUFFER_DATA.frame[i][j] = DISP_BUFFER_DATA.frame[i-1][j];
				else DISP_BUFFER_DATA.frame[i][j] = p->frame[k][j];
				
			}
		}
		for(l=0;l<p->move_time;l++)
		{
			if(UART_DATA_COUNT>5) return;
			LED_Reflash(p->disp_light);
		}
	}	
}
/****************************************************************************
* 名称:LED_LeftMove()
* 功能:显示向左 移动
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_LeftMove(P_FRAME_DATA p)
{
	INT8U i,j,k,l;
	INT8S m;
	
	for(k=0;k<16;k++)		//
	{
		for(m=7;m>-1;m--)		//
		{
			for(i=0;i<LED_YSIZE;i++)		//
			{
				for(j=0;j<16;j++)		//每行16个字节128像素
				{
					if(j<15) DISP_BUFFER_DATA.frame[i][j] = (DISP_BUFFER_DATA.frame[i][j]<<1)|((DISP_BUFFER_DATA.frame[i][j+1]>>7)&0x01);
					else DISP_BUFFER_DATA.frame[i][j] =(DISP_BUFFER_DATA.frame[i][j]<<1)|((p->frame[i][k]>>m)&0x01);
				}
			}
			for(l=0;l<p->move_time;l++)
			{
				if(UART_DATA_COUNT>5) return;
				LED_Reflash(p->disp_light);
			}
		}
	}	
}
/****************************************************************************
* 名称:LED_Num_LeftMove()
* 功能:指定行向左 移动
* 入口参数:
* 出口参数:无
***************************************************************************
void LED_Num_LeftMove(void)
{
	INT8U i,j,k,l;
	static INT8U s;
	INT8S m;
	P_FRAME_DATA p;
	if(s==0)
	{
		p=&FRAME_DATA[1];
		s=1;
	}
	else
	{
		p=&FRAME_DATA[2];
		s=0;
	}
	for(k=0;k<16;k++)		//
	{
		for(m=7;m>-1;m--)		//
		{
			for(i=80;i<LED_YSIZE;i++)		//
			{
				for(j=0;j<16;j++)		//每行16个字节128像素
				{
					if(j<15) DISP_BUFFER_DATA.frame[i][j] = (DISP_BUFFER_DATA.frame[i][j]<<1)|((DISP_BUFFER_DATA.frame[i][j+1]>>7)&0x01);
					else DISP_BUFFER_DATA.frame[i][j] =(DISP_BUFFER_DATA.frame[i][j]<<1)|((p->frame[i][k]>>m)&0x01);
				}
			}
			for(l=0;l<FRAME_DATA[1].move_time;l++)
			{
				if(UART_DATA_COUNT>5) return;
				LED_Reflash(FRAME_DATA[1].disp_light);
			}
		}
	}	
}*/
/****************************************************************************
* 名称:LED_RightMove()
* 功能:显示向右移动
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_RightMove(P_FRAME_DATA p)
{
	INT8U i,l;
	INT8S j,k,m;
	
	for(k=15;k>-1;k--)		//
	{
		for(m=7;m>-1;m--)		//
		{
			for(i=0;i<(LED_YSIZE-1);i++)		//
			{
				for(j=15;j>-1;j--)		//每行16个字节128像素
				{
					if(j>0) DISP_BUFFER_DATA.frame[i][j] = (DISP_BUFFER_DATA.frame[i][j]>>1)|((DISP_BUFFER_DATA.frame[i][j-1]<<7)&0x80);
					else DISP_BUFFER_DATA.frame[i][j] =(DISP_BUFFER_DATA.frame[i][j]>>1)|((p->frame[i][k]<<m)&0x80);
				}
			}
			for(l=0;l<p->move_time;l++)
			{
				if(UART_DATA_COUNT>5) return;
				LED_Reflash(p->disp_light);
			}
		}
	}	
}
/****************************************************************************
* 名称:LED_Disp()
* 功能:把显示数据送入内存
* 入口参数:
* 出口参数:无
****************************************************************************/
void LED_Disp(void)
{
	static INT8U i;
	INT32U j;
	if(P_CURRENT_FRAME_DATA)
	{
		switch(P_CURRENT_FRAME_DATA->disp_mode)
		{
			case '1':
				LED_UpMove(P_CURRENT_FRAME_DATA);
				break;
			case '2':
				LED_DownMove(P_CURRENT_FRAME_DATA);
				break;
			case '3':
				LED_LeftMove(P_CURRENT_FRAME_DATA);
				break;
			case '4':
				LED_RightMove(P_CURRENT_FRAME_DATA);
				break;
			 default:
			 	LED_Full(P_CURRENT_FRAME_DATA);
				break;
		}
		for(j=0;j<P_CURRENT_FRAME_DATA->disp_time;j++)
		{
			if(UART_DATA_COUNT>5) return;
			LED_Reflash(P_CURRENT_FRAME_DATA->disp_light);
		}
	}
	while(1)
	{
		if(i>10) i=0;
		for(;i<11;i++)
		{
			if(UART_DATA_COUNT>5){return;}
			if(FRAME_DATA[i].disp_en=='1')
			{
				if(i==0){P_FRAME=FRAME_DATA[0].frame; OpenRTC_IRQ();} else{ CloseRTC_IRQ(); P_FRAME=DISP_BUFFER_DATA.frame;} 
				switch(FRAME_DATA[i].disp_mode)
				{
					case '1':
						LED_UpMove(&FRAME_DATA[i]);
						break;
					case '2':
						LED_DownMove(&FRAME_DATA[i]);
						break;
					case '3':
						LED_LeftMove(&FRAME_DATA[i]);
						break;
					case '4':
						LED_RightMove(&FRAME_DATA[i]);
						break;
					 default:
					 	LED_Full(&FRAME_DATA[i]);
						break;
				}
				for(j=0;j<FRAME_DATA[i].disp_time;j++)
				{
					if(UART_DATA_COUNT>5){ CloseRTC_IRQ(); P_FRAME=DISP_BUFFER_DATA.frame;return;}
					LED_Reflash(FRAME_DATA[i].disp_light);
					if((IO1PIN&BIT_19)==0)
					{
						if((IO1PIN&BIT_22)==0) Disp_X(); else Disp_Y();
					}
					//if(UART_DATA[1]<='9') LED_Num_LeftMove();
				}
			}
			WdtFeed();		//看门狗喂狗信号

			if(UART_DATA_COUNT>5){ CloseRTC_IRQ(); P_FRAME=DISP_BUFFER_DATA.frame;return;}
		}
	}
}
/****************************************************************************
* 名称:IRQ_Time0()
* 功能:定时器0中断服务程序,取反BEEPCON控制口。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void __irq  IRQ_Time0(void)
{  
	Disp_Close();
	T0TCR = 0x00;	    			            	// 复位中断,禁止计数
	T0IR = 0x01;	    			            	// 清除中断标志
	VICVectAddr = 0x00;				            	// 通知VIC中断处理结束
}

⌨️ 快捷键说明

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