久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
ST7735的非阻塞模式顯示
[打印本頁(yè)]
作者:
pmasonrose
時(shí)間:
2018-12-1 13:07
標(biāo)題:
ST7735的非阻塞模式顯示
#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
u16 ColorS[14]={WHITE,BLUE,BRED,GRED,GBLUE,RED,MAGENTA,GREEN,CYAN,YELLOW,BROWN,BRRED,GRAY,BLACK};
u8 n=0;
u32 Index=0;
u16 Color=0;
int main(void)
{
SystemInit();//初始化RCC 設(shè)置系統(tǒng)主頻為72MHZ
LCD_Init();
LCD_LED_SET;//點(diǎn)亮背光
LCD_SetWindows(0,0,127,127);
while(1)
{
n++;
if (n>13)
{
GPIOC->ODR ^=GPIO_Pin_13; //每顯示色彩一個(gè)輪回,LED改變狀態(tài)一次,目的為了記輪回時(shí)間
n=0;
}
for(Index=0;Index<(128*128);Index++)
{
LCD_WR_DATA_16b(ColorS[n]);
}
//DelayS(0x0ffffff);
}
}
我們把程序燒入CPU,進(jìn)行測(cè)試:結(jié)果是屏閃爍著,LED亮50次所用時(shí)間為69.44秒,可得到刷新率為18.7幀/秒。
作者:
pmasonrose
時(shí)間:
2018-12-1 13:12
下面是查詢(xún)模式的代碼:(只貼出main函數(shù),其他同上例)
int main(void)
{
int main(void)
{
u8 t=0;
SystemInit();//初始化RCC 設(shè)置系統(tǒng)主頻為72MHZ
LCD_Init();
LCD_LED_SET;//點(diǎn)亮背光
LCD_SetWindows(0,0,127,127);
LCD_CS_CLR;
LCD_RS_SET;
n=0;
t=0;
while(1)
{
if (t==0)
{
t=1;
if (SPI2->SR&SPI_I2S_FLAG_TXE)
{
SPI2->DR=ColorS[n];
if (Index>=128*128-1)//one Frame OK!
{
Index=0;
//DelayS(0x0ffffff);
n++;
if (n>13)
{
GPIOC->ODR ^=GPIO_Pin_13; //每顯示色彩一個(gè)輪回,LED改變狀態(tài)一次,目的為了記輪回時(shí)間
n=0;
}
}
else
{
Index++;
}
}
}
else
{
if (SPI2->SR&SPI_I2S_FLAG_RXNE) t=0;
}
}
}
我們把程序燒入CPU,進(jìn)行測(cè)試:結(jié)果是屏閃爍著,LED亮50次所用時(shí)間為38.17秒,可得到刷新率為34幀/秒。可見(jiàn)ST7735的查詢(xún)模式性能優(yōu)于阻塞模式,更重要的是查詢(xún)模式空出了CPU時(shí)間,可做其他事情...
作者:
pmasonrose
時(shí)間:
2018-12-1 17:15
我們知道阻塞模式的程序存在代碼簡(jiǎn)潔、邏輯性強(qiáng)、容易理解等優(yōu)點(diǎn)。但是阻塞模式的代碼也存在效率不高,不適合多任務(wù)等缺點(diǎn)。在此我們用ST7735顯示用阻塞模式和查詢(xún)模式分別顯示特定圖象,對(duì)它們之間的性能進(jìn)
選擇硬件為CPU:stm32f103c8t6,顯示屏為128X128pix。比較SPI16bit方式的阻塞與查詢(xún)模式的顯示效果。話(huà)不多說(shuō)貼上兩者的代碼。首先上阻塞模式的代碼:
//code by
pmason_rose@qq.com
#include "stm32f10x.h"
#include "stm32f10x_spi.h"
#define LED_PORT GPIOC
#define LED_PIN GPIO_Pin_13
#define LCD_CTRL GPIOB //定義TFT數(shù)據(jù)端口
#define LCD_SCL GPIO_Pin_13 //PB13連接至TFT -- CLK
#define LCD_SDA GPIO_Pin_15 //PB15連接至TFT - SDI
#define LCD_LED GPIO_Pin_9 //PB9 連接至TFT -LED
#define LCD_RS GPIO_Pin_10 //PB10連接至TFT --RS
#define LCD_CS GPIO_Pin_11 //PB11 連接至TFT --CS
#define LCD_RST GPIO_Pin_12 //PB12連接至TFT --RST
//////////////////////////////////////////////////////////////////////
//液晶控制口置1操作語(yǔ)句宏定義
#define LCD_CS_SET LCD_CTRL->BSRR=LCD_CS
#define LCD_RS_SET LCD_CTRL->BSRR=LCD_RS
#define LCD_SDA_SET LCD_CTRL->BSRR=LCD_SDA
#define LCD_SCL_SET LCD_CTRL->BSRR=LCD_SCL
#define LCD_RST_SET LCD_CTRL->BSRR=LCD_RST
#define LCD_LED_SET LCD_CTRL->BSRR=LCD_LED
//液晶控制口置0操作語(yǔ)句宏定義
#define LCD_CS_CLR LCD_CTRL->BRR=LCD_CS
#define LCD_RS_CLR LCD_CTRL->BRR=LCD_RS
#define LCD_SDA_CLR LCD_CTRL->BRR=LCD_SDA
#define LCD_SCL_CLR LCD_CTRL->BRR=LCD_SCL
#define LCD_RST_CLR LCD_CTRL->BRR=LCD_RST
#define LCD_LED_CLR LCD_CTRL->BRR=LCD_LED
/****************************************************************************
* 名 稱(chēng):SPI2_Init(void)
* 功 能:STM32_SPI2硬件配置初始化
* 入口參數(shù):無(wú)
* 出口參數(shù):無(wú)
* 說(shuō) 明:STM32_SPI2硬件配置初始化
****************************************************************************/
void SPI2_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//配置SPI2管腳
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
#define LED_PORT GPIOC
#define LED_PIN GPIO_Pin_13
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(LED_PORT, GPIO_Pin_13); // LED
//SPI2配置選項(xiàng)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
//使能SPI2
SPI_Cmd(SPI2, ENABLE);
}
/****************************************************************************
* 名 稱(chēng):u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
* 功 能:STM32_硬件SPI讀寫(xiě)一個(gè)字節(jié)數(shù)據(jù)底層函數(shù)
* 入口參數(shù):SPIx,Byte
* 出口參數(shù):返回總線(xiàn)收到的數(shù)據(jù)
* 說(shuō) 明:STM32_硬件SPI讀寫(xiě)一個(gè)字節(jié)數(shù)據(jù)底層函數(shù)
****************************************************************************/
u16 SPI_WriteData(SPI_TypeDef* SPIx,u16 data)
{
while((SPIx->SR&SPI_I2S_FLAG_TXE)==RESET); //等待發(fā)送區(qū)空
SPIx->DR=data; //發(fā)送一個(gè)字節(jié)
while((SPIx->SR&SPI_I2S_FLAG_RXNE)==RESET);//等待接收完成
return SPIx->DR; //返回收到的數(shù)據(jù)
}
//******************************************************************
//函數(shù)名: LCD_WR_REG
//功能: 向液晶屏總線(xiàn)寫(xiě)入寫(xiě)16位指令
//輸入?yún)?shù):Reg:待寫(xiě)入的指令值
//返回值: 無(wú)
//修改記錄:無(wú)
//******************************************************************
void LCD_WR_REG_16b(u16 data)
{
LCD_CS_CLR;
LCD_RS_CLR;
SPI_WriteData(SPI2,data);
LCD_CS_SET;
}
//******************************************************************
//函數(shù)名: LCD_WR_DATA
//功能: 向液晶屏總線(xiàn)寫(xiě)入寫(xiě)8位數(shù)據(jù)
//輸入?yún)?shù):Data:待寫(xiě)入的數(shù)據(jù)
//返回值: 無(wú)
//修改記錄:無(wú)
//******************************************************************
void LCD_WR_DATA_16b(u16 data)
{
LCD_CS_CLR;
LCD_RS_SET;
SPI_WriteData(SPI2,data);
LCD_CS_SET;
}
/*************************************************
函數(shù)名:LCD_SetWindows
功能:設(shè)置lcd顯示窗口,在此區(qū)域?qū)扅c(diǎn)數(shù)據(jù)自動(dòng)換行
入口參數(shù):xy起點(diǎn)和終點(diǎn)
返回值:無(wú)
*************************************************/
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
{
LCD_WR_REG_16b(0x002a);
LCD_WR_DATA_16b(yStar+2);
LCD_WR_DATA_16b(yEnd+2);
LCD_WR_REG_16b(0x002b);
LCD_WR_DATA_16b(yStar+3);
LCD_WR_DATA_16b(yEnd+3);
LCD_WR_REG_16b(0x002C);
}
/*************************************************
函數(shù)名:DelayS
功能:阻塞模式的延時(shí)函數(shù)
入口參數(shù):延時(shí)大小
返回值:無(wú)
*************************************************/
void DelayS(u32 nCount)
{
for(;nCount!=0;nCount--);
}
//******************************************************************
//函數(shù)名: LCD_Init
//功能: LCD初始化
//輸入?yún)?shù):無(wú)
//返回值: 無(wú)
//修改記錄:無(wú)
//******************************************************************
void LCD_Init(void)
{
SPI2_Init();
LCD_RST_CLR;
DelayS(100);
LCD_RST_SET;
DelayS(500);
LCD_WR_REG_16b(0x0011);
LCD_WR_REG_16b(0x00B1);
LCD_WR_DATA_16b(0x012C);
LCD_WR_DATA_16b(0x2D00);
LCD_WR_REG_16b(0x00B2);
LCD_WR_DATA_16b(0x012C);
LCD_WR_DATA_16b(0x2D00);
LCD_WR_REG_16b(0x00B3);
LCD_WR_DATA_16b(0x012C);
LCD_WR_DATA_16b(0x2D01);
LCD_WR_DATA_16b(0x2C2D);
LCD_WR_REG_16b(0x00B4);
LCD_WR_DATA_16b(0x0700);
LCD_WR_REG_16b(0x00C0);
LCD_WR_DATA_16b(0xA202);
LCD_WR_DATA_16b(0x8400);
LCD_WR_REG_16b(0x00C1);
LCD_WR_DATA_16b(0xC500);
LCD_WR_REG_16b(0x00C2);
LCD_WR_DATA_16b(0x0A00);
LCD_WR_REG_16b(0x00C3);
LCD_WR_DATA_16b(0x8A2A);
LCD_WR_REG_16b(0x00C4);
LCD_WR_DATA_16b(0x8AEE);
LCD_WR_REG_16b(0x00C5);
LCD_WR_DATA_16b(0x0E00);
LCD_WR_REG_16b(0x0036);
LCD_WR_DATA_16b(0xC800);
LCD_WR_REG_16b(0x00e0);
LCD_WR_DATA_16b(0x0f1a);
LCD_WR_DATA_16b(0x0f18);
LCD_WR_DATA_16b(0x2f28);
LCD_WR_DATA_16b(0x2022);
LCD_WR_DATA_16b(0x1f1b);
LCD_WR_DATA_16b(0x2337);
LCD_WR_DATA_16b(0x0007);
LCD_WR_DATA_16b(0x0210);
LCD_WR_DATA_16b(0x0f1b);
LCD_WR_DATA_16b(0x0f17);
LCD_WR_DATA_16b(0x332c);
LCD_WR_DATA_16b(0x292e);
LCD_WR_DATA_16b(0x3030);
LCD_WR_DATA_16b(0x393f);
LCD_WR_DATA_16b(0x0007);
LCD_WR_DATA_16b(0x0310);
LCD_WR_REG_16b(0x002a);
LCD_WR_DATA_16b(0x0000);
LCD_WR_DATA_16b(0x007f);
LCD_WR_REG_16b(0x0026);
LCD_WR_DATA_16b(0x0000);
LCD_WR_DATA_16b(0x009f);
LCD_WR_REG_16b(0x00F0);
LCD_WR_DATA_16b(0x0100);
LCD_WR_REG_16b(0x00F6);
LCD_WR_DATA_16b(0x0000);
LCD_WR_REG_16b(0x003A);
LCD_WR_DATA_16b(0x0500);
LCD_WR_REG_16b(0x2936);
LCD_WR_DATA_16b(0xC800);
}
void LCD_Clear(u16 Color)
{
u32 Lcd_Index=0;
LCD_SetWindows(0,0,127,127);
for(Lcd_Index=0;Lcd_Index<(128*128);Lcd_Index++)
{
LCD_WR_DATA_16b(Color);
}
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲一区二区久久
|
精品日韩
|
国产精品777一区二区
|
狠狠干综合视频
|
欧美成人免费在线
|
激情影院久久
|
91精品国产高清一区二区三区
|
国产精品久久久久久久久久
|
中文字幕日韩欧美
|
国产精品久久久久久久久污网站
|
久久精品a
|
国产视频导航
|
亚洲一区二区免费视频
|
草樱av
|
国产精品免费观看
|
中文字字幕一区二区三区四区五区
|
热99精品视频
|
日韩电影a
|
懂色中文一区二区三区在线视频
|
蜜桃特黄a∨片免费观看
|
欧美在线观看免费观看视频
|
麻豆视频在线免费观看
|
午夜免费网站
|
国产精品久久久久久久久久妞妞
|
精品国产乱码久久久久久中文
|
免费国产一区二区
|
中文字幕人成乱码在线观看
|
国产精品一区二区欧美黑人喷潮水
|
久久大陆
|
成人精品
|
久久精品小视频
|
大久
|
一区二区三区免费观看
|
99精品国产一区二区三区
|
亚洲国产精品99久久久久久久久
|
日本天堂视频在线观看
|
男人天堂免费在线
|
欧美激情一区二区
|
欧美精品在线播放
|
91麻豆精品国产91久久久资源速度
|
91精品国产91久久综合桃花
|