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

歷史上的今天

今天是:2024年09月29日(星期日)

正在發生

2018年09月29日 | STM32f4---TFTLCD顯示實驗代碼(01)

發布者:Jikai 來源: eefocus 手機看文章 掃描二維碼
隨時隨地手機看文章

本實驗,我們用到FSMC驅動 LCD,通過前面的介紹,我們知道TFTLCD 的RS接在FSMC的 A6上面,CS 接在 FSMC_NE4 上,并且是16位數據總線。即我們使用的是FSMC 存儲器1的第 4區,我們定義如下LCD 操作結構體(在lcd.h 里面定義):

//LCD 操作結構體

typedef struct

{

  vu16 LCD_REG;

  vu16 LCD_RAM;

} LCD_TypeDef;

//使用NOR/SRAM的  Bank1.sector4,地址位 HADDR[27,26]=11 A6作為數據命令區分線

//注意16位數據總線時,STM32內部地址會右移一位對齊!       

#define LCD_BASE        ((u32)(0x6C000000 | 0x0000007E))

#define LCD             ((LCD_TypeDef *) LCD_BASE)

其中 LCD_BASE,必須根據我們外部電路的連接來確定,我們使用 Bank1.sector4 就是從地址0X6C000000開始,而 0X0000007E,則是A6的偏移量,這里很多朋友不理解這個偏移量的概念,簡單說明下:以 A6 為例,7E 轉換成二進制就是:1111110,而 16 位數據時,地址右移一位對齊,那么實際對應到地址引腳的時候,就是:A6:A0=0111111,此時 A6 是0,但是如果16位地址再加1(注意:對應到8 位地址是加2,即 7E+0X02), 那 么 :A6:A0=1000000,此時 A6 就是1了,即實現了對RS的 0和1的控制。

我們將這個地址強制轉換為LCD_TypeDef結構體地址,那么可以得到LCD->LCD_REG 的地址就是0X6C00,007E,對應 A6 的狀態為 0(即 RS=0),而 LCD->  LCD_RAM 的地址就是0X6C00,0080(結構體地址自增),對應A6的狀態為1(即RS=1)。

所以,有了這個定義,當我們要往 LCD寫命令/數據的時候,可以這樣寫:

LCD->LCD_REG=CMD;  //寫命令

LCD->LCD_RAM=DATA; //寫數據

而讀的時候反過來操作就可以了,如下所示:

CMD= LCD->LCD_REG;//讀LCD 寄存器

  DATA = LCD->LCD_RAM;//讀 LCD 數據

這其中,CS、 WR、RD和IO 口方向都是由FSMC 控制,不需要我們手動設置了。接下來,我們先介紹一下lcd.h里面的另一個重要結構體:

//LCD 重要參數集

typedef struct   

{                         

  u16 width;      //LCD 寬度

  u16 height;      //LCD 高度

  u16 id;        //LCD ID

  u8  dir;        //橫屏還是豎屏控制:0,豎屏;1,橫屏。  

  u16  wramcmd;    //開始寫 gram指令

  u16  setxcmd;    //設置 x坐標指令

  u16  setycmd;    //設置 y坐標指令  

}_lcd_dev;

//LCD 參數

extern _lcd_dev lcddev;  //管理LCD 重要參數

該結構體用于保存一些 LCD 重要參數信息,比如LCD 的長寬、LCD ID(驅動IC 型號)、LCD 橫豎屏狀態等,這個結構體雖然占用了十幾個字節的內存,但是卻可以讓我們的驅動函數支持不同尺寸的 LCD,同時可以實現 LCD 橫豎屏切換等重要功能,所以還是利大于弊的。有了以上了解,下面我們開始介紹 lcd.c里面的一些重要函數。

先看 7個簡單,但是很重要的函數:

//寫寄存器函數

//regval:寄存器值

void LCD_WR_REG(vu16 regval)

{    regval=regval;    //使用-O2優化的時候,必須插入的延時

  LCD->LCD_REG=regval;//寫入要寫的寄存器序號    

}

//寫 LCD 數據

//data:要寫入的值

void LCD_WR_DATA(vu16 data)

{  data=data;      //使用-O2優化的時候,必須插入的延時

  LCD->LCD_RAM=data;      

}

//讀 LCD 數據

//返回值:讀到的值

u16 LCD_RD_DATA(void)

{  vu16 ram;      //防止被優化

  ram=LCD->LCD_RAM;

  return ram;      

}              

//寫寄存器

//LCD_Reg:寄存器地址

//LCD_RegValue:要寫入的數據

void LCD_WriteReg(vu16 LCD_Reg, vu16 LCD_RegValue)

{  LCD->LCD_REG = LCD_Reg;    //寫入要寫的寄存器序號    

  LCD->LCD_RAM = LCD_RegValue;  //寫入數據             

}      

//讀寄存器

//LCD_Reg:寄存器地址

//返回值:讀到的數據

u16 LCD_ReadReg(vu16 LCD_Reg)

{  LCD_WR_REG(LCD_Reg);    //寫入要讀的寄存器序號

  delay_us(5);        

  return LCD_RD_DATA();    //返回讀到的值

}    

//開始寫GRAM

void LCD_WriteRAM_Prepare(void)

{   LCD->LCD_REG=lcddev.wramcmd;     

}    

//LCD 寫GRAM

//RGB_Code:顏色值

void LCD_WriteRAM(u16 RGB_Code)

{   LCD->LCD_RAM = RGB_Code;//寫十六位GRAM

}

因為FSMC 自動控制了WR/RD/CS 等這些信號,所以這7個函數實現起來都非常簡單,我們就不多說,注意,上面有幾個函數,我們添加了一些對MDK –O2優化的支持,去掉的話,在-O2 優化的時候會出問題。這些函數實現功能見函數前面的備注,通過這幾個簡單函數的組合,我們就可以對 LCD進行各種操作了。


引用地址:STM32f4---TFTLCD顯示實驗代碼(01)

上一篇:STM32f4---TFTLCD顯示實驗代碼(02)
下一篇:STM32f4---OLCD顯示實驗代碼(04)

推薦閱讀

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中斷2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//搶占優先級3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//響應優先級2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中斷通道 NVIC_Init(&NVIC_InitStructure);//配置 NVIC NVI...
27日美國國際貿易委員會(ITC)宣布決定對半導體及下游產品啟動兩項337調查(調查編碼337-TA-1176、337-TA-1177),調查涉及了臺積電、博通、聯發科、賽靈思、高通、安富利、一加、華碩、聯想集團、TCL集團、海信集團、深圳市萬普拉斯科技有限公司等多家公司。事實上,這兩起調查起因是上個月格芯對臺積電提起的專利指控。8月26日,格芯宣布在美國與德國多...
現階段,電動汽車充電一直是一個有待完善的問題,因為固定的充電樁已經無法滿足迅速增長的充電需求。對此,各大汽車廠商可謂是八仙過海各顯神通,有建造超級充電網絡的,有提供換電(池)服務的等等。日前,據官方消息,愛馳汽車旗下全資子公司——氫馳動力科技有限公司,與海鹽經濟開發區就CARL智能移動充電機器人項目正式簽訂合作協議,雙方將共同投資1...
阻旋料位開關作為一種用于固體物料檢測的物位開關,其工作原理是葉片通過傳動軸與離合器相連接并利用微型馬達做驅動裝置,使葉片持續轉動,當葉片接觸物料時,葉片與物料間產生的阻力克服靈敏度調節拉簧的拉力使拉簧張開,此時馬達停止轉動,檢測裝置輸出一開關量信號;當物料下降到葉片以下時,葉片與物料間產生的阻力消失,靈敏度調節拉簧復位到原始狀態...

史海拾趣

問答坊 | AI 解惑

幫忙

有個單子要交,需要用到單片機,高薪尋求高手合作。有意請加QQ:85288499,請注明:單片機…

查看全部問答∨

嵌入式是否必須要掌握linux和bootloader移植?

如題,現在嵌入式基本是和LINUX連接到一起,搞得我們頭大,那作為剛入門的人,是不是我們學習嵌入式,一定要學習LINUX呢?…

查看全部問答∨

F2812復位后,XCLKOUT腳的輸出

我自己畫了個F2812的最小系統板,晶振用的是25MHZ。 把電路焊好后,上電。用示波器看XCLKOUT的輸出,是6.25MHZ的時鐘信號。板子放了一會,什么也沒做,再上電,用示波器看XCLKOUT的輸出,發現是3.125MHZ的時鐘信號,接下來再測時,一直都是3.125MH ...…

查看全部問答∨

數字接口調查:USB、藍牙受寵

本帖最后由 jameswangsynnex 于 2015-3-3 20:03 編輯 In-Stat通過對美國消費者進行在線調查后發現,USB毫無疑問是當今家用和辦公PC上最流行、最常用的數字接口界面,而藍牙則在手機領域非常流行。   In-Stat分析師Brian O\'Rourke表示:“在家 ...…

查看全部問答∨

FPGA設計成功的關鍵

1、想方設法使用一個時鐘,進行同步設計。 2、確保信號建立時間無誤。 3、盡量降低電路速度。 4、不要認為使用硬件描述語言是做軟件。時刻保將自己寫的每條語句都能找到成相應的硬件。…

查看全部問答∨

8086怎么同時進行兩個任務啊

8086不支持多線程,那我怎么同時進行兩個任務?比如我有兩個循環分別控制88點陣顯示和發聲,怎么讓他們同時進行?…

查看全部問答∨

proteus仿真沒有我想要的元件怎么辦

proteus仿真沒有我想要的元件ADS1211和MAX531,這分別是模數轉換和數模轉換元件,沒有這兩個元件,怎么做才能與keilc程序仿真出實際的效果啊…

查看全部問答∨

有誰在VXWORKS下玩過eXtremedb 實時數據庫的?

extremedb是首款非常優秀的微秒級內存數據庫,高能和性能都達到了內存數據庫的極限、內核尺寸在100K左右 在各種軟硬件平臺上面能夠達到微秒級的插入、查詢和更新 。感興趣的朋友可以從下載試一下技術交流:QQ:914669793  如需要多平臺詳 ...…

查看全部問答∨

PND2442 - 主流手持設備方案—S3C2442-SC32442的相關方案資料

大家好,初來論壇。 發些資料給論壇,有興趣可看看。 因上傳不了。 給一下下載地址啦: s3c2442架構與選型文檔 [/url] 主流手持設備方案—S3C2442-SC32442 [url=http://www.openemb.com/download/PND2442.rar] 如想要其它資料可發EMAIL到 ...…

查看全部問答∨

PB5.0,編譯出現錯誤:error C2220: warning treated as error - no object file generated

平臺:PB5.0         小弟做一個內核時候,在build階段出現一個錯誤,具體如下: BUILD: [00:0000000029:PROGC ] Compiling \\WINCE500\\PLATFORM\\855gme\\Src\\Kernel\\Libs\\Kitl\\ directory. BUILD: [01:000 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 固阳县| 龙州县| 扬州市| 临武县| 东乡族自治县| 法库县| 阿尔山市| 西华县| 松潘县| 安顺市| 阳谷县| 鸡东县| 永安市| 双江| 盈江县| 安龙县| 色达县| 来安县| 通州区| 临沧市| 商城县| 卓资县| 石嘴山市| 吉木乃县| 兴仁县| 秦皇岛市| 五指山市| 屏南县| 迁西县| 福贡县| 多伦县| 无为县| 肇庆市| 搜索| 江陵县| 辛集市| 定日县| 临汾市| 仲巴县| 米脂县| 库尔勒市|