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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2788|回復: 0
打印 上一主題 下一主題
收起左側

TFT1.8_SPI代碼移植到STM32

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include "TFT.h"
  2. #include "stdlib.h"  //函數調用頭文件
  3. #include "stdio.h"   //為了解除sprintf警告
  4. //TFT1.8 引腳
  5. #define LCD_RST                PDout(0)
  6. #define LCD_DC                PDout(1)
  7. #define LCD_SDA                PDout(2)   
  8. #define LCD_SCL                PDout(3)
  9. #define LCD_CS          PDout(4)


  10. /*!
  11.   * @brief    不精確延時
  12.   *
  13.   * @param   
  14.   *
  15.   * @return   
  16.   *
  17.   * @note     
  18.   *
  19.   * @example  
  20.   *
  21.   * @date     2019/8/6 星期二
  22.   */
  23. void tft_delayms(int ms)
  24. {
  25.     volatile uint32_t i = 0;
  26.         while(ms--)
  27.         {
  28.                 for (i = 0; i < 1000; ++i)
  29.                 {
  30.                         __asm("NOP"); /* delay */
  31.                 }
  32.         }
  33. }


  34. /**********************************************************
  35. 函數名稱:TFTSPI_init()
  36. 入口參數: 0:橫屏  1:豎屏
  37. 出口參數:無
  38. 時間:2018/1/26
  39. 功能說明:器件初始化
  40. 其他說明:無
  41. **********************************************************/
  42. void TFTSPI_Init(uint8_t type)
  43. {        
  44.   //-----端口初始化----//
  45.         GPIO_InitTypeDef  GPIO_InitStructure;
  46.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);   //使能PD端口時鐘

  47.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;       
  48.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  49.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  50.         GPIO_Init(GPIOD, &GPIO_InitStructure);       
  51.         GPIO_ResetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);        
  52.   
  53.   LCD_RST=0;
  54.   tft_delayms(50);                  
  55.   LCD_RST=1;
  56.   tft_delayms(50);   
  57.   TFTSPI_Write_Cmd(0x11);                                 //關閉睡眠,振蕩器工作
  58.   tft_delayms(10);  
  59.   TFTSPI_Write_Cmd(0x3a);                                 //每次傳送16位數據(VIPF3-0=0101),每個像素16位(IFPF2-0=101)
  60.   TFTSPI_Write_Byte(0x55);       
  61.   TFTSPI_Write_Cmd(0x26);                                
  62.   TFTSPI_Write_Byte(0x04);  
  63.   TFTSPI_Write_Cmd(0xf2);                              //Driver Output Control(1)
  64.   TFTSPI_Write_Byte(0x01);  
  65.   TFTSPI_Write_Cmd(0xe0);                              //Driver Output Control(1)
  66.   TFTSPI_Write_Byte(0x3f);
  67.   TFTSPI_Write_Byte(0x25);
  68.   TFTSPI_Write_Byte(0x1c);
  69.   TFTSPI_Write_Byte(0x1e);
  70.   TFTSPI_Write_Byte(0x20);
  71.   TFTSPI_Write_Byte(0x12);
  72.   TFTSPI_Write_Byte(0x2a);
  73.   TFTSPI_Write_Byte(0x90);
  74.   TFTSPI_Write_Byte(0x24);
  75.   TFTSPI_Write_Byte(0x11);
  76.   TFTSPI_Write_Byte(0x00);
  77.   TFTSPI_Write_Byte(0x00);
  78.   TFTSPI_Write_Byte(0x00);
  79.   TFTSPI_Write_Byte(0x00);
  80.   TFTSPI_Write_Byte(0x00);  
  81.   TFTSPI_Write_Cmd(0xe1);              //Driver Output Control(1)
  82.   TFTSPI_Write_Byte(0x20);
  83.   TFTSPI_Write_Byte(0x20);
  84.   TFTSPI_Write_Byte(0x20);
  85.   TFTSPI_Write_Byte(0x20);
  86.   TFTSPI_Write_Byte(0x05);
  87.   TFTSPI_Write_Byte(0x00);
  88.   TFTSPI_Write_Byte(0x15);
  89.   TFTSPI_Write_Byte(0xa7);
  90.   TFTSPI_Write_Byte(0x3d);
  91.   TFTSPI_Write_Byte(0x18);
  92.   TFTSPI_Write_Byte(0x25);
  93.   TFTSPI_Write_Byte(0x2a);
  94.   TFTSPI_Write_Byte(0x2b);
  95.   TFTSPI_Write_Byte(0x2b);  
  96.   TFTSPI_Write_Byte(0x3a);   
  97.   TFTSPI_Write_Cmd(0xb1);      //0xb1              //設置屏幕刷新頻率
  98.   TFTSPI_Write_Byte(0x00);     //0x08                //DIVA=8
  99.   TFTSPI_Write_Byte(0x00);            //0x08                //VPA =8,約90Hz  
  100.   TFTSPI_Write_Cmd(0xb4);                      //LCD Driveing control
  101.   TFTSPI_Write_Byte(0x07);                        //NLA=1,NLB=1,NLC=1  
  102.   TFTSPI_Write_Cmd(0xc0);              //LCD Driveing control  Power_Control1
  103.   TFTSPI_Write_Byte(0x0a);   
  104.   TFTSPI_Write_Byte(0x02);  
  105.   TFTSPI_Write_Cmd(0xc1);              //LCD Driveing control
  106.   TFTSPI_Write_Byte(0x02);  
  107.   TFTSPI_Write_Cmd(0xc5);              //LCD Driveing control
  108.   TFTSPI_Write_Byte(0x4f);
  109.   TFTSPI_Write_Byte(0x5a);  
  110.   TFTSPI_Write_Cmd(0xc7);              //LCD Driveing control
  111.   TFTSPI_Write_Byte(0x40);  
  112.   TFTSPI_Write_Cmd(0x2a);              //配置MCU可操作的LCD內部RAM橫坐標起始、結束參數
  113.   TFTSPI_Write_Byte(0x00);                //橫坐標起始地址0x0000
  114.   TFTSPI_Write_Byte(0x00);                               
  115.   TFTSPI_Write_Byte(0x00);                //橫坐標結束地址0x007f(127)
  116.   TFTSPI_Write_Byte(0xa8);                //7f  
  117.   TFTSPI_Write_Cmd(0x2b);              //配置MCU可操作的LCD內部RAM縱坐標起始結束參數
  118.   TFTSPI_Write_Byte(0x00);                //縱坐標起始地址0x0000
  119.   TFTSPI_Write_Byte(0x00);
  120.   TFTSPI_Write_Byte(0x00);                //縱坐標結束地址0x009f(159)  
  121.   TFTSPI_Write_Byte(0xb3);                //9f  
  122.   TFTSPI_Write_Cmd(0x36);              //配置MPU和DDRAM對應關系
  123.   if(type)
  124.   TFTSPI_Write_Byte(0xC0);                //豎屏顯示          //MX=1,MY=1
  125.   else
  126.   TFTSPI_Write_Byte(0xA0);                      //橫屏顯示
  127.   
  128.   TFTSPI_Write_Cmd(0xb7);              //LCD Driveing control
  129.   TFTSPI_Write_Byte(0x00);                //CRL=0  
  130.   TFTSPI_Write_Cmd(0x29);                   //開啟屏幕顯示
  131.   TFTSPI_Write_Cmd(0x2c);                   //設置為LCD接收數據/命令模式  
  132. }
  133. void tft18delay_1us(unsigned int Del)                //
  134. {
  135.   int i;
  136.   while(Del--)
  137.   {       
  138.     for(i=0;i<3;i++) __asm("NOP");
  139.   }
  140. }
  141. /******************DRIVE IC寄存器尋址 8080 SERIES*******************************/
  142. void TFTSPI_Write_Cmd(uint8_t cmd)
  143. {
  144.   uint8_t i;
  145.   
  146.   LCD_DC=0;// A0=0 ILI9163_A0=0;         //A0=0發送命令  
  147.   for(i=0;i<8;i++)
  148.   {
  149.     LCD_SCL=0;//tft18delay_1us(1);        // SCK=0  ILI9163_SCK=0;
  150.     if(cmd&0x80){LCD_SDA=1;}// SDI=1
  151.     else{LCD_SDA=0;}// SDI=0
  152.     LCD_SCL=1;//tft18delay_1us(1);        // SCK=1  ILI9163_SCK = 1;
  153.     cmd = (cmd<<1);
  154.   }
  155. }

  156. /*****************DRIVE IC寄存器寫數據 8080 SERIES******************************/
  157. void TFTSPI_Write_Byte(uint8_t dat)
  158. {  
  159.   uint8_t i;
  160.   
  161.   LCD_DC=1;// A0=1  ILI9163_A0=1;                  //A0=1發送數據                                 
  162.   for(i=0;i<8;i++)
  163.   {
  164.     LCD_SCL=0;//tft18delay_1us(1);        // SCK=0  ILI9163_SCK=0;             
  165.     if(dat&0x80){LCD_SDA=1;}// SDI=1
  166.     else{LCD_SDA=0;}// SDI=0            
  167.     LCD_SCL=1;//tft18delay_1us(1);        // SCK=1 ILI9163_SCK = 1;
  168.     dat = (dat<<1);   
  169.   }
  170. }

  171. /****************DRIVE IC GDRAM 寫數據 16BITS 8080 SERIES*****************************/
  172. void TFTSPI_Write_Word(uint16_t dat)
  173. {                   
  174.   uint8_t i;
  175.   
  176.   LCD_DC=1;// A0=1  ILI9163_A0=1;       
  177.   
  178.   for(i=0;i<16;i++)
  179.   {
  180.     LCD_SCL=0;//tft18delay_1us(1);        // SCK=0  ILI9163_SCK=0;  
  181.     if(dat&0x8000){ LCD_SDA=1;}// SDI=1
  182.     else{LCD_SDA=0;}// SDI=0
  183.     LCD_SCL=1;//tft18delay_1us(1);        // SCK=1  ILI9163_SCK=1;
  184.     dat<<=1;   
  185.   }  
  186. }

  187. /**********************************************************
  188. 函數名稱:TFTSPI_Set_Pos()
  189. 入口參數:起始終止坐標
  190. 出口參數:無
  191. 時間:2018/1/26
  192. 功能說明:重新定位輸入信息位置
  193. 其他說明:無
  194. **********************************************************/
  195. void TFTSPI_Set_Pos(uint8_t xs,uint8_t ys,uint8_t xe,uint8_t ye)
  196. {
  197.   TFTSPI_Write_Cmd(0x2A);              //Colulm addRSTs set
  198.   TFTSPI_Write_Byte(0x00);                //行起始坐標高8位,始終為零
  199.   TFTSPI_Write_Byte(xs);                        //行起始坐標低8位
  200.   TFTSPI_Write_Byte(0x00);                //行終止坐標高8位,始終為零
  201.   TFTSPI_Write_Byte(xe);                        //行終止坐標低8位  
  202.   TFTSPI_Write_Cmd(0x2B);              //Colulm addRSTs set
  203.   TFTSPI_Write_Byte(0x00);                //列起始坐標高8位,始終為零
  204.   TFTSPI_Write_Byte(ys);                        //列起始坐標低8位
  205.   TFTSPI_Write_Byte(0x00);                //列終止坐標高8位,始終為零
  206.   TFTSPI_Write_Byte(ye);                        //列終止坐標低8位  
  207.   TFTSPI_Write_Cmd(0x2C);              //GRAM接收MCU數據或命令
  208. }

  209. /**********************************************************
  210. 函數名稱:TFTSPI_Addr_Rst()
  211. 入口參數:無
  212. 出口參數:無
  213. 時間:2018/1/26
  214. 功能說明:重置地址
  215. 其他說明:無
  216. **********************************************************/
  217. void TFTSPI_Addr_Rst(void)
  218. {
  219.   TFTSPI_Write_Cmd(0x2a);     //配置MCU可操作的LCD內部RAM橫坐標起始、結束參數
  220.   TFTSPI_Write_Byte(0x00);       //橫坐標起始地址0x0000
  221.   TFTSPI_Write_Byte(0x00);                                       
  222.   TFTSPI_Write_Byte(0x00);       //橫坐標結束地址0x007f(127)
  223.   TFTSPI_Write_Byte(0xa8);       //7f  
  224.   TFTSPI_Write_Cmd(0x2b);     //配置MCU可操作的LCD內部RAM縱坐標起始結束參數
  225.   TFTSPI_Write_Byte(0x00);       //縱坐標起始地址0x0000
  226.   TFTSPI_Write_Byte(0x00);
  227.   TFTSPI_Write_Byte(0x00);       //縱坐標結束地址0x009f(159)
  228.   TFTSPI_Write_Byte(0xb3);       //9f  
  229.   TFTSPI_Write_Cmd(0x2C);     //GRAM接收MCU數據或命令
  230. }

  231. /*從第幾列開始填充某一行
  232. 例:TFTSPI_Show_line(0,5,WHITE);  //填充第五行
  233. TFTSPI_Show_line(2,5,WHITE);  //從第二個字符開始填充第五行  
  234. */
  235. void TFTSPI_Show_Line(uint8_t xs,uint8_t ys,uint16_t color)
  236. {
  237.   unsigned int i,j;
  238.   
  239.   //TFTSPI_Addr_Rst();
  240.   //填充行
  241.   TFTSPI_Set_Pos(xs*8,ys*16,TFT18W,(ys+1)*16);
  242.   for(i=0;i<TFT18W;i++)      //160
  243.   {
  244.     for(j=0;j<TFT18H;j++)
  245.     {
  246.       TFTSPI_Write_Word(color);
  247.     }
  248.   }
  249. }

  250. /*
  251. 【功能】 填充指定區域
  252. 【參數】 起始點x坐標,起始點y坐標,終止點x坐標,終止點有坐標,填充色
  253. 例:TFTSPI_Show_line(0,5,WHITE);  //填充第五行
  254. TFTSPI_Show_line(2,5,WHITE);  //從第二個字符開始填充第五行
  255. */
  256. void TFTSPI_Fill_Area(uint8_t xs,uint8_t ys,uint8_t xe,uint8_t ye,uint16_t color)
  257. {
  258.   unsigned int i,j;
  259.   
  260.   TFTSPI_Set_Pos(xs,ys,xe,ye);
  261.   for(i=0;i<(xe-xs);i++)  
  262.   {
  263.     for(j=0;j<(ye-ys);j++)
  264.     {
  265.       TFTSPI_Write_Word(color);
  266.     }
  267.   }
  268. }

  269. /**********************************************************
  270. 函數名稱:TFTSPI_CLS()
  271. 入口參數:color為常用的需要顯示的顏色(已經提前定義),color為
  272. NULL時,則可將不常用顏色放入dat中加以顯示
  273. 出口參數:無
  274. 時間:2012-09-09
  275. 功能說明:全屏顯示單色畫面
  276. 其他說明:無
  277. **********************************************************/
  278. void TFTSPI_CLS(uint16_t color)
  279. {
  280.   unsigned int i,j;
  281.   
  282.   TFTSPI_Addr_Rst();
  283.   
  284.   for(i=0;i<TFT18W;i++)      //160
  285.   {
  286.     for(j=0;j<TFT18H;j++)
  287.     {
  288.       TFTSPI_Write_Word(color);
  289.     }
  290.   }
  291. }

  292. /**********************************************************
  293. 函數名稱:TFTSPI_Draw_part()
  294. 入口參數:起始、終止橫坐標(0-127),縱坐標(0-159),顯示顏色uint16
  295. 出口參數:無
  296. 時間:2012-09-09
  297. 功能說明:填充矩形區域
  298. 其他說明:0<=xs<xe<=127
  299. 0<=ys<ye<=159
  300. **********************************************************/
  301. void TFTSPI_Draw_Part(uint8_t xs,uint8_t ys,uint8_t xe,uint8_t ye,uint16_t color_dat)
  302. {
  303.   uint8_t i,j;
  304.   
  305.   TFTSPI_Set_Pos(xs,ys,xe,ye);       
  306.   for(j=0;j<(ye-ys+1);j++)
  307.   {
  308.     for(i=0;i<(xe-xs+1);i++)
  309.     {
  310.       TFTSPI_Write_Word(color_dat);
  311.     }
  312.   }   
  313. }

  314. /**********************************************************
  315. 函數名稱:TFTSPI_Draw_rectangle()
  316. 入口參數:起始、終止橫坐標(0-127),縱坐標(0-159),顯示顏色uint16
  317. 出口參數:無
  318. 時間:2012-09-09
  319. 功能說明:畫矩形邊框
  320. 其他說明:0<=xs<xe<=127
  321. 0<=ys<ye<=159
  322. **********************************************************/
  323. void TFTSPI_Draw_Rectangle(uint8_t xs,uint8_t ys,uint8_t xe,uint8_t ye,uint16_t color_dat)
  324. {
  325.   TFTSPI_Draw_Line(xs,ys,xs,ye,color_dat);          //畫矩形左邊
  326.   TFTSPI_Draw_Line(xe,ys,xe,ye,color_dat);          //畫矩形右邊
  327.   TFTSPI_Draw_Line(xs,ys,xe,ys,color_dat);          //畫矩形上邊
  328.   TFTSPI_Draw_Line(xs,ye,xe,ye,color_dat);          //畫矩形下邊
  329. }

  330. /**********************************************************
  331. 函數名稱:TFTSPI_Draw_circle()
  332. 入口參數:圓心橫坐標(0-127),縱坐標(0-159),半徑(0-128),顯示顏色uint16
  333. 出口參數:無
  334. 時間:2012-09-09
  335. 功能說明:畫圓形邊框(僅支持屏幕內畫圓)
  336. 其他說明:0<=x<=127
  337. 0<=y<=159
  338. **********************************************************/
  339. void TFTSPI_Draw_Circle(uint8_t x,uint8_t y,uint8_t r,uint16_t color_dat)
  340. {
  341.   unsigned char dx, dy = r;
  342.   
  343.   if((x>=r) &&((TFT18W-x)>=r) && (y>=r) && ((TFT18H-y)>=r))                //確定所畫圓在屏幕范圍內,沒有超出最外邊,(暫不支持與屏幕邊相交)
  344.   {
  345.     for(dx = 0; dx <= r; dx++)
  346.     {
  347.       while((r * r + 1 - dx * dx) < (dy * dy)) dy--;
  348.       TFTSPI_Draw_Dot(x + dx, y - dy, color_dat);
  349.       TFTSPI_Draw_Dot(x - dx, y - dy, color_dat);
  350.       TFTSPI_Draw_Dot(x - dx, y + dy, color_dat);
  351.       TFTSPI_Draw_Dot(x + dx, y + dy, color_dat);
  352.       
  353.       TFTSPI_Draw_Dot(x + dy, y - dx, color_dat);
  354.       TFTSPI_Draw_Dot(x - dy, y - dx, color_dat);
  355.       TFTSPI_Draw_Dot(x - dy, y + dx, color_dat);
  356.       TFTSPI_Draw_Dot(x + dy, y + dx, color_dat);
  357.     }
  358.   }
  359. }


  360. /**********************************************************
  361. 函數名稱:TFTSPI_Draw_line()
  362. 入口參數:起始、終止橫坐標(0-127),縱坐標(0-159),顯示顏色uint16
  363. 出口參數:無
  364. 時間:2012-09-09
  365. 功能說明:畫直線
  366. 其他說明:0<=xs<xe<=127
  367. 0<=ys<ye<=159
  368. **********************************************************/
  369. void TFTSPI_Draw_Line(uint8_t xs,uint8_t ys,uint8_t xe,uint8_t ye,uint16_t color_dat)
  370. {
  371.   uint8_t i,ds;
  372.   int dx,dy,inc_x, inc_y;
  373.   int xerr = 0, yerr = 0;                                        //初始化變量
  374.   
  375.   if(xs==xe)                                                          //如果是畫垂直線則只需對豎直坐標計數
  376.   {
  377.     TFTSPI_Set_Pos(xs,ys,xe,ye);
  378.     for(i=0;i<(ye-ys+1);i++)
  379.     {
  380.       TFTSPI_Write_Word(color_dat);
  381.     }
  382.   }
  383.   else if(ys==ye)                                                //如果是水平線則只需要對水平坐標計數
  384.   {
  385.     TFTSPI_Set_Pos(xs,ys,xe,ye);
  386.     for(i=0;i<(xe-xs+1);i++)
  387.     {
  388.       TFTSPI_Write_Word(color_dat);
  389.     }
  390.   }
  391.   else                                                                //如果是斜線,則重新計算,使用畫點函數畫出直線
  392.   {
  393.     dx = xe - xs;                                                //計算坐標增量
  394.     dy = ye - ys;
  395.    
  396.     if(dx > 0) inc_x = 1;                                        //設置單步方向
  397.     else
  398.     {
  399.       inc_x = -1; dx = -dx;
  400.     }
  401.     if(dy > 0) inc_y = 1;                                        //設置單步方向
  402.     else
  403.     {
  404.       inc_y = -1; dy = -dy;
  405.     }
  406.    
  407.     if(dx > dy) ds = dx;                                        //選取基本增量坐標軸
  408.     else                ds = dy;
  409.    
  410. ……………………

  411. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
TFT1.8_SPI代碼移植到STM32.7z (189.33 KB, 下載次數: 25)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频免费在线 | 天天久久 | 国产精品成人品 | 亚洲综合大片69999 | 自拍偷拍小视频 | 日日摸日日爽 | 国产农村妇女毛片精品久久麻豆 | 欧美888| 久久国产精品偷 | 麻豆视频在线看 | 别c我啊嗯国产av一毛片 | 国产999精品久久久久久 | 成人在线h| 亚洲v日韩v综合v精品v | 日韩中文字幕 | 久久国产精品一区二区三区 | 男女啪啪高潮无遮挡免费动态 | 亚洲精品一区中文字幕 | 国产第1页 | 91精品一区 | 噜噜噜噜狠狠狠7777视频 | 久久久久久av| 中文字幕一区二区三区乱码在线 | 成人免费共享视频 | 区一区二在线观看 | 亚州综合在线 | 九九热在线视频观看这里只有精品 | 国产精品一区二区福利视频 | 男人av在线| 精品无码久久久久久国产 | 国产午夜精品福利 | 亚洲视频中文字幕 | 一本一道久久a久久精品综合 | 亚洲性人人天天夜夜摸 | 99精品国产一区二区三区 | 亚洲欧美激情网 | 亚洲精品国产第一综合99久久 | 国产91丝袜| 国产二区在线播放 | 亚洲黄色在线免费观看 | 日韩综合一区 |