请问这段控制单元板的函数什么意思?

2020-01-30 14:17发布

红 {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口的规范更好,先谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
hhxb
1楼-- · 2020-01-30 18:34
这两行是干什么的?怕画点画出点阵的范围吗?
        if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?嗯,是的
不是等于没移? 右边三位清零
习学发开
2楼-- · 2020-01-30 19:24
 精彩回答 2  元偷偷看……
HeP028
3楼-- · 2020-01-30 20:14
本帖最后由 HeP028 于 2013-2-4 23:24 编辑

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}的。
  1. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. * Function      :  void LEDWritePoint(unsigned char X,unsigned char Y,unsigned char Color,unsigned char bitHIGHorLOW)
  3. * Description   :  函数功能、性能描述
  4. * Calls         :  被本函数调用的函数清单
  5. * Called By     :  调用本函数的函数清单
  6. * Table accessed:  被访问的表(数据库操作用)
  7. * Tabled Updated:  被修改的表(数据库操作用)
  8. * Input         :  输入参数、取值说明与关系
  9. * Output        :  输出参数、类型说明
  10. * Return        :  函数返回值说明
  11. * Others        :  (Screen sequence)  
  12. *                                         X1 ·····→X10
  13. *                                    ·                        ·
  14. *                                          ↓                            ↓
  15. *                                          ·                            ·
  16. *                                        Y32·····→Y32                       
  17. *                
  18. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  19. void LEDWritePoint(unsigned char X,unsigned char Y,unsigned char Color,unsigned char bitHIGHorLOW)
  20. {
  21.         unsigned char dataR = 0x00;
  22.         unsigned char dataG = 0x00;
  23.         unsigned char Bite  = 0x00;

  24.         if ((X < X_MAX) && (Y < Y_MAX))
  25.         {
  26.                 switch (Color)
  27.                 {
  28.                         case 0:        dataR = LEDBUFFer[(Y*10) + (X/8)];
  29.                                         break;
  30.                         case 1: dataG = LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))];
  31.                                         break;
  32.                         case 2: dataR = LEDBUFFer[(Y*10) + (X/8)];
  33.                                         dataG = LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))];
  34.                                         break;
  35.                         default:
  36.                                 break;
  37.                 }
  38.                 Bite = 0x01 << (X >> 3); //Bite = 0x01 << (X%8);Bite = 0x01 << (X>>3);Bite = 0x01 << (X&0x07);
  39.                 switch (Color)
  40.                 {
  41.                         case 0: if (0 == bitHIGHorLOW)        {        dataR &= (~Bite);        }
  42.                                         if (1 == bitHIGHorLOW)        {        dataR |=   Bite ;        }
  43.                                         LEDBUFFer[(Y*10) + (X/8)] = dataR;
  44.                                         break;
  45.                         case 1: if (0 == bitHIGHorLOW)        {        dataG &= (~Bite);        }
  46.                                         if (1 == bitHIGHorLOW)        {        dataG |=   Bite ;        }
  47.                                         LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))] = dataG;
  48.                                         break;
  49.                         case 2: if (0 == bitHIGHorLOW)       
  50.                                         {
  51.                                                 dataG &= (~Bite);
  52.                                                 dataR &= (~Bite);
  53.                                         }
  54.                                         if (1 == bitHIGHorLOW)       
  55.                                         {
  56.                                                 dataG |=   Bite ;
  57.                                                 dataR |=   Bite ;
  58.                                         }
  59.                                         LEDBUFFer[(Y*10) + (X/8)] = dataR;
  60.                                         LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))] = dataG;
  61.                                         break;
  62.                         default:
  63.                                 break;
  64.                 }
  65.         }
  66. }
复制代码
proteldxp
4楼-- · 2020-01-30 23:40
12864吧?12864液晶第一行第一个的地址就是0x80.楼主看看12864的技术文档。
hhxb
5楼-- · 2020-01-30 23:49
习学发开 发表于 2013-2-4 19:34
请帮帮忙啊,挺急的

帮得了这次,帮不了下次,C语言操作符就那几个,自己推敲一下就明白了
HeP028
6楼-- · 2020-01-31 04:16
proteldxp 发表于 2013-2-4 23:04
12864吧?12864液晶第一行第一个的地址就是0x80.楼主看看12864的技术文档。

明显是LED点阵屏的!!

一周热门 更多>