论坛大神
  
- 积分
- 1473
- 金钱
- 1473
- 注册时间
- 2013-4-12
- 在线时间
- 77 小时
|
发表于 2013-7-15 20:53:48
|
显示全部楼层
显示的时候不要清屏
void cleandram() //清屏
{
unsigned char i , j , k;
wt_com(0x34);//扩展指令集,8位数据传输
//b12864_cmd(DRAW_OFF);//绘图显示关闭
for(i = 0; i < 2; i ++)//分上下两屏写
{
for(j = 0; j < 32; j ++)
{
wt_com(0x80 + j);//写y坐标
// delay_ms(1);
if(i == 0) //写x坐标
{
wt_com(0x80);
// delay_ms(1);
}
else //写下半屏
{
wt_com(0x88);
// delay_ms(1);
}
for(k = 0; k < 16; k ++)//写一整行数据
{
wt_dat(0x00);//写高字节
// b12864_data(0x00);//写低字节
// delay_ms(1);
}
}
}
}
/////////////////////////////////////
//读出数据函数
//输入:
//输出:读出的数据
/////////////////////////////////////
u8 Re_Data(void)
{
u8 Temp;
// while(checkbusy()&0x80);
RS_H();
WR_H();
LCDEN_L();
delay_us(50);
LCDEN_H();
  ORTE=0x00;
delay_us(50);
Temp =  INE;
delay_us(50);
LCDEN_L();
return Temp;
}
///////////////////////////////////// 0 63------------------------- 127 63
//画对应点函数 | |
//输入:参数1:列(0 ~ 127)参数2:行(0~63)参数3:改点的颜色 | |
//输出: | |
///////////////////////////////////// 0 0------------------------- 127 0
void LCD_DrawPoint(unsigned char x,unsigned char y,unsigned char color)
{
unsigned char Row,Tier,TierBit;
unsigned char ReadDatH,ReadDatL;
wt_com(0x36);
Tier = x >> 4; //取出对应层数
TierBit = x & 0x0f; //取出对应层数的位
if(y < 32)
{
Row = ((~y) & 0x1f); //取32的补码
Tier += 8; //下半屏
}
else
{
Row = ((~(y - 32)) & 0x1f);
}
//选取位置读出数据
wt_com(Row + 0x80); // 行
wt_com(Tier + 0x80); // 列
Re_Data();
ReadDatH = Re_Data(); //读取高八位
ReadDatL = Re_Data(); //读取低八位
//定位位置准备写入数据
wt_com(Row + 0x80); // 行
wt_com(Tier + 0x80); // 列
if(TierBit < 8)
{
switch(color)
{
case 0:
ReadDatH &= (~(0x01 << (7 - TierBit)));//置零
break;
case 1:
ReadDatH |= (0x01 << (7 - TierBit));//置一
break;
case 2:
ReadDatH ^= (0x01 << (7 - TierBit));//异或取反
break;
}
}
else
{
switch(color)
{
case 0:
ReadDatL &= (~(0X01 << (15 - TierBit)));
break;
case 1:
ReadDatL |= (0x01 << (15 - TierBit));
break;
case 2:
ReadDatL ^= (0x01 << (15 - TierBit));
}
}
wt_dat(ReadDatH);//先写高位字节
wt_dat(ReadDatL);
wt_com(0x36); //开绘图
wt_com(0x30); //恢复到基本指令集
}
void x_line(u8 x0,u8 y0,u8 x1,u8 color) //画水平线段
{
u8 temp;
if(x0>x1)
{
temp=x1;
x1=x0;
x0=temp;
}
while(x1>x0)
{
LCD_DrawPoint(x0,y0,color);
x0++;
}
}
void y_line(u8 x0,u8 y0,u8 y1,u8 color) //画垂直线段
{
u8 temp;
if(y0>y1)
{
temp=y1;
y1=y0;
y0=temp;
}
while(y1>y0)
{
LCD_DrawPoint(x0,y0,color);
y0++;
}
}
void drawline(u8 x0,u8 y0,u8 x1,u8 y1,u8 color) //任意两点间的直线
{
int dx,dy;
char dx_fangxiang,dy_fangxiang;
int dx2,dy2,di;
dx=x1-x0;
dy=y1-y0;
if(dx>0) dx_fangxiang=1;
else if(dx<0)dx_fangxiang=-1;
else {y_line(x0,y0,y1,color); return;}
if(dy>0) dy_fangxiang=1;
else if(dy<0)dy_fangxiang=-1;
else { x_line(x0,y0,x1,color); return;}
dx=dx*dx_fangxiang;
dy=dy*dy_fangxiang;
dx2=dx*2;
dy2=dy*2;
if(dx>=dy)
{
di=dy2-dx;
while(x0!=x1)
{
LCD_DrawPoint(x0,y0,color);
x0+=dx_fangxiang;
if(di<0) di+=dy2;
else {di+=dy2-dx;y0+=dy_fangxiang;}
}
LCD_DrawPoint(x0,y0,color);
}
else
{
di=dx2-dy;
while(y0!=y1)
{
LCD_DrawPoint(x0,y0,color);
y0+=dy_fangxiang;
if(di<0) di+=dx2;
else {di+=dx2-dy;x0+=dx_fangxiang;}
}
LCD_DrawPoint(x0,y0,color);
}
} |
|