下面我將從這幾方面介紹: (一)【編寫目的】
(二)【快速使用】
(三)【程序概覽】
(四)【實戰(zhàn)例子】
(五)【其他】 (一)【編寫目的】 首先使用白板子的好處就是:自帶一塊LCD顯示屏,所以【如何能非常方便的使用LCD,結(jié)合板子的各個模塊實現(xiàn)相應需求】即為目的, 只為了【方便不了解的人能迅速上手通過修改添加相當少的代碼即實現(xiàn)相應需求】。 (二)【快速使用】 下載好之后解壓文件,將其內(nèi)全部.c和.h文件復制 粘貼到剛才新建的工程里,全部覆蓋 然后連接好板子分別點擊這兩個標志 ,進行編譯連接和調(diào)試,過一會程序成功下載到板子上了,點擊運行 此時屏幕上即出現(xiàn)歡迎界面,按S2鍵進入菜單,滾動滾輪選擇功能,按S1鍵進入相應功能,至此,算是開始使用了。 (三)【程序概覽】 首先看一下目錄結(jié)構(gòu): main【總?cè)肟凇浚?/font> board【白板子各模塊驅(qū)動】; dogs102x6【白板子液晶顯示屏】內(nèi)含畫折線圖、顯示字符串、畫圓、畫線、畫圖片等函數(shù); globalvar【全局變量】如按鍵標志、滾輪ADC采樣值、當前菜單頁數(shù)等; init【總體初始化】; lib【基本運算庫】內(nèi)含濾波函數(shù)、整數(shù)轉(zhuǎn)字符串函數(shù)、小數(shù)轉(zhuǎn)字符串函數(shù)、求最大值最小值函數(shù)、升序排序函數(shù); menu【通過滾輪配合菜單選項】; user【用戶來編寫的程序】; 綜上,注意,如果不是十分了解盡量不要修改其他文件代碼,僅需修改Yuser.c文件即可。 下面來看一下具體的代碼 main.c中僅初始化后調(diào)用了Yuser.c中的yUserStart(); Yuser.c文件中的yUserStart()里面的代碼才是真正的流程控制。 進入到Y(jié)user.c文件(【提示】:按住Ctrl鍵并移動鼠標到函數(shù)名上,直到函數(shù)名下面出現(xiàn)下劃線,此時單擊鼠標左鍵可快速進入函數(shù)內(nèi)部查看)可以看到如下代碼: 至此足以看出大體流程,通過Ytotalitems設置菜單中的功能選項數(shù)量,在Ymenutext[]中寫好每一個選項的標題,然后用selection保存滾輪最后確定的選項,根據(jù)selection的值用switch...case...語句選擇執(zhí)行不同的功能。這就是基本流程控制。
下面結(jié)合著寫好的這幾個例子具體來看: (1)第一個函數(shù)yWelcome(); 這里我們只看yDogs102x6_stringDraw(0, 0, "Press S2 to Menu.",NORMAL_STYLE); //顯示字符串 這個函數(shù)接受了四個參數(shù)(起始行(0~7)、起始列(0~102)、顯示字符串、顯示格式) 例如,在第二行顯示ystr字符串就可以寫成: 顯示格式有四種,分別是(白底黑字NORMAL_STYLE)、(黑底白字INVERT_STYLE)、(整行白底黑字NORMAL_STYLE+ROW_STYLE)、(整行黑底白字INVERT_STYLE+ROW_STYLE) 例如,把白底黑字改成黑底白字效果就是 (整行白底黑字NORMAL_STYLE+ROW_STYLE)和(整行黑底白字INVERT_STYLE+ROW_STYLE)這兩種格式是在字符串長度短,不能填滿一整行時的可選選項,比如當僅顯示"Press S2" 時,僅白底黑字就會出現(xiàn)下面的一半黑一半白的情況: 此時改為NORMAL_STYLE+ROW_STYLE,就會對整行都有效: 最后while (!(Ybuttonspressed & BUTTON_S2)); 表示直到按下S2鍵才返回菜單,因為按下S2鍵觸發(fā)了按鍵中斷,中斷函數(shù)中修改了Ybuttonspressed的值, 這樣這里通過判斷Ybuttonspressed的值就知道是否按下了S2鍵,按下了則while結(jié)束,退出yWelcome函數(shù)。 (2)第二個函數(shù)yContrastSetting(): 首先需要用滾輪采樣,則要yWheel_enable();使能滾輪及ADC,然后不停地通過yWheel_getPosition(25);獲取滾輪位置轉(zhuǎn)化為0~24之間的值來設置LCD對比度,直到S2鍵按下為止,最后別忘了禁止?jié)L輪yWheel_disable(); (3)第三個函數(shù)ySimpleDraw 這里面調(diào)用了畫圓和畫直線的函數(shù),還是那樣按住Ctrl鍵+鼠標單擊,進入函數(shù)內(nèi)部查看每個參數(shù)含義: (4)第四個函數(shù)yShowNum() 這里有兩個我寫好的函數(shù)yItoa()和yFtoa(),在Ylib.c中可以看到它們的定義,可以得知實現(xiàn)了把數(shù)值類型的數(shù)據(jù)轉(zhuǎn)換為字符串顯示到了LCD上。 (5)第五個函數(shù)yInputNum() 因為按鍵過少,所以只能通過滾輪轉(zhuǎn)到不同位置來輸入不同數(shù)值,比如想輸入7.96,則要通過滾輪分別轉(zhuǎn)到7、·、9、6(這里為了避免按鍵消抖,虛擬設置了S2為S1使能,即S1為確定鍵,但每次按S1鍵前必須按一次S2來使能S1,這樣就避免了可能抖動帶來的連續(xù)輸入了兩個7的情況)。輸入完畢后,再通過滾輪轉(zhuǎn)到END并確定結(jié)束,這時就會把輸入的字符串換算為值保存給gnum1。 (6)第六個函數(shù)yShowCurve() 實際上,這是通過調(diào)用很多次前面畫直線的函數(shù)來實現(xiàn)的,其中還用到了Ylib.c中的yFinMax、yFinMin求最值下標等函數(shù),具體實現(xiàn)這里不細說,相關設置有幾處 (四)【實戰(zhàn)例子】 下面用上面提到的函數(shù)隨便寫個例子,比如實現(xiàn)一個fun函數(shù),要求由滾輪轉(zhuǎn)動的位置轉(zhuǎn)換為0~100之內(nèi)的數(shù)值,并實時顯示到LCD屏幕上,按S2鍵結(jié)束。 注意咯,在菜單上每添加一個功能基本上都是下面這四個步驟: (1)添加菜單選項標題: 在Yuser.c中找到Y(jié)menutext部分,在其后添加第6項功能fun。 (2)設置菜單選項個數(shù): 將下面yUserStart()函數(shù)中的Ytotalitems的值由5改為6,表示有6項菜單選項。 (3)設置選項調(diào)用流程: 在下面的while(1)里面添加case 6的流程控制,表示第6項將執(zhí)行fun()函數(shù)。 (4)編寫新增函數(shù)fun(): void fun(){
int value = 0;
char str[4] = "";
yWheel_init();//使能滾輪
while (!(Ybuttonspressed & BUTTON_S2)){//直到S2鍵按下才會退出
value = yWheel_getPosition(100);//將滾輪位置轉(zhuǎn)換為0~100之間的值
yItoa(value,str);//int整數(shù)轉(zhuǎn)換為字符串
yDogs102x6_stringDraw(0,0,str,NORMAL_STYLE+ROW_STYLE);//畫字符串
}
yWheel_disable();//禁止?jié)L輪
} //編譯運行即可發(fā)現(xiàn)菜單中已經(jīng)多了一個fun選項,進入之后會隨著滾輪的轉(zhuǎn)動實時顯示一個0~100之間的數(shù)值,至此完成了一個菜單選項的添加。 (五)【其他】 這其中,還需要注意的有幾個問題: (1)按鍵只有兩個,所以這里用滾輪+菜單來進行功能選擇; (2)IO口過少,一般只做控制信號通用IO和顯示功能,復雜的功能容易和板上資源沖突,所以沒考慮ADC等功能; (3)只設置了一層菜單,沒有編寫多層,一方面因為有了滾輪即使再多的功能都不擔心一層菜單顯示不下,另一方面因為多層菜單時需要考慮按鍵消抖,而一層菜單時S2鍵始終都是菜單鍵,S1鍵始終都是確定鍵,也就不需要考慮按鍵消抖了; (4)為防止不必要的干擾,沒有設置背光亮度的PWM波,還降低了功耗; (5)只寫出了以下三個在Yuser.c中的中斷函數(shù),如有需要請在Yuser.c中自行添加 #pragma vector=PORT1_VECTOR //按鍵S1 #pragma vector=PORT2_VECTOR //按鍵S2
#pragma vector = ADC12_VECTOR (6)最好不要用sprintf等支持不全的函數(shù)來把數(shù)值轉(zhuǎn)換為字符串,因為CCS5中支持sprintf,而CCS6中就不支持,所以這里最好使用Ylib.c中寫好的yItoa和yFtoa函數(shù)。 (7)此外,Ylib.c中還寫好了諸如簡單濾波,升序排序等函數(shù),可自行選擇使用,并歡迎繼續(xù)完善。 (8)
全部資料51hei下載地址:
MSP-EXP430F5529開發(fā)板硬件電路圖.zip
(744.97 KB, 下載次數(shù): 22)
2018-8-5 10:24 上傳
點擊文件名下載附件
|