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

📄 led.c

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

#define LED_Add0 (*((volatile unsigned char *) 0x82000000))
#define LED_Add1 (*((volatile unsigned char *) 0x82000001))
#define LED_Add2 (*((volatile unsigned char *) 0x82000002))
#define LED_Add3 (*((volatile unsigned char *) 0x82000003))
unsigned int HZK_16;
unsigned int ASCII_16;
unsigned int HZK_12;
unsigned int ASCII_12;
unsigned char (*P_FRAME)[LED_XSIZE/8];
int CURSOR;
_FRAME_DATA FRAME_DATA[11],*P_CURRENT_FRAME_DATA,DISP_BUFFER_DATA;

/****************************************************************************
* 名称:LEDTest()
* 功能:检测led屏的像素点
* 入口参数:
* 出口参数:无
****************************************************************************/
void LEDTest(void)
{
	INT16U i,j;

	for(i=0;i<LED_YSIZE;i++)
	{
		for(j=0;j<LED_XSIZE/8;j++)
		{
			DISP_BUFFER_DATA.frame[i][j]=0xff; //填充显示缓冲区
		}
	}
	for(i=0;i<0x17f;i++)	//填充全屏显示,用于检测像素点
	{
		LED_Reflash(0x1f);
	}	
}
/****************************************************************************
* 名称:LEDInit()
* 功能:输出像素
* 入口参数:
* 出口参数:无
****************************************************************************/
void LEDInit(void)
{
	INT8U i;
	RenewDispData();	//读出Flash中的存储的数据
	
	DISP_BUFFER_DATA.disp_mode=0;	//初始化显示缓冲区默认数据
	DISP_BUFFER_DATA.disp_time=0xff;
	DISP_BUFFER_DATA.disp_light=0x5f;
	DISP_BUFFER_DATA.disp_font=CHAR_16;
	DISP_BUFFER_DATA.move_time=5;
	
	P_FRAME=DISP_BUFFER_DATA.frame;

	TimeInit0(LEDReflashTimeTest()/255);					//亮度最高值255,赋值亮度单位
	
	LEDTest();
	
	P_CURRENT_FRAME_DATA=&FRAME_DATA[1];
	FRAME_DATA[1].disp_mode=0;			//显示立即全帧显示
	FRAME_DATA[1].disp_time=0xff;		//显示时间
	FRAME_DATA[1].disp_light=0x5f;			//显示亮度
	FRAME_DATA[1].move_time=5;
	FRAME_DATA[1].disp_font=CHAR_16;
	Disp_X();
	Slib_FillScr(0);
	Disp_Null_Close();
#if _Debug==1
	if(FRAME_DATA[1].disp_en!='1')
	{
		Slib_SetCursor(0,0);
		Slib_Printf("南京卡巴自动化设");	
	    Slib_SetCursor(1,0);
		Slib_Printf("备有限公司信息屏");	
	    Slib_SetCursor(2,0);
		Slib_Printf("应用:公路,收费");	
	    Slib_SetCursor(3,0);
		Slib_Printf("信息显示各种场所");	
	    Slib_SetCursor(4,0);
		Slib_Printf("应用:公路,收费");	
	    Slib_SetCursor(5,0);
		Slib_Printf("信息显示各种场所");	
		FRAME_DATA[1].disp_en='1';			//显示使能
		
	}
#endif
	for(i=0;i<11;i++)
	{
#if _Debug
		Disp_Data_Check(i);
#else
		FRAME_DATA[i].disp_en=0;
#endif
	}
	FRAME_DATA[1].disp_en='1';
	DISP_BUFFER_DATA.disp_light=0xff;
	FRAME_DATA[1].disp_light=0xff;			//显示亮度
}

/****************************************************************************
* 名称:Slib_SetCursor()
* 功能:设置光标位置
* 入口参数:
* 出口参数:无
****************************************************************************/

void Slib_SetCursor(INT8U y,INT8U x)
{
	switch(P_CURRENT_FRAME_DATA->disp_font)
	{
		case CHAR_12:
			CURSOR=21*y+x;	//每行显示21字符余两个像素
			break;
		default:
			CURSOR=16*y+x;	//每行显示16字符
			break;
	}
}
/****************************************************************************
* 名称:PutPixelG4()
* 功能:输出像素
* 入口参数:
* 出口参数:无
****************************************************************************/
void PutPixelG1(int y,int x,char c)
{
	if(((y<32)&&(x<96))||(y>31))
	{
		P_CURRENT_FRAME_DATA->frame[y][x/8]=(P_CURRENT_FRAME_DATA->frame[y][x/8] & ~(0x80>>(x%8)))
		|(c<<(8-1-(x%8)));
	}
}
/****************************************************************************
* 名称:LcdG4_Bmp()
* 功能:画4色图片
* 入口参数:
* 出口参数:无
****************************************************************************/
void LcdG4_Bmp(INT8U *bmp)
{
    int x, y;
    for(x=0;x<LED_YSIZE;x++)		//画4色图片
    {
	    for(y=0;y<16;y++)		//画4色图片
	    {
		    P_CURRENT_FRAME_DATA->frame[x][y]=*(bmp+(x*16)+y);
	    }
	}  
}
/****************************************************************************
* 名称:Slib_FillScr(char c)
* 功能:清显示缓冲区
* 入口参数:
* 出口参数:无
****************************************************************************/
void Slib_FillScr(char c)
{
    int x,y;
	
    for(y=0;y<LED_YSIZE;y++)
    {
    	for(x=0;x<LED_XSIZE;x++)
    	{
	    	PutPixelG1(y,x,c);
	    }
	}

}

/****************************************************************************
* 名称:Slib_PutChar_16()
* 功能:输出字符
* 入口参数:
* 出口参数:无
****************************************************************************/
void Slib_PutChar_16(INT8U y,INT8U x,char *pchar)
{
	INT8U i,j,k;
	char *char_add;
  	if(*pchar>0xa0)//16点阵汉字
    {   
		char_add=(char*)(((((*pchar-0xa0)-1)*94)+((*(pchar+1)-0xa0)-1))*32+HZK_16);
		if(((y<2)&&(x<11))||(y>1))
		{
			for(k=0;k<32;k+=16)
			{
				for (i=0;i<16;i++)
				{
			        for(j=0;j<8;j++)
			        {
							
						P_CURRENT_FRAME_DATA->frame[y*16+i][(x*8+j)/8] &= ~(0x01<<(7-(x*8+j)%8));
						if((*(char_add+i+k)&(0x80>>j))!=0)
						{
							P_CURRENT_FRAME_DATA->frame[y*16+i][(x*8+j)/8] |= 0x01<<(7-(x*8+j)%8);
						}
					}
				}
				x++;
			}
		}
		CURSOR+=2;
	}
	else
	{
		char_add=(char*)(*pchar*16+ASCII_16);
		if(((y<2)&&(x<12))||(y>1))
		{
			for (i=0;i<16;i++)
			{
		        for(j=0;j<8;j++)
		        {
					P_CURRENT_FRAME_DATA->frame[y*16+i][(x*8+j)/8] &= ~(0x01<<(7-(x*8+j)%8));
					if((*(char_add+i)&(0x80>>j))!=0)
					{
						P_CURRENT_FRAME_DATA->frame[y*16+i][(x*8+j)/8] |= 0x01<<(7-(x*8+j)%8);
					}
				}
			}
		}
		CURSOR++;
	}
}
/****************************************************************************
* 名称:Slib_PutChar_12()
* 功能:输出字符
* 入口参数:
* 出口参数:无
****************************************************************************/
void Slib_PutChar_12(INT8U y,INT8U x,char *pchar)
{
	INT8U i,j,k;
	char *char_add;
	
  	if(*pchar>0xa0)//12点阵汉字
    {   
		char_add=(char*)(((((*pchar-0xa0)-1)*94)+((*(pchar+1)-0xa0)-1))*24+HZK_12);
		if((((y*12)<32)&&((x*6)<90))||((y*12)>31))
		{
			for(k=0;k<24;k+=12)
			{
				for (i=0;i<12;i++)
				{
			        for(j=0;j<(8-k/3);j++)
			        {
						P_CURRENT_FRAME_DATA->frame[y*12+i][(x*6+j+k/6)/8] &= ~(0x01<<(7-(x*6+j+k/6)%8));
						if((*(char_add+i+k)&(0x80>>j))!=0)
						{
							P_CURRENT_FRAME_DATA->frame[y*12+i][(x*6+j+k/6)/8] |= 0x01<<(7-(x*6+j+k/6)%8);
						}
					}
				}
				x++;
			}
		}
		CURSOR+=2;
	}
	else
	{
		char_add=(char*)(*pchar*12+ASCII_12);
		if((((y*12)<32)&&((x*6)<96))||((y*12)>31))
		{
			for (i=0;i<12;i++)
			{
		        for(j=0;j<6;j++)
		        {
					P_CURRENT_FRAME_DATA->frame[y*12+i][(x*6+j)/8] &= ~(0x01<<(7-(x*6+j)%8));
					if((*(char_add+i)&(0x80>>j))!=0)
					{
						P_CURRENT_FRAME_DATA->frame[y*12+i][(x*6+j)/8] |= 0x01<<(7-(x*6+j)%8);
					}
				}
			}
		}
		CURSOR++;
	}
}
/****************************************************************************
* 名称:Slib_PutStr()
* 功能:换行和显示范围限定
* 入口参数:
* 出口参数:无
****************************************************************************/
void Slib_PutStr(char *pstr)
{
	INT8U xx,yy,p,char_xnum,char_ynum;
	switch(P_CURRENT_FRAME_DATA->disp_font)
	{
		case CHAR_12:
			char_xnum=LED_XSIZE/6;
			char_ynum=LED_YSIZE/12;
			while(*pstr)
			{
				if(*pstr=='\n')			//是否换行
				{
					CURSOR=(CURSOR/char_xnum+1)*char_xnum;
					pstr++;
				}
				if((((CURSOR+1)%char_xnum)==0)&&(*pstr>0xa0)) CURSOR=(CURSOR/char_xnum+1)*char_xnum;//显示汉字时,行最后不够显示时换行
				xx=(INT8U)(CURSOR%char_xnum);	//判断每列是否满
				yy=(INT8U)(CURSOR/char_xnum);	//判断是否要换行
				p=CURSOR;
				Slib_PutChar_12(yy,xx,pstr);
				p=CURSOR-p;
				pstr+=p;
				if(CURSOR == char_xnum*char_ynum)	CURSOR=0;	//超出屏幕范围 4字符行 X 16个字符列=64 ASCII16
			}
			break;
		default://默认为16*16
			char_xnum=LED_XSIZE/8;
			char_ynum=LED_YSIZE/16;
			while(*pstr)
			{
				if(*pstr=='\n')			//是否换行
				{
					CURSOR=(CURSOR/char_xnum+1)*char_xnum;
					pstr++;
				}
				if((((CURSOR+1)%char_xnum)==0)&&(*pstr>0xa0)) CURSOR=(CURSOR/char_xnum+1)*char_xnum;//显示汉字时,行最后不够显示时换行
				xx=(INT8U)(CURSOR%char_xnum);	//判断每列是否满
				yy=(INT8U)(CURSOR/char_xnum);	//判断是否要换行
				p=CURSOR;
				Slib_PutChar_16(yy,xx,pstr);
				p=CURSOR-p;
				pstr+=p;
				if(CURSOR == char_xnum*char_ynum)	CURSOR=0;	//超出屏幕范围 4字符行 X 16个字符列=64 ASCII16
			}
			break;
	}	
}
/****************************************************************************
* 名称:Slib_Printf()
* 功能:格式化字符串
* 入口参数:
* 出口参数:无
****************************************************************************/
void Slib_Printf(char *fmt,...) 
{
  va_list ap;
  char string[160];

  va_start(ap,fmt);
  vsprintf(string,fmt,ap);
  Slib_PutStr(string);
  va_end(ap);
}
/****************************************************************************
* 名称:Reflash
* 功能:LED刷新用信号
* 入口参数:
* 出口参数:无
****************************************************************************/
void Frame_Data(void)								//帧数据				

⌨️ 快捷键说明

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