zoukankan      html  css  js  c++  java
  • stm32 系列ili9341lcd屏驱动程序,应该没问题我自己能够使用

    C文件

    #define _LCD_ODEV_C_
    
    #include "LCD_odev.h"
    #include "fonts.h"    //ASCII×Ö·ûÐÍ×Ö¿â
    
    void LCD_Delay(unsigned short int i)
    {
        while(i--);
    }
    
    void LCD_wt8bitData(unsigned char da) //·¢ËÍÊý¾Ý-8λ²ÎÊý
    {    
        LCD_CS_en();
      LCD_DC_data();
        SPI1_ReadWriteByte(da);  
        LCD_CS_dis();
    }
    
    void LCD_wt16bitData(unsigned short int da)
    {        
            LCD_CS_en();
        LCD_DC_data();
            SPI1_ReadWriteByte(da>>8);
        SPI1_ReadWriteByte(da&0xFF);
            LCD_CS_dis();
    }
    
    void LCD_wtREG(unsigned char cmd) 
    {        
        LCD_CS_en();
      LCD_DC_reg();
        SPI1_ReadWriteByte(cmd);
        LCD_CS_dis();
    }
    
    void LCD_wtREG_DATA(unsigned char reg,unsigned short int da)
    {
      LCD_wtREG(reg);
        LCD_wt16bitData(da);
    }
    
    unsigned char LCD_Read_Data(void)
    {
        LCD_CS_en();
        LCD_DC_data();
        //´Ë´¦½ûÖ¹disbaleµôCS½Å£¬CS½Å±ØÐëһֱʹÄÜ£¬·ñÔò¶ÁÈ¡µÄÊý¾ÝÈ«ÊÇ0xff
        return SPI1_ReadWriteByte(0xFF);
    }
    
    void     ILI9341_io_Init() // ÆäËûÒý½Å³õʼ»¯ 
    {
            GPIO_InitTypeDef GPIO_InitStructure;
            RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB ,  ENABLE);
            RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA ,  ENABLE);
        
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
            GPIO_Init(GPIOA, &GPIO_InitStructure);
        
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
            GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
     
    // -------------------------------
    void LCD_odev_init(void)
    {
        ILI9341_io_Init();
    
        lcddev.width = LCD_Wide;
        lcddev.height = LCD_High;
        
        LCD_RST_Clr();
        delay_ms(20);
        LCD_RST_Set();
        delay_ms(20);
        //LCD_BLK_Set();
        
        //************* Start Initial Sequence **********// 
        LCD_wtREG(0xCF);  
        LCD_wt8bitData(0x00); 
        LCD_wt8bitData(0xD9); 
        LCD_wt8bitData(0X30); 
         
        LCD_wtREG(0xED);  
        LCD_wt8bitData(0x64); 
        LCD_wt8bitData(0x03); 
        LCD_wt8bitData(0X12); 
        LCD_wt8bitData(0X81); 
         
        LCD_wtREG(0xE8);  
        LCD_wt8bitData(0x85); 
        LCD_wt8bitData(0x10); 
        LCD_wt8bitData(0x78); 
         
        LCD_wtREG(0xCB);  
        LCD_wt8bitData(0x39); 
        LCD_wt8bitData(0x2C); 
        LCD_wt8bitData(0x00); 
        LCD_wt8bitData(0x34); 
        LCD_wt8bitData(0x02); 
         
        LCD_wtREG(0xF7);  
        LCD_wt8bitData(0x20); 
         
        LCD_wtREG(0xEA);  
        LCD_wt8bitData(0x00); 
        LCD_wt8bitData(0x00); 
         
        LCD_wtREG(0xC0);    //Power control 
        LCD_wt8bitData(0x21);   //VRH[5:0] 
         
        LCD_wtREG(0xC1);    //Power control 
        LCD_wt8bitData(0x12);   //SAP[2:0];BT[3:0] 
         
        LCD_wtREG(0xC5);    //VCM control 
        LCD_wt8bitData(0x32); 
        LCD_wt8bitData(0x3C); 
         
        LCD_wtREG(0xC7);    //VCM control2 
        LCD_wt8bitData(0XC1); 
         
        LCD_wtREG(0x36);    // Memory Access Control 
        LCD_wt8bitData(0x68); 
    
        LCD_wtREG(0x2A);         //ÐеØÖ·ÉèÖÃ
        LCD_wt8bitData(0x00);
        LCD_wt8bitData(0x00);
        LCD_wt8bitData(0x01);
        LCD_wt8bitData(0x3f);
        
        LCD_wtREG(0x2B);         //ÁеØÖ·ÉèÖÃ
        LCD_wt8bitData(0x00);
        LCD_wt8bitData(0x00);
        LCD_wt8bitData(0x00);
        LCD_wt8bitData(0xef);     
         
        LCD_wtREG(0x3A);   
        LCD_wt8bitData(0x55); 
    
        LCD_wtREG(0xB1);   
        LCD_wt8bitData(0x00);   
        LCD_wt8bitData(0x18); 
         
        LCD_wtREG(0xB6);    // Display Function Control 
        LCD_wt8bitData(0x0A); 
        LCD_wt8bitData(0xA2); 
         
        LCD_wtREG(0xF2);    // 3Gamma Function Disable 
        LCD_wt8bitData(0x00); 
         
        LCD_wtREG(0x26);    //Gamma curve selected 
        LCD_wt8bitData(0x01); 
         
        LCD_wtREG(0xE0);    //Set Gamma 
        LCD_wt8bitData(0x0F); 
        LCD_wt8bitData(0x20); 
        LCD_wt8bitData(0x1E); 
        LCD_wt8bitData(0x09); 
        LCD_wt8bitData(0x12); 
        LCD_wt8bitData(0x0B); 
        LCD_wt8bitData(0x50); 
        LCD_wt8bitData(0XBA); 
        LCD_wt8bitData(0x44); 
        LCD_wt8bitData(0x09); 
        LCD_wt8bitData(0x14); 
        LCD_wt8bitData(0x05); 
        LCD_wt8bitData(0x23); 
        LCD_wt8bitData(0x21); 
        LCD_wt8bitData(0x00); 
         
        LCD_wtREG(0XE1);    //Set Gamma 
        LCD_wt8bitData(0x00); 
        LCD_wt8bitData(0x19); 
        LCD_wt8bitData(0x19); 
        LCD_wt8bitData(0x00); 
        LCD_wt8bitData(0x12); 
        LCD_wt8bitData(0x07); 
        LCD_wt8bitData(0x2D); 
        LCD_wt8bitData(0x28); 
        LCD_wt8bitData(0x3F); 
        LCD_wt8bitData(0x02); 
        LCD_wt8bitData(0x0A); 
        LCD_wt8bitData(0x08); 
        LCD_wt8bitData(0x25); 
        LCD_wt8bitData(0x2D); 
        LCD_wt8bitData(0x0F); 
     
        LCD_wtREG(0x11);    //Exit Sleep 
        delay_ms(120); 
        LCD_wtREG(0x29);    //Display on 
        
        lcddev.bled = BLEDoff;
         
    } 
    
    unsigned short int LCD_Read_Point(unsigned short int cx,unsigned short int cy)
    {
        unsigned char r=0,g=0,b=0;
        LCD_set_windows(cx,cy,cx,cy);
        LCD_wtREG(0x2E);
        
        LCD_Read_Data();        //Ö»ÐèÒªÖ´ÐÐÒ»´Î¿Õ¶ÁÈ¡
        r = LCD_Read_Data();
        g = LCD_Read_Data();
        b = LCD_Read_Data();
        
        LCD_wtREG(0x2C);        //¹Ø¼ü²½Ö裬±ØÐëÒªÓÐ
    
        return (((r>>3)<<11)|((g>>2)<<5)|(b>>3));
    }
    
    
    void LCD_restar(void)        //Èí¼þ¸´Î»Ö¸Áî²»ÄÜÔÚÍ˳ö˯ÃßÐòÁÐʱ·¢ËÍ
    {
        LCD_wtREG(0x01);
        delay_ms(250);
    }
    
    void LCD_inSleep(void)
    {
        LCD_wtREG(0x28);        //display TURNOFF
        delay_ms(50);
        LCD_wtREG(0x10);        //sleep ENABLE
        LCD_BLK_Clr();
    }
    
    void LCD_outSleep(void)
    {
        LCD_wtREG(0x11);        //sleep DISABLE
        delay_ms(50);
        LCD_wtREG(0x29);        //display TURNON
        LCD_BLK_Set();
    }
    
    unsigned char LCD_onDisp(void)
    {
        LCD_wtREG(0x29);        //display TURNON
        return BLEDon;
    }
    
    unsigned char LCD_offDisp(void)
    {
        LCD_wtREG(0x28);        //display TURNOFF
        return BLEDoff;
    }
    
    
    /****************************************************
    *** º¯Êý¹¦ÄÜ£ºÇóÏÔʾµÄµãÕóÃæ»ý
    *** Èë¿Ú²ÎÊý£ºm:ºá×ø±ê
    ***           n:×Ý×ø±ê
    ****************************************************/
    //m^nº¯Êý
    //·µ»ØÖµ:m^n´Î·½.
    unsigned long LCD_Pow(unsigned char m,unsigned char n)
    {
        unsigned long result=1;     
        while(n--)result*=m;    
        return result;
    }
    
    /****************************************************
    *** º¯Êý¹¦ÄÜ£ºÉèÖùâ±êλÖ㬼´ÉèÖÃÏÔʾµÄÆðÊ¼×ø±ê
    *** Èë¿Ú²ÎÊý£ºXpos:ºá×ø±ê
    ***           Ypos:×Ý×ø±ê
    ****************************************************/
    void LCD_SetCursor(unsigned short int Xpos, unsigned short int Ypos)
    {
        LCD_wtREG_DATA(Xreg ,Xpos);    
        LCD_wtREG_DATA(Yreg ,Ypos);
    }
    
    
    /****************************************************
    *** º¯Êý¹¦ÄÜ£ºÉèÖÃÏÔʾ´°¿Ú£¬¼´´´½¨Ò»¸öÏÔʾ´°¿Ú
    *** Èë¿Ú²ÎÊý£ºx1,y1-->ÆðÊ¼×ø±ê
    ***          x2,y2-->ÖÕµã×ø±ê
    ****************************************************/
    void LCD_set_windows(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2)
    { 
        LCD_wtREG(0x2a);
        LCD_wt16bitData(x1);
        LCD_wt16bitData(x2);
    
        LCD_wtREG(0x2b);
        LCD_wt16bitData(y1);
        LCD_wt16bitData(y2);
    
        LCD_wtREG(0x2C);                                              
    }
    
    
    //ÇåÆÁº¯Êý
    //Color:ÒªÇåÆÁµÄÌî³äÉ«
    void LCD_Clear(unsigned short int color)
    {
        unsigned short int i,j;      
        LCD_set_windows(0,0,lcddev.width-1,lcddev.height-1);
        for(i=0;i<lcddev.width;i++)
        {
            for (j=0;j<lcddev.height;j++)
            {
                LCD_wt16bitData(color);                  
            }
        }
    }
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCD»­µãº¯Êý
    * Èë¿Ú²ÎÊý ---> (x,y)¹â±ê×ø±êÊýÖµ
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> µãµÄÑÕÉ«ÔÚÇ°ÃæµÄ»­±ÊÑÕÉ«ÉèÖÃ
    **********************************************************/
    void LCD_DrawPoint(unsigned short int x,unsigned short int y)
    {
        LCD_set_windows(x,y,x,y);    //É趨¹â±ê×ø±ê
        LCD_wtREG_DATA(LCD_wtgram,lcddev.brushcl);        //дÈëµãµÄÑÕɫֵ,¼´ÉèÖû­±ÊµÄĬÈÏÑÕÉ«
    }
    
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCD»­µãº¯Êý£¬ÑÕÉ«ÖµËæÉ趨дÈ루¿ìËÙ»­µã£©
    * Èë¿Ú²ÎÊý ---> (x,y)¹â±ê×ø±êÊýÖµ
    *               cl£ºÒªÐ´ÈëµÄÑÕɫֵ
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> none
    **********************************************************/                    
    void LCD_DrawPoint_Color(unsigned short int x,unsigned short int y,unsigned short int cl)
    {
        LCD_set_windows(x,y,x,y);    //É趨¹â±ê×ø±ê
        LCD_wtREG_DATA(LCD_wtgram,cl);        //дÈëµãµÄÑÕɫֵ,¼´ÉèÖû­±ÊµÄĬÈÏÑÕÉ«
    }
    
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCD»­Ïߺ¯Êý
    * Èë¿Ú²ÎÊý ---> (x1,y1)Æðµã×ø±êÊýÖµ
    *               (x2,y2)ÖÕµã×ø±êÊýÖµ
    *                                cl-»­±ÊÑÕÉ«
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> 
    **********************************************************/
    void LCD_Draw_Line(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2, unsigned short int cl)
    {
        unsigned short int 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_y;} 
        if( delta_x>delta_y)distance=delta_x; //ѡȡ»ù±¾ÔöÁ¿×ø±êÖá 
        else distance=delta_y; 
        for(t=0;t<=distance+1;t++ )//»­ÏßÊä³ö 
        {  
            LCD_DrawPoint_Color(uRow,uCol,cl);//»­µã 
            xerr+=delta_x ; 
            yerr+=delta_y ; 
            if(xerr>distance) 
            { 
                xerr-=distance; 
                uRow+=incx; 
            } 
            if(yerr>distance) 
            { 
                yerr-=distance; 
                uCol+=incy; 
            } 
        }  
    }
    
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCDÖе㷨»­Ô²º¯Êý
    * Èë¿Ú²ÎÊý ---> (x,y)Æð½Ç×ø±êÊýÖµ
    *               r£ºÔ²°ë¾¶
    *
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> Ô²µÄÑÕÉ«ÔÚÇ°ÃæµÄ»­±ÊÑÕÉ«ÉèÖÃ
    **********************************************************/
    void LCD_Draw_Circle(unsigned short int x0,unsigned short int y0,unsigned char r , unsigned short int cl)
    {
        unsigned char x,y;    //Öá·½Ïò±äÁ¿
        float d;
        x = 0;
        y = r;
        d = 5.0/4 - r;    //ÄæÊ±Õë»­Ô²
    
        while(x <= y)
        {
            LCD_DrawPoint_Color(x0 + x,y0 + y,cl);    //270¡ã
            LCD_DrawPoint_Color(x0 + x,y0 - y,cl);    //90¡ã
            LCD_DrawPoint_Color(x0 - x,y0 + y,cl);
            LCD_DrawPoint_Color(x0 - x,y0 - y,cl);
            LCD_DrawPoint_Color(x0 + y,y0 + x,cl);    //0¡ã
            LCD_DrawPoint_Color(x0 + y,y0 - x,cl);
            LCD_DrawPoint_Color(x0 - y,y0 + x,cl);    //180¡ã
            LCD_DrawPoint_Color(x0 - y,y0 - x,cl);
            
            if(d < 0)    //yÖáË¥¼õÂý
            {    d += x * 2.0 + 3;    }
            else        //xÖáË¥¼õÂý
            {
                d += 2.0 * (x - y) + 5;
                y--;
            }
            x++;
        }
    }
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCD»­¾ØÐκ¯Êý
    * Èë¿Ú²ÎÊý ---> (x1,y1)Æð½Ç×ø±êÊýÖµ
    *               (x2,y2)¶Ô½Ç×ø±êÊýÖµ    ,¾ØÐεĶԽÇ×ø±ê
    *               cl-»­±ÊÑÕÉ« 
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> ÏßµÄÑÕÉ«ÔÚÇ°ÃæµÄ»­±ÊÑÕÉ«ÉèÖÃ
    **********************************************************/
    void LCD_Draw_Quad(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2 , unsigned short int cl)
    {
        LCD_Draw_Line(x1,y1,x2,y1,cl);    //ÒÔy1ΪÖá»­Ïß
        LCD_Draw_Line(x2,y1,x2,y2,cl);    //ÒÔx2ΪÖá»­Ïß
        LCD_Draw_Line(x2,y2,x1,y2,cl);    //ÒÔy2ΪÖá»­Ïß
        LCD_Draw_Line(x1,y2,x1,y1,cl);    //ÒÔx1ΪÖá»­Ïß
    }
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCDÖ¸¶¨ÇøÓòÌî³äÑÕÉ«º¯Êý
    * Èë¿Ú²ÎÊý ---> (x1,y1)Æð½Ç×ø±êÊýÖµ
    *               (x2,y2)¶Ô½Ç×ø±êÊýÖµ
    *               cl£ºÌî³äÑÕɫֵ
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> ÔÚÆÁÄ»ÉÏ»­Ò»¸öËıßÐβ¢Ìî³äÏàÓ¦µÄÑÕÉ«
    *               ¿éÇøÓò´óС£¨Ãæ»ý£© = (x2 - x1) * (y2 - y1)
    **********************************************************/
    void LCD_Area_Color(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2,unsigned short int cl)
    {
        unsigned short int i,j; 
        LCD_set_windows(x1,y1,x2,y2);      //ÉèÖùâ±êλÖà 
        for(i=y1;i<=y2;i++)
        {                                                                
            for(j=x1;j<=x2;j++)
                LCD_wt16bitData(cl);//ÉèÖùâ±êλÖà         
        }
    }
    
    /**********************************************************
    * º¯Êý¹¦ÄÜ ---> LCDÖ¸¶¨Î»ÖÃÏÔʾһ¸ö×Ö·ûº¯Êý
    * Èë¿Ú²ÎÊý ---> (x,y)×ø±êÊýÖµ
    *               ch£ºÒªÏÔʾµÄ×Ö·û
    *               size£º×ÖÌå´óС
    *               mode£º0£º·Çµþ¼Ó·½Ê½ÏÔʾ¡£1£ºµþ¼Ó·½Ê½ÏÔʾ
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ ---> Ö÷ÒªÏÔʾһЩÐèÒª±ä»¯Ö®ÀàµÄÊý×ÖÏÔʾ
    **********************************************************/
    void LCD_ShowChar(unsigned short int x,unsigned short int y,unsigned char ch,unsigned char csize,unsigned char mode)
    {
        unsigned char temp,t1,t;
        unsigned short int y0=y;
        
        unsigned char sz=(csize/8+((csize%8)?1:0))*(csize/2);        //µÃµ½×ÖÌåÒ»¸ö×Ö·û¶ÔÓ¦µãÕó¼¯ËùÕ¼µÄ×Ö½ÚÊý
        
         ch=ch-' ';//µÃµ½Æ«ÒƺóµÄÖµ£¨ASCII×Ö¿âÊÇ´Ó¿Õ¸ñ¿ªÊ¼È¡Ä££¬ËùÒÔ-' '¾ÍÊǶÔÓ¦×Ö·ûµÄ×ֿ⣩
        
        for(t=0;t<sz;t++)
        {   
            if(csize==12)temp=ascii_1206[ch][t];          //µ÷ÓÃ1206×ÖÌå
            else if(csize==16)temp=ascii_1608[ch][t];    //µ÷ÓÃ1608×ÖÌå
            else if(csize==24)temp=ascii_2412[ch][t];    //µ÷ÓÃ2412×ÖÌå
            else return;                                //ûÓеÄ×Ö¿â
            
            for(t1=0;t1<8;t1++)
            {                
                if(temp&0x80)
                {
                    LCD_DrawPoint_Color(x,y,lcddev.cur_brushcl);
                }
                else if(mode==0)
                {
                    LCD_DrawPoint_Color(x,y,lcddev.cur_backcl);
                }    
                
                temp<<=1;
                y++;
                if(y>=lcddev.height)return;        //³¬ÇøÓòÁË
                if((y-y0)==csize)
                {
                    y=y0;
                    x++;
                    if(x>=lcddev.width)return;    //³¬ÇøÓòÁË
                    break;
                }
            }       
        }
    }
    
    
    /*************************************************************
    *** º¯Êý¹¦ÄÜ ---> LCDÖ¸¶¨Î»ÖÿªÊ¼ÏÔʾ×Ö·û´®, 
    *** Èë¿Ú²ÎÊý ---> x,y:Æðµã×ø±ê
    ***                                width,height:ÇøÓò´óС  
    ***                                size:×ÖÌå´óС
    ***                                p:×Ö·û´®ÆðʼµØÖ·
    ***                              mode:0,Õý³£ÏÔʾ,1,µþ¼ÓÏÔʾ     
    **************************************************************/
    void LCD_ShowString(unsigned short int x,unsigned short int y,char *p ,unsigned char csize,unsigned char mode)
    {         
        unsigned short int w,h;
        
        switch (csize)
        {
            case Ch12_6:
            {
                w = 6; h =12;
                break;
            }
            case Ch16_8:
            {
                w = 8; h =16;
                break;
            }
            case Ch24_12:
            {
                w = 12; h =24;
                break;
            }
        }
        
        while(*p!='')//ÅжÏÊDz»ÊÇ·Ç·¨×Ö·û!
        {
            if(x>lcddev.width-w) 
            {
                x=0;y+=h;
            }
            if(y>lcddev.height-h)
            {
                //x=y=0;    
                return;//Í˳ö
            }
                LCD_ShowChar(x,y,*p,csize,mode);
                x+= w;
                p++;
        }     
    }
    
    
    
    
    /*****************************************************************************************
    * º¯Êý¹¦ÄÜ ---> ÏÔʾN¸öÊý×Ö,¸ßλΪ0,Ôò²»ÏÔʾ
    * Èë¿Ú²ÎÊý ---> (x,y)×ø±êÊýÖµ
    *               len :Êý×ÖµÄλÊý
    *               size:×ÖÌå´óС
    *               //cl:ÑÕÉ«,´Ëº¯ÊýûÓÐÑÕÉ«ÉèÖ㬰´ÕÕĬÈÏÑÕÉ«
    *                                num:ÊýÖµ(0~4294967295);     
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ --->
    *****************************************************************************************/
    void LCD_ShowNum(unsigned short int x,unsigned short int y,unsigned long num,unsigned char len,unsigned char size)
    {             
        unsigned char t,temp;
        unsigned char enshow=0;
        
        for(t=0;t<len;t++)
        {
            temp=(num/LCD_Pow(10,len-t-1))%10;
            if(enshow==0&&t<(len-1))
            {
                if(temp==0)
                {
                    LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
                    continue;
                }else enshow=1; 
                  
            }
             LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0); 
        }
    } 
    
    /*****************************************************************************************
    * º¯Êý¹¦ÄÜ ---> ÏÔʾN¸öÊý×Ö,¸ßλΪ0,Ò²ÏÔʾ
    * Èë¿Ú²ÎÊý ---> (x,y)×ø±êÊýÖµ
    *               len :Êý×ÖµÄλÊý
    *               size:×ÖÌå´óС
    *                                num:ÊýÖµ(0~999999999) 
    *                                mode:
    *                                [7]:0,²»Ìî³ä;1,Ìî³ä0.
    *                                [6:1]:±£Áô
    *                                [0]:0,·Çµþ¼ÓÏÔʾ;1,µþ¼ÓÏÔʾ.
    * ·µ»ØÊýÖµ ---> none
    * ¹¦ÄÜ˵Ã÷ --->
    *****************************************************************************************/
    void LCD_ShowNum_mode(unsigned short int x,unsigned short int y,unsigned long num,unsigned char len,unsigned char size,unsigned char mode)
    {  
        unsigned char t,temp;
        unsigned char enshow=0;                           
        for(t=0;t<len;t++)
        {
            temp=(num/LCD_Pow(10,len-t-1))%10;
            if(enshow==0&&t<(len-1))
            {
                if(temp==0)
                {
                    if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01);  
                    else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01);  
                     continue;
                }else enshow=1; 
                  
            }
             LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01); 
        }
    }
    
    
    /***********************************************************************************************
    * Ãû    ³Æ£ºvoid LCD_Showflt_2dcm_mode(unsigned short int x,unsigned short int y,unsigned short int fnum, unsigned char size,unsigned char mode)
    * ¹¦    ÄÜ£ºÔÚÖ¸¶¨×ù±ê·¶Î§ÄÚÏÔʾһ¸öº¬Á½Î»Ð¡ÊýµÄ,СÓÚ100µÄ¸¡µãÊý
    * Èë¿Ú²ÎÊý£ºX-->ÆðʼX×ù±ê
    *          Y-->ÆðʼY×ù±ê
    *                     fnum--> Á½×Ö½ÚµÄÕûÊý
    *          size-->×ÖÌå´óС£¨±ØÐëÊdzɱÈÀýµÄ£©£¬ÏÖÖ§³Ö24,16,12
    *                     mode--> 1£ºµþ¼ÓÏÔʾ£¬¼´Ê¹ÓÃbc¸²¸ÇĬÈϱ³¾°ÑÕÉ«£» 0£º²»µþ¼Ó¡£
    *          
    * ³ö¿Ú²ÎÊý£ºÎÞ
    * ˵    Ã÷£º
    * µ÷Ó÷½·¨£º
    ************************************************************************************************/
    void LCD_Showflt_2dcm_mode(unsigned short int x,unsigned short int y,unsigned short int fnum, unsigned char size,unsigned char mode)
    {
        unsigned short int f_dcm =0, f_inte =0;
        //unsigned short int dx,dy;
        unsigned char md =0;
        
        md = mode&0x01;
        
        f_inte = fnum/100;
        f_dcm = fnum%100;
        
        if(f_inte==0)
        {
            LCD_ShowString(x,y,"0.",size,md);
            
            if(f_dcm == 0)
                LCD_ShowString((x + size),y,"00",size,0);
            else
                LCD_ShowNum_mode((x + size),y,f_dcm,2,size,mode);
        }
        else if(f_inte>0)
        {
            if((f_inte>=1)&&(f_inte<10))
            {
                LCD_ShowNum_mode(x,y,f_inte,1,size,mode);
                LCD_ShowChar((x + size/2),y,'.',size,md);
                
                if(f_dcm == 0)
                    LCD_ShowString((x + size),y,"00",size,0);
                else
                    LCD_ShowNum_mode((x + size),y,f_dcm,2,size,mode);
            }
            else if((f_inte>=10)&&(f_inte<99))
            {
                LCD_ShowNum_mode(x,y,f_inte,2,size,mode);
                LCD_ShowChar((x + size),y,'.',size,md);
                
                if(f_dcm == 0)
                    LCD_ShowString((x + size),y,"00",size,0);
                else
                    LCD_ShowNum_mode((x + size),y,f_dcm,2,size,mode);            
            }
        }
    }
    
    
    /***********************************************************************************************
    * Ãû    ³Æ£ºvoid LCD_ShowFont(unsigned short int x,unsigned short int y, unsigned char size, unsigned short int pc , unsigned short int bc , unsigned char mode ,const unsigned char *font)
    * ¹¦    ÄÜ£ºÔÚÖ¸¶¨×ù±ê·¶Î§ÄÚÏÔʾһ¸öºº×Ö
    * Èë¿Ú²ÎÊý£ºX-->ÆðʼX×ù±ê
    *          Y-->ÆðʼY×ù±ê
    *          size-->×ÖÌå´óС£¨±ØÐëÊǵȱÈÀýµÄ£©£¬ÏÖÖ§³Ö32£¬26£¬24£¬16£¬12
    *          pc-->»­±ÊÑÕÉ«£¨×ÖÌåÑÕÉ«£© 
    *                     bc-->±³¾°ÑÕÉ«
    *                     mode--> 1£ºµþ¼ÓÏÔʾ£¬¼´Ê¹ÓÃbc¸²¸Çµ±Ç°±³¾°ÑÕÉ«  ¡£ 0£º²»µþ¼Ó
    *          *font-->×ÖÄ£Êý×é
    * ³ö¿Ú²ÎÊý£ºÎÞ
    * ˵    Ã÷£ºÖ§³Ö32,26,24,20,18,16,12´óСµÄºº×Ö£¬È¡×Öģʱºº×Ö±ØÐë°´µÈ±ÈÀýÈ¡
    * µ÷Ó÷½·¨£º
    ************************************************************************************************/
    void LCD_ShowFont(unsigned short int x,unsigned short int y, unsigned char fsize, unsigned short int pc , unsigned short int bc , unsigned char mode ,const unsigned char *font)
    {  
        unsigned char i,j,dx,dy;
        unsigned char b;
        unsigned char *temp=(unsigned char *)font;
    
        switch(fsize)
        {
            case Font32:
            {
                dx=dy=32;b=Font32;
                break;
            }
            case Font26:
            {
                dx=32;dy=26;b=Font26;
                break;
            }
            case Font24:
            {
                dx=dy=24;b=Font24;
                break;
            }
            case Font20:
            {
                dx=24;dy=20;b=Font20;
                break;
            }
            case Font16:
            {
                dx=dy=16;b=Font16;
                break;
            }
            case Font12:
            {
                dx=16;dy=12;b=Font12;
                break;
            }
        }
    
        LCD_set_windows(x,y,x+dx-1,y+dy-1); //ÉèÖÃÇøÓò          
    
        for(j=0;j<b;j++)
        {
            for(i=0;i<8;i++)
            {
                if((*temp&(1<<i))!=0)
                {
                    LCD_wt16bitData(pc);
                } 
                else
                {
                    if(mode)
                        LCD_wt16bitData(bc);
                    else
                        LCD_wt16bitData(lcddev.cur_backcl);
                }   
            }
            temp++;
        }     
    
     
    }
    
    
    /***************************************************************************************************************
    * Ãû    ³Æ£ºvoid LCD_DrawPicture(unsigned short int StartX,unsigned short int StartY,unsigned short int PicXend,unsigned short int PicYend,const unsigned char *pic)
    * ¹¦    ÄÜ£ºÔÚÖ¸¶¨×ù±ê·¶Î§ÏÔʾһ¸±Í¼Æ¬
    * Èë¿Ú²ÎÊý£ºStartX     ÐÐÆðʼ×ù±ê
    *           StartY     ÁÐÆðʼ×ù±ê
    *           PicXend      ͼƬµÄXÏñËØ
    *           PicYend       ͼƬµÄYÏñËØ
                pic             ͼƬͷָÕë
    * ³ö¿Ú²ÎÊý£ºÎÞ
    * ˵    Ã÷£ºÍ¼Æ¬È¡Ä£¸ñʽΪˮƽɨÃ裬16λÑÕɫģʽ
    * µ÷Ó÷½·¨£ºLCD_DrawPicture(0,0,100,100,(unsigned short int*)demo);
    ****************************************************************************************************************/
    void LCD_DrawPicture(unsigned short int StartX,unsigned short int StartY,unsigned short int PicXend,unsigned short int PicYend,const unsigned char *pic)
    {
      unsigned long j=0;    
        unsigned char *pdata = (unsigned char *)pic;
    
        LCD_set_windows(StartX,StartY,StartX+PicXend-1,StartY+PicYend-1);    //ÉèÖÃÏÔʾ´°¿Ú
        
        for(j=0;j<PicXend*PicYend;j++)    //Ïò´°¿ÚÖÐÌîÈëÄÚÈÝ£¬¼´Í¼Æ¬µÄÄ£Öµ
        {
                LCD_wt8bitData(pdata[j*2+1]);
                LCD_wt8bitData(pdata[j*2]);
        }            
    }
    
    /***************************************************************************************************************
    * Ãû    ³Æ:    LCD_Draw_monochrome_Picture
    * ¹¦    ÄÜ:    ÔÚÖ¸¶¨×ù±ê·¶Î§ÏÔʾһ¸±×Ô¶¨ÒåÑÕÉ«µÄͼƬ£¬
    *           µ«ÊǸÃͼƬµÄ³¤ºÍ¿íÖ»ÄÜÊÇ8µÄÕûÊý±¶
    * Èë¿Ú²ÎÊý£º StartX     ÐÐÆðʼ×ù±ê
    *           StartY     ÁÐÆðʼ×ù±ê
    *           PicXend      ͼƬµÄXÏñËØ
    *           PicYend       ͼƬµÄYÏñËØ
                            pc-->»­±ÊÑÕÉ«£¨×ÖÌåÑÕÉ«£© 
                         bc-->±³¾°ÑÕÉ«
                          mode--> 1£ºµþ¼ÓÏÔʾ£¬¼´Ê¹ÓÃbc¸²¸ÇĬÈϱ³¾°ÑÕÉ«  ¡£ 0£º²»µþ¼Ó
                pic-->  ͼƬÊý×éÖ¸Õë
                sz-->   ͼƬÊý×éµÄ´óС
    * ³ö¿Ú²ÎÊý£ºÎÞ
    * ˵    Ã÷£ºÍ¼Æ¬È¡Ä£¸ñʽΪˮƽɨÃ裬µ¥É«Ä£Ê½
    ****************************************************************************************************************/
    
    void LCD_Draw_monochrome_Picture(uint16_t StartX,uint16_t StartY,uint16_t PicXend,uint16_t PicYend,uint16_t pc , uint16_t bc , uint8_t mode ,const uint8_t *pic, uint16_t sz)
    {
        uint32_t j;
        uint8_t i;
        uint8_t *pdata = (uint8_t *)pic;
        
        LCD_set_windows(StartX,StartY,StartX+PicXend-1,StartY+PicYend-1);    //ÉèÖÃÏÔʾ´°¿Ú
        
        for(j=0;j<sz;j++)    //Ïò´°¿ÚÖÐÌîÈëÄÚÈÝ£¬¼´BMPͼƬµÄÄ£Öµ
        {
            for(i=0;i<8;i++)
            {
                if((*pdata&(0x80>>i))!=0)
                {
                    LCD_wt16bitData(pc);
                } 
                else
                {
                    if(mode)
                        LCD_wt16bitData(bc);
                    else
                        LCD_wt16bitData(lcddev.cur_backcl);
                }
            }
            pdata++;
        }
    
    }
    
    
    //  ÖØ¶¨Ïòc¿âº¯Êýprintf µ½lcdÏÔʾÆÁ£¬Öض¨Ïòºó¿ÉÒÔʹÓÃprintfº¯Êý
    int fputc(int ch, FILE *f)
    {
        static uint16_t x = 0, y = 0;
        uint8_t i,cn;
        static char string[16] ;
        if(ch == '
    ') // »»ÐÐ
        { 
                x = 0;
                y += 30;
                return ch;
        }    
                if( y > 260)
            {
                LCD_Clear(WHITE);    
                x = 0;
                y = 0;
            }
            if(x > 320 - 8)  
            {
            x = 0;  
            y += 25;  
            }
            if(y > 320 - 16)  
            {
            return ch; 
            }
    //        ILI9488_Putchar18x32(x, y, ch , TFT_STRING_MODE_BACKGROUND); 
            LCD_ShowChar(x, y, ch ,24,1);
            x += 16; 
            return ch;     
    }

    H文件

    #ifndef _LCD_ODEV_H_
    #define _LCD_ODEV_H_
    
    #include "stm32f0xx.h"
    #include "delay.h"
    #include "spi_idev.h" 
    #include "stdlib.h"
    #include "stdio.h"    
    
    //#define    uchar unsigned char
    //#define    uint unsigned short int
    //#define    ulong unsigned long
        
    #ifdef _LCD_ODEV_C_
    #define LCD_ODEV_EXT
    #else 
    #define LCD_ODEV_EXT extern
    #endif
    
    /**********ºº×ÖµãÕó´óС************/
    #define Font32    (32/8+((32%8)?1:0))*(32)
    #define Font26    (26/8+((26%8)?1:0))*(26)
    #define Font24    (24/8+((24%8)?1:0))*(24)
    #define Font20    (20/8+((20%8)?1:0))*(20)
    #define Font16    (16/8+((16%8)?1:0))*(16)
    #define Font12    (12/8+((12%8)?1:0))*(12)
    
    
    
    
    /***********×Ö·ûµãÕó´óС*****************/
    #define Ch12_6    12
    #define Ch16_8    16
    #define Ch24_12    24
    
    /*************LCD´óС******************/
    #define LCD_Wide 320
    #define LCD_High 240
    
    //ɨÃè·½Ïò¶¨Òå
    #define L2R_U2D  0 //´Ó×óµ½ÓÒ,´ÓÉϵ½ÏÂ
    #define L2R_D2U  1 //´Ó×óµ½ÓÒ,´Óϵ½ÉÏ
    #define R2L_U2D  2 //´ÓÓÒµ½×ó,´ÓÉϵ½ÏÂ
    #define R2L_D2U  3 //´ÓÓÒµ½×ó,´Óϵ½ÉÏ
    
    #define U2D_L2R  4 //´ÓÉϵ½ÏÂ,´Ó×óµ½ÓÒ
    #define U2D_R2L  5 //´ÓÉϵ½ÏÂ,´ÓÓÒµ½×ó
    #define D2U_L2R  6 //´Óϵ½ÉÏ,´Ó×óµ½ÓÒ
    #define D2U_R2L  7 //´Óϵ½ÉÏ,´ÓÓÒµ½×ó     
    //ĬÈϵÄɨÃè·½Ïò
    #define DFT_SCAN_DIR  L2R_U2D                           
    
    //LCDÇý¶¯ÃüÁî
    #define Xreg        0x2A
    #define Yreg        0x2B
    #define LCD_wtgram    0x2C
    
    
    //»­±ÊÑÕÉ«
    #define WHITE              0xFFFF
    #define BLACK              0x0000      
    #define BLUE              0x001F  
    #define BRED             0XF81F
    #define GRED              0XFFE0
    #define GBLUE             0X07FF
    #define RED                0xF800      
    #define GREEN              0x07E0
    #define CYAN               0x7FFF
    #define YELLOW             0xFFE0
    #define BROWN              0XBC40 //רɫ
    #define BRRED              0XFC07 //רºìÉ«
    #define GRAY               0X8430 //»ÒÉ«
    #define DARKBLUE           0X01CF    //ÉîÀ¶É«
    #define LIGHTBLUE           0X7D7C    //dzÀ¶É«  
    #define GRAYBLUE            0X5458 //»ÒÀ¶É« 
    #define LIGHTGREEN          0X841F //dzÂÌÉ«
    #define LIGHTGRAY        0XEF5B //dz»ÒÉ«(PANNEL)
    #define LGRAY              0XC618 //dz»ÒÉ«(PANNEL),´°Ìå±³¾°É«
    #define LGRAYBLUE        0XA651 //dz»ÒÀ¶É«(Öмä²ãÑÕÉ«)
    #define LBBLUE           0X2B12 //Ç³×ØÀ¶É«(Ñ¡ÔñÌõÄ¿µÄ·´É«)
    
    
    #define cblock1    0XEBE6
    #define cblock2    0X4398
    #define cblock3    0X5742
    #define cblock4    0XFE00
    #define cblock5    0X2EB4
    #define cblock6    0XC7C2
    #define cblock7    0X922F
    #define cblock8    0XF4D4
    #define cblock9    0XBD9A
    #define cblock10    0XD923
    #define cblock11    0X806C
    #define cblock12    0XE9CE
    #define cblock13    0XC716
    #define cblock14    0X28AD
    #define cblock15    0X066C
    #define cblock16    0XA004
    #define cblock17    0XFFF3
    #define cblock18    0X730B
    #define cblock19    0X3619
    #define cblock20    0X046E
    
    //ĬÈÏÑÕÉ«ÉèÖà 
    #define DFT_brhcl        BLACK        //ĬÈÏ»­±ÊÑÕÉ«
    #define DFT_bckcl        WHITE        //ĬÈϱ³¾°ÑÕÉ«
    
    #define BLEDon    1
    #define BLEDoff    !BLEDon
    
    //LCDÖØÒª²ÎÊý¼¯
    typedef struct  
    {                                            
        unsigned short int width;            //LCD ¿í¶È
        unsigned short int height;            //LCD ¸ß¶È
        unsigned short int id;                //LCD ID
        unsigned char  dir;            //ºáÆÁ»¹ÊÇÊúÆÁ¿ØÖÆ£º0£¬ÊúÆÁ£»1£¬ºáÆÁ¡£    
        unsigned short int brushcl;        //ĬÈÏ»­±ÊÑÕÉ«
        unsigned short int backcl;            //ĬÈϱ³¾°ÑÕÉ«
        unsigned short int    cur_brushcl;    //µ±Ç°»­±ÊÑÕÉ«
        unsigned short int    cur_backcl;        //µ±Ç°±³¾°ÑÕÉ«
        unsigned char    bled;            //¿ª¹Ø±ÕÏÔʾÆÁ
    }lcd_odev_struct;      
    
    LCD_ODEV_EXT lcd_odev_struct lcddev;
    
    
    #define LCD_RST_Clr()         GPIO_ResetBits(GPIOA,GPIO_Pin_15)//RES
    #define LCD_RST_Set()         GPIO_SetBits(GPIOA,GPIO_Pin_15)
    
    #define LCD_DC_reg()    GPIO_ResetBits(GPIOB,GPIO_Pin_7)//DC
    #define LCD_DC_data()    GPIO_SetBits(GPIOB,GPIO_Pin_7)
    
    #define LCD_CS_en()        GPIO_ResetBits(GPIOB,GPIO_Pin_6)//CS
    #define LCD_CS_dis()    GPIO_SetBits(GPIOB,GPIO_Pin_6)
                  
    #define LCD_BLK_Clr()  GPIO_ResetBits(GPIOB,GPIO_Pin_9)//BLK
    #define LCD_BLK_Set()  GPIO_SetBits(GPIOB,GPIO_Pin_9)
    
    void LCD_Delay(unsigned short int i);            //LCDÑÓʱ
    void LCD_wt8bitData(unsigned char data);
    void LCD_wt16bitData(unsigned short int data);
    void LCD_wtREG(unsigned char cmd);
    void LCD_wtREG_DATA(unsigned char reg,unsigned short int da);
    
    unsigned char LCD_Read_Data(void);        //¶ÁÊý¾Ý²Ù×÷
    unsigned short int LCD_Read_Point(unsigned short int cx,unsigned short int cy);//¶ÁÖ¸¶¨µãµÄÑÕÉ«
    void LCD_restar(void);        //LCDÈí¼þ¸´Î»
    unsigned char     LCD_onDisp(void);        //¿ªÏÔʾ
    unsigned char     LCD_offDisp(void);        //¹ØÏÔʾ
    void LCD_inSleep(void);        //ÐÝÃß
    void LCD_outSleep(void);        //»½ÐÑ
    
    unsigned long LCD_Pow(unsigned char m,unsigned char n);
    void LCD_SetCursor(unsigned short int Xpos, unsigned short int Ypos);
    void LCD_set_windows(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2);
    void LCD_Clear(unsigned short int color);
    
    void LCD_DrawPoint(unsigned short int x,unsigned short int y);
    void LCD_DrawPoint_Color(unsigned short int x,unsigned short int y,unsigned short int cl);
    
    void LCD_Draw_Line(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2, unsigned short int cl);
    void LCD_Draw_Circle(unsigned short int x0,unsigned short int y0,unsigned char r , unsigned short int cl);
    
    void LCD_Draw_Quad(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2 , unsigned short int cl);
    void LCD_Area_Color(unsigned short int x1,unsigned short int y1,unsigned short int x2,unsigned short int y2,unsigned short int cl);
    
    void LCD_ShowChar(unsigned short int x,unsigned short int y,unsigned char ch,unsigned char csize,unsigned char mode);
    void LCD_ShowString(unsigned short int x,unsigned short int y,char *p ,unsigned char csize, unsigned char mode);
    
    void LCD_ShowNum(unsigned short int x,unsigned short int y,unsigned long num,unsigned char len,unsigned char size);
    void LCD_ShowNum_mode(unsigned short int x,unsigned short int y,unsigned long num,unsigned char len,unsigned char size,unsigned char mode);
    void LCD_Showflt_2dcm_mode(unsigned short int x,unsigned short int y,unsigned short int fnum, unsigned char size,unsigned char mode);
    
    void LCD_ShowFont(unsigned short int x,unsigned short int y, unsigned char fsize, unsigned short int pc , unsigned short int bc , unsigned char mode ,const unsigned char *font);
    void LCD_DrawPicture(unsigned short int StartX,unsigned short int StartY,unsigned short int PicXend,unsigned short int PicYend,const unsigned char *pic);
    void LCD_Draw_monochrome_Picture(uint16_t StartX,uint16_t StartY,uint16_t PicXend,uint16_t PicYend,uint16_t pc , uint16_t bc , uint8_t mode ,const uint8_t *pic, uint16_t sz);
    
    
    //unsigned short int  LCD_ReadPoint(unsigned short int x,unsigned short int y); //¶Áµã
    
    
    void LCD_odev_set(void);
    void LCD_odev_init(void);
    void LCD_odev_tick(void);
    void LCD_odev_exc(void);
    
    int fputc(int ch, FILE *f);
                                   
    #endif  
         
         
  • 相关阅读:
    内网Windows Server时间自动同步
    处理sqlserver数据
    virtualenv使用
    vue过渡动画效果
    vue视图
    vue组件
    Vue实例
    vue介绍
    Bootstrap布局
    Bootstrap组件
  • 原文地址:https://www.cnblogs.com/xwtstudio/p/14505617.html
Copyright © 2011-2022 走看看