久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 544|回復: 0
收起左側

STM32&st7735s 驅動代碼

[復制鏈接]
ID:1136289 發表于 2024-12-28 15:54 | 顯示全部樓層 |閱讀模式
#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  
         




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲色欲色欲www | 99re视频在线| 日本成人在线观看网站 | 亚洲精品中文字幕中文字幕 | 欧美一级黑人aaaaaaa做受 | 91久久国产精品 | 玖玖免费 | 免费午夜剧场 | 99re视频| 狠狠色综合欧美激情 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 综合九九 | 日韩 欧美 综合 | 国产精品欧美一区喷水 | 免费成人高清在线视频 | 一级毛片视频在线 | 一级大黄色片 | 成人欧美一区二区三区白人 | 国产欧美日韩一区二区三区在线观看 | www.婷婷 | 免费在线观看av的网站 | 亚洲一区二区三区国产 | 精品麻豆剧传媒av国产九九九 | 国产精品亚洲精品日韩已方 | 国产伦精品一区二区三区照片91 | 国产精品一区二区不卡 | 午夜午夜精品一区二区三区文 | 精品一二三区 | 精品真实国产乱文在线 | 免费爱爱视频 | 国产精品日韩 | 中文字幕久久久 | 中文字幕日韩欧美 | 亚洲人成人一区二区在线观看 | 成人av一区 | 日本三级电影在线看 | 日韩综合在线 | 日韩在线免费电影 | 亚洲欧洲在线观看视频 | 日韩精品久久一区二区三区 | 亚洲综合无码一区二区 |