搜索
bottom↓
回复: 9

12864串行 绘图问题

[复制链接]

出0入0汤圆

发表于 2010-7-26 08:44:07 | 显示全部楼层 |阅读模式
大家有没有用过12964串口来进行画波形的?是不是速度很慢啊?我买的12864只能用串口,写完驱动程序发现屏幕显示的很慢。尤其是使用绘图RAM,是不是串行速率太低?
#include <mega16.h>
#include <delay.h>
#define CS PORTB.3
#define SID PORTB.2
#define SCLK  PORTB.1
#define uchar unsigned char
uchar data[255]={64,63,63,64,64,64,63,63,63,63,63,61,60,12,3,4,57,58,63,32,2,5,7,5,6};
bit finish=0;
unsigned int k=0;
void write (uchar n,uchar data)
{  
for(;n>0;n--)
   {  
        SCLK=0;
        SID=(data&0x80);
      SCLK=1;
      data<<=1;
   }
}
void wr_cmda(uchar dat,uchar data)
{   CS=1;
    delay_us(300);
    write(5,0xff);
    write(1,0);
    if(dat)
     write(1,0xff);
    else   
     write(1,0);
     write(1,0);
     delay_us(300);
     write(4,data);
     write(4,0);
     delay_us(300);
     data<<=4;
     write(4,data);
     write(4,0);
     delay_us(300);
    CS=0;
  }   

void locationXY(unsigned char x,unsigned char y)
{  
   switch(y)
    { case 0:y=0x80;break;
     case 1:y=0x90; break;
     case 2:y=0x88;break;
     case 3:y=0x98;break;
     default:y=0x80;break;
    }
   x=x&0x07;
  
   wr_cmda(0,x+y);
  
}
void wr_string(unsigned char *asc)
{   while((*(asc))!=0)
     
     {  wr_cmda(1,*asc);
      asc++;
      }
}
void wr_str_locaXY(unsigned char x,unsigned char y,unsigned char *str)
   {   locationXY(x,y) ;
       wr_string(str);
      
   }
void Initial_LCD(void)
{  wr_cmda(0,0x30);
   wr_cmda(0,0x30);
   wr_cmda(0,0x0e);
   wr_cmda(0,0x01);
   wr_cmda(0,0x06);
   wr_cmda(0,0x0c);
}
/***********************************************************************
功能:原顺序XY上画16点的线,  X:0-15    Y:0-31
************************************************************************/

void    Drawline(uchar x,uchar y)
{
wr_cmda(0,0x36);  //扩展指令
//wr_cmda(0,0x34);  //关绘图


  wr_cmda(0,y+0x80);  //写Y坐标,+0x80符合指令格式
  wr_cmda(0,x+0x80);  //写X坐标
  wr_cmda(1,0xff);     //高八位
  wr_cmda(1,0xff);  //低8位

wr_cmda(0,0x36); //开会图
wr_cmda(0,0x32); //基本指令
}                                         



/***********************************************************************
功能:清绘图RAM
************************************************************************/
void    ClrRam()
{
uchar x,y ;
wr_cmda(0,0x34);  //开扩展指令
wr_cmda(0,0x34);  //关绘图

for (x=0;x<16;x++)
{
  for(y=0;y<32;y++)
  {
   wr_cmda(0,y+0x80);
  wr_cmda(0,x+0x80);
  wr_cmda(1,0x00);
   wr_cmda(1,0x00);
   }
}
wr_cmda(0,0x36); //开会图
wr_cmda(0,0x32); //基本指令
}                                         



/***********************************************************************
功能:输出data[128]中的波形
***********************************************************************/
void draw_wave(void)         
{   uchar w, x,y,z;
     
     uchar a=0,b=0,c=0,d=0;
     uchar t;
     
     for(x=0;x<8;x++)          //上半屏
      {
        for(y=0;y<32;y++)
         {   
                  
             for(t=0;t<8;t++)                        //判断要写的数据,高八位
               {
                 if(data[16*x+t]==64-y)
                   {switch(t)
                     {
                       case 0:a|=0x80;  break;
                       case 1:a|=0x40;  break;
                       case 2:a|=0x20;  break;
                       case 3:a|=0x10;  break;
                       case 4:a|=0x08;  break;
                       case 5:a|=0x04;  break;
                       case 6:a|=0x02;  break;
                       case 7:a|=0x01;  break;
                     }   }
               }   
               
               
               for(t=8;t<16;t++)                        //判断要写的数据,低八位
               {
                 if(data[16*x+t]==64-y)
                   {switch(t)
                     {
                       case 8:b|=0x80;   break;
                       case 9:b|=0x40;   break;
                       case 10:b|=0x20;  break;
                       case 11:b|=0x10;  break;
                       case 12:b|=0x08;  break;
                       case 13:b|=0x04;  break;
                       case 14:b|=0x02;  break;
                       case 15:b|=0x01;  break;
                     }  }
               }  
            //wr_cmda(0,0x36);
           wr_cmda(0,0x34);  //扩展指令
                wr_cmda(0,0x34);  //关绘图         
              
                   wr_cmda(0,y+0x80);
                   wr_cmda(0,x+0x80);   //写xy坐标   
                 
                 
              wr_cmda(1,a);    //高八位
               wr_cmda(1,b);  //低8位
                //wr_cmda(0,0x36);
                   //wr_cmda(0,0x32);  
                        
               a=0;
                b=0;
            
          }
      }            //Done  
     
       for(z=8;z<16;z++)          //下半屏
      {
        for(w=0;w<32;w++)
         {   
            
                 
             for(t=0;t<8;t++)                        //判断要写的数据,高八位
               {
                 if(data[16*(z-8)+t]==32-w)
                  { switch(t)
                     {
                       case 0:c|=0x80;  break;
                       case 1:c|=0x40;  break;
                       case 2:c|=0x20;  break;
                       case 3:c|=0x10;  break;
                       case 4:c|=0x08;  break;
                       case 5:c|=0x04;  break;
                       case 6:c|=0x02;  break;
                       case 7:c|=0x01;  break;
                     }  }
               }   
               
               
               for(t=8;t<16;t++)                        //判断要写的数据,低八位
               {
                 if(data[16*(z-8)+t]==32-w)
                   {switch(t)
                     {
                       case 8:d|=0x80;   break;
                       case 9:d|=0x40;     break;
                       case 10:d|=0x20;     break;
                       case 11:d|=0x10;    break;
                       case 12:d|=0x08;    break;
                       case 13:d|=0x04;    break;
                       case 14:d|=0x02;    break;
                       case 15:d|=0x01;    break;
                     }   }
               }
                       
                     
             // wr_cmda(0,0x34);  //扩展指令
             // wr_cmda(0,0x34);  //关绘图         
              
                wr_cmda(0,w+0x80);
                 wr_cmda(0,z+0x80);   //写xy坐标   
                 
                 
                    wr_cmda(1,c);    //高八位
                     wr_cmda(1,d);  //低8位

                     wr_cmda(0,0x36); //开会图
                     
                 // wr_cmda(0,0x32); //基本指令   
               c=0;
                d=0;         
               // delay_ms(50) ;  
                 
              
          }
      }            //Done   
     
  }

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-7-26 12:44:00 | 显示全部楼层
肯定比并口慢了

出0入0汤圆

发表于 2010-11-7 20:41:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 22:02:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-10 21:37:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-21 13:54:01 | 显示全部楼层
今天刚把串口调试好。

出0入0汤圆

发表于 2011-8-15 14:52:05 | 显示全部楼层
大家有没有用过12964串口来进行画波形的?

怎么变成12964了??

出0入0汤圆

发表于 2011-8-17 17:27:24 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-19 17:13:05 | 显示全部楼层
回复【6楼】sn516952
-----------------------------------------------------------------------

我画正弦波可是有噪点

出0入0汤圆

发表于 2013-7-28 07:52:23 | 显示全部楼层
mark~~~~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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