📄 waterctrl4-wdt.c
字号:
/*----------------------------------------------------------------------*/
/*WQ-WC01 */
/* */
/* */
/* */
/* */
/*----------------------------------------------------------------------*/
//#ifndef _CLRE2_
//#define _CLRE2_
//#endif
#include "p18f6720.h" //PIC18F6520 Head File
#include "PIC18F6720_IO.h"
#include "PIC18F6720_PERIPHERYDEVICE.h"
#include "OFF_CHIP_DEVICE.h"
#include "delays.h" //soft delay Head Flie
//Delay1TCY(); delay one TCY
//Delay10TCYx(uchar t); (255~0)*10TCY
//.....100........
//.....1K.........
//.....10K........
//if uchar t = 0 that delay time = 2560000tCY
#define uchar unsigned char
#define uint unsigned int
#define Delay5tcy() Delay1TCY();Delay1TCY();Delay1TCY();Delay1TCY()
#define MAXpirce 0x20 //max water pirce <20Yuan/M3
#define MIXYOULIANG 0x20
#define WATER_COUNT_UNIT_10L
//#define WATER_COUNT_UNIT_100L
//#define WATER_COUNT_UNIT_1000L
#define LOWPressureVal 0 //0Kg
#define HIGHPressureVal 160 //20Kg
#define YuKou 40 //100L
// 10 //50L
#define AddUsingValueOp() BCDBytesAdd(YongSL,OPnum3,3);BCDBytesAdd(YongJE,DanJCnt,5);BCDBytesAdd(LieJSL,OPnum4,5);BCDBytesSub(CardYE,DanJCnt,5)
#define ReflhDisplayVal() ClearNumDpy(2,10);DPY_SLorJE_Num(YongSL,0);ClearNumDpy(3,10);DPY_SLorJE_Num(YongJE,1);ClearNumDpy(0,10);DPY_Card_YLorJE_Num(CardYE);
#define DYP_OpenValve_Flg() OneLcdFlagSET(37);OneLcdFlagSET(59);OneLcdFlagClear(57)
#define DPY_CloseValve_Flg() OneLcdFlagSET(37);OneLcdFlagSET(57);OneLcdFlagClear(59)
#define UnDPY_Valve_FLg() OneLcdFlagSET(37);OneLcdFlagClear(59);OneLcdFlagClear(57)
#define DYP_Failure_Flg() OneLcdFlagSET(75)
#define UnDPY_Failure_Flg() OneLcdFlagClear(75)
#define DYP_CardOn_Flg() OneLcdFlagSET(33)
#define UnDYP_CardOn_Flg() OneLcdFlagClear(33)
#define DPY_0Pow_Flg() OneLcdFlagSET(67);OneLcdFlagClear(61);OneLcdFlagClear(65);OneLcdFlagClear(71)
#define DPY_1Pow_Flg() OneLcdFlagSET(67);OneLcdFlagClear(61);OneLcdFlagClear(65);OneLcdFlagSET(71)
#define DPY_2Pow_Flg() OneLcdFlagSET(67);OneLcdFlagClear(61);OneLcdFlagSET(65);OneLcdFlagSET(71)
#define DPY_3Pow_Flg() OneLcdFlagSET(67);OneLcdFlagSET(61);OneLcdFlagSET(65);OneLcdFlagSET(71)
#define DPY_Full_SigleLv_Flg() OneLcdFlagSET(11);OneLcdFlagSET(17);OneLcdFlagSET(19);OneLcdFlagSET(23)
#define DPY_Half_sigleLv_Flg() OneLcdFlagSET(11);OneLcdFlagClear(23);
#define UnDPY_Sigle_Flg() OneLcdFlagClear(11);OneLcdFlagClear(23)
#define DPY_CardYL_Area() OneLcdFlagSET(7);OneLcdFlagSET(9);OneLcdFlagSET(13);OneLcdFlagClear(5);OneLcdFlagClear(15)
#define DPY_CardJE_Area() OneLcdFlagSET(5);OneLcdFlagSET(9);OneLcdFlagSET(15);OneLcdFlagClear(7);OneLcdFlagClear(13)
#define UnDPY_CardJEorYL_Area() OneLcdFlagClear(5);OneLcdFlagClear(15);OneLcdFlagClear(7);OneLcdFlagClear(9);OneLcdFlagClear(13);OneLcdFlagClear(5);OneLcdFlagClear(15)
#define DPY_SL_Area() OneLcdFlagSET(3);OneLcdFlagSET(21);OneLcdFlagSET(27)
#define UnDPY_SL_Area() OneLcdFlagClear(3);OneLcdFlagClear(21);OneLcdFlagClear(27)
#define DPY_LJSL_Area() OneLcdFlagSET(1);OneLcdFlagSET(41);OneLcdFlagSET(45)
#define UnDPY_LJSL_Area() OneLcdFlagClear(1);OneLcdFlagClear(41);OneLcdFlagClear(45)
#define DPY_DateT() OneLcdFlagSET(35);OneLcdFlagSET(39);Wr1BCDNumToLcd(0x02 , 14);Wr1BCDNumToLcd(0x00 , 15)
#define UnDPY_DateT() OneLcdFlagClear(35);OneLcdFlagClear(39);Wr1BCDNumToLcd(21,14);Wr1BCDNumToLcd(21,15)
#define DPY_SDL_Area() OneLcdFlagSET(43);OneLcdFlagSET(73);OneLcdFlagSET(77);OneLcdFlagClear(47);OneLcdFlagClear(79)
#define DPY_DJ_Area() OneLcdFlagSET(47);OneLcdFlagSET(73);OneLcdFlagSET(79);OneLcdFlagClear(43);OneLcdFlagClear(77)
#define UnDPY_DJorSDL_Area() OneLcdFlagClear(43);OneLcdFlagClear(77);OneLcdFlagClear(47);OneLcdFlagClear(79);OneLcdFlagClear(73)
#define DPY_JE_Area() OneLcdFlagSET(55);OneLcdFlagSET(63);OneLcdFlagSET(69)
#define UnDPY_JE_Area() OneLcdFlagClear(55);OneLcdFlagClear(63);OneLcdFlagClear(69)
#define DPY_Time_Area() OneLcdFlagSET(49);OneLcdFlagSET(53)
#define UnDPY_Time_Area() OneLcdFlagClear(49);OneLcdFlagClear(53)
#define DPY_WaterWheelSt1() OneLcdFlagSET(31);OneLcdFlagClear(29);OneLcdFlagClear(25)
#define DPY_WaterWheelSt2() OneLcdFlagSET(29);OneLcdFlagClear(25);OneLcdFlagClear(31);
#define DPY_WaterWheelSt3() OneLcdFlagSET(25);OneLcdFlagClear(31);OneLcdFlagClear(29)
////////////////////////////////////////////////////////////////
#define FM1702_OK 0 // U}H7
#define FM1702_NOTAGERR 1 // N^?(
#define FM1702_CRCERR 2 // ?(F,CRCP#Qi4mNs
#define FM1702_EMPTY 3 // J}V5Rg3v4mNs
#define FM1702_AUTHERR 4 // QiV$2;3I9&
#define FM1702_PARITYERR 5 // ?(F,FfE<P#Qi4mNs
#define FM1702_CODEERR 6 // M(Q64mNs(BCCP#Qi4m)
#define FM1702_SERNRERR 8 // ?(F,PrAP:E4mNs(anti-collision 4mNs)
#define FM1702_SELECTERR 9 // ?(F,J}>]3$6HWV=Z4mNs(SELECT4mNs)
#define FM1702_NOTAUTHERR 10 // ?(F,C;SPM(9}QiV$
#define FM1702_BITCOUNTERR 11 // 4S?(F,=SJU5=5DN;J}4mNs
#define FM1702_BYTECOUNTERR 12 // 4S?(F,=SJU5=5DWV=ZJ}4mNs=v6A:/J}SPP'
#define FM1702_RESTERR 13 // 5wSCrestore:/J}3v4m
#define FM1702_TRANSERR 14 // 5wSCtransfer:/J}3v4m
#define FM1702_WRITEERR 15 // 5wSCwrite:/J}3v4m
#define FM1702_INCRERR 16 // 5wSCincrement:/J}3v4m
#define FM1702_DECRERR 17 // 5wSCdecrement:/J}3v4m
#define FM1702_READERR 18 // 5wSCread:/J}3v4m
#define FM1702_LOADKEYERR 19 // 5wSCLOADKEY:/J}3v4m
#define FM1702_FRAMINGERR 20 // FM1702V!4mNs
#define FM1702_REQERR 21 // 5wSCreq:/J}3v4m
#define FM1702_SELERR 22 // 5wSCsel:/J}3v4m
#define FM1702_ANTICOLLERR 23 // 5wSCanticoll:/J}3v4m
#define FM1702_INTIVALERR 24 // 5wSC3uJ<;/:/J}3v4m
#define FM1702_READVALERR 25 // 5wSC8_<66A?iV5:/J}3v4m
#define FM1702_DESELECTERR 26 //
#define FM1702_CMD_ERR 42 // C|An4mNs
////////////////////////////////////////////////////////////////////
//FM1702<D4fFw6(Re
#define Page_Sel 0x00 // R3P4<D4fFw
#define Command 0x01 // C|An<D4fFw
#define FIFO 0x02 // 64WV=ZFIFO;:3e5DJdHkJd3v<D4fFw
#define PrimaryStatus 0x03 // 7"IdFw=SJUFw<0FIFO5DW4L,<D4fFw1
#define FIFO_Length 0x04 // 51G0FIFODZWV=ZJ}<D4fFw
#define SecondaryStatus 0x05 // 8wVVW4L,<D4fFw2
#define InterruptEn 0x06 // VP6OJ9D\/={V9<D4fFw
#define Int_Req 0x07 // VP6OGkGs1jJ6<D4fFw
#define Control 0x09 // ?XVF<D4fFw
#define ErrorFlag 0x0A // 4mNsW4L,<D4fFw
#define CollPos 0x0B // 3eM;<l2b<D4fFw
#define TimerValue 0x0c // 6(J1Fw51G0V5
#define Bit_Frame 0x0F // N;V!5wU{<D4fFw
#define TxControl 0x11 // 7"KM?XVF<D4fFw
#define CWConductance 0x12 // Q!Tq7"Id=ETX1:MTX27"IdLlO_5DWh?9
#define ModConductance 0x13 // 6(ReJd3vG}6/Wh?9
#define CoderControl 0x14 // 6(Re1`BkD#J=:MJ1VSF5BJ
#define DecoderControl 0x1a // =bBk?XVF<D4fFw
#define RxControl1 0x19 // =SJUTvRf?XVF
#define RxControl2 0x1e // =bBk?XVF<0Q!Tq=SJUT4
#define RxWait 0x21 // Q!Tq7"Id:M=SJUV.<d5DJ1<d<d8t
#define ChannelRedundancy 0x22 // RFM(5@<lQiD#J=IhVC<D4fFw
#define CRCPresetLSB 0x23
#define CRCPresetMSB 0x24
#define MFOUTSelect 0x26 // mf OUT Q!TqEdVC<D4fFw
#define TimerClock 0x2a // 6(J1FwV\FZIhVC<D4fFw
#define TimerControl 0x2b // 6(J1Fw?XVF<D4fFw
#define TimerReload 0x2c // 6(J1Fw3uV5<D4fFw
#define TypeSH 0x31 // IO:#1jW<Q!Tq<D4fFw
#define TestDigiSelect 0x3d // 2bJT9\=EEdVC<D4fFw
#define FM1702HARTPD HQCRST=1// =xHkS2<~5u5gD#J=
#define FM1702HARTPO HQCRST=0// MK3vS2<~5t5gD#J=
//-------------------------- E2prom Memory Map Define-----------------------------//
#define SystemNumADD 0x0000 //0x00~0x02 : 3 byte system serail number
#define BeingUserFlagADD 0x0003 //==0xa5 : this mater is ragister for system
//=='other' : dosen`t ragister for system
#define HartCardLoadPWAdd 0x0004 //0X04~0X09 : 6 BYTE hart card PASSWORD
#define SoftcardPWADD 0x000a //0x0a~0x0c : 3 BYTE software card password
#define CurrentPriceADD 0x000d //0x0d~0x0e : 2 Bytes Current water Price
#define CurrentStartUsingDateADD 0x000f //0x0f~0x14 : 6 Byte BCD Number year mth wek day hur min
#define MaterWorkStateByteADD 0x0015 //bit[7]
//bit[6]
//bit[5]
//bit[4]
//bit[5]
//bit[6]
//bit[7]
#define MeterNumberADD 0x0016 //0x0016~0x001c :7byte meter serial number
#define CurrentCntPriceADD 0x001d //0x001d~0x0021 :5byte Price for count
#define LieJiShuiLiangADD 0x0022 //0x0022~0x0026 :
#define SmsObjNumber1ADD 0x0027 //0x0027~0x002c
#define SmsObjNumber2ADD 0x002d //0x002d~0x0032
#define SmsSeverNuberADD 0x0033 //0x0033~0x0038
#define Current6vBatVolt 0x0039 //0x0039: Hex ADvalue
//0x003a: BCD voltage value :X.X(V)
#define CurrentGuanYaLi 0x003b //0x003b:Hex ADvalue
//0x003c~0x003d:YaLi BCD value:0X.XX(Mpa)
#define E2NoteStartUpFlgADD 0x0ffc //'s':startup flag,other char : have not startup
#define MempryFullFlg1ADD 0x0ffd //'f'=full/'e'not full
#define ConsumeNoteNumH1ADD 0x0ffe //
#define ConsumeNoteNumL1ADD 0x0fff //
#define ConsumeNoteStart1ADD 0x1000 //0x1000~0xffff 1920 pieces note
//************************************* Functoin Statement *************************************//
//System initialize
void InitializeSystem(void);
//HT1623 DRV
extern void InitHT1623Port(void);
extern unsigned char RdHT1623OneByte(unsigned char Id_addr);
extern void WrHT1623OneByte(unsigned char Toid_addr,unsigned char Todata);
extern void SentCmdToHT1623(unsigned char ht1623cmd);
extern void Dsdisplay(void);
extern void Endisplay(void);
//FM1702 SPI DRV
extern unsigned char SpiRev(void);
extern void SpiSend(unsigned char var);
extern unsigned char SPIRead(unsigned char SpiAddress);
extern void SPIWrite(unsigned char SpiAddress,unsigned char dat);
//FM1702 DRV
extern void InitialFM1702(unsigned char mode);
extern void Set_BitFraming(unsigned char row, unsigned char col);
extern unsigned char Clear_FIFO(void);
extern void Write_FIFO(unsigned char count, unsigned char *buff);
extern unsigned char Read_FIFO(unsigned char *buff);
extern unsigned char Judge_Req(unsigned char *buff);
extern unsigned char Check_UID(void);
extern void Save_UID(unsigned char row, unsigned char col, unsigned char length);
extern unsigned char Command_Send(unsigned char count,unsigned char *buff,unsigned char Comm_Set);
extern unsigned char Read_E2(unsigned char lsb,unsigned char msb,unsigned char count,unsigned char *buff );
extern unsigned char Write_E2(unsigned char lsb,unsigned char msb,unsigned char count,unsigned char * buff );
extern unsigned char MIF_Halt(void);
extern char M500HostCodeKey(unsigned char *uncoded,signed char *coded);
extern unsigned char Load_keyE2_CPY(unsigned char Secnr, unsigned char Mode);
extern unsigned char Request(unsigned char mode);
extern unsigned char AntiColl(void);
extern unsigned char Select_Card(void);
extern unsigned char Authentication(unsigned char *UID, unsigned char SecNR, unsigned char mode);
extern unsigned char MIF_READ(unsigned char *buff, unsigned char Block_Adr);
extern unsigned char MIF_Write(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char MIF_Increment(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char MIF_Decrement(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char MIF_Restore(unsigned char Block_Adr);
//extern unsigned char HL_Active(unsigned char Block_Adr, unsigned char Mode);
//extern unsigned char MIF_Initival(unsigned char *buff, unsigned char Block_Adr);
//extern unsigned char HL_Read(unsigned char *buff, unsigned char Block_Adr, unsigned char Mode);
//extern unsigned char HL_Write(unsigned char *buff, unsigned char Block_Adr, unsigned char Mode);
//
void ANALYSE_CARD (void);
unsigned char IsFindCard(void);
unsigned char IsSelectCradOk(void);
unsigned char IsConflictOk(void);
unsigned char DownLoadm1CradKey(unsigned char sectornum,unsigned char keyab); //check M1 RFcrad hart sactor1 6byte keyword
unsigned char ChkCsSysCrdSerNum(void); //check crad bank1 cs ,system serial number ,crad cs
//unsigned char RdCardMomey(void);
unsigned char CardStopOp(void);
void Cmd_process(void);
//at24c512
extern void E2PRON_START (void);
extern void E2PROM_STOP (void);
extern unsigned char MCU_R_ACK (void);
extern void MCU_T_ACK (void);
extern void MCU_T_NOACK (void);
extern void MCU_T_1BYTE (unsigned char temp);
extern unsigned char MCU_R_1BYTE (void);
extern void WRITE_E2PROM(unsigned char *mcu_ramadd,unsigned int e2promadd,unsigned char n,unsigned char chipn);
extern void READ_E2PROM(unsigned char *mcu_ramadd,unsigned int e2promadd,unsigned char n,unsigned char chipn);
extern void WRITE_1_BYTE_E2PROM (unsigned char *mcu_ramadd,unsigned int e2promadd,unsigned char chipn);
extern void READ_1_BYTE_E2PROM(unsigned char *mcu_ramadd,unsigned int e2promadd,unsigned char chipn);
void InitE2prom(void);
//LCD Display Flsg
void OneLcdFlagSET(unsigned char dpy_memory);
void OneLcdFlagClear(unsigned char dpy_memory);
void WaterWheelStChg(void);
/*
void DYP_OpenValve_Flg(void);
void DPY_CloseValve_Flg(void);
void UnDPY_Valve_FLg(void);
void DYP_Failure_Flg(void);
void UnDPY_Failure_Flg(void);
void DYP_CardOn_Flg(void);
void UnDYP_CardOn_Flg(void);
void DPY_0Pow_Flg(void);
void DPY_1Pow_Flg(void);
void DPY_2Pow_Flg(void);
void DPY_3Pow_Flg(void);
void DPY_Full_SigleLv_Flg(void);
void DPY_Half_sigleLv_Flg(void);
void UnDPY_Sigle_Flg(void);
void DPY_WaterWheelSt1(void);
void DPY_WaterWheelSt2(void);
void DPY_WaterWheelSt3(void);
void DPY_CardYL_Area(void);
void DPY_CardJE_Area(void);
void UnDPY_CardJEorYL_Area(void);
void DPY_SL_Area(void);
void UnDPY_SL_Area(void);
void DPY_LJSL_Area(void);
void UnDPY_LJSL_Area(void);
void DPY_DateT(void);
void UnDPY_DateT(void);
void DPY_SDL_Area(void);
void DPY_DJ_Area(void);
void UnDPY_DJorSDL_Area(void);
void DPY_JE_Area(void);
void UnDPY_JE_Area(void);
void DPY_Time_Area(void);
void UnDPY_Time_Area(void);
*/
//IniTialoze LCD Display
void InitLcdDpy(void);
//clear LCD Display
void ClearLcdMem(void);
void DPY_Time(void);
//Display One Number to LCD
void Wr1BCDNumToLcd(unsigned char NumToDpy , unsigned char LcdNumNum);
//Display Card YE/YL
void DPY_Card_YLorJE_Num(unsigned char * databuf/*,unsigned char dpy_type*/);
//Display meter use ShuiLiang Jine
void DPY_SLorJE_Num(unsigned char * databuf,unsigned char dpy_type);
//Display meter Setting-price or setting value
void DPY_SDZorDJ_Num(unsigned char * databuf1,unsigned char dpy_type1);
void DPY_LJSLorRQ_Num(unsigned char * databuf1,unsigned char dpy_type1);
void DisplayErrCode(unsigned char errcode);
void ClearNumDpy(unsigned char WhatNumArea,unsigned char WhatflagAera);
//Clear one of five Number display area
void LcdWheelDisplay(void);
//
void DypWaitSetSDST(unsigned char tempdyptype,unsigned char tempdpyst);
//
unsigned char UserSettingValue(unsigned char * whichtypedatabuf);
//
void ClearRamValue(void);
//
extern unsigned char CheckCardIsMove(void);
//
void BCDBytesAdd(unsigned char *source,unsigned char *target,unsigned char length);
//
unsigned char BCDBytesSub(unsigned char *source,unsigned char *target,unsigned char length);
//
//void Arithmetic_ShenYuShuiLiang(void);
//
unsigned char HexNumGuptoBcd(unsigned char * HexNumGup,char Guplth);
//
//void AddUsingValueOp(void);
//
//void ReflhDisplayVal(void);
//
unsigned char CntCurrDJ(void);
//
void GetCurrDJ(void);
//
void CntLieJiShuiLiang(void);
//
unsigned char WeOneCnToE2(void);
//
void ADTEST(unsigned char adwhichway);
//
void DPY_YaLi(void);
//
void CUT_YaLi(void);
//
void DPY_Volt(void);
//
void CUT_Volt(void);
//
unsigned char WrCdOneBnk(unsigned char whichbank);
unsigned char RdCdOneBnk(unsigned char whichbank);
unsigned char CntReturnWr(void);
//
void DpyRdCardOk(void);
//DS1302
extern void ResetDs(void);
extern void OutByte(unsigned char outdata);
extern unsigned char InByte(void);
extern void WriteByteDs(unsigned char addr,unsigned char outdata);
extern unsigned char ReadByteDs(unsigned char addr);
extern void WriteTime(unsigned char * time);
extern void ReadTime(unsigned char * time);
extern void En_dswork(void);
void ReflashLcdTimeDpy(unsigned char rflhtype);
//Serial port
void Uart1senddata(unsigned char num , unsigned char *dpoint); //Uart1 sent datas
void Uart2senddata(unsigned char num , unsigned char *dpoint); //Uart2 sent datas
void Uart1RevInt(void);
//Interruot ISR
//******************** Interrup ISR statement *********************//
void interrupth(void);
#pragma code Vector=0x08
void vector(void)
{
_asm GOTO interrupth _endasm
}
//#pragma interrupt interrupth save=PROD,PRODL,PRODH,TBLPTRL,TBLPTRH
//*****************************************************************//
void interruptl(void);
#pragma code atlowVector=0x18
void atlowVector(void)
{
_asm GOTO interruptl _endasm
}
#pragma code
//#pragma interruptlow interruptl save=PROD,PRODL,PRODH,TBLPTRL,TBLPTRH
//*****************************************************************//
//************************************** Variable statement ***********************************//
unsigned char countWTRCNT;
//unsigned char KEY_B[6]; //s50 card keyworda B
extern unsigned char RevBuffer[20]; //Command data r/t buffer
unsigned char Systemnum[3]; //system serail number
//unsigned char Cardnum[3]; //card user serail number
unsigned char CdBnk4Grp[16];
unsigned char CdBnk5Grp[16];
unsigned char CdBnk6Grp[16];
extern unsigned char UID[5]; //S/N
extern unsigned char Secnr; //Card Secnr
extern unsigned char tagtype[2]; //card
//---------------------------------------------------------------//
unsigned char systemflag;
// 0x80 set 1 recevice whole frame from infrared
// 0x40 set 1 recevice whole frame from GSM
// 0x20 set 1 water counter one unit
// 0x10 set 1 will save use note
// 0x08 set 1 reading USER Card ok
// 0x04 set 1 user begin use water
// 0x02 set 1 user will setting ues value
// 0x01 set 1 user sure to setting use valuem
unsigned char systemflag3;
// 0x01 set1 will into sleep mode
// 0x02 set1 fault precaution close velve
// 0x04 set1 user stop use water ,the stop key been turn on
// 0x08 set1 displaying LeiJiShuiLiang time
// 0x10 set1
// 0x20 set1 read start card is ok
// 0x40 set1 left countkey trigger
// 0x80 set1 right countkey trigger
unsigned char systemflag2;
// 0x01 set1 key 'ok' is on
// 0x02 set1 key 'selecet' is on
// 0x04 set1 key 'up' is on
// 0x08 set1 key 'down' is on
// 0x10 set1 display Volt /YaLi
// 0x20 set1
// 0x40 set1 Read card error flag
// 0x80 set1 setting use water mode
unsigned char systemflag4;
// 0x01 set1 1:low 6v power
// 0x02 set1 1:read clear card is ok
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -