目錄
一、最終效果二、實(shí)現(xiàn)思想三、實(shí)現(xiàn)過程3.1 屏幕顯示3.2 中斷處理
一、最終效果
顯示屏顯示計(jì)時(shí)時(shí)間,格式為 00:00:00,依次為 時(shí):分:秒,程序運(yùn)行之后自動(dòng)計(jì)時(shí),當(dāng)按下按鍵,計(jì)時(shí)清零,按下按鍵采用外部中斷。
二、實(shí)現(xiàn)思想
調(diào)用lcd驅(qū)動(dòng)代碼讓屏幕顯示時(shí)間信息,
三、實(shí)現(xiàn)過程
3.1 屏幕顯示
屏幕為SPI協(xié)議的128x128的LCD屏幕,查看原理圖,找到對(duì)應(yīng)接口 在STM32CubeMX中進(jìn)行引腳配置 由于所調(diào)用的LCD驅(qū)動(dòng)代碼中引腳名稱已經(jīng)確定,不好直接更改代碼,所以在配置引腳時(shí),要將對(duì)應(yīng)的引腳重命名 在對(duì)應(yīng)引腳上右鍵改名,改名后?? 因?yàn)槠聊伙@示需要高的刷新率,需更改引腳輸出速度為高速?? 按鍵設(shè)置為外部中斷,配置按鍵為外部中斷?? STM32CubeMX中進(jìn)行引腳配置?? 將lcd驅(qū)動(dòng)代碼放入工程文件對(duì)應(yīng)位置?? 在工程文件中添加屏幕驅(qū)動(dòng)程序 lcd.c?? 添加完要編譯一下,將其關(guān)聯(lián)文件添加進(jìn)來,編譯完后?? 給圖片添加一個(gè)背景,利用圖片取模軟件將一個(gè)圖片進(jìn)行取模轉(zhuǎn)換,生成一個(gè)十六進(jìn)制元素的二維數(shù)組 生成一個(gè).h文件并放入項(xiàng)目文件中,對(duì)lcd.h和剛生成的文件進(jìn)行引用?? 在keil中打開生成的圖模文件,保存數(shù)組名,下面會(huì)用?? 
調(diào)用屏幕驅(qū)動(dòng)代碼中所定義好的一些函數(shù)對(duì)屏幕初始化和圖片的顯示?? 給計(jì)時(shí)器添加一個(gè)標(biāo)題和時(shí)間顯示區(qū)域?? 顯示效果如下?? Gui_DrawFont_GBK16字符串顯示函數(shù)的第三個(gè)參數(shù)為一個(gè)字符串首地址,那如何讓顯示的字符串能夠動(dòng)起來呢??這時(shí)我們可以想到一個(gè)函數(shù)sprintf,這個(gè)函數(shù)可以對(duì)一個(gè)字符串進(jìn)行格式化改變,時(shí)間一改變,就可以接著改變字符串內(nèi)容。 接下來寫計(jì)時(shí)的程序,邏輯很好理解,時(shí)間每增加1秒,接著就將改變好的字符串輸出到屏幕如下?? 
3.2 中斷處理
找到中斷向量表,追找到外部中斷的處理函數(shù) 追到了外部中斷回調(diào)函數(shù)?? 進(jìn)行重寫回調(diào)函數(shù),每次按鍵觸發(fā)的外部中斷會(huì)回調(diào)以下重寫的回調(diào)函數(shù)?? 在該函數(shù)中要對(duì)時(shí)、分、秒變量進(jìn)行清零,同時(shí)更新屏幕顯示,若不重新寫回屏幕(沒有上面的地183行代碼),則會(huì)出現(xiàn)下面情況,按下按鍵后不能清零,而是從第一秒1秒開始計(jì)時(shí)???????? ??原因是:程序大部分時(shí)間都處于延時(shí)狀態(tài),而你在按下按鍵時(shí)是處在延時(shí)狀態(tài),延時(shí)狀態(tài)程序收到中斷信號(hào),保存現(xiàn)場,進(jìn)行中斷處理函數(shù)的執(zhí)行,此時(shí)雖然時(shí)間變量都給清零了,但是沒有立即寫回屏幕顯示時(shí)間,中斷返回,恢復(fù)現(xiàn)場,主程序又回到延時(shí)狀態(tài),此時(shí)程序執(zhí)行到了下面這里?? 這樣,秒數(shù)就會(huì)加 1 變成1,下面再寫回屏幕就會(huì)顯示1了??
改正之后就沒有問題了????????

|