12864打点程序出问题,各位高手帮帮忙啊

2019-03-24 21:04发布

下面是我写的LCD12864的打点程序,使用Mega128控制的,为什么总是不对呢?大家帮忙看看啊!
void set_dot(uchar x,uchar y,uchar color)
{
       uchar x_dyte,x_byte;//横坐标在哪一个字节,哪一位
       uchar y_dyte,y_byte;//纵坐标在哪一个字节,哪一位
       uchar high ,low;    //定义存放读出来的两个数据
       LCD12864_sendbyte(iCmd, LCDb_EXTCMD1);  //拓展指令集
       LCD12864_sendbyte(iCmd, LCDb_EXTCMD1);  //绘图关
       x_dyte=x/16;       //算出它在哪一个字节(地址) 一个地址是16位的  
       x_byte=x&0x0f;      //算出他在哪一位
       y_dyte=y/32;       //确定是上半屏还是下半屏  0:上半屏,1下半屏   
       y_byte=y&0x1f;      //计算0~31当中的哪一行,即确定是在第几行  
       LCD12864_sendbyte(iCmd,0x80+y_byte);//先写垂直坐标(最高位必须为1)
       LCD12864_sendbyte(iCmd,0x80+x_dyte+8*y_dyte);//水平坐标 下半屏的水平坐标起始地址为0x80   
                                                   //(+8*y_dyte)来确定    是用上半屏还是下半屏
       LCD12864_readbyte(iDat);        //先空读一次
       high=LCD12864_readbyte(iDat);   //读高位
       low=LCD12864_readbyte(iDat);    //读低位
       delay_ms(1);
       LCD12864_sendbyte(iCmd,0x80+y_byte);
       LCD12864_sendbyte(iCmd,0x80+x_dyte+8*y_byte);     
       if(x_byte<8)   
          {     if(color==1)   
                 LCD12864_sendbyte(iDat,high|(0X01<<(7-x_byte)));    //写高字节因为坐标是从左到右的
             else  
                 LCD12864_sendbyte(iDat,high&(~(0X01<<(7-x_byte))));
             LCD12864_sendbyte(iDat,low);               //原数据送回  
           }   
       else   
           { LCD12864_sendbyte(iDat,high);
             if(color==1)
                   LCD12864_sendbyte(iDat,low|(0x01<<(15-x_byte)));
             else
                   LCD12864_sendbyte(iDat,low&(~(0x01<<(15-x_byte))));
           }
        LCD12864_sendbyte(iCmd, LCDb_EXTCMD2);    //开绘图
        LCD12864_sendbyte(iCmd, LCDb_BASCMD);     //基本指令集
} 此帖出自小平头技术问答
0条回答

一周热门 更多>