新闻  |   论坛  |   博客  |   在线研讨会
51单片机12864打点程序
mayer | 2009-09-01 19:41:49    阅读:3056   发布文章

 

 

 

void curve(unsigned char xlable,unsigned char ylable,bit dot)
{
 unsigned char H[1]={0};//读RAM寄存
 unsigned char L[1]={0};
 unsigned char xbuf;

 w_com(0x01);
 w_com(0x34);
 w_com(0x36); //功能设置:一次送8位数据,扩展指令集

 xlable=xlable+xoffset;//求相对零点
 ylable=ylable+yoffset;

 if(xlable<0)xlable=-1;//超出边界处理
 if(ylable<0)ylable=0;
 if(ylable>64)ylable=65;
 
 xbuf=xlable%16;
 xlable=xlable/16;
 if(ylable>32)//上半屏
 {
  ylable=64-ylable;//切换上下屏
  xbuf=15-xbuf;//x坐标归位
  w_com(0x80|ylable); //输入垂直地址
  w_com(0x80|xlable); //输入水平地址
  read_RAM();//屏蔽
  if(xbuf>7)
  {
   if(dot==0)
    H[0]=read_RAM()&(~(1<<xbuf-8));//擦点
   else
    H[0]=read_RAM()|1<<xbuf-8;//插点,需要打的点
    L[0]=read_RAM();
  }
  else
  {
   H[0]=read_RAM();//插点,需要打的点
   if(dot==0)
    L[0]=read_RAM()&(~(1<<xbuf));//擦点
   else
    L[0]=read_RAM()|1<<xbuf;
  }
  w_com(0x80|ylable); //输入垂直地址
  w_com(0x80|xlable); //输入水平地址
  w_byte(H[0]);
  w_byte(L[0]);
 }
 else //下半屏
 {
  ylable=32-ylable;
  xbuf=15-xbuf;//x坐标归位
  w_com(0x80|ylable); //输入垂直地址
  w_com(0x88|xlable); //输入水平地址
  read_RAM();//屏蔽
  if(xbuf>7)
  {
   if(dot==0)
    H[0]=read_RAM()&(~(1<<xbuf-8));//擦点
   else
    H[0]=read_RAM()|1<<xbuf-8;//插点,需要打的点
   L[0]=read_RAM();
  }
  else
  {
   H[0]=read_RAM();//插点,需要打的点
   if(dot==0)
    L[0]=read_RAM()&(~(1<<xbuf));//擦点
   else
   L[0]=read_RAM()|1<<xbuf;
  }
  w_com(0x80|ylable); //输入垂直地址
  w_com(0x88|xlable); //输入水平地址
  w_byte(H[0]);
  w_byte(L[0]);
 }
}

//清除屏幕
void BMP_clear( void )
{
     unsigned char i,j;unsigned char L[1]={0};
     w_com(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     w_com(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
   
           w_com(0x80|i);   //行位置
           w_com(0x80);      //列位置
           for(j=0;j<32;j++)            //256/8=32 byte
              w_byte(L[0]);
 }
}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客