硬件设计
主要分成三部份:mcu主控制器部分,显示部分和按键输入部分。
1.主控制器部分:
介绍这部份前,先要说一下LPC1100系列的MCU,话说这个LPC1100系列的MCU是恩智浦(原飞利浦公司)于去年底推出的基于ARM
Cortex-M0
的32位微处理器,它有着低功耗,高性能,简单易用的特点,具官方称可达到10mA的电流,代码需求量降低了40%到50%的境界。这个系列的MCU一供有四种,根据FLASH和SDRAM的大小不同,分别是LPC1111,LPC1112,LPC1113,LPC1114.LPC1114的FLASH容量最大有32K,本次设计也是用这种。LPC1114有三种封装:LQFP48,PLCC44,HVQFN33.不同的封装对应的管脚数量也不一样。这里用的是最后一种封装,33个
的腿的。关于晶振,外部晶振可以达到50MHz,,内部的RC振荡器可以达到12MHz,虽说低了点,但是对于这个应用够了,而且不用外接元件。所以这里用的是内部RC振荡方式。为了简化设计,没设置复位电路,直接将复位脚接电源。剩下的管脚主要有两部分,一个是电源和
地的连接,一个通用IO的连接。
2.显示部分:
这里用的LCD是Nokia
3310的黑白LCD。这款LCD被阿莫电子评为性价比最好的AVR液晶。不过都是MCU,想当初都是从沙子里提炼出来的,就象人都是用泥土做出来的。在别的MCU上好用,用在这里应该也不错。下载了一个它的数据手册,看了一下,连接上好像也不是很难。它的控制
器叫PCD8544,是Philips
半导体出品的一款48x84点矩阵LCD控制/驱动。采用串行方式通讯,一个数据线和一个时钟线,再加上三个控制信号
[复位,使能,数据/命令选择],一共要占用MCU的5个通用IO口。这比那些并行8位的LCD用的IO口要少,也要好连接一些。照着网上的典型
电路,俺也相应画了一个和LPC1114的连接示意,如下图。
3.输入部份:
至于键盘输入,相对上面的部分来说,就要简单些啦。根据要求要有四个键:上下左右,所以这里也就用了四个按键。采用上拉方式,都通过
一个1K的电阻接电源。这样平时IO口读进来的是高电平,如果有一个按键按下,则变为低。
具体电路如下:
软件设计
主要从三部份考虑:食物的显示,蛇的移动,蛇的增长。
1.食物的显示:
采用随机数的方式产生显示位置,如果当前食物都被吃掉,则开始显示新的食物,用小方块表示。
2.蛇的移动:
采用定时器驱动,每次定时中断的时候,如果没有按键输入就沿着原有的方向前进一格,如果有按键输入则进行相应的判断向按键方向
移动,当然不允许有后退的情况。
3.蛇的增长:
每当蛇的位置和食物的位置重合,就将蛇的长度变长一格,并将食物总数减少一个。
具体数据流图如下:
开发工具:本来看网站上的宣传,打算用lpcxpresso的,但是下载了以后,发现它只能安装在WINNT上,对于俺这WIN2K的老机器根本没法
用。后来看介绍说是KEIL也支持LPC1100X,又在网上东找西找的,找到一个Keil
uVision4安上,又下载了一例子代码,是对LPC1100里的
大部分模块的测试,编译了一下,还算可以通过。就写到这里吧,至于具体编码还没有。
附:当然本设计完全处于理论分析中,如有纰漏,凡请各位高手指出。
参考文献:
LPC111x Preliminary user manual
LPC11xx Example Software Package [Keil uVison MDK 4.x]
pcf8544 datasheet