#include "lcd.h"
#include "oledfont.h"
#include "stm32g4xx_hal.h"
#include "delay.h"
extern TIM_HandleTypeDef htim2;
u16 BACK_COLOR; //背景色
COLOR color;
OLEDDriver disp;
/******************************************************************************
函數說明:LCD串行數據寫入函數
入口數據:dat 要寫入的串行數據
返回值: 無
******************************************************************************/
void LCD_Writ_Bus(u8 dat)
{
uint8_t i;
OLED_CS_Clr();
for(i=0;i<8;i++)
{
LCD_SCLK_Clr();
if(dat&0x80)
{
LCD_MOSI_Set();
}
else
{
LCD_MOSI_Clr();
}
LCD_SCLK_Set();
dat<<=1;
}
OLED_CS_Set();
// HAL_SPI_Transmit(&hspi2,&dat,1,200);
}
/******************************************************************************
函數說明:LCD寫入數據
入口數據:dat 寫入的數據
返回值: 無
******************************************************************************/
void LCD_WR_DATA8(u8 dat)
{
LCD_Writ_Bus(dat);
}
/******************************************************************************
函數說明:LCD寫入數據
入口數據:dat 寫入的數據
返回值: 無
******************************************************************************/
inline void LCD_WR_DATA(u16 dat)
{
LCD_A0_GPIO_Port->BSRR = LCD_A0_Pin; //加速
LCD_Writ_Bus(dat>>8);
LCD_Writ_Bus(dat);
}
/******************************************************************************
函數說明:LCD寫入數據
入口數據:dat 寫入的數據
返回值: 無
******************************************************************************/
void LCD_WR_BYTE(u16 dat)
{
LCD_A0_GPIO_Port->BSRR = LCD_A0_Pin; //加速
LCD_Writ_Bus(dat>>8);
LCD_Writ_Bus(dat);
}
/******************************************************************************
函數說明:LCD寫入命令
入口數據:dat 寫入的命令
返回值: 無
******************************************************************************/
inline void LCD_WR_REG(u8 dat)
{
OLED_DC_Clr();//寫命令
LCD_Writ_Bus(dat);
OLED_DC_Set();//寫數據
}
u8 LCD_Read_Bus(u8 size)
{
u8 dat = 0;
// HAL_SPI_Receive(&hspi2,&dat,size,200);
return dat;
};
//獲取屏幕id,0xDA就是讀當前屏幕id,死機時無法讀到數據
u8 read_id_lcd(u8 reg)
{
u8 dat;
OLED_CS_Clr();
OLED_DC_Clr();
LCD_Writ_Bus(reg);
OLED_DC_Set();
dat = LCD_Read_Bus(1);
// printf(" %d ",dat);
return dat;
};
/******************************************************************************
函數說明:設置起始和結束地址
入口數據:x1,x2 設置列的起始和結束地址
y1,y2 設置行的起始和結束地址
返回值: 無
******************************************************************************/
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
if(set.Hand){
LCD_WR_REG(0x2a);//列地址設置
LCD_WR_DATA(x1);
LCD_WR_DATA(x2);
LCD_WR_REG(0x2b);//行地址設置
LCD_WR_DATA(y1+24);
LCD_WR_DATA(y2+24);
LCD_WR_REG(0x2c);//儲存器寫
}
else{
LCD_WR_REG(0x2a);//列地址設置
LCD_WR_DATA(x1);
LCD_WR_DATA(x2);
LCD_WR_REG(0x2b);//行地址設置
LCD_WR_DATA(y1+24);
LCD_WR_DATA(y2+24);
LCD_WR_REG(0x2c);//儲存器寫
}
}
/******************************************************************************
函數說明:LCD初始化函數
入口數據:無
返回值: 無
******************************************************************************/
void Lcd_Init(void)
{
OLED_RST_Clr();
HAL_Delay(100);
OLED_RST_Set();
HAL_Delay(20);
OLED_BLK_Set();
LCD_WR_REG(0x11);
HAL_Delay(100);
//LCD_WR_REG(0x21);
LCD_WR_REG(0xB1);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB3);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB4);
LCD_WR_DATA8(0x03);
LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x62);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x04);
LCD_WR_REG(0xC1);
LCD_WR_DATA8(0xC0);
LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0x6A);
LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0xEE);
LCD_WR_REG(0xC5); /*VCOM*/
LCD_WR_DATA8(0x0E);
LCD_WR_REG(0xE0);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x12);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x37);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0xE1);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x0F);
LCD_WR_DATA8(0x06);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x36);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0x3A);
LCD_WR_DATA8(0x05);
LCD_WR_REG(0x36);
// if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x08);
// else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC8);
// else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x78);
// else LCD_WR_DATA8(0xA8);
LCD_WR_REG(0x29);
LCD_Clear(WHITE);
}
void lcd_res(void)
{
OLED_RST_Clr();
HAL_Delay(100);
OLED_RST_Set();
HAL_Delay(20);
OLED_BLK_Set();
LCD_WR_REG(0x11);
HAL_Delay(100);
// LCD_WR_REG(0x21);
LCD_WR_REG(0xB1);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB3);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB4);
LCD_WR_DATA8(0x03);
LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x62);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x04);
LCD_WR_REG(0xC1);
LCD_WR_DATA8(0xC0);
LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0x6A);
LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0xEE);
LCD_WR_REG(0xC5); /*VCOM*/
LCD_WR_DATA8(0x0E);
LCD_WR_REG(0xE0);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x12);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x37);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0xE1);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x0F);
LCD_WR_DATA8(0x06);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x36);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0x3A);
LCD_WR_DATA8(0x05);
LCD_WR_REG(0x36);
// if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x08);
// else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC8);
// else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x78);
// else LCD_WR_DATA8(0xA8);
LCD_WR_REG(0x29);
LCD_Clear(WHITE);
}
/******************************************************************************
函數說明:LCD清屏函數
入口數據:Color 顏色
返回值: 無
******************************************************************************/
void LCD_Clear(u16 Color)
{
u16 i,j;
LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<LCD_W;i++)
{
for (j=0;j<LCD_H;j++)
{
LCD_WR_DATA(Color);
}
}
}
/******************************************************************************
函數說明:LCD顯示漢字
入口數據:x,y 起始坐標
index 漢字的序號
size 字號
返回值: 無
******************************************************************************/
void LCD_ShowChinese(u16 x,u16 y,u8 index,u8 size,u16 color)
{
u8 i,j;
u8 *temp,size1;
if(size==16){temp=Hzk16;}//選擇字號
if(size==32){temp=Hzk32;}
LCD_Address_Set(x,y,x+size-1,y+size-1); //設置一個漢字的區域
size1=size*size/8;//一個漢字所占的字節
temp+=index*size1;//寫入的起始位置
for(j=0;j<size1;j++)
{
for(i=0;i<8;i++)
{
if((*temp&(1<<i))!=0)//從數據的低位開始讀
{
LCD_WR_DATA(color);//點亮
}
else
{
LCD_WR_DATA(BACK_COLOR);//不點亮
}
}
temp++;
}
}
/******************************************************************************
函數說明:畫點
入口數據:x,y 起始坐標
返回值: 無
******************************************************************************/
void LCD_DrawPoint(u16 x,u16 y,u16 color)
{
LCD_Address_Set(x,y,x,y);//設置光標位置
LCD_WR_DATA(color);
}
/******************************************************************************
函數說明:LCD畫一個大的點
入口數據:x,y 起始坐標
返回值: 無
******************************************************************************/
void LCD_DrawPoint_big(u16 x,u16 y,u16 color)
{
LCD_Fill(x-1,y-1,x+1,y+1,color);
}
/******************************************************************************
函數說明:在指定區域填充顏色
入口數據:xsta,ysta 起始坐標
xend,yend 終止坐標
返回值: 無
******************************************************************************/
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
{
u16 i,j;
LCD_Address_Set(xsta,ysta,xend,yend); //設置光標位置
for(i=ysta;i<=yend;i++)
{
for(j=xsta;j<=xend;j++)LCD_WR_DATA(color);//填充
}
}
/******************************************************************************
函數說明:畫線
入口數據:x1,y1 起始坐標
x2,y2 終止坐標
返回值: 無
******************************************************************************/
void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color)
{
u16 t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
delta_x=x2-x1; //計算坐標增量
delta_y=y2-y1;
uRow=x1;//畫線起點坐標
uCol=y1;
if(delta_x>0)incx=1; //設置單步方向
else if (delta_x==0)incx=0;//垂直線
else {incx=-1;delta_x=-delta_x;}
if(delta_y>0)incy=1;
else if (delta_y==0)incy=0;//水平線
else {incy=-1;delta_y=-delta_x;}
if(delta_x>delta_y)distance=delta_x; //選取基本增量坐標軸
else distance=delta_y;
for(t=0;t<distance+1;t++)
{
LCD_DrawPoint(uRow,uCol,color);//畫點
xerr+=delta_x;
yerr+=delta_y;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}
/******************************************************************************
函數說明:畫矩形
入口數據:x1,y1 起始坐標
x2,y2 終止坐標
返回值: 無
******************************************************************************/
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
{
LCD_DrawLine(x1,y1,x1,y2,color);
LCD_DrawLine(x1,y1,x2,y1,color);
LCD_DrawLine(x1,y2,x2+1,y2,color);
LCD_DrawLine(x2,y1,x2,y2,color);
}
/******************************************************************************
函數說明:畫圓
入口數據:x0,y0 圓心坐標
r 半徑
返回值: 無
******************************************************************************/
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color)
{
int a,b;
a=0;b=r;
while(a<=b)
{
LCD_DrawPoint(x0-b,y0-a,color); //3
LCD_DrawPoint(x0+b,y0-a,color); //0
LCD_DrawPoint(x0-a,y0+b,color); //1
LCD_DrawPoint(x0-a,y0-b,color); //2
LCD_DrawPoint(x0+b,y0+a,color); //4
LCD_DrawPoint(x0+a,y0-b,color); //5
LCD_DrawPoint(x0+a,y0+b,color); //6
LCD_DrawPoint(x0-b,y0+a,color); //7
a++;
if((a*a+b*b)>(r*r))//判斷要畫的點是否過遠
{
b--;
}
}
}
/******************************************************************************
函數說明:顯示字符
入口數據:x,y 起點坐標
num 要顯示的字符
mode 1疊加方式 0非疊加方式
返回值: 無
******************************************************************************/
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 mode,u16 color)
{
u8 temp;
u8 pos,t;
u16 x0=x;
if(x>LCD_W-16||y>LCD_H-16)return; //設置窗口
num=num-' ';//得到偏移后的值
LCD_Address_Set(x,y,x+8-1,y+16-1); //設置光標位置
if(!mode) //非疊加方式
{
for(pos=0;pos<16;pos++)
{
temp = asc2_1608[(u16)num*16+pos]; //調用1608字體
for(t = 0; t < 8; t++)
{
if(temp&0x01)LCD_WR_DATA(color);
else LCD_WR_DATA(WHITE);
temp>>=1;
x++;
}
x=x0;
y++;
}
}else//疊加方式
{
for(pos=0;pos<16;pos++)
{
temp=asc2_1608[(u16)num*16+pos]; //調用1608字體
for(t=0;t<8;t++)
{
if(temp&0x01)LCD_DrawPoint(x+t,y+pos,color);//畫一個點
temp>>=1;
}
}
}
}
/******************************************************************************
函數說明:顯示字符串
入口數據:x,y 起點坐標
*p 字符串起始地址
返回值: 無
******************************************************************************/
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
{
while(*p!='\0')
{
if(x>LCD_W-16){x=0;y+=16;}
if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
LCD_ShowChar(x,y,*p,0,color);
x+=8;
p++;
}
}
/******************************************************************************
函數說明:顯示數字
入口數據:m底數,n指數
返回值: 無
******************************************************************************/
u32 mypow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
/******************************************************************************
函數說明:顯示數字
入口數據:x,y 起點坐標
num 要顯示的數字
len 要顯示的數字個數
返回值: 無
******************************************************************************/
void LCD_ShowNum(u16 x,u16 y,u16 num,u8 len,u16 color)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+8*t,y,' ',0,color);
continue;
}else enshow=1;
}
LCD_ShowChar(x+8*t,y,temp+48,0,color);
}
}
/******************************************************************************
函數說明:顯示小數
入口數據:x,y 起點坐標
num 要顯示的小數
len 要顯示的數字個數
返回值: 無
******************************************************************************/
void LCD_ShowNum1(u16 x,u16 y,float num,u8 len,u16 color)
{
u8 t,temp;
u16 num1;
num1=num*100;
for(t=0;t<len;t++)
{
temp=(num1/mypow(10,len-t-1))%10;
if(t==(len-2))
{
LCD_ShowChar(x+8*(len-2),y,'.',0,color);
t++;
len+=1;
}
LCD_ShowChar(x+8*t,y,temp+48,0,color);
}
}
//畫圖
void Lcd_Show_Img(uint8_t x,uint8_t y,uint8_t Pic_XSIZE,uint8_t Pic_YSIZE,const uint8_t *Pic,unsigned int forecolor,unsigned int background)
{
uint16_t temp,t,t1;
uint16_t y0=y;
uint16_t FRAME_SIZE=Pic_XSIZE*Pic_YSIZE/8;
for(t=0; t<FRAME_SIZE; t++)
{
temp=Pic[t]; //
for(t1=0; t1<8; t1++)
{
if(temp&0x80)LCD_DrawPoint(x,y,forecolor);
else LCD_DrawPoint(x,y,background);
temp<<=1;
y++;
if((y-y0)==Pic_YSIZE)
{
y=y0;
x++;
break;
}
}
}
}
#ifndef __LCD_H
#define __LCD_H
#include "stm32g4xx_hal.h"
#include "main.h"
#include "stdlib.h"
#define USE_HORIZONTAL 3 //設置橫屏或者豎屏顯示 0或1為豎屏 2或3為橫屏
#if USE_HORIZONTAL==0||USE_HORIZONTAL==1
#define LCD_W 80
#define LCD_H 160
#else
#define LCD_W 160
#define LCD_H 80
#endif
#define u8 unsigned char
#define u16 unsigned int
#define B 0X01
#define N 0
//-----------------測試LED端口定義----------------
//-----------------OLED端口定義----------------
//#define OLED_SCLK_Clr() HAL_GPIO_WritePin(LCD_SCK_GPIO_Port,LCD_SCK_Pin,GPIO_PIN_RESET)
//#define OLED_SCLK_Set() HAL_GPIO_WritePin(LCD_SCK_GPIO_Port,LCD_SCK_Pin,GPIO_PIN_SET)
//#define OLED_SDIN_Clr() HAL_GPIO_WritePin(LCD_MOSI_GPIO_Port,LCD_MOSI_Pin,GPIO_PIN_RESET)//DIN
//#define OLED_SDIN_Set() HAL_GPIO_WritePin(LCD_MOSI_GPIO_Port,LCD_MOSI_Pin,GPIO_PIN_SET)
#define LCD_SCLK_Set() LCD_SCK_GPIO_Port->BSRR = LCD_SCK_Pin
#define LCD_SCLK_Clr() LCD_SCK_GPIO_Port->BSRR = (uint32_t)LCD_SCK_Pin << 16U
#define LCD_MOSI_Set() LCD_MOSI_GPIO_Port->BSRR = LCD_MOSI_Pin
#define LCD_MOSI_Clr() LCD_MOSI_GPIO_Port->BSRR = (uint32_t)LCD_MOSI_Pin << 16U
#define OLED_RST_Clr() HAL_GPIO_WritePin(LCD_RES_GPIO_Port,LCD_RES_Pin,GPIO_PIN_RESET)//RES
#define OLED_RST_Set() HAL_GPIO_WritePin(LCD_RES_GPIO_Port,LCD_RES_Pin,GPIO_PIN_SET)
#define OLED_DC_Clr() HAL_GPIO_WritePin(LCD_A0_GPIO_Port,LCD_A0_Pin,GPIO_PIN_RESET)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(LCD_A0_GPIO_Port,LCD_A0_Pin,GPIO_PIN_SET)
#define OLED_CS_Clr() HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_RESET)//CS
#define OLED_CS_Set() HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port,SPI2_NSS_Pin,GPIO_PIN_SET)
#define OLED_BLK_Clr()
#define OLED_BLK_Set()
#define OLED_CMD 0 //寫命令
#define OLED_DATA 1 //寫數據
u8 read_id_lcd(u8 reg);
u8 LCD_Read_Bus(u8 size);
extern u16 BACK_COLOR; //背景色
void LCD_Writ_Bus(u8 dat);
void LCD_WR_DATA8(u8 dat);
void LCD_WR_DATA(u16 dat);
void LCD_WR_REG(u8 dat);
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2);
void Lcd_Init(void);
void LCD_Clear(u16 Color);
void LCD_ShowChinese(u16 x,u16 y,u8 index,u8 size,u16 color);
void LCD_DrawPoint(u16 x,u16 y,u16 color);
void LCD_DrawPoint_big(u16 x,u16 y,u16 color);
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);
void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color);
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 mode,u16 color);
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color);
u32 mypow(u8 m,u8 n);
void LCD_ShowNum(u16 x,u16 y,u16 num,u8 len,u16 color);
void LCD_ShowNum1(u16 x,u16 y,float num,u8 len,u16 color);
void LCD_ShowPicture(u16 x1,u16 y1,u16 x2,u16 y2);
void lcd_res(void);
void Lcd_Show_Img(uint8_t x,uint8_t y,uint8_t Pic_XSIZE,uint8_t Pic_YSIZE,const uint8_t *Pic,unsigned int forecolor,unsigned int background);
//畫筆顏色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕紅色
#define GRAY 0X8430 //灰色
#define VIOLET 0x881F //紫
#define FEN 0xa3da //紫
//GUI顏色
#define DARKBLUE 0X01CF //深藍色
#define LIGHTBLUE 0X7D7C //淺藍色
#define GRAYBLUE 0X5458 //灰藍色
//以上三色為PANEL的顏色
#define LIGHTGREEN 0X841F //淺綠色
#define LGRAY 0XC618 //淺灰色(PANNEL),窗體背景色
#define LGRAYBLUE 0XA651 //淺灰藍色(中間層顏色)
#define LBBLUE 0X2B12 //淺棕藍色(選擇條目的反色)
#endif
|