最近写了个12864用stm32驱动的读取数据函数程序,不知道正...

2019-07-14 23:43发布

现在问题是,能正常显示字符串……但是,打不出点,因为我想画出波形……有人写过打点函数吗?我看网上说,打点需要读取数据,所以我写了这个读取数据函数,不知道对不对:
u8 LCD12684_Rdat(void)
{
        u8 temp;
        while(LCD12864_busy()); //忙检测
        LCD_RS(1);      
        LCD_RW(1);
        LCD_EN(0);
        Delay_Ms(1);
        temp = GPIO_ReadInputDataBit(LCD12864_GPIO,LCD_GPIO_DAT);         
        Delay_Ms(1);
        LCD_EN(1);
        Delay_Ms(1);
        LCD_EN(0);
        return temp;
}


下面的事打点函数:

void LCD_DraPoint(u8 x,u8 y)
{
        u8 x_byte,x_bit;
        u8 y_byte,y_bit;
        u8 tmph,tmp1;
        
        x &= 0x7f;
        y &= 0x3f;
        x_byte = x/16;
        x_bit = x&0x0f;
        y_byte = y/32;
        y_bit = y&0x3f;
        
        LCD12684_Wcmd(0x34);
        LCD12684_Wcmd(0x34);
               
        LCD12684_Wcmd(0x80+y_bit);
        LCD12684_Wcmd(0x80+x_byte+8*y_byte);

        LCD12684_Rdat();
        tmph = LCD12684_Rdat();
        tmp1 = LCD12684_Rdat();

        LCD12684_Wcmd(0x80+y_bit);
        LCD12684_Wcmd(0x80+x_byte+8*y_byte);

        if(x_bit<8)
        {
                LCD12684_Wdat(tmph|(0x01<<(7-x_bit)));
                LCD12684_Wdat(tmp1);
        }
        else
        {
                LCD12684_Wdat(tmph);
                LCD12684_Wdat(tmp1|(0x01<<(15-x_bit)));
        }

        LCD12684_Wcmd(0x36);
        LCD12684_Wcmd(0x30);
}


执行打点函数时,
在屏上打点没有效果

相反的,屏上出现了密密麻麻的没有规律的点

不知道是什么原因……
希望有人能指导一下!!!

拜托了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
z00
2019-07-15 12:29
参考一下这个代码
  1. void LCD_DrawPoint(u16 X,u16 Y,u16 Colour)    //液晶屏上实现画一个点的函数
  2. {
  3.         LCD_SetXY(X,Y);
  4. ili9481_WriteData(Colour);
  5. }

  6. /* 函数LCD_DrawCriclePixel画圆的像素点 */
  7. void LCD_DrawCriclePixel(u16 x0,u16 y0,u16 x,u16 y,u16 colour)
  8. {
  9. LCD_DrawPoint(x0+x,y0+y,colour);        //LCD_DrawPoint(x,y,colour)函数为在对应x,y坐标处画一个颜 {MOD}为colour的点,根据不同液晶屏修改下
  10. LCD_DrawPoint(x0+x,y0-y,colour);
  11. LCD_DrawPoint(x0-x,y0+y,colour);
  12. LCD_DrawPoint(x0-x,y0-y,colour);
  13. LCD_DrawPoint(x0+y,y0+x,colour);
  14. LCD_DrawPoint(x0+y,y0-x,colour);
  15. LCD_DrawPoint(x0-y,y0+x,colour);
  16. LCD_DrawPoint(x0-y,y0-x,colour);
  17. }
  18. /* 画圆函数,x0,y0为圆心坐标,r为半径,colour为颜 {MOD} */
  19. void LCD_DrawCricle(int x0,int y0,int r,u16 colour)
  20. {
  21. int x,y;
  22.         float d;
  23. x = 0;
  24. y = r;
  25. d = 5.0/4-r;
  26. while(x<=y)
  27. {
  28. LCD_DrawCriclePixel(x0,y0,x,y,colour);
  29. if(d<0)
  30. d+=x*2.0+3;
  31. else
  32. {
  33. d+=2.0*(x-y)+5;
  34. y--;
  35. }
  36. x++;
  37. }
  38. }
复制代码

一周热门 更多>