原帖由 juring 于 2011-12-5 11:22 发表 不错不错,那个模拟时钟部分怎么实现的?
5510的驱动方式确实纠结,但是其实只要我们能画点,什么图案都是能实现的。
我是这样做的:
1、在内存里开辟一段空间32x4x8bit用作模拟时钟的显存区,所有的画图操作都先对它操作,然后再更新。
2、写一个画点的函数,将实际的点(84x48)转化为5510的驱动数据。
/*-------------------------------------*/ void Write2CRam(char x,char y) { char byte=1<<(y%8); CRam[x][y/8]|=byte; }
3、由给出的圆心坐标和半径画出时钟位置。
4、由传入的时间数值计算出小时和分钟指针点位置,并由圆心到其之间画线。
5、为了解决时钟旋转问题,在每次更新指针前,清除上一次指针(也就是反画点),并储存这次指针终点的坐标。
/*-------------------------------------*/ void Clear2CRam(char x,char y) { char byte=1<<(y%8); CRam[x][y/8]&=~byte; }
6.调用一次重画或部分重画,将显存内的数据更新到5510里面去。这样每次刷新只用重画指针的那条线就好了,省时省力。
其实其它的都是很简单的,只是实现画点和清除点和别的LCD不同而已。
[ 本帖最后由 shower.xu 于 2011-12-6 10:58 编辑 ] |