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

📄 leddisp.c

📁 使用ads1.2编译器
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef _Include 
#include  "Include.h"
#endif

#define   DANDAOQI_STATE	(BIT_7&IOPIN)	/*读挡道器状态*/
#define   TEST0_STATE	(BIT_25&IOPIN)	/*读测试状态*/
#define   TEST1_STATE	(BIT_26&IOPIN)	/*读测试状态*/

char UART_DATA[250],DISP_STATE,UART_DATA_COUNT;
char *weekday[7]={"天","一","二","三","四","五","六"};
/****************************************************************************
* 名称:SaveDispData()
* 功能:保存显示数据
* 入口参数:
* 出口参数:无
****************************************************************************/
void SaveDispData(void)
{
	INT16U *p;
	ARMDisableInt();
	SectorErase(FLASH_APP_ADD);
	SectorErase(FLASH_APP_ADD+SECTOR_SIZE);
	SectorErase(FLASH_APP_ADD+SECTOR_SIZE*2);
	p=(INT16U *)&FRAME_DATA[1];
	FlashProg(FLASH_APP_ADD,p,(sizeof(FRAME_DATA)-sizeof(FRAME_DATA[0]))/2);
	ARMEnableInt();
}
/****************************************************************************
* 名称:RenewDispData()
* 功能:还原显示数据
* 入口参数:
* 出口参数:无
****************************************************************************/
void RenewDispData(void)
{
	INT16U *p;
	ARMDisableInt();
	p=(INT16U *)&FRAME_DATA[1];
	FlashRead(FLASH_APP_ADD,p,sizeof(FRAME_DATA)-sizeof(FRAME_DATA[0]));
	ARMEnableInt();
}
/****************************************************************************
* 名称:Disp_Data_Check()
* 功能:显示数据有效性检测和修改
* 入口参数:
* 出口参数:无
****************************************************************************/
void Disp_Data_Check(INT8U i)
{
	if(FRAME_DATA[i].disp_font=='0') FRAME_DATA[i].disp_font=CHAR_16; else FRAME_DATA[i].disp_font=CHAR_12;	//显示字体
	
	if(FRAME_DATA[i].disp_light==0||FRAME_DATA[i].disp_light>0xff) FRAME_DATA[i].disp_light=0xbf;	//亮度计算,	
		
	if(FRAME_DATA[i].move_time==0) FRAME_DATA[i].move_time=5;	//移动时间,基数最大为32
	
	if(FRAME_DATA[i].disp_time==0) FRAME_DATA[i].disp_time=0xff;//显示时间
}
/****************************************************************************
* 名称:Immediately_Disp_Data()
* 功能:立即显示数据
* 入口参数:
* 出口参数:无
****************************************************************************/
void Immediately_Disp_Data(void)
{
	P_FRAME=DISP_BUFFER_DATA.frame;	//把数据存放在指定的帧里面
	P_CURRENT_FRAME_DATA=&DISP_BUFFER_DATA;
	if(UART_DATA[2]<'6')//显示位置全屏还是按行存
	{
	    if(UART_DATA[2]=='0')
	    {
		    Slib_SetCursor(0,0);//按行号存储数据
			Slib_PutStr(&UART_DATA[3]);		//显示数据
		}
		else
		{
		    Slib_SetCursor(UART_DATA[2]-48-1,0);//按行号存储数据
			Slib_PutStr(&UART_DATA[3]);		//显示数据
		}
		while(1)
		{
			if(UART_DATA_COUNT>5){return;}
			LED_Reflash(DISP_BUFFER_DATA.disp_light);
		}

	}
}
/****************************************************************************
* 名称:Open_Alarm()
* 功能:打开报警
* 入口参数:
* 出口参数:无
****************************************************************************/
void Open_Alarm()
{
	IO0SET=BIT_10;

}
/****************************************************************************
* 名称:Close_Alarm()
* 功能:关闭报警
* 入口参数:
* 出口参数:无
****************************************************************************/
void Close_Alarm()
{
	IO0CLR=BIT_10;
}
/****************************************************************************
* 名称:Num_Disp_Data()
* 功能:按帧号存储显示数据
* 入口参数:
* 出口参数:无
****************************************************************************/
void Num_Disp_Data(void)
{
	INT8U i,x,y;
	i=(UART_DATA[2]-48)*10+(UART_DATA[3]-48);//计算帧号
	if(i>10||i==0) i=1;//10帧数据
	
	P_CURRENT_FRAME_DATA=&FRAME_DATA[i];	//把数据存放在指定的帧里面
	
	FRAME_DATA[i].disp_font=UART_DATA[4];	//显示字体
	
	FRAME_DATA[i].disp_light=(UART_DATA[9]-48)*100+(UART_DATA[10]-48)*10+(UART_DATA[11]-48);	//亮度计算,	
	
	FRAME_DATA[i].move_time=(((UART_DATA[13]-48)*10+(UART_DATA[14]-48))&0x1f)*5;	//移动时间,基数最大为32
	
	FRAME_DATA[i].disp_time=((UART_DATA[15]-48)*100+(UART_DATA[16]-48)*10+(UART_DATA[17]-48))*0xff;//显示时间
	
	Disp_Data_Check(i);
	
	FRAME_DATA[i].disp_mode=UART_DATA[12];	//显示样式

	y=(UART_DATA[5]-48)*10+(UART_DATA[6]-48);
	if(y>(LED_YSIZE/FRAME_DATA[i].disp_font)) y=0;		//显示行位置校验
	
	x=(UART_DATA[7]-48)*10+(UART_DATA[8]-48);	
	if(x>(LED_XSIZE/(FRAME_DATA[i].disp_font/2))) x=0;		//显示列位置校验

	Slib_FillScr(0);
    Slib_SetCursor(y,x);//按行号存储数据
	Slib_PutStr(&UART_DATA[18]);		//显示数据disp_font

	FRAME_DATA[i].disp_en='1';			//显示使能

}
/****************************************************************************
* 名称:Num_Disp_Ctrl()
* 功能:屏号显示控制
* 入口参数:
* 出口参数:无
****************************************************************************/
void Num_Disp_Ctrl(void)
{
	INT8U i;
	i=(UART_DATA[2]-48)*10+(UART_DATA[3]-48);	//计算帧号
	if(i>10) i=1;//10帧数据
	FRAME_DATA[i].disp_en=UART_DATA[4];		//显示使能
	if(FRAME_DATA[0].disp_en=='1')  OpenRTC_IRQ(); else CloseRTC_IRQ();
}
/****************************************************************************
* 名称:Num_Disp_Null()
* 功能:按帧号清显示数据
* 入口参数:
* 出口参数:无
****************************************************************************/
void Num_Disp_Null(void)
{
	INT8U i;
	i=(UART_DATA[2]-48)*10+(UART_DATA[3]-48);	//计算帧号
	P_CURRENT_FRAME_DATA=&FRAME_DATA[i];	//指定的帧
	Slib_FillScr(0);
}
/****************************************************************************
* 名称:Disp_Null_Close()
* 功能:清除显示绶冲区并关闭显示
* 入口参数:
* 出口参数:无
****************************************************************************/
void Disp_Null_Close(void)
{
	INT8U i,j;
	Disp_Close();
	for(i=0;i<LED_YSIZE;i++)
	{
		for(j=0;j<LED_XSIZE/8;j++)
		{
			DISP_BUFFER_DATA.frame[i][j]=0x00; //填充显示缓冲区
		}
	}
}
/****************************************************************************
* 名称:RTC_Disp_Ctrl()
* 功能:时钟显示控制  
* 入口参数:
* 出口参数:无
****************************************************************************/
void RTC_Disp_Ctrl()
{
	CloseRTC_IRQ();
	TIME8563.year=((UART_DATA[2]-48)<<4)|((UART_DATA[3]-48)&0x0f);    // 初始化年
	TIME8563.month=((UART_DATA[4]-48)<<4)|((UART_DATA[5]-48)&0x0f);	// 初始化月
	TIME8563.day=((UART_DATA[6]-48)<<4)|((UART_DATA[7]-48)&0x0f);				    // 初始化日
	TIME8563.hour=((UART_DATA[8]-48)<<4)|((UART_DATA[9]-48)&0x0f);
	TIME8563.min=((UART_DATA[10]-48)<<4)|((UART_DATA[11]-48)&0x0f);
	TIME8563.sec=((UART_DATA[12]-48)<<4)|((UART_DATA[13]-48)&0x0f);
	TIME8563.weekday=(UART_DATA[14]-48)&0x07;
	
	PCF8563RTCSet();
	LPC2220SetRTC();
	
	FRAME_DATA[0].disp_light=(UART_DATA[15]-48)*100+(UART_DATA[16]-48)*10+(UART_DATA[17]-48);	//亮度计算,	
	if(FRAME_DATA[0].disp_light==0||FRAME_DATA[0].disp_light>0xff) FRAME_DATA[0].disp_light=0xbf;
	
	FRAME_DATA[0].disp_mode=UART_DATA[18];	//显示样式
	
	FRAME_DATA[0].disp_font=CHAR_16;	//显示字体
	
	FRAME_DATA[0].move_time=(((UART_DATA[19]-48)*10+(UART_DATA[20]-48))&0x1f)*5;	//移动时间,基数最大为32
	if(FRAME_DATA[0].move_time==0) FRAME_DATA[0].move_time=5;
	
	FRAME_DATA[0].disp_time=((UART_DATA[21]-48)*100+(UART_DATA[22]-48)*10+(UART_DATA[23]-48))*0xff;//显示时间
	if(FRAME_DATA[0].disp_time==0) FRAME_DATA[0].disp_time=0xff;
	
	FRAME_DATA[0].disp_en='1';
	OpenRTC_IRQ();
}

/****************************************************************************
* 名称:Disp_X()
* 功能:显示叉叉和欢迎光临
* 入口参数:
* 出口参数:无
****************************************************************************/
void Disp_X(void)
{
	INT16U i;
	P_CURRENT_FRAME_DATA=&FRAME_DATA[1];	//指定的帧

	for(i=0;i<8;i++)
	{
		DISP_BUFFER_DATA.frame[i][12]=0xff; //填充显示缓冲区
	}
 	for(i=24;i<32;i++)
	{
		DISP_BUFFER_DATA.frame[i][15]=0x00; //填充显示缓冲区
	}
   
	for(i=0;i<8;i++)
	{
		P_CURRENT_FRAME_DATA->frame[i][12]=0xff; //填充显示缓冲区
	}
 	for(i=24;i<32;i++)
	{
		P_CURRENT_FRAME_DATA->frame[i][15]=0x00; //填充显示缓冲区
	}
}
/****************************************************************************
* 名称:Disp_Y()
* 功能:显示箭头和一路平安
* 入口参数:
* 出口参数:无
****************************************************************************/
void Disp_Y(void)
{
	INT16U i;

	P_CURRENT_FRAME_DATA=&FRAME_DATA[1];	//指定的帧

	for(i=0;i<8;i++)
	{
		DISP_BUFFER_DATA.frame[i][12]=0x00; //填充显示缓冲区
	}
 	for(i=24;i<32;i++)
	{
		DISP_BUFFER_DATA.frame[i][15]=0xff; //填充显示缓冲区
	}
	for(i=0;i<8;i++)
	{
		P_CURRENT_FRAME_DATA->frame[i][12]=0x00; //填充显示缓冲区
	}
 	for(i=24;i<32;i++)
	{
		P_CURRENT_FRAME_DATA->frame[i][15]=0xff; //填充显示缓冲区
	}
}
/****************************************************************************
* 名称:TYPE_Disp_Data()
* 功能:显示数据
* 入口参数:
* 出口参数:无
****************************************************************************/
void TYPE_Disp_Data(void)
{
	INT8U i;
	char type_data[7][17]={ "车型: 货一型  ",
							"金额: 9999元    ",
							"总重:   999.9 吨",
							"超重:   999.9 吨",
							"车牌: 苏A-50843 ",
							"违章: 冲卡999 次"};
	for(i=0;i<4;i++)
	{
		type_data[0][6+i]=UART_DATA[2+i];
	}
	for(i=0;i<4;i++)
	{
		type_data[1][6+i]=UART_DATA[6+i];
	}
	for(i=0;i<3;i++)
	{
		type_data[2][8+i]=UART_DATA[10+i];
	}
	type_data[2][12]=UART_DATA[13];

	for(i=0;i<3;i++)
	{
		type_data[3][8+i]=UART_DATA[14+i];
	}
	type_data[3][12]=UART_DATA[17];

	for(i=0;i<16;i++)
	{
		type_data[4][i]=UART_DATA[18+i];
	}
	for(i=0;i<16;i++)

⌨️ 快捷键说明

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