OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7792|回复: 1

请问一下原子哥,这里面的temp>>=1;起什么作用?

[复制链接]

22

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-4-17
在线时间
0 小时
发表于 2012-6-28 15:19:04 | 显示全部楼层 |阅读模式

最近在做LCD的编程,基本的函数都会调用,可是我分析了好久,不理解temp>>=1; 起什么作用,每一次循环temp的值不是要被重新赋值的嘛,这里面为什么要右移一位呢??、
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 x_size,u8 y_size,u16 color,u8 mode)

#define MAX_CHAR_POSX  800
#define MAX_CHAR_POSY  480
   u8 temp,x_loop,all_loop;
 u16 pos;    u8 t,i;
   u16 colortemp=POINT_COLOR; //将原来的颜色保存
   POINT_COLOR=color;      //画笔颜色赋值
 x_loop=x_size/8;   //横向循环的次数
 all_loop=x_loop*y_size;//计算一共需要循环多少次
     
    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return; 
    num=num-' ';//得到偏移后的值
     
    if(mode==1)//叠加方式
    {
          for(pos=0;pos<all_loop;)
        {
         for(i=0;i<x_loop;i++)
         {
          temp=asc2_3216[num][pos];
          for(t=0;t<8;t++)
             {                
                 if(temp&0x01)
      LCD_DrawPoint(x+t+8*i,y+pos/x_loop);//画一个点    
                 temp>>=1;
             }
          pos++;   
         }
          }
    }
    if(mode==0)//非叠加方式   填充方式
    {

       for(pos=0;pos<all_loop;)
     {
      for(i=0;i<x_loop;i++)
      {
       temp=asc2_3216[num][pos];
       for(t=0;t<8;t++)
          {                
                  if(temp&0x01)POINT_COLOR=color;
                    else POINT_COLOR=BACK_COLOR;  
                    LCD_DrawPoint(x+t+8*i,y+pos/x_loop);//画一个点 
              temp>>=1;
          }
       pos++;   
      }
       }
    }  

  OINT_COLOR=colortemp;           
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-4-17
在线时间
0 小时
 楼主| 发表于 2012-6-28 15:26:45 | 显示全部楼层
不好意思,我明白了,右移可以保证为1的位置都画一个点,为0的 不画点。
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 08:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表