找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3222|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于AT32F403A開發(fā)板的2.2'彩色TFT屏顯示驅(qū)動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:776997 發(fā)表于 2020-10-14 20:52 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
為了對(duì)得起AT32F403A那豐富的存儲(chǔ)資源,這次為它配上一個(gè)2.2'彩色TFT屏,該顯示屏采用SPI接口,故將I2C接口和SPI接口聯(lián)合起來(lái)驅(qū)動(dòng)它。
                              

圖1 接口資源
相關(guān)引腳輸出高低電平的引腳定義為:
  1. #define LCD_CS_High()    GPIO_SetBits(GPIOB, GPIO_Pins_13)
  2. #define LCD_CS_Low()     GPIO_ResetBits(GPIOB, GPIO_Pins_13) //CS

  3. #define LCD_REST_High()  GPIO_SetBits(GPIOB, GPIO_Pins_11)
  4. #define LCD_REST_Low()   GPIO_ResetBits(GPIOB, GPIO_Pins_11) //RES

  5. #define LCD_DC_High()    GPIO_SetBits(GPIOB, GPIO_Pins_12)
  6. #define LCD_DC_Low()     GPIO_ResetBits(GPIOB, GPIO_Pins_12) //DC

  7. #define LCD_SDI_High()   GPIO_SetBits(GPIOB, GPIO_Pins_9)
  8. #define LCD_SDI_Low()    GPIO_ResetBits(GPIOB, GPIO_Pins_9)//SDI

  9. #define LCD_SCK_High()   GPIO_SetBits(GPIOB, GPIO_Pins_8)
  10. #define LCD_SCK_Low()    GPIO_ResetBits(GPIOB, GPIO_Pins_8)//SCK

  11. #define LCD_LED_High()   GPIO_SetBits(GPIOB, GPIO_Pins_14)
  12. #define LCD_LED_Low()    GPIO_ResetBits(GPIOB, GPIO_Pins_14) //BLK
復(fù)制代碼
由于與前面介紹的彩色OLED屏所用的引腳位置一致,一個(gè)奇異的現(xiàn)象出現(xiàn)了,等待程序下載的顯示屏竟顯示內(nèi)容,見圖2~圖4所示。
OLED屏的程序竟能驅(qū)動(dòng)TFT屏,而且圖像完整,只不過(guò)顯示的內(nèi)容是鏡像的,且顏色互補(bǔ)。
是不是很神奇!



圖5 原OLED屏顯示效果
在更新程序后,使用紅色進(jìn)行清屏后的效果如圖6所示。

圖6  紅色清屏效果
該2.2寸TFT彩屏的初始化函數(shù)為:
  1. void tft_Init(void)
  2. {
  3.     LCD_REST_Low();  //Lcd_Reset()
  4.      Delay_ms(20);    //delay_ms(20);
  5.     LCD_REST_High();
  6.     Delay_ms(20);
  7.     LCD_CS_Low();
  8.     LCD_WR_REG(0xCB);  //Lcd_WriteIndex(0xCB);
  9.     LCD_WR_DATA8(0x39);//Lcd_WriteData(0x39);
  10.     LCD_WR_DATA8(0x2C);
  11.     LCD_WR_DATA8(0x00);
  12.     LCD_WR_DATA8(0x34);
  13.     LCD_WR_DATA8(0x02);
  14.     LCD_WR_REG(0xCF);
  15.     LCD_WR_DATA8(0x00);
  16.     LCD_WR_DATA8(0XC1);
  17.     LCD_WR_DATA8(0X30);
  18.     LCD_WR_REG(0xE8);
  19.     LCD_WR_DATA8(0x85);
  20.     LCD_WR_DATA8(0x00);
  21.     LCD_WR_DATA8(0x78);
  22.     LCD_WR_REG(0xEA);
  23.     LCD_WR_DATA8(0x00);
  24.     LCD_WR_DATA8(0x00);
  25.     LCD_WR_REG(0xED);
  26.     LCD_WR_DATA8(0x64);
  27.     LCD_WR_DATA8(0x03);
  28.     LCD_WR_DATA8(0X12);
  29.     LCD_WR_DATA8(0X81);
  30.     LCD_WR_REG(0xF7);
  31.     LCD_WR_DATA8(0x20);
  32.     LCD_WR_REG(0xC0);     //Power control
  33.     LCD_WR_DATA8(0x23);   //VRH[5:0]
  34.     LCD_WR_REG(0xC1);     //Power control
  35.     LCD_WR_DATA8(0x10);   //SAP[2:0];BT[3:0]
  36.     LCD_WR_REG(0xC5);     //VCM control
  37.     LCD_WR_DATA8(0x3e);   //?????
  38.     LCD_WR_DATA8(0x28);
  39.     LCD_WR_REG(0xC7);     //VCM control2
  40.     LCD_WR_DATA8(0x86);
  41.     LCD_WR_REG(0x36);     // Memory Access Control
  42.     LCD_WR_DATA8(0x48);
  43.     LCD_WR_REG(0x3A);
  44.     LCD_WR_DATA8(0x55);
  45.     LCD_WR_REG(0xB1);
  46.     LCD_WR_DATA8(0x00);
  47.     LCD_WR_DATA8(0x18);
  48.     LCD_WR_REG(0xB6);    // Display Function Control
  49.     LCD_WR_DATA8(0x08);
  50.     LCD_WR_DATA8(0x82);
  51.     LCD_WR_DATA8(0x27);
  52.     LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  53.     LCD_WR_DATA8(0x00);
  54.     LCD_WR_REG(0x26);    //Gamma curve selected
  55.     LCD_WR_DATA8(0x01);
  56.     LCD_WR_REG(0xE0);    //Set Gamma
  57.     LCD_WR_DATA8(0x0F);
  58.     LCD_WR_DATA8(0x31);
  59.     LCD_WR_DATA8(0x2B);
  60.     LCD_WR_DATA8(0x0C);
  61.     LCD_WR_DATA8(0x0E);
  62.     LCD_WR_DATA8(0x08);
  63.     LCD_WR_DATA8(0x4E);
  64.     LCD_WR_DATA8(0xF1);
  65.     LCD_WR_DATA8(0x37);
  66.     LCD_WR_DATA8(0x07);
  67.     LCD_WR_DATA8(0x10);
  68.     LCD_WR_DATA8(0x03);
  69.     LCD_WR_DATA8(0x0E);
  70.     LCD_WR_DATA8(0x09);
  71.     LCD_WR_DATA8(0x00);
  72.     LCD_WR_REG(0XE1);    //Set Gamma
  73.     LCD_WR_DATA8(0x00);
  74.     LCD_WR_DATA8(0x0E);
  75.     LCD_WR_DATA8(0x14);
  76.     LCD_WR_DATA8(0x03);
  77.     LCD_WR_DATA8(0x11);
  78.     LCD_WR_DATA8(0x07);
  79.     LCD_WR_DATA8(0x31);
  80.     LCD_WR_DATA8(0xC1);
  81.     LCD_WR_DATA8(0x48);
  82.     LCD_WR_DATA8(0x08);
  83.     LCD_WR_DATA8(0x0F);
  84.     LCD_WR_DATA8(0x0C);
  85.     LCD_WR_DATA8(0x31);
  86.     LCD_WR_DATA8(0x36);
  87.     LCD_WR_DATA8(0x0F);
  88.     LCD_WR_REG(0x11);    //Exit Sleep
  89.     Delay_ms(120);
  90.     LCD_WR_REG(0x29);    //Display on
  91.     LCD_WR_REG(0x2c);
  92. }
復(fù)制代碼

它的色彩清屏函數(shù)為:
  1. void LCD_Clear(unsigned int Color)
  2. {
  3.       char VH,VL;   // LCD_W= 240   LCD_H =320
  4.       unsigned int i,j;
  5.       VH=Color>>8;
  6.       VL=Color;
  7.       Address_set(0,0,LCD_W-1,LCD_H-1);
  8.       for(i=0;i<LCD_W;i++)
  9.       {
  10.           for (j=0;j<LCD_H;j++)
  11.           {
  12.               LCD_WR_DATA8(VH);
  13.               LCD_WR_DATA8(VL);  
  14.          }
  15.      }
復(fù)制代碼
在制備了圖標(biāo)文件后,所制作的界面效果如圖7所示。
圖7 圖標(biāo)化操作界面
在利用板上按鍵的情況下,可控制功能的選擇處理。按鍵的原理圖見圖8所示,
讀取引腳的語(yǔ)句為:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pins_0);
GPIO_ReadInputDataBit(GPIOC,GPIO_Pins_13);

圖8 按鍵原理圖

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表