/**********************************************
★ 点亮指定位置的一个点 ★
OLED_DrawPoint(x,y, draw)
//**********************************************/
void OLED_DrawPoint ( int x, int y, u8 draw )
//1、坐标值的数据类型改成int,因为有时候需要坐标起止点在屏幕外。
//2、画点和擦除点两个函数合二为一,添加参数draw,为1时画点、为0时擦点
//3、draw的数据类型不再用bit,是因为如果C51和C251的keil设置成“生成可重入函数”,或者在stm32里,不支持“bit”
{
int n; //点所在行的行号(page)
int m; //点所在小竖棍的第几位
if ( ( x < 0 ) || ( x > 127 ) || ( y < 0 ) || ( y > 63 ) ) return; //防止超出屏幕
// n = y / 8;
// m = y % 8;
n = (u8)(y >> 3); // n = 0 - 7
m = y - ( ( y >> 3 ) << 3 ); // m = 0 - 7
// 除法运算,改用移位的方式,因为除数是8的除号运算在C251的Keil编译会出错,C51和ARM版本没问题
if ( draw )
GRAM[ n *128 + x ] |= ( 0x01 << m );
else if ( !draw )
GRAM[ n * 128 + x ] &= ~( 0x01 << m );
}