打印

#TI校园故事# + 我的大学都是和430一起度过

[复制链接]
3372|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 校园故事 于 2012-10-26 09:51 编辑

  院系:桂林电子科技大学 电子工程与自动化学院

  我今年大三,可以说过去的两年多的时间,都是在实验室度过。

  我和TI的故事,基本上就是我和MSP430的故事!

  从大一刚进大学校园,就在在嵌入式系统训练基地里学习,大一上学期的努力,熟悉了51单片机,后来一个学长告诉我有一个型号的单片机,只要用几个水果就可以供电,而且可以运行很长的时间,它的低功耗和丰富强悍的片内资源让我着迷。那就是MSP430!!!而且,TI对于大学生有着优惠的支持,可以免费申请芯片!之后的一年多,一直在和MSP430打交道!

  从msp430f149到MSP430F6638,从基本的IO到66系列的usb,越来越喜欢430!但是单片机只是一个平台,一个让我的代码运行的平台,在熟悉了430之后,使用430做过低功耗的超声波测距,430主控的简易信号发生器,430主控的循迹智能小车,430重力感应游戏机!!!

  下面就说一说我的游戏机吧:

  我的 重力感应游戏机(msp430主控,adxl345三轴加速度计, 大二的作品)

  暑假没回家,琢磨着做点东西。恰好看到一个同样不回家的朋友在做03年的电子设计国赛题目,跷跷板爬坡小车。他用到了ADXL345重力感应加速度计,觉得不错,可以拿来玩玩,而且最近体感有关的也很热门,呵呵,做一个重力感应游戏机试试?

  前前后后大概一个礼拜多的时间写出了第一版程序(直接用以前的430小班子加杜邦线加模块),直接控制adxl的角度(X/Y轴)划算成屏幕的坐标,后来发现这样不好,控制很不好。花了一个下午改成了只要x轴往左就屏幕的显示小人往左,往右就小人往右。但是又发现,控制很灵敏,太灵敏也不好。因为。。。即使传感器水平摆放,但是由于手的抖动,还是会不停的左移右移。后来加了阈值判断处理。嗯嗯,不错,然后加了难度控制,各种人物死法。。。

  最让我喜欢的是整个作品的屏幕驱动。 使用的是常见的 nokia 5110屏幕,但是用过的人知道,他是不能很好直接控制某一个点,而是只能一次控制屏幕上的一页(纵向8个点)。后来想可以通过计算点的偏移量来控制具体的纵向一个点。

  于是,我这样写:

  void draw_point(unsigned char x,unsigned int y)//84列,6行,每行8个点
  {
  if(x > x_max)
  x = x_max;
  if(y > y_max)
  y = y_max;
  unsigned char hang = 0,yu = 0; // 列的增进量
  hang = y / 8;
  yu = (0x01 << (y % 8));
  LCD_set_XY(x,hang);
  LCD_write_byte(yu,1);
  }

  包括后来发现很多人,几乎大多数用5110屏幕的都会这样写。但是!!!

  如果你这样做你就会发现,画竖线就悲剧了!

  纵向的连续8个点(1 page)只能有一个点,因为其他的点都被后面的点的偏移量给偏移跑了!

  So,我这样,

  想到了以前学easyX图像编程的时候的帧缓存,先存在显存里(一个二维数组),再一起显示。这样就可以 运用C语言里面的 |= 或等于,使得后面的点的偏移量不影响之前画的点,同时还能够进行显示的叠加。所以~~可以看到我显示汉字或者别的图形,是可以做到类似于透明背景的效果!!!

  程序是这样,先定义个缓存:

  unsigned char dis_buf[6][84] = {
  0x00
  };
  然后:
  /*------------------------------------------
  //画点的函数

  直接在屏幕上画点来画图不可以

  因为yu = (0x01 << (y % 8));这一句会导致把别的点

  用空格覆盖掉,要想办法用 |=,所以,嘿嘿,缓存就可以了

  ------------------------------------------*/
  void draw_point(unsigned char x,unsigned int y)//84列,6行,每行8个点
  {
  if(x > x_max)
  x = x_max;
  if(y > y_max)
  y = y_max;
  unsigned char hang = 0,yu = 0; // 列的增进量
  hang = y / 8;
  yu = (0x01 << (y % 8));
  dis_buf[hang][x] |= yu;
  }
  对显示缓冲先修改。

  到显示的时候这样用:
  void buffer_clear();
  //这里放你需要显示的东西比如
  draw_point(44,12);
  draw_circle(24,24,8);
  buffer_show();
  就可以啦!!

  你会发现,现在显示任何东西都和以前使用ILI9320等彩屏之类的点阵屏幕一样正常了,

  而且,那些画线啊,画圆函数啊都可以移植过来了。

  /************************************************************
  帧缓存 这里使用到了将改变的要显示的点先存储在数组(buffer)里面

  下次显示再整幅画面一起刷新。

  ************************************************************/
  void buffer_show() // 帧缓存 这里使用到了将改变的要显示的点先存储在数组(buffer)里面

  {
  unsigned char y,x;
  LCD_set_XY(0,0);
  for(y = 0;y < 6;y ++)
  for(x = 0;x < 84; x++)
  {
  LCD_write_byte(dis_buf[y][x],1);
  }
  }
  void buffer_clear()
  {
  unsigned char y,x;
  for(y = 0;y < 6;y ++)
  for(x = 0;x < 84; x++)
  {
  dis_buf[y][x] = 0X00;
  }
  }
  很多人(像我这样的菜鸟)也许会这样说:

  你显示东西要那么麻烦,还要多几句清除缓存,显示缓存,多麻烦!

  但是,如果你做过图像处理,想要做到显示叠加,放大,缩小,移动,就要用到显存了。当然,像以前接触过的S3C2440等高级的ARM自带TFT处理能力的除外。。。

  这个只限于使用一般的MCU控制LCD。思想是通用的嘛。呵呵。

  大三了,头疼是考验还是继续在实验室呆着。。。O(︶︿︶)o 唉人生啊。

相关帖子

沙发
gaoyang9992006| | 2012-10-26 10:45 | 只看该作者
楼主怎么发这么多贴,不放一个贴里?

使用特权

评论回复
板凳
tong710| | 2012-10-26 17:19 | 只看该作者
这个ID,这个楼主是21IC编辑部的账号

使用特权

评论回复
地板
teabottle| | 2012-10-28 20:29 | 只看该作者
向你学习

使用特权

评论回复
5
acer4736| | 2012-10-28 20:35 | 只看该作者
看的我的心都痒痒了 呵呵

使用特权

评论回复
6
jinpaidianzi| | 2012-10-28 20:45 | 只看该作者
用过430的顶你

使用特权

评论回复
7
wangjinlili| | 2012-10-28 20:51 | 只看该作者
向你学习

使用特权

评论回复
8
u880| | 2012-10-28 21:00 | 只看该作者
羡慕你

使用特权

评论回复
9
G21372| | 2012-10-28 21:05 | 只看该作者
写的相当有深度了

使用特权

评论回复
10
yangguangaisha| | 2012-10-28 21:10 | 只看该作者
谁知道在哪里投票

使用特权

评论回复
11
gaosheng4451| | 2013-3-21 13:40 | 只看该作者
楼主  msp430能驱动三轴加速度传感器吗  想学习一下  

使用特权

评论回复
12
gaosheng4451| | 2013-3-21 13:43 | 只看该作者
楼主 能送点msp430的学习资料不??急需 1249924451@qq.com   

使用特权

评论回复
13
pmp| | 2013-3-29 21:07 | 只看该作者
不错,向楼主学习的。

使用特权

评论回复
14
348977718| | 2013-3-29 23:12 | 只看该作者
楼主也让我们一起学习下430吧,能把你的资料发给我一份吗?万分感谢  348977718@qq.com

使用特权

评论回复
15
tong1991海深| | 2013-4-6 20:28 | 只看该作者
求ADL345的资料

使用特权

评论回复
16
明明很讨厌| | 2013-4-6 22:51 | 只看该作者
ADL345是很通用的一种加速度传感器,支持I2C。大家用软件模拟就行,关于它的资料,大家应该很容易找到。

使用特权

评论回复
17
qingx| | 2013-4-7 11:14 | 只看该作者
是楼主的原创吗?

使用特权

评论回复
18
mmbs| | 2013-4-7 22:42 | 只看该作者
向楼主学习,。

使用特权

评论回复
19
侯毓升| | 2013-9-18 15:27 | 只看该作者
来看看故事。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

41

帖子

0

粉丝