📄 funcfontlib.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 + -