硬件平臺
屏幕:LCD屏幕接口(NT35310)
觸摸屏:XPT2046(SPI接口)
外擴內(nèi)存:IS62WV51216(FSMC驅(qū)動)
2.功能實現(xiàn)
1.完成LCD驅(qū)動、觸摸屏驅(qū)動,SPI FLASH驅(qū)動保存字庫;
2.完成STemwin移植,設計計算器界面;
3.計算器基本功能實現(xiàn):基本運算(加、減、乘、除);
4.實現(xiàn)多級運算、平方運算;
3.硬件介紹
3.1 TFTLCD屏 NT35310驅(qū)動
nt35310 是一個低功耗、 26 萬色、單芯片的 TFT-LCD 控制器/驅(qū)動器,分辨率 480*320,它有一個 345600 字節(jié)的顯示 RAM 和一整套控制功能。 nt35310 支持數(shù)字接口( MDDI), MIPI 接口, RGB 接口, 8 / 9 / 16 / 18 位8080 接口。可以實現(xiàn)指定的窗口區(qū)域可以有選擇地更新,以便可以顯示運動圖像。同時也可以獨立顯示靜止的圖像區(qū)域。
3.2 8080時序
8080 總線又叫Intel(英特爾開發(fā))總線。大致來說, Intel 總線的控制線有四根, RD 寫使能, WR 讀使能, ALE 地址鎖存, CS 片選。
模塊的 8080 并口讀/寫的過程為:
先根據(jù)要寫入/讀取的數(shù)據(jù)的類型,設置 RS 為高(數(shù)據(jù)) /低(命令),然后拉低片選,選中 LCD,接著我們根據(jù)是讀數(shù)據(jù),還是要寫數(shù)據(jù)置 RD/WR 為低,然后:
讀數(shù)據(jù):在 RD 的上升沿, 讀取數(shù)據(jù)線上的數(shù)據(jù)(D[15:0]);
寫數(shù)據(jù):在 WR 的上升沿,使數(shù)據(jù)寫入到 NT35310 里面;
8080寫時序
/*LCD寫寄存器*/
static void LcdWriteReg(u16 reg)
{
LCD_CS=0;//拉低片選,選擇LCD
LCD_RS=0;//寫命令
LCD_WR=0;//開始寫
DATA_OUT(reg);
LCD_WR=1;//寫完成
LCD_CS=1;//取消選中
}
/*LCD寫數(shù)據(jù)*/
static void LcdWriteData(u16 dat)
{
LCD_CS=0;//拉低片選,選擇LCD
LCD_RS=1;//寫數(shù)據(jù)
LCD_WR=0;//開始寫
DATA_OUT(dat);
LCD_WR=1;//寫完成
LCD_CS=1;//取消選中
}
8080讀時序
/*LCD寫數(shù)據(jù)*/
static u16 LcdWriteData(void)
{
u16 data=0;
LCD_CS=0;//拉低片選,選擇LCD
LCD_RS=1;//寫數(shù)據(jù)
LCD_RD=0;//開始讀
data=DATAIN();//讀取消息
LCD_RD=1;//讀完成
LCD_CS=1;//取消選中
return data;
}
3.3 觸摸屏驅(qū)動XPT2046
XPT2046 是一款四線制電阻觸摸屏控制芯片,由深圳市矽普特科技有限公司研發(fā)生產(chǎn),被廣泛的應用于觸摸屏驅(qū)動,堪稱經(jīng)典之作!
XPT2046 內(nèi)部有 2.5V 的參考電壓源,可以作為輔助輸入、電池電壓測量和片內(nèi)溫度測量的參考電壓。當不使用時,參考電壓源可以處于省電模式。內(nèi)部參考電壓源在電源電壓低至 2.7V 時仍可正常工作。當不使用時,參考電壓還可以處于省電模式。內(nèi)部參考電壓在電源電壓低于 2.7V 時仍可正常工作,并且監(jiān)測著在 0V~6V 范圍內(nèi)的電源電壓。 XPT2046 在 125KHz 轉(zhuǎn)換速率和 2.7V 電壓下的功耗僅為 750 μW。XPT2046 以其低功耗和高速率等特性,被廣泛應用在采用電池供電的小型手持設備上,比如 PDA、手機等。
3.4 XPT2046驅(qū)動時序
XPT2046 數(shù)據(jù)接口是串行接口,其典型工作時序如圖 9 所示,圖中展示的信號來自帶有基本串行接口的單片機或數(shù)據(jù)信號處理器。處理器和轉(zhuǎn)換器之間的的通信需要 8 個時鐘周期,可采用 SPI、 SSI 和 Microwire 等同步串行接口。一次完整的轉(zhuǎn)換需要 24 個串行同步時鐘( DCLK)來完成。
前 8 個時鐘用來通過DIN引腳輸入控制字節(jié)。當轉(zhuǎn)換器獲取有關下一次轉(zhuǎn)換的足夠信息后,接著根據(jù)獲得的信息設置輸入多路選擇器和參考源輸入,并進入采樣模式,如果需要,將啟動觸摸面板驅(qū)動器。 3 個多時鐘周期后,控制字節(jié)設置完成,轉(zhuǎn)換器進入轉(zhuǎn)換狀態(tài)。這時,輸入采樣-保持器進入保持狀態(tài),觸摸面板驅(qū)動器停止工作(單端工作模式)。接著的12 個時鐘周期將完成真正的模數(shù)轉(zhuǎn)換。如果是度量比率轉(zhuǎn)換方式( SER/DFR= 0),驅(qū)動器在轉(zhuǎn)換過程中將一直工作,第13 個時鐘將輸出轉(zhuǎn)換結果的最后一位。剩下的 3 個多時鐘周期將用來完成被轉(zhuǎn)換器忽略的最后字節(jié)(DOUT置低)。
#define TOUCH_VALUE_ADDR 200 //保存校準值參數(shù)信息
#define T_MISO PBin(2)
#define T_MOSI PFout(9)
#define T_PEN PFin(10)
#define T_CS PFout(11)
#define T_SCK PBout(1)
u16 XPT2046_WR_Data(u8 cmd)
{
u16 dat=0;
u8 i=0;
T_CS=0;
for(i=0;i<8;i++)
{
T_SCK=0;
T_MOSI=cmd&0x80?1:0;
T_SCK=1;
cmd<<=1;
}
Delay_Us(8);
T_SCK=0;
Delay_Us(1);
T_SCK=1;
for(i=0;i<16;i++)
{
T_SCK=0;
T_SCK=1;
dat<<=1;
if(T_MISO)dat|=0x01;
}
dat>>=4;
T_CS=1;
return dat;
}
4.STemwin移植與計算器界面制作
4.1 STemwin簡介
emWin 是由德國 SEGGER 公司開發(fā),可為圖形 LCD 設計提供高級支持,極大簡化了 LCD 設計。 為恩智浦ARM 微控制器用戶免費提供的 emWin 圖形庫。在國內(nèi)做嵌入式系統(tǒng)的大部分都使用 emwin, 其簡單來說就是一套圖形庫。
STemWin是SEGGER公司授權給ST(意法半導體)的。使用ST芯片的用戶可以免費使用STemWin。其實不光授權給了ST,還有NXP,Energy Micro等。凡是使用這些芯片廠商生產(chǎn)的處理器都可以免費的使用emWin。但是出于一定的保護措施,使用STemWin的庫是不能用在其它芯片廠商的處理器上面的。因為在工程初始化STemWin前要使能CRC校驗。如果沒有使能,STemWin是啟動不起來的。KEIL MDK的安裝目錄里面也帶有emWin軟件包,這個軟件包也不是可以直接使用的,用戶需要給KEIL MDK注冊RL-ARM才可以使用。
這里STemWin還針對ST的微控制器做了專門的優(yōu)化,比如在使用ST的F4XX微控制器帶FPU的芯片時,STemWin在需要浮點處理的地方專門做了優(yōu)化。
4.2 emwin特性
emWin 設計用于提供高效且獨立于處理器和顯示控制器的圖形用戶界面,用于任何使用圖形顯示進行操作的應用。它與單任務和多任務環(huán)境、專用操作系統(tǒng)或具有任何商業(yè) RTOS 兼容, emWin 的發(fā)貨形式為 C 語言源代碼。它可適用于任何尺寸的、具有任何顯示控制器和 CPU 的物理和虛擬顯示器。其特性包括:
一般特性
? 支持使用任何控制器的任何 (單色、灰度或彩色)顯示器 (如果有正確的驅(qū)動)。
? 在較小顯示器上無顯示控制器也可運行。
? 使用配置宏可支持任何接口。
? 顯示尺寸可配置。
? 可在顯示器上的任何點 (而不僅僅是在偶數(shù)位字節(jié)地址)上寫入字符和位圖。
? 已針對尺寸和速度優(yōu)化了各種例程。
? 利用編譯時間切換可進行不同優(yōu)化。
? 對于較慢的顯示控制器,可在存儲器中緩存顯示,將存取操作減到最少,從而獲得非常高的速度。
? 結構清晰。
? 支持虛擬顯示;虛擬顯示可大于實際顯示。
圖形庫
? 支持不同色深的位圖。
? 可使用位圖轉(zhuǎn)換器。
? 絕對無浮點使用。
? 快速線 / 點繪制 (不使用浮點)。
? 圓形 / 多邊形繪制非常快速。
? 不同的繪圖模式。
字體
? 基本軟件配備多種不同的字體: 46、 68、 69、 88、 89、 816、 817、 818、 24*32,以及像素高度為 8、 10、 13、 16 的比例字體。
? 可以定義新的字體并只需簡單鏈接。
? 只有應用程序使用的字體才實際鏈接到生成的可執(zhí)行程序,從而使 ROM 使用最小。
? 字體可分別在 X 和 Y 方向完全縮放。
? 可使用字體轉(zhuǎn)換器;主機系統(tǒng) (即 Microsoft Windows)上有的任何字體都可以轉(zhuǎn)換。
字符串 / 值輸出例程
? 例程可以十進制、二進制、十六進制、任何字體形式顯示值。
? 例程可以十進制、二進制、十六進制、任何字體形式編輯值。
窗口管理器 (WM)
? 完整的窗口管理操作,包括裁剪。窗口的客戶區(qū)以外的區(qū)域不可能被覆蓋。
? 窗口可以移動和調(diào)整大小。
? 支持回調(diào)例程 (可選擇是否使用)。
? WM 使用最小的 RAM (每個窗口大約 50 字節(jié))。
PC 界面外觀的可選小工具
? 提供各種小工具 (窗口對象,也稱為控件)。它們通常自動操作并且簡單易用。
支持觸摸屏和鼠標
? 對于按鈕小工具等窗口對象, emWin 提供觸摸屏和鼠標支持。
PC 工具
? 模擬脈沖查看器。
? 位圖轉(zhuǎn)換器。
? 字體轉(zhuǎn)換器。
4.3 GUIBuilde
GUIBuilder應用程序是一款無需使用 C編程語言即可創(chuàng)建對話框的工具。小工具的放置和大小調(diào)整,可通過拖放操作來實現(xiàn),而無需編寫源代碼。根據(jù)上下文菜單,能添加其他各種屬性。對這些小工具的屬性進行編輯后,就能實現(xiàn)微調(diào)。該操作無需使用 C 編程語言。對話框可以另存為 C 文件,在添加用戶定義的代碼后可對其進行增強。當然, GUIBuilder 可以加載并修改具有嵌入式用戶代碼的這些C 文件。
計算器界面效果
平方運算和分數(shù)計算
基本運算和順序運算
主函數(shù)
#include "gui.h"
#include "EmWinHZFont.h"
#include "DIALOG.h"
#include
extern WM_HWIN CreateFramewin(void);
int main()
{
u16 time=0;
GUI_PID_STATE pState;
STM32_Clock_Init(16);
Beep_Init();
Led_Init();
Key_Init();
Usartx_Init(USART1,115200,128);
W25Q64_Init();
IIC_Init();
Sram_Init();
NT35310_Init();
XPT2046_Init();
printf("校準完成\r\n");
XPT2046_Calibration2();
TIMx_Init(TIM7,128,1000);//1ms,用來給STemwint延時函數(shù)使用
TIM7->CR1|=1<<0;//開啟定時器
RCC->AHBENR|=1<<6;//開啟CRC時鐘
GUI_Init();//STemwin初始化
WM_SetCreateFlags(WM_CF_MEMDEV); /*在所有窗口上使用存儲設備以避免閃爍 */
CreateFramewin();
while(1)
{
GUI_Exec();//更新界面顯示,顯示對話框
GUI_TOUCH_GetState(&pState);//獲取觸摸屏狀態(tài)
if(pState.Pressed)
{
GUI_CURSOR_SetPosition(pState.x,pState.y);//設置坐標位置
GUI_CURSOR_Show();//顯示光標
}
Delay_Ms(1);
time++;
if(time>=500)
{
LED1=!LED1;
time=0;
}
}
}
審核編輯:湯梓紅
-
計算器
+關注
關注
16文章
437瀏覽量
37293 -
STM32F103ZE
+關注
關注
2文章
14瀏覽量
10870 -
XPT2046
+關注
關注
0文章
18瀏覽量
18249
發(fā)布評論請先 登錄
相關推薦
評論