娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32HAL庫使用SPI驅動1.44寸TFTLCD

發布者:恬淡如云最新更新時間:2019-05-31 來源: eefocus關鍵字:STM32  HAL庫  SPI驅動  TFTLCD 手機看文章 掃描二維碼
隨時隨地手機看文章

??關于STM32F4單片機,使用HAL庫自帶的SPI,驅動TFTLCD屏幕的資料網上好像不太多,正好最近我做了這項工作,把成果分享給大家。我的代碼實現了這些功能:任意坐標畫點,指定首尾坐標畫線,畫方框,指定區域顯示彩圖,顯示16* 16或者12* 12的漢字、ASCII碼,并附帶ASCII碼表與少量的漢字字庫。


硬件設計

??屏幕選擇:使用了一款低成本十六位彩屏,只要十塊錢。鏈接

在這里插入圖片描述

??廠家看到文章請聯系我打廣告費,哈哈。

??雖然用這個屏幕的可能不多,但我了解到,只要其控制芯片是ST7735S,那么程序就應該差不多。不同的地方在于,廠家的封裝與玻璃不太一樣,玻璃有個伽馬值不同,會導致顏色看上去不太一樣。


??屏幕的引腳信息

在這里插入圖片描述

??我的原理圖設計:使用了STM32F405RG芯片的SPI1,屏幕沒有MISO。


在這里插入圖片描述
在這里插入圖片描述

cubeMX中SPI的配置大致如下:

在這里插入圖片描述在這里插入圖片描述

??其實SPI的速度我選的是21MBITS/s,可能再快一點也行,沒有測試。

??其它引腳比較散,都是當做IO來用,CubeMX中的配置過程就不說了,匯總如下


名稱 引腳 功能

LCD_RST PC5 屏幕復位

LCD_CD PB0 0數據1指令

SPI_MOSI PB5 數據線

SPI_CLK PB3 時鐘線

LCD_CS PB1 片選,低電平有效

LCD_LED PB2 背光,高電平有效

發送數據與指令的基本函數

??在引腳初始化以后,我定義了幾個位帶操作,方便操作引腳


#define LCD_RST   PCout(5)

#define LCD_CD    PBout(0)

#define LCD_CS    PBout(1)

#define LCD_LED   PBout(2)


??不論是發送數據還是引腳,我都采用了HAL庫提供的現成的SPI發送函數:


??很多人在使用STM32的SPI時都用模擬SPI,說STM32的硬件SPI有問題,我暫時沒有發現硬件SPI的問題。不過模擬SPI很容易講清楚原理,按位發送數據,一般寫法是這樣的:


      for(i=0;i<8;i++)

      {

          if(dat&0x80)

      {

      SDA=1;

??如果你沒有使用HAL庫,可以把HAL_SPI_Transmit替換掉。

??發送數據與指令的區別就在于LCD_CD引腳的電平狀態,兩個函數如下:


/**

  * @brief 向LCD屏幕寫一個字節的命令

  * @param 命令內容,具體命令可以參照手冊

  * @retval None

  */

static void LCD_WriteCommand(uint8_t temp)

{

LCD_CD = 0;

LCD_CS = 0;

HAL_SPI_Transmit(&hspi1,&temp, 1, 0xffff);

LCD_CS = 1;

}

/**

  * @brief 向LCD屏幕寫一個字節的數據

  * @param 數據

  * @retval None

  */

static void LCD_WriteData(uint8_t temp)

{

LCD_CD = 1;

LCD_CS = 0;

HAL_SPI_Transmit(&hspi1,&temp, 1, 0xffff);

LCD_CS = 1;

}


??可以看出來,除了LCD_CD引腳用于切換命令,也需要操作LCD_CS來選中屏幕。個人認為操作過多操作引腳會影響效率,而發送數據的函數應用的十分頻繁,特別是對于我們選用的十六位屏幕,每個像素都需要十六位的數據,所以,我們經常用到的功能是發送個十六位的數據。代碼可以這么寫,調用兩次發送8位數據的函數:


static void LCD_WD_U16(u16 temp)

{

    LCD_WriteData(temp>>8);

    LCD_WriteData(temp);

}


??由于要操作兩次IO,所以我稍微做了一點優化:


/**

  * @brief 向LCD屏幕寫兩個字節的數據

  * @param 16位的數據

* @note  此函數可以直接調用LCD_WriteData兩次,但是IO的操作是多余的

  *        由于每個圖片的數據都是16位的,所以此函數很常用,因此稍作優化,減少操作IO

  * @retval None

  */

static void LCD_WD_U16(u16 temp)

{

u8 tempBuf[2];

tempBuf[0] = temp>>8;

tempBuf[1] = temp;

LCD_CD = 1;

LCD_CS = 0;

HAL_SPI_Transmit(&hspi1,tempBuf, 2, 0xffff);

LCD_CS = 1;

}


??同理寫了一個函數,用于發送數組。彩圖數組動輒都是上萬位的,并且是連續發送數據,所以也不需要操作多次IO。


/**

  * @brief 向LCD屏幕寫一個數組的長度

  * @param 數組地址與長度

* @note  此函數可以直接調用LCD_WriteData若干次,但是IO的操作是多余的

  *        由于每個圖片的數據都是16位的很長的數組,所以此函數很常用,因此稍作優化,減少操作IO,一個圖片的數組值操作一次IO

  * @retval None

  */

static void LCD_WD_buf(uint8_t *pData, uint16_t Size)

{

LCD_CD = 1;

LCD_CS = 0;

HAL_SPI_Transmit(&hspi1,pData, Size, 0xffff);

LCD_CS = 1;

}


初始化與定位

??初始化代碼太長,就不放了。其實初始化代碼是廠家提供的,只不過原來是51程序,我移植了下。

??屏幕的顯示需要坐標系,定位操作其實就是發個特定的命令,表示設置x/y軸,在發送特定的數據,表示具體位置。操作思路在《ST7735S手冊》中都有體現,例如設置列地址:

在這里插入圖片描述

??我們找到了設置列地址的命令,再把自己需要的坐標計算出來,假如全屏顯示:


/**

  * @brief 設置顯示區域為全屏

  * @param None

  * @retval None

  */

static void Full_Screen(void)

{

LCD_WriteCommand(0x2A);     //設置列地址

LCD_WriteData(0x00);

LCD_WriteData(0x02);

LCD_WriteData(0x00);

LCD_WriteData(0x81);


LCD_WriteCommand(0x2B);     //設置行地址

LCD_WriteData(0x00);

LCD_WriteData(0x03);

LCD_WriteData(0x00);

LCD_WriteData(0x82);


LCD_WriteCommand(0x2C);   //寫內存

}


??設置某個點的坐標:


/**

  * @brief 設置某個點的坐標

  * @param 點的橫縱坐標

* @note  坐標的起點為(2,3)

  * @retval None

  */

static void LCD_SetXY(u16 x,u16 y)

{

LCD_WriteCommand(0x2A);     //設置橫軸

LCD_WD_U16(x+2);

LCD_WriteCommand(0x2B);     //設置縱軸

LCD_WD_U16(y+3);

LCD_WriteCommand(0x2C);   //寫內存

}


??設置某個區域的坐標:


/**

  * @brief 設置某個顯示區域的坐標

  * @param 區域左上角的坐標與右下角的坐標

* @note  坐標的起點為(2,3)

  * @retval None

  */

static void LCD_SetArea(u16 x0, u16 y0,u16 x1, u16 y1)

{

LCD_WriteCommand(0x2A);     //設置橫軸

LCD_WD_U16(x0+2);

LCD_WD_U16(x1+2);

LCD_WriteCommand(0x2B);     //設置縱軸

LCD_WD_U16(y0+3);

LCD_WD_U16(y1+3);

LCD_WriteCommand(0x2C);   //寫內存

}


顏色的確定

??所謂十六位真彩色,意思就是每個像素的顏色由十六位決定。我們在初始化函數中設置的是這樣分配的:

在這里插入圖片描述

??紅色5位,綠色6位,藍色5位

??很容易想到白色的RGB值就是0xffff,黑色是0x0000。其它還有幾個顏色的定義如下:


#define RED    0xf800

#define GREEN  0x07e0

#define BLUE   0x001f

#define YELLOW 0xffe0

#define WHITE  0xffff

#define BLACK  0x0000

#define PURPLE 0xf81f


??一定要注意,高位在前。有很多取色工具可以幫我們算出某個顏色的RGB值。


畫點、線、框

??前邊已經寫了確定點坐標的方法,畫點就十分簡單了:


/**

  * @brief 畫一個點

  * @param 點的橫縱坐標,點的顏色

  * @retval None

  */

void LCD_DrawPoint(u16 x,u16 y,u16 color)

{

LCD_SetXY(x,y);

LCD_WD_U16(color);

}


??畫線函數理論上來講就是調用多次畫點的函數。如果是橫平豎直的線,那十分簡單了。如果是斜線呢?那就需要考慮斜率了。由于像素是離散的,所以線上的點,我們只處理所謂的整數部分,代碼比較復雜,主要是因為整型變量處理四舍五入的小數部分稍微有點吃力。


/**

  * @brief 畫一條線

  * @param 線的起點與終點的橫縱坐標,顏色

* @note  可以畫斜線

  * @retval None

  */

void LCD_DrawLine(u16 x0, u16 y0,u16 x1, u16 y1,u16 Color)   

{

int dx,             // x軸上的距離

    dy,             // y軸上的距離

    dx2,            // 計算坐標的臨時變量

    dy2, 

    x_inc,          // inc表示點的“生長方向” x_inc>1代表從左向右

    y_inc,          // inc表示點的“生長方向” x_inc>1代表從上向下(左上角是坐標原點)

    error,          // 由于坐標點只有整數,是離散的不是連續的,需要變量用于四舍五入的計算

    index;         

LCD_SetXY(x0,y0);

dx = x1-x0;//計算x距離

dy = y1-y0;//計算y距離


if (dx>=0)

{

x_inc = 1;

}

else

{

x_inc = -1;

dx    = -dx;  

if (dy>=0)

{

y_inc = 1;

else

{

y_inc = -1;

dy    = -dy; 


dx2 = dx << 1; //相當于乘以2,如此一來,四舍五入的誤差就變成了不到1舍,大于1入

dy2 = dy << 1;


if (dx > dy)//x距離大于y距離,那么對于每個x軸上只有一個點,每個y軸可能只有半個點

{

error = dy2 - dx; 

for (index=0; index <= dx; index++)//要畫的點數不會超過x距離

{

LCD_DrawPoint(x0,y0,Color);

if (error >= 0) //如果error>0 說明真實的y的誤差>0.5了,實際上應該+1了

{

error-=dx2;

y0+=y_inc;//增加y坐標值

error+=dy2;

x0+=x_inc;//x坐標值每次畫點后都遞增1

}

else

{

error = dx2 - dy; 

for (index=0; index <= dy; index++)

{

LCD_DrawPoint(x0,y0,Color);

if (error >= 0)

{

error-=dy2;

x0+=x_inc;

error+=dx2;

y0+=y_inc;

}


??由于界面中,我們常常需要劃一個方框,或者稱之為“按鈕”,所以我又封裝了一個函數:


/**

  * @brief 畫一個方框,或者稱之為按鈕

  * @param 方框左上角和右下角的點的坐標,顏色

* @note  右邊和下邊的線自帶加粗效果  如需花在屏幕最邊緣無加粗效果

  * @retval None

  */

void LCD_DrawBTN(u16 x1,u16 y1,u16 x2,u16 y2,u16 Color)

{

LCD_DrawLine(x1,  y1,  x2,y1, Color); //H

LCD_DrawLine(x1,  y1,  x1,y2, Color); //V

LCD_DrawLine(x1+1,y2-1,x2,y2-1, Color);  //H 加粗 多畫一條線

LCD_DrawLine(x1,  y2,  x2,y2, Color);  //H

LCD_DrawLine(x2-1,y1+1,x2-1,y2, Color);  //V

  LCD_DrawLine(x2  ,y1  ,x2,y2, Color); //V

}


顯示純色背景與圖片

??我們已經做到了全屏顯示,那么純色背景的顯示就很簡單了:


/**

  * @brief 全屏顯示純色圖片,可用作清屏

  * @param 顏色

  * @retval None

  */

void LCD_BG_Color(u16 color)

{

int i=16384;//128*128

  Full_Screen();

while(i-->0)//不可使用無符號數據類型

LCD_WD_U16(color);

}


??一共有16384個像素,那就調用16384次畫點的程序。只不過這里我稍作了一點優化,不用再管點的坐標了,因為已經設置了顯示區域是全屏。

??我專門寫了一個函數,顯示各個純色圖片,可以看出有沒有那個像素點顏色顯示的不全:


/**

  * @brief LCD屏幕測試,依次顯示純色照片,可以看出屏幕的每一個像素點是否正常

  * @param 每種顏色持續的時間,單位ms 

  * @retval None

  */

void LCD_Test(u16 delay_Time)

{

LCD_BG_Color(BLACK);

HAL_Delay(delay_Time);

LCD_BG_Color(RED);

HAL_Delay(delay_Time);

LCD_BG_Color(GREEN);

HAL_Delay(delay_Time);

LCD_BG_Color(BLUE);

HAL_Delay(delay_Time);

LCD_BG_Color(WHITE);

HAL_Delay(delay_Time);

}


??顯示全屏幕的背景圖片跟純色背景思路類似,把數據的來源改為數組就好:


/**

  * @brief 在LCD屏幕中顯示一個全屏的背景圖片

  * @param 無

* @note  只適用于128*128的屏幕,為了效率把長度直接計算了出來

  *        由于圖片數組要放在ROM,所以用了const,因此要做強制類型轉化(u8 *)

*        如果是雙工,則收發需要同一個數組,數組不能放在ROM

  * @retval None

  */

void LCD_BG_Image(void)

{

uint32_t i=32768; //Z144_HEIGHT*Z144_WIDTH*2;

  Full_Screen();

LCD_WD_buf((u8 *)LCD_MOTOR,i);

}


??接下來就是指定區域顯示圖片了,函數也很簡單:


/**

  * @brief 按照指定的坐標顯示圖片

  * @param 圖片左上角的坐標與右下角的坐標,圖片地址

* @note  圖片大小與坐標必須對應

  *        由于圖片數組要放在ROM,所以用了const,因此要做強制類型轉化(u8 *)

*        坐標范圍[0,127]

  * @retval None

  */

void LCD_Show_Image(u16 x0, u16 y0,u16 x1,u16 y1,const unsigned char *p)

{

int i = (x1-x0)*(y1-y0)*2;

LCD_SetArea(x0,y0,x1,y1);

LCD_WD_buf((u8 *)p,i);

}


??那么圖片數組從哪里來?

??取模得到。我去網上隨便找了一張彩圖,然后把尺寸編輯為100* 100像素。取模軟件如下設置:

在這里插入圖片描述

??然后可以得到圖片轉化為的數組。

顯示文字與字符

??中文字符都采用GBK(或者說GB2312)編碼,英文字符采用ASCII碼。顯示文字其實與顯示圖片的原理是一樣一樣的,思路在我另一篇博客中介紹過。

??先說漢字的取模設置:

在這里插入圖片描述

??我使用了結構體儲存漢字,結構體的每個元素都包含文字(或者稱之為索引)和它對應的編碼。因此得到的數組要稍加修改,增加雙引號與漢字,例如北京:


//修改前

0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x44,0x04,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,

0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x42,0x1C,0x42,0xE4,0x42,0x44,0x3E,0x04,0x00,/*"北",4*/

0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,

0x10,0x10,0x1F,0xF0,0x01,0x00,0x11,0x10,0x11,0x08,0x21,0x04,0x45,0x04,0x02,0x00,/*"京",5*/

//修改后

"北",0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x44,0x04,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,

0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x42,0x1C,0x42,0xE4,0x42,0x44,0x3E,0x04,0x00,/*"北",4*/

"京",0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,

0x10,0x10,0x1F,0xF0,0x01,0x00,0x11,0x10,0x11,0x08,0x21,0x04,0x45,0x04,0x02,0x00,/*"京",5*/


??顯示的字符要先判斷是中文的還是英文的。英文字符的值小于128,顯示函數如下:


/**

  * @brief 輸出16*16的漢字或8*16的字符,函數可以自動識別是中文字符還是ASCII

  * @param 第一個字符的坐標,漢字顏色,背景顏色,需要顯示的字符串。背景顏色為0表示不畫背景

  * @retval None

  */

void LCD_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s)

{

unsigned char i,j;

unsigned short k,x0;

x0=x;

while(*s) 

{

if((*s) < 128)        //如果是ASCII碼,那么編號小于128

{

k=*s;

if (k==13)        //回車

{

x=x0;//記錄本行第一個字符的位置

y+=16;

}

else 

{

if (k>32) k-=32; else k=0;      //ASCII前32個都不是字符,除了回車,對顯示沒有影響,所以字庫不儲存

  for(i=0;i<16;i++)

{

for(j=0;j<8;j++) 

{

if(ASC16[k*16+i]&(0x80>>j)) //如有數據,畫字體  從高位到低位取出字符

[1] [2]
關鍵字:STM32  HAL庫  SPI驅動  TFTLCD 引用地址:STM32HAL庫使用SPI驅動1.44寸TFTLCD

上一篇:STM32自帶GB2312字庫顯示漢字
下一篇:STM32掌機教程9,完成掌機

推薦閱讀最新更新時間:2025-06-04 04:18

聯盛德 HLK-W806 (九): 軟件SPI和硬件SPI驅動ST7789V液晶LCD
ST7789介紹 ST7789/ST7789V/ST7789H2, 用于單片驅動262K色圖像TFT-LCD, 包含 720(240*3色) x 320 線輸出, 可以直接以SPI協議, 或者8位/9位/16位/18位并行連接外部控制器. 顯示數據存儲在片內 240x320x18 bits內存中, 顯示內存的讀寫不需要外部時鐘驅動. ST7789有 ST7789, ST7789V, ST7789H2等型號, 分辨率有240x204, 240x240, 240x320等多種類型, 驅動方式都是一樣的. 接線 ST7789的接線有7針/8針和兼容并口的40針, 會比ST7735多一些, 一部分是用于背光LED, 因為顯示
[單片機]
聯盛德 HLK-W806 (九): 軟件<font color='red'>SPI</font>和硬件<font color='red'>SPI</font><font color='red'>驅動</font>ST7789V液晶LCD
AT90S8515單片機SPI驅動74LS595源程序
AT90S8515使用SPI驅動74LS595。 我這里使用了SS口線PB.4,作為74LS595的鎖存信號,關鍵是把PB.4設置為輸出。 74LS595驅動發光管顯示加1計數,我用SPI最高速度,所以顯示16位計數高八位,低八位太快,看不清楚。 單片機源程序如下: //ICC-AVR application builder : 2020/3/30 22:23:31 // Target : 8515 // Crystal: 8.0000Mhz #include io8515v.h #include macros.h #define SS_ON PORTB |= BIT(4); //E置1 #define SS
[單片機]
AT90S8515單片機<font color='red'>SPI</font><font color='red'>驅動</font>74LS595源程序
stm32f7 HAL庫 串口重定向 使用printf
首先將串口初始化,然后添加重定向代碼 下面使用的是串口三,因此以串口三為例: UART_HandleTypeDef huart3; #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int
[單片機]
基于stm32的多功能時鐘5——LCD12864庫函數的建立
在上一章中,小編實現了多功能時鐘的測距功能。在這一章中,小編本來打算介紹人機交互界面的設計。但是,后來還是想了一下,先將LCD庫函數建立起來,因為真正的技術重點在這里。至于UI的設計,咱們將在下一章介紹。但至于UI設計的美觀程度,我只能盡力而為,畢竟咱們的LCD12864液晶分別率只有128*64,而且是單色的,先天不足。 1.模塊介紹 LCD12864液晶顯示屏 液晶顯示器種類很多,本人目前用過LCD1602、LCD12864、Nokia5110等,還有些比如TFT彩屏,OLED都沒有用過。而此塊LCD12864是一款基于ST7567的128*64的1.7英寸的圖形點陣式液晶。而LCD12864液晶有的可以
[單片機]
STM32之如何封裝自己的lib庫
似乎stm32剛開始出來的時候就是用的l.ib庫,后來就開源了。 網上看了一些網友做的lib庫,自己也弄了一下,其實也挺簡單。 以下封裝lib庫都是基于stm32的3.0固件庫 1、打開一個工程,將除固件庫以外的其他文件刪掉,如下: 2、在option下進行設置,如下: 來個特寫: 3、將編譯好的lib庫拷貝到另外一個工程,添加進去,并將工程下庫的c文件全部刪除(h文件必須保留) 4、編譯,如下: 注意,只需將stm32_lib_30.lib文件add進去就可以了,沒必要在主文件里面include之類的。 否則編譯的時候就會出錯(重復包含),如下:
[單片機]
<font color='red'>STM32</font>之如何封裝自己的lib庫
ubuntu環境搭建stm32開發環境
ubuntu環境下stm32開發環境搭建過程記錄. 1. 安裝JDK sudo apt-get install openjdk-6-jre-headless 2. 安裝eclipse 先從網址:下載安裝包eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz. 以下命令安裝 sudo tar xf eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz -C /opt/ 啟動eclipse后安裝gnuarmeclipse插件 cd /opt/eclipse ./eclipse Help → Install New Software… → Add…
[單片機]
ubuntu環境搭建<font color='red'>stm32</font>開發環境
求一種基于STM32的智能加油系統設計方案
畢設介紹 針對當前汽車加油需求的日益增多,基于STM32開發技術和傳感器技術開發一款智能加油系統。 題目要求 智能加油系統應具備油量控制、根據油費計價、加油環境檢測的功能。該系統能模擬汽車加油的全過程,并具備遠程控制功能。 題目分析 本次畢業設計是智能加油系統的設計與實現,設計所包含的模塊主要有oled顯示電路、電磁閥驅動電路、可燃氣體傳感器模塊、ds18b20數字溫度傳感器、蜂鳴器報警模塊、WIFI模塊、按鍵電路模塊及電源模塊。 通過模塊之間的配合實現智能加油系統,一旦有溫度異常或可燃氣體濃度超標將會通過wifi模塊對管理人員發出警告。 stm32f103c8t6實時采集ds18b20溫度傳感器獲取溫度,如果溫度
[單片機]
求一種基于<font color='red'>STM32</font>的智能加油系統設計方案
利用Simulink自動生成STM32串口代碼
功能:利用Simulink自動生成STM32串口代碼,在Keil中編譯后直接下載到主芯片,實現串口通訊的功能。 在STM32CubeMX里配置引腳功能和時鐘等參數; 在Simulink里拖入相關模塊; 打開STM32MatTarget的安裝路徑,默認安裝路徑為C:MATLABSTM32-MATSTM32,找到STM32demos(注:這里面為官方demos,網上很多資料都是這些內容),找到Test,選擇里面的USART,隨便找到一個例子打開,將里面的S函數RcvUsartBuff復制到新建的工程中 在NB2Send端口輸入要傳輸的字符個數,Data2Send為傳輸的數據的地址,buff為要傳輸的數據,打開S函數如下所示
[單片機]
利用Simulink自動生成<font color='red'>STM32</font>串口代碼
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

隨便看看

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 皮山县| 乌兰县| 嵩明县| 贵南县| 济南市| 台安县| 和田县| 安国市| 常熟市| 章丘市| 昭平县| 行唐县| 扶绥县| 筠连县| 琼结县| 华坪县| 岚皋县| 谷城县| 花垣县| 兖州市| 高台县| 木里| 房山区| 翁源县| 休宁县| 威宁| 宾川县| 蕉岭县| 巴中市| 合肥市| 邯郸县| 于田县| 安吉县| 张掖市| 临邑县| 黎城县| 安岳县| 恭城| 湘潭市| 陵水| 龙岩市|