3823|9

2002

帖子

24

TA的资源

五彩晶圆(高级)

楼主
 

【M4开发板Hanker试用狂-Shower.Xu】5、myPaint-我的小画板 [复制链接]

折腾了一天,总算搞完了。

自从参看例程代码,弄明白了触摸屏驱动后,觉得触摸屏的操作太方便了,而且没有之前想象的那么难

用,我们只要设置好AD和定时器触发采样,驱动程序就会把采样值分析并生成三个参数(unsigned long 

ulMessage,long lX, long lY),即动作属性:按下,松开或滑动,以及当前坐标。我们只要在需要相应

的程序里添加一个回调函数就行了。小画板这个项目完全就是靠这三个参数展开的。关于触摸屏的驱动

请看上一篇https://bbs.eeworld.com.cn/thread-330302-1-2.html

1、首先是界面。
标题栏很简单,画几个矩形框就搞定了,略过。
工具栏呢,我从xp的画图里面截取了几个常用的图标,做成16bit的bmp文件,作为一个资源数组引入到

项目里,当我们要显示图片的时候,直接调用数组数据就好了,很方便。这里有个要注意的地方,就是

bmp文件的前0x45个数据是文件描述字符,不是位图数据,所以我们要跳过,从0x46开始,每个像素2字

节,数序读出显示就行了。
启动logo同样的做法,但是我碰到一个问题,就是颜色始终和PC上不对,仔细核对了下LCD的配置,发现

03寄存器的第12位决定了RGB还是BGR的顺序,修改之后问题解决。
2、按钮触摸实现
先创建了一个位图按钮结构体,每个按钮包含有很多属性
typedef struct
{
  unsigned char id                              ; // 识别号
  unsigned int  x                               ; // 起始位置横坐标x
  unsigned int  y                               ; // 起始位置纵坐标y
  unsigned char width                           ; // 宽度
  unsigned char high                           ; // 高度
  unsigned char property                        ; // 属性
  unsigned short font_color ; // 文字颜色
  unsigned short button_color                ; // 按钮颜色
  unsigned char image_index ; // 按钮图像编号
  unsigned char status                          ; // 状态
  char *caption                     ; // 字符串
} BUTTON_DIG                                    ; // 按钮控件
状态又有如下属性
//status位定义
#define Enable 0x01 //使能
#define Visable 0x02 //可见
#define Refresh 0x04 //需要刷新
#define Fouse 0x08 //当前焦点
#define Ico 0x10 //是否使用图形
#define Down 0x20 //按下状态
#define bReadOnly 0x40 
#define bSelect 0x80 //按下状态
我们创建按钮时把各自的值赋给它们。
并实现两个简单的方法
extern unsigned char CreateButtonDig(BUTTON_DIG *newbtn);
extern void Refresh_Btn_Dig(BUTTON_DIG newbtn);
第一个用来创建按钮,第二个用来刷新按钮。(真的很简单,我都不好意思说...)
我们在主文件里声明了一个TS_Message()函数来接受触摸驱动过来的数据,通过判断当前的坐标和按钮

的x,y坐标做比较来判定按钮是否被按下。
为了区分那个按钮被点击,我做了两种按钮的背景图片以示区分。
按钮按下或者颜色被选择改变时,右侧的状态文字和它的颜色会变更以作出指示。
每次按钮的文字或图片变更之后会设置Refresh并调用刷新程序,这样有针对性的刷新避免了整个画面的

闪烁。
3、功能的实现
pen和brush功能很简单的做了一下,没做平滑处理,就是在MOVE状态下画点或画小方块,如果想做的好

可以把数据处理一下滤除偏移的噪点,笔画也可以做成园或仿毛笔墨迹,更逼真。
Eraser功能更简单,按背景色画小方框即可。
画线、圆和矩形做了点变通,在PC上都是拖拽而且即时显现的,但那要大量的运算和缓冲区,即内存空

间,考虑到我们的资源有限,我这样变通了一下处理:
线:拖拽画线,在落笔点和起笔点作为两个短点画线,抬笔才画。
圆:需要两次点击,第一次点击确定圆心,第二次点击确定半径,将会以第二点到圆心的距离为半径画

圆。每次点击状态栏会有提示是圆心还是半径。
矩形:需要两次点击,第一次为左上角(或右上角都行)坐标,第二次为对应脚坐标,第二次点击结束

时会画矩形,每次点击会提示。
这里做了一个小选择,即两种画矩形模式,一种为空心矩形,一种为实心矩形,可点击矩形图标切换,

状态栏会有提示Rect M1/M2.
颜色的选择和按钮一样,只是声明了一个全局变量来储存当前颜色值,每次选择会改变。状态栏的文字

颜色也会跟着改变来作为当前颜色的指示。
最后一个图标是清屏按钮,重新开始新的画图
4、缺点
a.原计划是把图像的更新和按键处理部分分开来,分析放到主函数循环里面处理,这样实时性好,节约硬件资源,由于时间精力等%&…¥%杂七杂八的原因,搁浅了。
b.程序很多地方数据声明和函数调用有资源浪费嫌疑,没有检查和优化。
c.很想加入文字功能的,以后看时间吧.....抱歉了。
希望这个小东西能起到抛砖引玉的作用

源代码在这里:程序没有优化,仅供参考,TI库默认安装在C:\StellarisWare,即可编译。
Calculator2.7myPaint.rar (115.85 KB, 下载次数: 16)
视频在这里。顺便请教那个软件可以把视屏“竖”过来。

[ 本帖最后由 shower.xu 于 2012-5-26 21:50 编辑 ]

IMG_1321.JPG (71.63 KB, 下载次数: 1)

IMG_1321.JPG

IMG_1322.JPG (91.85 KB, 下载次数: 2)

IMG_1322.JPG

IMG_1323.JPG (36.69 KB, 下载次数: 1)

IMG_1323.JPG

IMG_1324.JPG (29.43 KB, 下载次数: 1)

IMG_1324.JPG

IMG_1326.JPG (86.2 KB, 下载次数: 1)

IMG_1326.JPG

IMG_1327.JPG (107.61 KB, 下载次数: 1)

IMG_1327.JPG

IMG_1328.JPG (116.62 KB, 下载次数: 1)

IMG_1328.JPG

最新回复

不过LZ是不是没有软滤波呢,怎么看着写的字会有这么多的干扰?  详情 回复 发表于 2012-5-28 10:05
 
点赞 关注

回复
举报

43

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

给力了,希望给我们讲解讲解

 
 

回复

1246

帖子

19

TA的资源

五彩晶圆(初级)

板凳
 

回复 楼主 shower.xu 的帖子

期待进一步的成果!!
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

4
 
原帖由 vvv9876 于 2012-5-26 18:43 发表 哈哈,这图片界面,你自己编译的图?
开机logo是自己组合的一张位图,工具栏是截取xp画图程序的图标。
由于还没弄sd操作那部分,直接把位图作为资源包含进去的。

 
 
 

回复

7219

帖子

195

TA的资源

五彩晶圆(高级)

5
 
xiang想认识楼主 接受您的洗礼
 
 
 

回复

2453

帖子

19

TA的资源

五彩晶圆(中级)

6
 
很好很强大
 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

7
 

居然有这个效果,很好很强大
 
 
 

回复

245

帖子

0

TA的资源

纯净的硅(初级)

8
 
好速度啊! 要跟上了
 
个人签名学习靠的就是努力,靠的就是坚持……
 
 

回复

849

帖子

0

TA的资源

纯净的硅(高级)

9
 
不过LZ是不是没有软滤波呢,怎么看着写的字会有这么多的干扰?
 
个人签名只有想不到,没有做不到。
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

10
 
原帖由 shilaike 于 2012-5-28 10:05 发表 不过LZ是不是没有软滤波呢,怎么看着写的字会有这么多的干扰?
1、数据没做滤波处理,不会也没时间。有资料请给个地址,学习一下。
2、手头没有触摸笔,用的一个小塑胶鳄鱼玩具的尾巴,怕把屏按坏了,没敢用力的说。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表