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

📄 funcfontlib.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
#include "includes.h"
#include <p18cxxx.h>
#include "funcfontlib.h"
#include "funclcd.h"
#include "fontlib.h"


#pragma romdata CCODE
rom INT16U TextOffHook[4]={0x8bf7,0x62e8,0x53f7,0x7801};
rom INT16U TextPlsOnHook[3]={0x8bf7,0x6302,0x673a};

//#pragma code MYCODE
INT8U rom * Disp_GetBitMap(unsigned int unicode){
	INT8U	rom * ptrIndex;
	INT8U	rom * ptrBitMap;
	//INT24U	intTemp;
	SWORD_VAL Temp;
	//INT8U	chrT1,chrT2;
	
	//Section code = 0x00
	if (unicode < 0x0100) {
		ptrIndex = &F_L_SEC_00;
		ptrIndex += ((unicode - 0x0000)*2);
	}
	//Section code = 0x20
	else if(unicode >= 0x2000 && unicode < 0x2040){
		ptrIndex = &F_L_SEC_20;
		ptrIndex += ((unicode - 0x2000)*2);
	}
	//Section code = 0x30
	else if(unicode >= 0x3000 && unicode < 0x3020){
		ptrIndex = &F_L_SEC_30;
		ptrIndex += ((unicode - 0x3000)*2);
	}
	//Section code = 0x4e ~ 0x9f
	else if(unicode >= 0x4e00 && unicode < 0xa000){
		ptrIndex = &FONTLIB;
		ptrIndex += ((unicode-0x4e00)*2);
	}
	//Section code = 0xff
	else if(unicode >= 0xff00 && unicode < 0xff60){
		ptrIndex = &F_L_SEC_FF;
		ptrIndex += ((unicode-0xff00)*2);
	}
	else if(unicode >= 0xffe0 && unicode < 0xfff0){
		ptrIndex = &F_L_SEC_FF;
		ptrIndex += ((unicode - 0xffe0 + 0x60)*2);
	}
	//Section code = 0xd4(private pictures)
	else if(unicode >= 0xd400 && unicode < 0xd4c0){
		ptrIndex = &F_L_SEC_PIC;
		ptrIndex += ((unicode-0xd400)*2);
	}
	else return((INT8U rom *)0);
	
	ptrBitMap = &FONTLIB_C;
	Temp.Val = *((INT16U rom *)ptrIndex);
	if((Temp.bytes.LSB & Temp.bytes.MSB) == 0xff) return ((INT8U rom *)0);
	Temp.bytes.USB = Temp.bytes.LSB;
	Temp.bytes.LSB = Temp.bytes.MSB;
	Temp.bytes.MSB = Temp.bytes.USB;
	Temp.bytes.USB = 0;
	Temp.Val *=32;
	ptrBitMap += Temp.Val;
	return (ptrBitMap); 
}




//when a word is displayed succesfully, a "0" is return
//if the unicode is not included in the font library, a "1" returned
//The defination of Type:
// bit0: if inverse display needed, 1 for inverse and 0 for normal
// bit1,2: word width, 01 for 16 point width and 00 for 8 point width
//                     11 for 6 bit
// bit7:
INT8U Disp_Word(INT8U PosX, 
				INT8U PosY, 
				INT16U unicode,
				INT8U Type){
	INT8U rom * ptrTemp;
	INT8U WordWidth;
	INT8U reverse;
	
	ptrTemp = Disp_GetBitMap(unicode);
	if (ptrTemp == (INT8U rom *)0) return (1);	//Can't find the word, return error
	
	Display_Picture(PosX,
					PosY,
					Type & (~PIX_REVERSE),
					2,
					ptrTemp,
					((Type & PIX_REVERSE) == 0)? NOREVERSE : REVERSE);
	return (0);
}



//Display the initilization picture
void Display_Start_Picture(void){
	Display_Picture(1, 32, 64, 6, &START_PIC, NOREVERSE);	
}

//Display signal quality, S_Q can be 0~5
void Display_Signal_Qual(unsigned char S_Q){
	Disp_Word(0,4,0xd480,PIX8);
	if(S_Q > 5) S_Q = 5;
	Disp_Word(0,12,(0xd411+S_Q),PIX16);
}

//Display batery level, B_L can be 0~3
void Display_Bat_Lvl(unsigned char B_L){
	if(B_L > 3)B_L = 3;
	Disp_Word(0,112,(0xd419+B_L),PIX16);
}

//Display date
void Display_Date(INT8U YearH,
				  INT8U YearL,
				  INT8U MonthH,
				  INT8U MonthL,
				  INT8U DateH,
				  INT8U DateL){
	Disp_Word(4,39,		(0xd41e+YearH-0x30),PIX6);
	Disp_Word(4,39+6,	(0xd41e+YearL-0x30),PIX6);
	Disp_Word(4,39+6*2,	0xd41d,PIX6);
	Disp_Word(4,39+6*3,	(0xd41e+MonthH-0x30),PIX6);
	Disp_Word(4,39+6*4,	(0xd41e+MonthL-0x30),PIX6);
	Disp_Word(4,39+6*5,	0xd41d,PIX6);
	Disp_Word(4,39+6*6,	(0xd41e+DateH-0x30),PIX6);
	Disp_Word(4,39+6*7,	(0xd41e+DateL-0x30),PIX6);
}

//Display time
void Display_Time(INT8U HourH,
				  INT8U HourL,
				  INT8U MinuteH,
				  INT8U MinuteL,
				  INT8U CTL){
	Disp_Word(2,47,		(0xd41e+HourH-0x30),PIX6);
	Disp_Word(2,47+6,	(0xd41e+HourL-0x30),PIX6);
	if(CTL == 0) Disp_Word(2,47+6*2,0x0020,PIX6);
	else Disp_Word(2,47+6*2,	0xd428,PIX6);
	Disp_Word(2,47+6*3,	(0xd41e+MinuteH-0x30),PIX6);
	Disp_Word(2,47+6*4,	(0xd41e+MinuteL-0x30),PIX6);
}

//Display local tel number
void Display_Local_Num(INT8U rom * ptrNum){
	INT8U i;
	
	Disp_Word(6, 16, 0xd400, PIX6);
	Disp_Word(6, 32, 0xd401, PIX6);
	Disp_Word(6, 48, 0xd428, PIX6);
	for(i=0;i<NUM_LENGTH;i++){
		Disp_Word(6,48+6+6*i,0xd41e + (*ptrNum++) - 0x30,PIX6);
	}
}

//Display service provider
//Input: 0 for china mobile, 1 for unicom, 0xff for serching network
void Display_Ser(INT8U Ser){
	if(Ser == 0xff){
		Display_Picture(0,39,48,2,&F_L_SER_SEARCH,NOREVERSE);//(TextService0,3,0,39);
	}
	else if(Ser == 0){
		Display_Picture(0,39,48,2,&F_L_SER_CMC,NOREVERSE);//		(void)app_printf(TextService1,3,0,39);
	}
	else{
		Display_Picture(0,39,48,2,&F_L_SER_UNICOM,NOREVERSE);//		(void)app_printf(TextService2,3,0,39);
	}
}

//Display if the phone is locked.
//Input: 0 for lock; 1 for unlock
void Display_Lock(unsigned char Lock_State){
	if(Lock_State == 0)Disp_Word(6, 0, 0xd440, PIX16);
	else Disp_Word(6, 0, 0xd441, PIX16);
}

//Display new SM icon
void Display_SM(unsigned char Y_N){
	if (Y_N == 1) Disp_Word(0,96,0xd417,PIX16);
	else Disp_Word(0,96,0x3000,PIX16);
}

//Display the number
void Display_Num(INT8U rom * ptrNum, INT8U Len){
	INT8U i,pos;
	pos = 0;
	for(i=0; i<Len;i++){
		if(*ptrNum <='9' && *ptrNum >= '0'){
			Disp_Word(2, pos,0xd41e + (*ptrNum++) - 0x30,PIX6);
			pos +=6;
		}
		else{
			Disp_Word(2, pos,*ptrNum++ ,PIX8);
			pos +=8;
		}
	}
}

//Display off hook screen
void Display_OffHook(void){
	(void)app_printf(TextOffHook,4,3,32);
}

//Display the ring icon, used by the cartoon task
void Display_Ring(void){
	Disp_Word(4, 40, 0xd418, PIX16);
}
void Display_RingCartoon(INT8U icon){
//0xd483~85
	if(icon > 2) icon = 2;
	Disp_Word(4,56, 0xd483+icon, PIX16);
}

void Display_PleaseOnHook(void){
	(void)app_printf(TextPlsOnHook,3,3,40);
}

void Display_PhoneCallOut(void){
	Disp_Word(4, 10,  0xd40e, PIX16);
}

void Display_PhoneCallConnect(void){
	Disp_Word(4, 10,  0xd40d, PIX16);
}

void Display_Duration(INT8U HourH,
				      INT8U HourL,
				  	  INT8U MinuteH,
				  	  INT8U MinuteL,
				  	  INT8U SecondH,
				  	  INT8U SecondL){
	Disp_Word(4,41,		(0xd41e+HourH-0x30),  PIX6);
	Disp_Word(4,41+6,	(0xd41e+HourL-0x30),  PIX6);
	Disp_Word(4,41+6*2,	 0xd428,              PIX6);
	Disp_Word(4,41+6*3,	(0xd41e+MinuteH-0x30),PIX6);
	Disp_Word(4,41+6*4,	(0xd41e+MinuteL-0x30),PIX6);
	Disp_Word(4,41+6*5,	 0xd428,              PIX6);
	Disp_Word(4,41+6*6,	(0xd41e+SecondH-0x30),PIX6);
	Disp_Word(4,41+6*7,	(0xd41e+SecondL-0x30),PIX6);
}

void Display_Menu_Picture(INT8U rom * ptrD){
	Display_Picture(2, 0, 128, 4, ptrD, NOREVERSE);
}

//display 32x16 icons, which can only be displayed at tow position-left bottom and right bottom
void Display_Menu_Icon(INT8U LorR, INT8U rom * ptrD){
	Display_Picture(6, (LorR<<6)+(LorR<<5), 32, 2, ptrD, NOREVERSE);
}

⌨️ 快捷键说明

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