找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4191|回復: 0
收起左側(cè)

MSP-EXP430F5529白板子菜單及框架示例程序概覽資料下載

[復制鏈接]
ID:383051 發(fā)表于 2018-8-5 10:25 | 顯示全部樓層 |閱讀模式
下面我將從這幾方面介紹:
(一)【編寫目的】
(二)【快速使用】
(三)【程序概覽】
(四)【實戰(zhàn)例子】
(五)【其他】
(一)【編寫目的】
首先使用白板子的好處就是:自帶一塊LCD顯示屏,所以【如何能非常方便的使用LCD,結(jié)合板子的各個模塊實現(xiàn)相應需求】即為目的,
只為了【方便不了解的人能迅速上手通過修改添加相當少的代碼即實現(xiàn)相應需求】。
(二)【快速使用】
新建CCS工程(分享CCS5的下載地址  http://pan.baidu.com/s/1i48nYlB
下載我的代碼,代碼已上傳至群文件,也可在此下載(http://download.csdn.net/detail/yws_swy/9830060
下載好之后解壓文件,將其內(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_imageDraw(s505, 0, 0);畫圖片(不推薦費時間在這里,如有需要,詳細生成可參考http://download.csdn.net/detail/yws_swy/9581130
這里我們只看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)
/*相關學習資料分享:
* MSP-EXP5529開發(fā)板實驗指導書:
* 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
*/

0.png

全部資料51hei下載地址:
MSP-EXP430F5529開發(fā)板硬件電路圖.zip (744.97 KB, 下載次數(shù): 22)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表