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

📄 display.h

📁 在51上运行的小的OS系统
💻 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 + -