红 {MOD}为我标注的问题
unsigned char PLAYBUF[64];
void point(unsigned char x,unsigned char y,bit c)
{
unsigned char i;
if(x>=32) return; //这两行是干什么的?怕画点画出点阵的范围吗?
if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?
i=0x80; //这个变量准备干啥?
i>>=x-((x>>3)<<3); //这是干什么的?为什么先向右移,又向左移?不是等于没移?
if(c)
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i; //这句彻底看不懂...
else
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] &= ~i;
}
问题挺多的,请各位高人赐教!给08口的规范更好,先谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?嗯,是的
不是等于没移? 右边三位清零
void point(unsigned char x,unsigned char y,bit c)
{
unsigned char i;
if(x>=32) return; //这两行是干什么的?怕画点画出点阵的范围吗?
if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?(你说的对)
i=0x80; //这个变量准备干啥?(这个是准备进行移位的值)
i>>=x-((x>>3)<<3); //这是干什么的?为什么先向右移,又向左移?不是等于没移??(这个是计算到底是第Y行的第X位)
if(c)
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i; //这句彻底看不懂...(根据C的值来让Y行X位亮与不亮)
else
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] &= ~i;
}
、、把全部程序发上来研究研究啊
你的程序跟下面这段差不多,不过我这个是双 {MOD}的。
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Function : void LEDWritePoint(unsigned char X,unsigned char Y,unsigned char Color,unsigned char bitHIGHorLOW)
- * Description : 函数功能、性能描述
- * Calls : 被本函数调用的函数清单
- * Called By : 调用本函数的函数清单
- * Table accessed: 被访问的表(数据库操作用)
- * Tabled Updated: 被修改的表(数据库操作用)
- * Input : 输入参数、取值说明与关系
- * Output : 输出参数、类型说明
- * Return : 函数返回值说明
- * Others : (Screen sequence)
- * X1 ·····→X10
- * · ·
- * ↓ ↓
- * · ·
- * Y32·····→Y32
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- void LEDWritePoint(unsigned char X,unsigned char Y,unsigned char Color,unsigned char bitHIGHorLOW)
- {
- unsigned char dataR = 0x00;
- unsigned char dataG = 0x00;
- unsigned char Bite = 0x00;
- if ((X < X_MAX) && (Y < Y_MAX))
- {
- switch (Color)
- {
- case 0: dataR = LEDBUFFer[(Y*10) + (X/8)];
- break;
- case 1: dataG = LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))];
- break;
- case 2: dataR = LEDBUFFer[(Y*10) + (X/8)];
- dataG = LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))];
- break;
- default:
- break;
- }
- Bite = 0x01 << (X >> 3); //Bite = 0x01 << (X%8);Bite = 0x01 << (X>>3);Bite = 0x01 << (X&0x07);
- switch (Color)
- {
- case 0: if (0 == bitHIGHorLOW) { dataR &= (~Bite); }
- if (1 == bitHIGHorLOW) { dataR |= Bite ; }
- LEDBUFFer[(Y*10) + (X/8)] = dataR;
- break;
- case 1: if (0 == bitHIGHorLOW) { dataG &= (~Bite); }
- if (1 == bitHIGHorLOW) { dataG |= Bite ; }
- LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))] = dataG;
- break;
- case 2: if (0 == bitHIGHorLOW)
- {
- dataG &= (~Bite);
- dataR &= (~Bite);
- }
- if (1 == bitHIGHorLOW)
- {
- dataG |= Bite ;
- dataR |= Bite ;
- }
- LEDBUFFer[(Y*10) + (X/8)] = dataR;
- LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))] = dataG;
- break;
- default:
- break;
- }
- }
- }
复制代码帮得了这次,帮不了下次,C语言操作符就那几个,自己推敲一下就明白了
明显是LED点阵屏的!!
一周热门 更多>