MSP-EXP430F5529 白板子菜單及框架示例程序概覽=_=


下面我將從這幾方面介紹:

(一)【編寫目的】
(二)【快速使用】
(三)【程序概覽】
(四)【實戰例子】
(五)【其他】

 

(一)【編寫目的】

首先使用白板子的好處就是:自帶一塊LCD顯示屏,所以【如何能非常方便的使用LCD,結合板子的各個模塊實現相應需求】即為目的,

只為了【方便不了解的人能迅速上手通過修改添加相當少的代碼即實現相應需求】。

(二)【快速使用】

新建CCS工程(分享CCS5的下載地址  http://pan.baidu.com/s/1i48nYlB)

下載我的代碼,代碼已上傳至群文件,也可在此下載(http://download.csdn.net/detail/yws_swy/9830060

下載好之后解壓文件,將其內全部.c和.h文件復制

粘貼到剛才新建的工程里,全部覆蓋

然后連接好板子分別點擊這兩個標志,進行編譯連接和調試,過一會程序成功下載到板子上了,點擊運行

此時屏幕上即出現歡迎界面,按S2鍵進入菜單,滾動滾輪選擇功能,按S1鍵進入相應功能,至此,算是開始使用了。

(三)【程序概覽】

首先看一下目錄結構:

main【總入口】;

board【白板子各模塊驅動】;

dogs102x6【白板子液晶顯示屏】內含畫折線圖、顯示字符串、畫圓、畫線、畫圖片等函數;

globalvar【全局變量】如按鍵標志、滾輪ADC采樣值、當前菜單頁數等;

init【總體初始化】;

lib【基本運算庫】內含濾波函數、整數轉字符串函數、小數轉字符串函數、求最大值最小值函數、升序排序函數;

menu【通過滾輪配合菜單選項】;

user【用戶來編寫的程序】;

綜上,注意,如果不是十分了解盡量不要修改其他文件代碼,僅需修改Yuser.c文件即可。

 下面來看一下具體的代碼

main.c中僅初始化后調用了Yuser.c中的yUserStart();

Yuser.c文件中的yUserStart()里面的代碼才是真正的流程控制。

進入到Yuser.c文件(【提示】:按住Ctrl鍵並移動鼠標到函數名上,直到函數名下面出現下划線,此時單擊鼠標左鍵可快速進入函數內部查看)可以看到如下代碼:

至此足以看出大體流程,通過Ytotalitems設置菜單中的功能選項數量,在Ymenutext[]中寫好每一個選項的標題,然后用selection保存滾輪最后確定的選項,根據selection的值用switch...case...語句選擇執行不同的功能。這就是基本流程控制。

 

下面結合着寫好的這幾個例子具體來看:

(1)第一個函數yWelcome();

yDogs102x6_imageDraw(s505, 0, 0);畫圖片(不推薦費時間在這里,如有需要,詳細生成可參考http://download.csdn.net/detail/yws_swy/9581130)

這里我們只看yDogs102x6_stringDraw(0, 0, "Press S2 to Menu.",NORMAL_STYLE); //顯示字符串

這個函數接受了四個參數(起始行(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"時,僅白底黑字就會出現下面的一半黑一半白的情況:

此時改為NORMAL_STYLE+ROW_STYLE,就會對整行都有效:

最后while (!(Ybuttonspressed & BUTTON_S2)); 表示直到按下S2鍵才返回菜單,因為按下S2鍵觸發了按鍵中斷,中斷函數中修改了Ybuttonspressed的值,

這樣這里通過判斷Ybuttonspressed的值就知道是否按下了S2鍵,按下了則while結束,退出yWelcome函數。

(2)第二個函數yContrastSetting():

首先需要用滾輪采樣,則要yWheel_enable();使能滾輪及ADC,然后不停地通過yWheel_getPosition(25);獲取滾輪位置轉化為0~24之間的值來設置LCD對比度,直到S2鍵按下為止,最后別忘了禁止滾輪yWheel_disable();

(3)第三個函數ySimpleDraw

這里面調用了畫圓和畫直線的函數,還是那樣按住Ctrl鍵+鼠標單擊,進入函數內部查看每個參數含義:

(4)第四個函數yShowNum()

這里有兩個我寫好的函數yItoa()和yFtoa(),在Ylib.c中可以看到它們的定義,可以得知實現了把數值類型的數據轉換為字符串顯示到了LCD上。

 

(5)第五個函數yInputNum()

因為按鍵過少,所以只能通過滾輪轉到不同位置來輸入不同數值,比如想輸入7.96,則要通過滾輪分別轉到7、·、9、6(這里為了避免按鍵消抖,虛擬設置了S2為S1使能,即S1為確定鍵,但每次按S1鍵前必須按一次S2來使能S1,這樣就避免了可能抖動帶來的連續輸入了兩個7的情況)。輸入完畢后,再通過滾輪轉到END並確定結束,這時就會把輸入的字符串換算為值保存給gnum1。

(6)第六個函數yShowCurve()

實際上,這是通過調用很多次前面畫直線的函數來實現的,其中還用到了Ylib.c中的yFinMax、yFinMin求最值下標等函數,具體實現這里不細說,相關設置有幾處

(四)【實戰例子】

下面用上面提到的函數隨便寫個例子,比如實現一個fun函數,要求由滾輪轉動的位置轉換為0~100之內的數值,並實時顯示到LCD屏幕上,按S2鍵結束。

注意咯,在菜單上每添加一個功能基本上都是下面這四個步驟:

(1)添加菜單選項標題:

在Yuser.c中找到Ymenutext部分,在其后添加第6項功能fun。

(2)設置菜單選項個數:

將下面yUserStart()函數中的Ytotalitems的值由5改為6,表示有6項菜單選項。

(3)設置選項調用流程:

在下面的while(1)里面添加case 6的流程控制,表示第6項將執行fun()函數。

(4)編寫新增函數fun():

 

void fun(){
int value = 0;
char str[4] = "";
yWheel_init();//使能滾輪
while (!(Ybuttonspressed & BUTTON_S2)){//直到S2鍵按下才會退出
value = yWheel_getPosition(100);//將滾輪位置轉換為0~100之間的值
yItoa(value,str);//int整數轉換為字符串
yDogs102x6_stringDraw(0,0,str,NORMAL_STYLE+ROW_STYLE);//畫字符串
}
yWheel_disable();//禁止滾輪
}

//編譯運行即可發現菜單中已經多了一個fun選項,進入之后會隨着滾輪的轉動實時顯示一個0~100之間的數值,至此完成了一個菜單選項的添加。

(五)【其他】

這其中,還需要注意的有幾個問題:

(1)按鍵只有兩個,所以這里用滾輪+菜單來進行功能選擇;

(2)IO口過少,一般只做控制信號通用IO和顯示功能,復雜的功能容易和板上資源沖突,所以沒考慮ADC等功能;

(3)只設置了一層菜單,沒有編寫多層,一方面因為有了滾輪即使再多的功能都不擔心一層菜單顯示不下,另一方面因為多層菜單時需要考慮按鍵消抖,而一層菜單時S2鍵始終都是菜單鍵,S1鍵始終都是確定鍵,也就不需要考慮按鍵消抖了;

(4)為防止不必要的干擾,沒有設置背光亮度的PWM波,還降低了功耗;

(5)只寫出了以下三個在Yuser.c中的中斷函數,如有需要請在Yuser.c中自行添加

#pragma vector=PORT1_VECTOR //按鍵S1

#pragma vector=PORT2_VECTOR //按鍵S2
#pragma vector = ADC12_VECTOR

(6)最好不要用sprintf等支持不全的函數來把數值轉換為字符串,因為CCS5中支持sprintf,而CCS6中就不支持,所以這里最好使用Ylib.c中寫好的yItoa和yFtoa函數。

(7)此外,Ylib.c中還寫好了諸如簡單濾波,升序排序等函數,可自行選擇使用,並歡迎繼續完善。

(8)

/*相關學習資料分享:
* MSP-EXP5529開發板實驗指導書:
http://download.csdn.net/detail/yws_swy/9830063
* MSP430F5529 官方代碼例程庫:
http://download.csdn.net/detail/yws_swy/9830064
* MSP430F5529 中文手冊:
* http://download.csdn.net/detail/yws_swy/9789980
* CCS5的下載地址:
* http://pan.baidu.com/s/1i48nYlB
* LCD顯示動畫、圖片、漢字教程
* http://pan.baidu.com/s/1slfh9vv
* https://pan.baidu.com/s/1bpF1X4V
*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM