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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5042|回復: 2
收起左側

ST7735的非阻塞模式顯示

[復制鏈接]
ID:413275 發(fā)表于 2018-12-1 13:07 | 顯示全部樓層 |閱讀模式
#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 設置系統(tǒng)主頻為72MHZ
        LCD_Init();
        LCD_LED_SET;//點亮背光         
        LCD_SetWindows(0,0,127,127);
        while(1)
        {
                n++;
                if        (n>13)
                {
                        GPIOC->ODR ^=GPIO_Pin_13;        //每顯示色彩一個輪回,LED改變狀態(tài)一次,目的為了記輪回時間
                        n=0;
                }
                for(Index=0;Index<(128*128);Index++)
                {
                        LCD_WR_DATA_16b(ColorS[n]);
                }
                //DelayS(0x0ffffff);
        }
}
我們把程序燒入CPU,進行測試:結果是屏閃爍著,LED亮50次所用時間為69.44秒,可得到刷新率為18.7幀/秒。

評分

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

查看全部評分

回復

使用道具 舉報

ID:413275 發(fā)表于 2018-12-1 13:12 | 顯示全部樓層
下面是查詢模式的代碼:(只貼出main函數(shù),其他同上例)
int main(void)
{
int main(void)
{
        u8        t=0;
        SystemInit();//初始化RCC 設置系統(tǒng)主頻為72MHZ
        LCD_Init();
        LCD_LED_SET;//點亮背光         
        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;        //每顯示色彩一個輪回,LED改變狀態(tài)一次,目的為了記輪回時間
                                                n=0;
                                        }
                                }
                                else
                                {
                                        Index++;
                                }       
                        }       
                }
                else
                {
                        if        (SPI2->SR&SPI_I2S_FLAG_RXNE)        t=0;               
                }
        }
}
我們把程序燒入CPU,進行測試:結果是屏閃爍著,LED亮50次所用時間為38.17秒,可得到刷新率為34幀/秒。可見ST7735的查詢模式性能優(yōu)于阻塞模式,更重要的是查詢模式空出了CPU時間,可做其他事情...
回復

使用道具 舉報

ID:413275 發(fā)表于 2018-12-1 17:15 | 顯示全部樓層
我們知道阻塞模式的程序存在代碼簡潔、邏輯性強、容易理解等優(yōu)點。但是阻塞模式的代碼也存在效率不高,不適合多任務等缺點。在此我們用ST7735顯示用阻塞模式和查詢模式分別顯示特定圖象,對它們之間的性能進
選擇硬件為CPU:stm32f103c8t6,顯示屏為128X128pix。比較SPI16bit方式的阻塞與查詢模式的顯示效果。話不多說貼上兩者的代碼。首先上阻塞模式的代碼:
//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操作語句宏定義
#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操作語句宏定義
#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
/****************************************************************************
* 名    稱:SPI2_Init(void)
* 功    能:STM32_SPI2硬件配置初始化
* 入口參數(shù):無
* 出口參數(shù):無
* 說    明: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配置選項
        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);
}
/****************************************************************************
* 名    稱:u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
* 功    能:STM32_硬件SPI讀寫一個字節(jié)數(shù)據(jù)底層函數(shù)
* 入口參數(shù):SPIx,Byte
* 出口參數(shù):返回總線收到的數(shù)據(jù)
* 說    明:STM32_硬件SPI讀寫一個字節(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ā)送一個字節(jié)   
        while((SPIx->SR&SPI_I2S_FLAG_RXNE)==RESET);//等待接收完成  
        return SPIx->DR;                       //返回收到的數(shù)據(jù)                       
}
//******************************************************************
//函數(shù)名:  LCD_WR_REG
//功能:    向液晶屏總線寫入寫16位指令
//輸入?yún)?shù):Reg:待寫入的指令值
//返回值:  無
//修改記錄:無
//******************************************************************
void LCD_WR_REG_16b(u16 data)
{
        LCD_CS_CLR;
        LCD_RS_CLR;
        SPI_WriteData(SPI2,data);
        LCD_CS_SET;
}
//******************************************************************
//函數(shù)名:  LCD_WR_DATA
//功能:    向液晶屏總線寫入寫8位數(shù)據(jù)
//輸入?yún)?shù):Data:待寫入的數(shù)據(jù)
//返回值:  無
//修改記錄:無
//******************************************************************
void LCD_WR_DATA_16b(u16 data)
{
        LCD_CS_CLR;
        LCD_RS_SET;
        SPI_WriteData(SPI2,data);
        LCD_CS_SET;
}
/*************************************************
函數(shù)名:LCD_SetWindows
功能:設置lcd顯示窗口,在此區(qū)域寫點數(shù)據(jù)自動換行
入口參數(shù):xy起點和終點
返回值:無
*************************************************/
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ù):延時大小
返回值:無
*************************************************/
void        DelayS(u32  nCount)
{
        for(;nCount!=0;nCount--);
}
//******************************************************************
//函數(shù)名:  LCD_Init
//功能:    LCD初始化
//輸入?yún)?shù):無
//返回值:  無
//修改記錄:無
//******************************************************************
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);
        }
}
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 不卡一区二区三区四区 | 欧美一区二区三区一在线观看 | 国产三级一区二区 | 亚洲一一在线 | 欧美精品欧美精品系列 | 国产视频中文字幕 | 欧美精品在线一区 | 久热久草| 久久亚洲精品久久国产一区二区 | 一区二区三区视频在线免费观看 | 在线黄av| 精品国产乱码久久久久久蜜退臀 | 欧美11一13sex性hd| 黄色大片毛片 | 国产日韩欧美精品一区二区三区 | 久久国产亚洲 | 亚洲欧洲精品在线 | 亚洲色欲色欲www | 国产精品一区二区久久 | 日韩国产一区二区三区 | 在线a视频| 国产精品国产成人国产三级 | 欧洲亚洲一区 | 狠狠草视频 | 久久手机在线视频 | 欧美成人精品激情在线观看 | 一色桃子av一区二区 | 国产精品国产亚洲精品看不卡15 | 欧美色影院 | 一区二区三区免费观看 | 国产激情精品一区二区三区 | 日本国产欧美 | 国产精品视频网站 | 欧美精品乱码99久久影院 | 亚洲av毛片 | 亚洲精品久久久9婷婷中文字幕 | 国产精品99久久久久久宅男 | 成人小视频在线 | 99精彩视频 | 超碰日本| 久色激情 |