下面我将从这几方面介绍: (一)【编写目的】
(二)【快速使用】
(三)【程序概览】
(四)【实战例子】
(五)【其他】 (一)【编写目的】 首先使用白板子的好处就是:自带一块LCD显示屏,所以【如何能非常方便的使用LCD,结合板子的各个模块实现相应需求】即为目的, 只为了【方便不了解的人能迅速上手通过修改添加相当少的代码即实现相应需求】。 (二)【快速使用】 下载好之后解压文件,将其内全部.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_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)
全部资料51hei下载地址:
MSP-EXP430F5529开发板硬件电路图.zip
(744.97 KB, 下载次数: 22)
|