📄 display.h
字号:
#ifndef _DISPLAY_H
#define _DISPLAY_H
#ifdef DISPLAY_GLOBAL
#define DISPLAY_EXT
#else
#define DISPLAY_EXT extern
#endif
#define LCD_ROW_CNT 8
#define LCD_COL_CNT 128
#define LCD_BUFF_FLAG_BIT_CNT 32
#define LCD_REFRESH_FIELD_LENGTH (LCD_COL_CNT/LCD_BUFF_FLAG_BIT_CNT)
typedef struct{
uint32 RefreshFlag[LCD_ROW_CNT];
uint8 Map[LCD_ROW_CNT][LCD_COL_CNT];
}LCD_BUFF_TYPE;
DISPLAY_EXT LCD_BUFF_TYPE LcdBuff;
DISPLAY_EXT OS_EVENT *SPI1Sem;
void LCDReadWaitBusy(void);
void LCDWriteHW(boolean lcddi,uint8 LCDdata);
uint8 LCDReadHW(boolean lcddi);
uint8 ReadLCDData(uint8 x,uint8 y);
void CLS(void);
void ClsLine16(uint8 x, uint8 y);
void ReverseArea(uint8 x,uint8 y,uint8 lenth);
void ReverseArea16(uint8 x,uint8 y,uint8 length);
void DrawRectangle16x8(uint8 x,uint8 y,uint8 const *image);
void DispChar(uint8 x,uint8 y,uint8 chr);
void DispString(uint8 x,uint8 y,const char *str);
void DrawRectangle16x16(uint8 x,uint8 y,uint8 const *image);
void DispGB_16(uint8 x,uint8 y,char *gb);
//void DispStringGB_16(uint8 x,uint8 y,int8 *gb);
void DispStringGB_16(uint8 x,uint8 y,char *gb);
void LCDIni(void);
void DrawRectangle5x8(uint8 x,uint8 y,uint8 const *image);
void DispChar5x8(uint8 x,uint8 y,uint8 chr);
void DispString5x8(uint8 x,uint8 y,const char *str);
void ClrMenu(void);
void DrawLine(void);
void DrawVerticalLine(uint32 column);
void DrawVerticalLine18Col(void);
void DispString16(uint8 x,uint8 y,char *str);
void DispHex(uint8 x, uint8 y, uint8 *p, uint8 length);
void LEDDisp(uint8 data);
//菜单中箭头的方向
#define DOWN_ARROWHEAD 0
#define UP_ARROWHEAD 1
#define UP_DOWN_ARROWHEAD 2
#define DOWN_UP_ARROWHEAD UP_DOWN_ARROWHEAD
#define ReadDataFromBuff(x,y) (LcdBuff.Map[x][y])
void WriteDataToLcdBuff(uint32 x, uint32 y, uint32 const data);
uint32 StrLen(const char * str);
void TaskLcdDisp(void *pdata);
void WriteLcdRamData(uint8 const * buff,uint32 length);
void WriteLCDDataPort(uint8 LCDdata);
void LcdUpData(void);
#define font5x8 0
#define font8x16 1
void DispInt(uint8 x,uint8 y,uint8 para,uint8 font,uint8 length,int16 dispdata, const char * str_unit);
//void DispLong(uint8 x,uint8 y,uint8 para,uint8 font, uint8 length, int32 dispdata, char * str_unit);
void DrawArrowHead(uint8 line,uint8 direction);
void DrawBar( uint8 x, uint8 y, uint8 num );
void DrawScrollFrame(void);
void DrawScorllBar(void);
void DrawWave(int16 *p);
void DrawWave3(uint16 ADD_Wave_U_I);
//void DrawWaveDebug(void);
//void DrawVerctMap(void);
void DispIntSet(uint8 x, uint8 y, uint8 length, uint32 dispdata);
void DispIntData(uint8 x, uint8 y, int32 dispdata, uint8 para, uint8 length, uint8 clr_length, uint8 font, const char *str_uint);
void DispIntKM(uint8 x, uint8 y, int64 dispdata, uint8 prec, uint8 length,
uint8 font, const char * const str_unit[]);
void DispKM_I5x8(uint8 x, uint8 y, int32 dispdata, int32 KM_data );
void DispKM_U5x8(uint8 x, uint8 y, int32 dispdata, int32 KM_data );
void DispKM_5x8(uint8 x, uint8 y, fp32 dispdata, uint32 KM_data);
void DispKM_8x16(uint8 x, uint8 y, fp32 dispdata, uint8 prec, uint8 length, const char *const str_unit[]);
// void DispE(uint8 x, uint8 y, uint16 add_E_high, const char *str_unit);
// void DispPF8x16(uint8 x, uint8 y, uint16 add_pf);
void DispKM_U( uint8 x, uint8 y, fp32 dispdata);
// void DispPercent( uint8 x, uint8 y, int16 address, uint8 prec);
// void DispPercent5x8( uint8 x, uint8 y, int16 address, uint8 prec);
#define DispPercent(x,y,address,prec) DispPercent2(x,y,RAM_FUN03(address),prec, font8x16)
#define DispPercent5x8(x,y,address,prec) DispPercent2(x,y,RAM_FUN03(address),prec, font5x8)
void DispPercent2(uint8 x, uint8 y, int32 dispdata, uint8 prec, uint8 font);
#define LCDDATA 1
#define LCDINST 0
#define PIN_LCD_A0 (1<<12)
#define Set0LCD_A0() (IO0CLR = PIN_LCD_A0)
#define Set1LCD_A0() (IO0SET = PIN_LCD_A0)
#define PIN_LCD_RST (1<<18)//(1<<18)
#define Set0LCD_RST() (IO0CLR = PIN_LCD_RST)
#define Set1LCD_RST() (IO0SET = PIN_LCD_RST)
#if HWVersion == 110
#define PIN_Beep (1<<16)
#define LCDDI (1<<25)
#define LCD_A0 (1<<25)
#define LCDWR (1<<22)
#define LCDRD (1<<23)
#define LCDRES (1<<26)
#define Set1LCD_A0() (IO0SET = LCD_A0) //lcd数据选 择
#define Set0LCD_A0() (IO0CLR = LCD_A0)//lcd指令选择
#define LCDDSel() (IO0SET=LCDDI) //lcd数据选择
#define LCDISel() (IO0CLR=LCDDI) //lcd指令选择
#define SET1LCDRES() (IO0SET=LCDRES)
#define SET0LCDRES() (IO0CLR=LCDRES)
#define LCDRDSel() (IO0CLR=LCDRD) //读信号选择
#define LCDRSel() LCDRDSel()
#define LCDWRSel() (IO0CLR=LCDWR) //{ I O0CLR=LCDWR;IO0SET=LCDRD;}//写信号选择
#define LCDWSel() LCDWRSel()
#define LCDWRRDDesel() (IO0SET=LCDRD|LCDWR) //读写信号同时置为高电平
#define LCDRDWRDesel() LCDWRRDDesel()
#define LCDRWDesel() LCDWRRDDesel()
#define SETIO0OUTPUT() (IO1DIR |= 0xFF<<16)
#define SETIO0INPUT() (IO1DIR &= (~(0xFF<<16)))
#define LCDDISel(lcddi) {if(lcddi)IO0SET=LCDDI;else IO0CLR=LCDDI;} //(LCDDI? IO0SET=LCDDI : IO0CLR=LCDDI)//根据lcddi的值来决定是数据还是命令lcddi=1数据,lcd=0命令
#define SETLCDDATA(LCDdata) (IO1PIN=(IO1PIN&~(0xFF<<16))|(((uint32)(LCDdata))<<16))
#define ReadLCDPinData() ((uint8)(IO1PIN>>16))
#define SET0LCDCS()
//***74hc595***//
#define LEDSER (1<<27)
#define LEDRCLK (1<<28)
#define LEDSRCLK (1<<29)
#define SET1SER() IO0SET=LEDSER
#define SET0SER() IO0CLR=LEDSER
#define SET1RCLK() IO0SET=LEDRCLK
#define SET0RCLK() IO0CLR=LEDRCLK
#define SET1SRCLK() IO0SET=LEDSRCLK
#define SET0SRCLK() IO0CLR=LEDSRCLK
#endif
#if HWVersion == 109
#define PIN_Beep (1<<16)
#define LCDDI (1<<25)
#define LCD_A0 (1<<25)
#define LCDWR (1<<22)
#define LCDRD (1<<23)
#define LCDRES (1<<26)
#define Set1LCD_A0() (IO0SET = LCD_A0)//lcd数据选择
#define Set0LCD_A0() (IO0CLR = LCD_A0)//lcd指令选择
#define LCDDSel() (IO0SET=LCDDI) //lcd数据选择
#define LCDISel() (IO0CLR=LCDDI) //lcd指令选择
#define SET1LCDRES() (IO0SET=LCDRES)
#define SET0LCDRES() (IO0CLR=LCDRES)
#define LCDRDSel() (IO0CLR=LCDRD) //读信号选择
#define LCDRSel() LCDRDSel()
#define LCDWRSel() (IO0CLR=LCDWR)//{IO0CLR=LCDWR;IO0SET=LCDRD;}//写信号选择
#define LCDWSel() LCDWRSel()
#define LCDWRRDDesel() (IO0SET=LCDRD|LCDWR) //读写信号同时置为高电平
#define LCDRDWRDesel() LCDWRRDDesel()
#define LCDRWDesel() LCDWRRDDesel()
#define SETIO0OUTPUT() (IO1DIR |= 0xFF<<16)
#define SETIO0INPUT() (IO1DIR &= (~(0xFF<<16)))
#define LCDDISel(lcddi) {if(lcddi)IO0SET=LCDDI;else IO0CLR=LCDDI;} //(LCDDI? IO0SET=LCDDI : IO0CLR=LCDDI)//根据lcddi的值来决定是数据还是命令lcddi=1数据,lcd=0命令
#define SETLCDDATA(LCDdata) (IO1PIN=(IO1PIN&~(0xFF<<16))|(((uint32)(LCDdata))<<16))
#define ReadLCDPinData() ((uint8)(IO1PIN>>16))
#define SET0LCDCS()
//***74hc595***//
#define LEDSER (1<<27)
#define LEDRCLK (1<<28)
#define LEDSRCLK (1<<29)
#define SET1SER() IO0SET=LEDSER
#define SET0SER() IO0CLR=LEDSER
#define SET1RCLK() IO0SET=LEDRCLK
#define SET0RCLK() IO0CLR=LEDRCLK
#define SET1SRCLK() IO0SET=LEDSRCLK
#define SET0SRCLK() IO0CLR=LEDSRCLK
#endif
#if HWVersion == 101
#define LCDCS (1<<25) // LCD片选
#define LCDDI (1<<26) // the data bits are data or a command
#if(Tdm507ID==2)
#define LCDWR (1<<25)
#else
#define LCDWR (1<<22)
#endif
#define LCDRD (1<<23)
#define LCDRES (1<<27)
//////////////74hc595
#if(Tdm507ID==1)
#define LEDSER (1<<23)
#define SET1SER() IO1SET=LEDSER
#define SET0SER() IO1CLR=LEDSER
#else
#define LEDSER (1<<28)
#define SET1SER() IO0SET=LEDSER
#define SET0SER() IO0CLR=LEDSER
#endif
#define LEDRCLK (1<<29)
#define SET1RCLK() IO0SET=LEDRCLK
#define SET0RCLK() IO0CLR=LEDRCLK
#define LEDSRCLK (1<<30)
#define SET1SRCLK() IO0SET=LEDSRCLK
#define SET0SRCLK() IO0CLR=LEDSRCLK
#define LCDDSel() (IO0SET=LCDDI) //lcd数据选择
#define LCDISel() (IO0CLR=LCDDI) //lcd指令选择
#define Set1LCD_A0() LCDDSel()
#define Set0LCD_A0() LCDISel()
#define LCDRDSel() (IO0CLR=LCDRD)//{IO0CLR=LCDRD;IO0SET=LCDWR;}//读信号选择
#if(Tdm507ID==2)
#define LCDWRSel() (IO1CLR=LCDWR)//{IO0CLR=LCDWR;IO0SET=LCDRD;}//写信号选择
#define LCDRSel() LCDRDSel()
#define LCDWSel() LCDWRSel()
#define LCDWRRDDesel() (IO0SET=LCDRD,IO1SET=LCDWR) //读写信号同时置为高电平
#define LCDRDWRDesel() LCDWRRDDesel()
#define LCDRWDesel() LCDWRRDDesel()
#else
#define LCDWRSel() (IO0CLR=LCDWR)//{IO0CLR=LCDWR;IO0SET=LCDRD;}//写信号选择
#define LCDRSel() LCDRDSel()
#define LCDWSel() LCDWRSel()
#define LCDWRRDDesel() (IO0SET=LCDRD|LCDWR) //读写信号同时置为高电平
#define LCDRDWRDesel() LCDWRRDDesel()
#define LCDRWDesel() LCDWRRDDesel()
#endif
#define SETIO0OUTPUT() (IO0DIR |= 0xFF<<13)
#define SETIO0INPUT() (IO0DIR &= (~(0xFF<<13)))
#define SET0LCDCS() (IO0CLR=LCDCS)
#define SET1LCDCS() (IO0SET=LCDCS)
#define SETENLCDCS() SET0LCDCS()
#define SETDISENLCDCS() SET1LCDCS()
#define SET1LCDRES() (IO0SET=LCDRES)
#define SET0LCDRES() (IO0CLR=LCDRES)
#define LCDDISel(lcddi) {if(lcddi)IO0SET=LCDDI;else IO0CLR=LCDDI;} //(LCDDI? IO0SET=LCDDI : IO0CLR=LCDDI)//根据lcddi的值来决定是数据还是命令lcddi=1数据,lcd=0命令
#define SETLCDDATA(LCDdata) (IO0PIN=(IO0PIN&0xFFE01FFF)|(((uint32)(LCDdata))<<13)|0x80000000)
#define ReadLCDPinData() ((uint8)(IO0PIN>>13))
#endif
#define LCDWriteDHW(LCDdata) LCDWriteHW(1,LCDdata)
#define LCDWriteIHW(LCDdata) LCDWriteHW(0,LCDdata)
#define DispON() LCDWriteHW(LCDINST,0xaf)
#define DispOFF() LCDWriteHW(LCDINST,0xae)
#if LCD_TYPE == ST7565
void SetYAddress(uint32);
#define WriteLCDData(data) LCDWriteHW(LCDDATA,data)
#define ReadStatus() LCDReadHW(LCDINST)
#define ADCNormalSelect() LCDWriteHW(LCDINST,0xA0)
#define ADCReverseSelect() LCDWriteHW(LCDINST,0xA1)
#define DispNormalSelect() LCDWriteHW(LCDINST,0xA6)
#define DispReverseSelect() LCDWriteHW(LCDINST,0xA7)
#define DispAllPointON() LCDWriteHW(LCDINST,0xA4)
#define DispALLPointOff() LCDWriteHW(LCDINST,0xA5)
#define LCDBiasSet1() LCDWriteHW(LCDINST,0xA2)
#define LCDBiasSet2() LCDWriteHW(LCDINST,0xA3)
#define LCDReadModifyWrite() LCDWriteHW(LCDINST,0xE0)
#define LCDEndRMW() LCDWriteHW(LCDINST,0xEE)//releases the read/modify/write mode,
//and returns the column address to the address it was at when the mode was entered
#define LCDReset() LCDWriteHW(LCDINST,0xE2)
#define LCDComOutputNormal() LCDWriteHW(LCDINST,0xC0)
#define LCDComOutputReverse() LCDWriteHW(LCDINST,0xC8)
#define VolumeModeSet() LCDWriteHW(LCDINST,0x81)
#define VolumeRegisterSet(data) LCDWriteHW(LCDINST,data)
#define LCDPowerSet(data) LCDWriteHW(LCDINST,data)//0x28+data)
#define BoosterCirOff 0
#define BoosterCirOn 0x04
#define VoltageRegulatorCirOff 0
#define VoltageRegulatorCirOn 0x02
#define VoltageFollowerCirOff 0
#define VoltageFollowerCirOn 0x01
#define V5RatioSet(Ratio) LCDWriteHW(LCDINST,0x20+(Ratio)&0x07)//Rb/Ra Ratio: 0-->7
#define ON 1
#define OFF 0
#define ON_BlinkingOneSec 1
#define ON_BlinkingHalfSec 2
#define ON_Constantly 3
#define StaticIndicatorRegisterSet(ON_OFF,Mode) (LCDWriteHW(LCDINST,0xAC|(ON_OFF)),LCDWriteHW(LCDINST,Mode))
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -