OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5656|回复: 8

12864显示问题

[复制链接]

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
发表于 2013-7-15 20:12:33 | 显示全部楼层 |阅读模式
可以显示点,可是当显示第二个点,第一个点就没了。。。
技术的乐趣在于分享。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-15 20:35:11 | 显示全部楼层
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
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);  
    } 
     
}
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-7-16 10:09:55 | 显示全部楼层
回复【3楼】LTKKS:
------------------------------知道原因了,应该是读数据出错了,可是串口应该怎么读?

/*************************
*  从LCD读数据
*************************/
uchar recebyte()
{
   uint i;
   uchar temp;

   for( i = 0; i < 8; i++)
   {
      SCLK_L;
  SCLK_H;
  if( SID )
    temp = temp | ( 0x01 << ( 8 - i) );
  else
    temp = temp & ( ~( 0x01 << ( 8 - i ) ) );
   }

   return temp;  
}


/*************************
*  从LCD读数据
*************************/
uchar read_dat(void)
{
     uchar temp;
     uchar temph;
 uchar templ;
 
 RCC->APB2ENR|=1<<4;    //使能PORTC时钟
 GPIOC->CRL&=0XFFFFFFF0;
     GPIOC->CRL|=0X00000008;//PC.0 上拉或者下拉输入
 GPIOC->ODR|=1<<0;      

 CS_L;
 CS_H;

 sendbyte( 0xfe );
 temph = recebyte();
 templ = recebyte();
 temp  = temph + ( templ >> 4);



 GPIOC->CRL&=0XFFFFFFF0;
     GPIOC->CRL|=0X00000003;//PC.0推挽输出  数据口
     GPIOC->ODR|=1<<0;      //PC.0输出高 

  return temp;
}
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-7-16 10:11:08 | 显示全部楼层
回复【3楼】LTKKS:
---------------------------------
这样读对吗?
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-7-16 10:20:58 | 显示全部楼层
回复【5楼】zf:
---------------------------------
串口速度跟不上,所以我没做过串口的
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-7-16 10:26:00 | 显示全部楼层
回复【6楼】LTKKS:
---------------------------------
是有点慢,显示一个点都要好半天。。。。。可是有没办法,并口没那么多线。。。
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-7-17 14:49:14 | 显示全部楼层
回复【3楼】LTKKS:
---------------------------------
今天调了一下,又查了一下资料,大家公认的是12864串口读不出来数据。。。。
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-7-17 15:06:32 | 显示全部楼层
回复【8楼】zf:
---------------------------------
我们队长说也读不出,我没试过
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-17 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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