师弟。。。不能做伸手党丫。。。: )
好吧说正经的。。
首先最基本的要求是点阵驱动。
因为16x16,要用32个I/O口,对于89S51单片机这是不现实的。所以需要I/O口扩展。I/O扩展有很多方法,比较常用的是用四个锁存器(74HC573),把一组八个I/O口的数据在四个时钟周期内分别锁存在四个锁存器里。这是最简单最笨的方法(用12个IO口),而且有缺陷。。
更好的方法是利用移位寄存器(74HC595),用SPI总线通信的方式(单片机的硬件SPI接口,或软件I/O模拟SPI)。四个595就能存32位了——用环形SPI总线的方式在时钟的驱动下把32位数据逐一移入595内部的寄存器,然后再让595的输出端口刷新。这样非常节省IO口(用3个就行),硬件电路也简单很多
第二,你说的“重力感应”。。。
这个也是能实现的 :P
重力感应(其实就是测量倾角)需要加速度传感器。测量倾角其实就是测量重力在传感器的水平轴向的分量(这分量和传感器与水平面间夹角呈三角函数的关系),这个分量测量值与传感器测量1G时的输出数值之比做arcsin变换就是倾角。
加速度传感器要用数字的,因为89s51单片机没有模拟量采集用的A/D接口。淘宝有售,一般还有例程,可以参考。我用过的是MMA8451。当然你也可以用带A/D的增强型51——STC12C5A60S2,然后用模拟加速度计MMA7361,不用总线通信编程。
这样的工程网上是找不到现成东西的,希望你能自己学习,这对你也很有帮助。零基础学51可以看杜阳《爱上单片机》。买块开发板最好。
另外想要快速开发用arduino比51好。。。是用老外用AVR搞的,不但运算速度快、接口丰富,而且有现成的驱动函数调用就行。