return;
}
switch (Operation) {
case SET: // (x, y)位置置位,灯灭
FrameBuffer[x] |= 1《《 y;
break;
case CLEAR: // (x, y)位置清零,灯亮
FrameBuffer[x] &= ~(1《《 y);
break;
case NEGATE: // (x, y)位置取反,灯状态改变
FrameBuffer[x] ^= 1《《 y;
break;
default:
break;
}
}
// LED点阵屏清屏,显存对应1的位置,灯灭,0相应的灯才点亮
voidMatrixClearScreen()
{
unsigned char i;
for (i=0; i《8; i++) {
FrameBuffer[i] = 0xff;
}
}
// 点阵平移,上下左右四个方向平移1,平移空缺位置用数据Filling填充
void MatrixMove(unsignedchar Direction, unsigned char Filling)
{
unsigned char i;
switch (Direction) { // 判断平衡的方向
case MOVE_UP: // 向上平移1,每列数据第7位移到第6位,如此类推
for (i=0; i《8; i++) {
FrameBuffer[i] =(FrameBuffer[i]》》1) | ((Filling《《(7-i))&0x80);
}
break;
case MOVE_DOWN: // 向下平移1,每列数据第0位移到第1位,如此类推
for (i=0; i《8; i++) {
FrameBuffer[i]= (FrameBuffer[i]《《1) | ((Filling》》i)&0x01);
}
break;
case MOVE_LEFT: // 向左平移1,右一列的数据移到当前列中,如此类推
for (i=0; i《7; i++) {
FrameBuffer[i] = FrameBuffer[i+1];
}
FrameBuffer[i] = Filling;
break;
case MOVE_RIGHT: // 向右平移1,左一列的数据移到当前列中,如此类推
for (i=7; i》=1; i--) {
FrameBuffer[i] = FrameBuffer[i-1];
}
FrameBuffer[i] = Filling;
break;
default:
break;
}
}
我们在点阵屏模块头文件Matrix.h中实现模块的宏定义及接口访问宏实现,使之方便移植及修改接口配置。模块头文件同时也引出模块的接口函数,如MatrixScan()为点阵屏刷新函数,需周期性调用刷新点阵屏显示。点阵屏动态显示功能模块文件Matrix.h内容如下:
#ifndef__Matrix_H__
#define__Matrix_H__
#ifdef__cplusplus
extern”C“ {
#endif
#define SET 0x1 //置1操作
#define CLEAR 0x2 // 清0操作
#define NEGATE 0x3 //取反操作
#defineMOVE_UP 0x1 // 向上平移1
#defineMOVE_DOWN 0x2 // 向下平移1
#defineMOVE_LEFT 0x3 // 向左平移1
#defineMOVE_RIGHT 0x4 // 向右平移1
// 列数据输出到P0口
#defineMatrixOutputData(Dat) {P0 = (Dat);}
// P2口输出对应列的扫描选择线,低有效
#defineMatrixOutputSelect(Select) {P2 = ~(1《《(Select));}
voidMatrixClearScreen(void);
voidMatrixMove(unsigned char Direction, unsigned char Filling);