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

📄 lcdprint.c

📁 完整的原创单片机控制彩色液晶源代码(keil工程) 320x240液晶模块底层驱动 控制芯片5408 CPU LPC2131(or Higher) 开发环境 keil C for ARM (MDK
💻 C
字号:
//#include <LPC213x.h>
#include <stdio.h>

#include "LCD.h"
#include "LCDprint.h"
#include "Flash.h"

#include "DataDeclare.h"
//====================================================================================
unsigned int GX=0,GY=0,BACKCOL=WHITE,FRONTCOL=BLACK,MOD=NORMAL,SIZE=12;
//====================================================================================
void SetPrintf(unsigned int x, unsigned int y,unsigned int BackColor,unsigned int FrontColor,
	unsigned int FillMod,unsigned int Fontsize)
{
	if (x != REMAIN)
		GX = x % 240;
	if (y != REMAIN)
		GY = y % 320;
	if (BackColor != REMAIN)
		BACKCOL=BackColor & 0x0000FFFF;
	if (FrontColor != REMAIN)
		FRONTCOL=FrontColor & 0x0000FFFF;
	if (FillMod != REMAIN)
		MOD = FillMod;
	if (Fontsize != REMAIN)
		if (Fontsize == 16)
			SIZE = 16;
		else
			SIZE = 12;
}
//====================================================================================
void PrintAscF(unsigned char *pAscii)	//Fixedsys
{
    unsigned char i, j;
    unsigned char str;
    unsigned int OffSet;

    OffSet = *pAscii - 32;
    for (i=0;i<16;i++)
    {
        SetRamAddr(GX,GY+i);
        SendCom(0x22);
        str = *(AsciiLibF + OffSet + i*96);  
        for (j=0;j<8;j++)
            if ( str & (0x80 >> j) )
                SendDat(FRONTCOL);
            else
                if (NORMAL == MOD) 
                    SendDat(BACKCOL);
                else
                {
                    SetRamAddr(GX+j+1,GY+i);
                    SendCom(0x22);  
                }
    }
}
//====================================================================================
void PrintAsc12(unsigned char *pAscii)	//Fixedsys
{
    unsigned char i, j;
    unsigned char str;
    unsigned int OffSet;

    OffSet = (*pAscii - 32) * 12;
    for (i=0;i<12;i++)
    {
        SetRamAddr(GX,GY+i);
        SendCom(0x22);
        str = *(AscSmall + OffSet + i);  
        for (j=0;j<6;j++)
            if ( str & (0x80 >> j) )
                SendDat(FRONTCOL);
            else
                if (NORMAL == MOD) 
                    SendDat(BACKCOL);
                else
                {
                    SetRamAddr(GX+j+1,GY+i);
                    SendCom(0x22);  
                }
    }
}
//====================================================================================
void PrintChsF(unsigned char *pChs) //Flash
{
	unsigned int i=0,k=0;
	unsigned char buf[32]={0};
	unsigned int str;

	i =	((pChs[0] - 161) * 94 + (pChs[1] - 161)) * 32;
	FlashRead(i,32,buf);

    for (i=0; i < 16; i++)
	{
		SetRamAddr(GX,GY+i);
		SendCom(0x22);
		str = (buf[i*2] << 8) | buf[i*2+1]; 
		for (k=0; k < 16; k++)
			if (str & (0x8000 >> k))
                SendDat(FRONTCOL);
            else
            	if (NORMAL == MOD) 
                	SendDat(BACKCOL);
				else
                {
					SetRamAddr(GX+k+1,GY+i);
					SendCom(0x22);  
                }
            
	}
}
//====================================================================================
void PrintChsF12(unsigned char *pChs) //Flash
{
	unsigned int i=0,k=0;
	unsigned char buf[24]={0};
	unsigned int str;

	i =	((pChs[0] - 161) * 94 + (pChs[1] - 161)) * 24 + 0x00080000;
	FlashRead(i,24,buf);

    for (i=0; i < 12; i++)
	{
		SetRamAddr(GX,GY+i);
		SendCom(0x22);
		str = (buf[i*2] << 8) | buf[i*2+1]; 
		for (k=0; k < 12; k++)
			if (str & (0x8000 >> k))
                SendDat(FRONTCOL);
            else
            	if (NORMAL == MOD) 
                	SendDat(BACKCOL);
				else
                {
					SetRamAddr(GX+k+1,GY+i);
					SendCom(0x22);  
                }
            
	}
}
//====================================================================================
void Locate(unsigned int x,unsigned int y)
{
	GX = (x * SIZE) >> 1;
	GY = y * SIZE;
	OUT_OF_RANGE(ScreenW)
}
//====================================================================================
int fputc(int ch, FILE *f) 
{
	static int last=0;

	HOUT_OF_RANGE;

	if (ch < 128)	//ASC
		if (ch == '\n')
		{
			GX=0;
			GY+=SIZE;
			HOUT_OF_RANGE;
		}
		else
		{
			OUT_OF_RANGE(ScreenW - (SIZE >> 1) + 1)
			if (SIZE == 16)
				PrintAscF((unsigned char *)&ch);
			else
				PrintAsc12((unsigned char *)&ch);
			last=0;
			GX+=(SIZE >> 1);	//ASC is half width
			OUT_OF_RANGE(ScreenW)
		}
	else	//Chs
		if(last == 0)	//Wait for next byte
			last = ch;
		else
		{
			OUT_OF_RANGE(ScreenW - SIZE + 1)
			last = (ch << 8) | last;
			if (SIZE == 16)
				PrintChsF((unsigned char *)&last);
			else
				PrintChsF12((unsigned char *)&last);
			last = 0;
			GX+=SIZE;
			OUT_OF_RANGE(ScreenW)
		}
	return ch;
}

⌨️ 快捷键说明

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