📄 leddisp.c
字号:
#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 + -