|
大家有没有用过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, 杜汶泽)
|